Fix some MacOS compatibility issues

This commit is contained in:
julienChemillier 2023-06-26 18:09:21 +02:00
parent 6c7112b9b5
commit e661a4178d
5 changed files with 63 additions and 12 deletions

View File

@ -1,3 +1,4 @@
OS := $(shell uname)
BUILDDIR := ./build BUILDDIR := ./build
SRCDIR := ./src SRCDIR := ./src
CACHE_DIR := ./.cache CACHE_DIR := ./.cache
@ -41,6 +42,13 @@ NVCCFLAGS = -g
# -fsanitize=address -lasan # -fsanitize=address -lasan
#! WARNING: test/cnn-neuron_io fails with this option enabled #! WARNING: test/cnn-neuron_io fails with this option enabled
# Specify library path of libjpeg on MacOS
ifeq ($(OS),Darwin)
LD_CFLAGS += -I/opt/homebrew/Cellar/jpeg/9e/include/ -L/opt/homebrew/Cellar/jpeg/9e/lib/
LD_NVCCFLAGS += -L/opt/homebrew/Cellar/jpeg/9e/lib/
CFLAGS += -I/opt/homebrew/Cellar/jpeg/9e/include/
endif
all: dense cnn; all: dense cnn;

View File

@ -178,17 +178,24 @@ Résultats avec VGG16, pour des images de 256x256 pixels (seulement une plus pet
Sur le cloud avec google Colab: bon GPU mais mauvais processeur: [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1LfwSrQRaoC91yC9mx9BKHzuc7odev5r6?usp=sharing) Sur le cloud avec google Colab: bon GPU mais mauvais processeur: [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1LfwSrQRaoC91yC9mx9BKHzuc7odev5r6?usp=sharing)
Les distributions suivantes ont étés essayées, il sera sans doute nécessaire de modifier le code pour l'exécuter sous Windows/ MacOS: ## Dépendances
- `cuda` : pour utiliser la carte graphique (NVIDIA seulement)
- `libjpeg-dev` : n'est pas nécessairement installé par défaut
- GNU `make` : installé par défaut sur la majorité des distributions Linux et sur MacOS
- `gcc` : installé par défaut sur la majorité des distributions Linux et sur MacOS
### Linux
Les distributions suivantes ont étés essayées, il faudra parfois installer `libjpeg`
- Arch - Arch
- Fedora - Fedora
- Manjaro - Manjaro
- Ubuntu - Ubuntu: `apt install libjpeg-dev`
## Dépendances ### MacOS
- `cuda` : pour utiliser la carte graphique (NVIDIA seulement) Avec [Homebrew](https://brew.sh/):
- `libjpeg-dev` : n'est pas installé par défaut sur ubuntu notamment ```bash
- GNU `make` : installé par défaut sur la majorité des distributions brew install libjpeg
- `gcc` : installé par défaut sur la majorité des distributions ```
## Compilation ## Compilation

View File

@ -1,4 +1,3 @@
#include <sys/sysinfo.h>
#include <pthread.h> #include <pthread.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
@ -7,6 +6,14 @@
#include <time.h> #include <time.h>
#include <time.h> #include <time.h>
#ifdef __linux__
#include <sys/sysinfo.h>
#elif defined(__APPLE__)
#include <sys/sysctl.h>
#else
#error Unknown platform
#endif
#include "../common/include/memory_management.h" #include "../common/include/memory_management.h"
#include "../common/include/colors.h" #include "../common/include/colors.h"
#include "../common/include/utils.h" #include "../common/include/utils.h"
@ -261,7 +268,17 @@ void train(int dataset_type, char* images_file, char* labels_file, char* data_di
#ifdef USE_MULTITHREADING #ifdef USE_MULTITHREADING
int nb_remaining_images; // Nombre d'images restantes à lancer pour une série de threads int nb_remaining_images; // Nombre d'images restantes à lancer pour une série de threads
// Récupération du nombre de threads disponibles // Récupération du nombre de threads disponibles
#ifdef __linux__
int nb_threads = get_nprocs(); int nb_threads = get_nprocs();
#elif defined(__APPLE__)
int nb_threads;
size_t len = sizeof(nb_threads);
if (sysctlbyname("hw.logicalcpu", &nb_threads, &len, NULL, 0) == -1) {
perror("sysctl");
exit(1);
}
#endif
pthread_t *tid = (pthread_t*)malloc(nb_threads * sizeof(pthread_t)); pthread_t *tid = (pthread_t*)malloc(nb_threads * sizeof(pthread_t));
// Création des paramètres donnés à chaque thread dans le cas du multi-threading // Création des paramètres donnés à chaque thread dans le cas du multi-threading

View File

@ -4,7 +4,14 @@
#include <float.h> #include <float.h>
#include <stdbool.h> #include <stdbool.h>
#include <pthread.h> #include <pthread.h>
#ifdef __linux__
#include <sys/sysinfo.h> #include <sys/sysinfo.h>
#elif defined(__APPLE__)
#include <sys/sysctl.h>
#else
#error Unknown platform
#endif
#include "include/neural_network.h" #include "include/neural_network.h"
#include "../common/include/colors.h" #include "../common/include/colors.h"
@ -201,7 +208,17 @@ void train(int epochs, char* recovery, char* image_file, char* label_file, char*
float accuracy; float accuracy;
float current_accuracy; float current_accuracy;
#ifdef __linux__
int nb_threads = get_nprocs(); int nb_threads = get_nprocs();
#elif defined(__APPLE__)
int nb_threads;
size_t len = sizeof(nb_threads);
if (sysctlbyname("hw.logicalcpu", &nb_threads, &len, NULL, 0) == -1) {
perror("sysctl");
exit(1);
}
#endif
pthread_t *tid = (pthread_t *)malloc(nb_threads * sizeof(pthread_t)); pthread_t *tid = (pthread_t *)malloc(nb_threads * sizeof(pthread_t));
/* /*

View File

@ -33,7 +33,9 @@ int main(int argc, char* argv[]) {
} }
printf("OK\n"); printf("OK\n");
end_time = clock(); end_time = clock();
printf("Temps par image (calculé sur une moyenne de %d): %lf s\n", N, (end_time - start_time)/N); printf("Temps par image (calculé sur une moyenne de %d): ", N);
printf_time((end_time - start_time)/N);
printf("\n");
for (int i=0; i < (int)dataset->numImages; i++) { for (int i=0; i < (int)dataset->numImages; i++) {
if (!dataset->fileNames[i]) { if (!dataset->fileNames[i]) {