Part 9 : Réduction aléatoire, cuRAND sans Thrust



Dans cette partie, nous allons (encore) écrire un produit scalaire en C++20 et le compiler avec nvc++ mais nous allons utiliser CURAND pour initialiser notre vecteur aléatoirement et directement sur le GPU.

Précédemment (voir partie partCURANDReduceVector), nous avons alloué nos vecteurs avec thrust, qui permet de faire la différence entre les pointeurs CPU (thrust::host_vector ) et GPU (thrust::device_vector ). Mais comme -stdpar=gpu permet d'unifier les allocations dynamiques entre le CPU et le GPU, nous pouvons, a priori, remplacer notre thrust::device_vector par un std::vector .

Comme nvc++ est fourni avec le HPC_SDK (installé dans /opt) et que la version de ce dernier change en fonction des installations. Nous allons créer une variable d'environnement, NVCPP, pour nous y retrouver, en ce qui me concerne :

1
export NVCPP="/opt/nvidia/hpc_sdk/Linux_x86_64/22.11/compilers/bin/nvc++"


Note : il faut, bien entendu, créer cette variable avec la version du HPC_SDK installée sur votre système. Le plus simple est d'ajouter cette commande dans votre ~/.bashrc.


La correction est disponible ici.