5.8.7.2 : Le CMakeLists.txt
Écrivons le CMakeLists.txt :On change les options de compilation (sur GPU ou pas) :
1 2 3 4 5 |
if(GPU_MODE) set(CMAKE_CXX_FLAGS "-stdpar=gpu -O1 -Wall -std=c++17 -g") else(GPU_MODE) set(CMAKE_CXX_FLAGS "-O3 -Wall -std=c++17 -g") endif(GPU_MODE) |
L'utilisation de CMAKE_CXX_FLAGS n'est pas anecdotique. Car lors d'une utilisation GPU l'option -stdpar doit être utilisée également lors du linkage. D'une manière générale, si vous avez une erreur de linkage où des fonctions Cuda ne sont pas trouvées, c'est qu'il manque un -stdpar au linkage de votre programme. On créé notre programme qui utilisera notre bibliothque de calcul avec nvc++ :
1 |
add_executable(gray_scott_gpu_nvcpp_vector main.cpp gray_scott_nvcpp.cpp)
|
Enfin on ajoute les dépendences de notre programme (sur GPU ou pas) :
1 2 3 4 5 6 7 8 9 |
if(GPU_MODE) target_link_libraries(gray_scott_gpu_nvcpp_vector gray_scott_data_format option_parser string_utils ${HDF5_CXX_LIBRARIES}) else() target_link_libraries(gray_scott_gpu_nvcpp_vector gray_scott_data_format option_parser string_utils ${HDF5_CXX_LIBRARIES} TBB::tbb) endif() if(NOT MUST_JOB) add_subdirectory(GrayScott2Pic) endif() |
Le fichier CMakeLists.txt complet :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
if(GPU_MODE) set(CMAKE_CXX_FLAGS "-stdpar=gpu -O1 -Wall -std=c++17 -g") else(GPU_MODE) set(CMAKE_CXX_FLAGS "-O3 -Wall -std=c++17 -g") endif(GPU_MODE) add_executable(gray_scott_gpu_nvcpp_vector main.cpp gray_scott_nvcpp.cpp) if(GPU_MODE) target_link_libraries(gray_scott_gpu_nvcpp_vector gray_scott_data_format option_parser string_utils ${HDF5_CXX_LIBRARIES}) else() target_link_libraries(gray_scott_gpu_nvcpp_vector gray_scott_data_format option_parser string_utils ${HDF5_CXX_LIBRARIES} TBB::tbb) endif() if(NOT MUST_JOB) add_subdirectory(GrayScott2Pic) endif() |
Vous pouvez le télécharger ici.