7.4 Compilation et exécution

Comme toujours, nous allons faire un dossier build :

mkdir build
cd build

Ensuite on appelle CMake :

cmake ..
-- The C compiler identification is GNU 4.8.2
-- The CXX compiler identification is GNU 4.8.2
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Found CUDA: /usr/local/cuda-6.5 (found version "6.5") 
-- Configuring done
-- Generating done
-- Build files have been written to: chemin/vers/build

Puis Make :

make
[100%] Building NVCC (Device) object CMakeFiles/testCuda.dir//./testCuda_generated_reduce.cu.o
nvcc warning : The 'compute_11', 'compute_12', 'compute_13', 'sm_11', 'sm_12', and 'sm_13' architectures are deprecated, and may be removed in a future release.
nvcc warning : The 'compute_11', 'compute_12', 'compute_13', 'sm_11', 'sm_12', and 'sm_13' architectures are deprecated, and may be removed in a future release.
Scanning dependencies of target testCuda
Linking CXX executable testCuda
[100%] Built target testCuda

Pourquoi on a un warning ?

C'est que nous avons mis beaucoup d'architectures différentes dans le CMakeLists.txt, et il peut arriver que certaines architectures soient dépréciées, si vous voulez enlever le warning, vous pouvez enlever la commande -gencode arch=compute_11,code=sm_11 dans le fichier CMakeLists.txt.

Vous aurez le résultat suivant :

make
[100%] Building NVCC (Device) object CMakeFiles/testCuda.dir//./testCuda_generated_reduce.cu.o
Scanning dependencies of target testCuda
Linking CXX executable testCuda
[100%] Built target testCuda

Si vous enlevez trop d'architectures, dont celle de votre système, vous n'aurez pas de problème à la compilation, mais à l'exécution. L'erreur que vous aurez sera invalid device function, lors d'un appel à la fonction cudaGetLastError().

Enfin on appelle notre programme :

./testCuda 
Ntot     : 1024
nthreads : 32
nblocks  : 16
GPU sum : 9.0841e-02
CPU sum : 9.0841e-02
TEST PASSED (err 5.9053e-06 < 1.e-4).