Compare commits

...

3 Commits

Author SHA1 Message Date
4e1cf3e627 cnn: Remove STORE_IMAGES_TO_RAM option 2023-06-05 21:06:21 +02:00
446aa2c734 Edit comment 2023-06-05 21:04:47 +02:00
84759caf0b Remove PI constant redefinition 2023-06-05 21:00:55 +02:00
7 changed files with 3 additions and 41 deletions

View File

@ -42,13 +42,6 @@
//** Paramètres d'optimisation //** Paramètres d'optimisation
//* Paramètre d'optimisation pour un dataset Jpeg
// keep images in ram e.g re-read and decompress each time
// Enabling this will lead to a large amount of ram used while economizing not that
// much computing power
// Note: 50States10K dataset is 90Go once decompressed, use with caution
//#define STORE_IMAGES_TO_RAM
//* Optimisation de libération de la mémoire pour de larges réseaux //* Optimisation de libération de la mémoire pour de larges réseaux
// En utilisant CUDA, de larges réseaux créés dans src/common/memory_management.cu // En utilisant CUDA, de larges réseaux créés dans src/common/memory_management.cu
// peuvent prendre jusqu'à plusieurs heures pour être libérés // peuvent prendre jusqu'à plusieurs heures pour être libérés

View File

@ -3,7 +3,6 @@
// Génère un flottant entre 0 et 1 // Génère un flottant entre 0 et 1
#define RAND_FLT() ((float)rand())/((float)RAND_MAX) #define RAND_FLT() ((float)rand())/((float)RAND_MAX)
#define TWOPI 6.2831853071795864769252867665
#define ZERO 0 #define ZERO 0
#define GLOROT 1 #define GLOROT 1

View File

@ -24,7 +24,7 @@ typedef struct jpegDataset {
unsigned int height; // Hauteur des images unsigned int height; // Hauteur des images
unsigned int* labels; // Labels unsigned int* labels; // Labels
unsigned char** images; // Images en cache, vaut NULL si STORE_IMAGES_TO_RAM n'est pas défini unsigned char** images; // Images en cache
char** fileNames; // Noms de fichiers char** fileNames; // Noms de fichiers
} jpegDataset; } jpegDataset;

View File

@ -15,7 +15,7 @@ float randn() {
while (f1 == 0) { while (f1 == 0) {
f1 = RAND_FLT(); f1 = RAND_FLT();
} }
return sqrt(-2.0*log(f1))*cos(TWOPI*RAND_FLT()); return sqrt(-2.0*log(f1))*cos(2*M_PI*RAND_FLT());
} }
void initialisation_1d_matrix(int initialisation, float* matrix, int dim, int n_in, int n_out) { void initialisation_1d_matrix(int initialisation, float* matrix, int dim, int n_in, int n_out) {

View File

@ -157,19 +157,7 @@ jpegDataset* loadJpegDataset(char* folderPath) {
dataset->images = (unsigned char**)malloc(sizeof(unsigned char*)*dataset->numImages); dataset->images = (unsigned char**)malloc(sizeof(unsigned char*)*dataset->numImages);
for (int i=0; i < (int)dataset->numImages; i++) { for (int i=0; i < (int)dataset->numImages; i++) {
dataset->images[i] = NULL; dataset->images[i] = NULL;
#ifdef STORE_IMAGES_TO_RAM
if (i%1000 == 0) {
printf("[%d/%d] Chargement des images\r\n", i, dataset->numImages);
fflush(stdout);
}
image = loadJpegImageFile(dataset->fileNames[i]);
dataset->images[i] = image->lpData;
free(image);
#endif
} }
#ifdef STORE_IMAGES_TO_RAM
printf("Chargement des images terminé \n");
#endif
// Lecture des caractéristiques des images // Lecture des caractéristiques des images
image = loadJpegImageFile(dataset->fileNames[0]); image = loadJpegImageFile(dataset->fileNames[0]);
@ -245,9 +233,6 @@ void addFilenamesToArray(char* path, char** array, int* index) {
void free_dataset(jpegDataset* dataset) { void free_dataset(jpegDataset* dataset) {
for (int i=0; i < (int)dataset->numImages; i++) { for (int i=0; i < (int)dataset->numImages; i++) {
free(dataset->fileNames[i]); free(dataset->fileNames[i]);
#ifdef STORE_IMAGES_TO_RAM
free(dataset->images[i]);
#endif
} }
free(dataset->fileNames); free(dataset->fileNames);
free(dataset->labels); free(dataset->labels);

View File

@ -10,7 +10,7 @@
#ifdef __CUDACC__ #ifdef __CUDACC__
__global__ void matrix_mul_kernel(float** M, float** N, float** P, int n, int p, int q) { __global__ void matrix_mul_kernel(float** M, float** N, float** P, int n, int p, int q) {
// Ce fil calcule toutes les multiplications utilisant l'élément N[idx][idy] // Ce fil effectue toutes les multiplications utilisant l'élément N[idx][idy]
int idx = (blockIdx.x*blockDim.x) + threadIdx.x; // Indice de colonne int idx = (blockIdx.x*blockDim.x) + threadIdx.x; // Indice de colonne
int idy = (blockIdx.y*blockDim.y) + threadIdx.y; // Indice de ligne int idy = (blockIdx.y*blockDim.y) + threadIdx.y; // Indice de ligne

View File

@ -19,12 +19,6 @@ int main(int argc, char* argv[]) {
printf("Nombre de catégories: %d\n", dataset->numCategories); printf("Nombre de catégories: %d\n", dataset->numCategories);
printf("Nombre d'images: %d\n", dataset->numImages); printf("Nombre d'images: %d\n", dataset->numImages);
printf("Taille des images: %dx%d\n", dataset->width, dataset->height); printf("Taille des images: %dx%d\n", dataset->width, dataset->height);
#ifdef STORE_IMAGES_TO_RAM
if (!dataset->images) {
printf_error("Aucune image n'a été chargée\n");
return 1;
}
#endif
// Calcul du temps de chargement des images une à une // Calcul du temps de chargement des images une à une
double start_time, end_time; double start_time, end_time;
@ -47,15 +41,6 @@ int main(int argc, char* argv[]) {
printf("%d\n", i); printf("%d\n", i);
return 1; return 1;
} }
#ifdef STORE_IMAGES_TO_RAM
if (!dataset->images[i]) {
printf_error("Image non chargée à l'index ");
printf("%d\n", i);
printf_error("Nom du fichier: ");
printf("%s\n", dataset->fileNames[i]);
return 1;
}
#endif
} }
free_dataset(dataset); free_dataset(dataset);