2023-01-28 22:04:38 +01:00
|
|
|
#include <stdlib.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#ifdef USE_CUDA
|
2023-01-29 09:40:55 +01:00
|
|
|
#ifndef __CUDACC__
|
|
|
|
#include "cuda_runtime.h"
|
|
|
|
#endif
|
2023-01-28 22:04:38 +01:00
|
|
|
#endif
|
2023-01-29 09:40:55 +01:00
|
|
|
|
2023-02-19 15:01:58 +01:00
|
|
|
#include "include/memory_management.h"
|
2023-01-28 22:04:38 +01:00
|
|
|
#include "include/colors.h"
|
|
|
|
|
2023-02-19 15:01:58 +01:00
|
|
|
#include "include/utils.h"
|
|
|
|
|
2023-01-28 22:04:38 +01:00
|
|
|
|
|
|
|
int i_div_up(int a, int b) { // Partie entière supérieure de a/b
|
|
|
|
return ((a % b) != 0) ? (a / b + 1) : (a / b);
|
|
|
|
}
|
|
|
|
|
2023-01-29 09:40:55 +01:00
|
|
|
#ifdef __CUDACC__
|
2023-02-15 11:22:51 +01:00
|
|
|
extern "C"
|
2023-01-29 09:40:55 +01:00
|
|
|
#endif
|
2023-01-28 22:04:38 +01:00
|
|
|
bool check_cuda_compatibility() {
|
|
|
|
#ifdef __CUDACC__
|
|
|
|
int nDevices;
|
|
|
|
cudaDeviceProp prop;
|
|
|
|
|
|
|
|
cudaGetDeviceCount(&nDevices);
|
|
|
|
if (nDevices == 0) {
|
|
|
|
printf("Pas d'utilisation du GPU\n\n");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
printf("GPUs disponibles:\n");
|
|
|
|
|
|
|
|
for (int i=0; i < nDevices; i++) {
|
|
|
|
cudaGetDeviceProperties(&prop, i);
|
2023-02-19 15:01:58 +01:00
|
|
|
printf(" - %s\n\t - Compute Capability: %d.%d\n\t - Memory available: ", prop.name, prop.major, prop.minor);
|
|
|
|
printf_memory(prop.totalGlobalMem);
|
|
|
|
printf("\n\t - Shared Memory per block: ");
|
|
|
|
printf_memory(prop.sharedMemPerBlock);
|
|
|
|
printf("\n\n");
|
2023-01-28 22:04:38 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
cudaGetDeviceProperties(&prop, 0);
|
2023-02-19 15:01:58 +01:00
|
|
|
printf("Utilisation du GPU: " BLUE "%s" RESET "\n\n", prop.name);
|
|
|
|
|
|
|
|
if (prop.sharedMemPerBlock != MEMORY_BLOCK) {
|
|
|
|
printf_warning((char*)"La taille des blocs mémoire du GPU et celle utilisée dans le code diffèrent.\n");
|
|
|
|
printf("\tCela peut mener à une utilisation supplémentaire de VRAM.\n");
|
|
|
|
printf("\tChanger MEMORY_BLOCK à %ld dans src/include/memory_management.h\n", prop.sharedMemPerBlock);
|
|
|
|
}
|
2023-01-28 22:04:38 +01:00
|
|
|
return true;
|
|
|
|
#else
|
|
|
|
printf("Pas d'utilisation du GPU\n\n");
|
|
|
|
return false;
|
|
|
|
#endif
|
|
|
|
}
|