CUDA : [cours] [mise en pratique]
On suit dans ce TP le cheminement du chapitre 6 de CUDA par l'exemple.
On désire réaliser du rendu réaliste par lancer de rayon (ray tracing) de manière très simple. On dispose d'une scène composée d'un ensemble de sphères définies par leurs coordonnées dans l'espace et leur rayon.
voici une base de travail : ray_tracing_etudiant.tgz
On lancera le programme en fournissant éventuellement des arguments : -s ns -h 512 -w 512 -v
./ray_tracing_cpu.exe -s 20 -h 512 -w 512 -v
Ecrire une première version GPU de cette fonction et la tester :
Il faudra utiliser une image en mémoire centrale du GPU puis l'affecter au bitmap:
CPUAnimation::create_instance(IMAGE_WIDTH, IMAGE_HEIGHT);
CPUAnimation& anim = CPUAnimation::instance();
... call kernel ...
cuda_check( cudaMemcpy(anim.m_image, gpu_image, anim.m_size, cudaMemcpyDeviceToHost) );
... display image ....
Ecrire une seconde version GPU :
Ecrire une troisième version GPU :
// declare a static array in constant memory
// modify size if needed
__constant__ Sphere gpu_spheres_cst[1000];
// before launching the kernel, copy host array of spheres to constant array
cudaMemcpyToSymbol(g_cst_tab_spheres, c_tab_spheres, nbr_spheres * sizeof(Sphere));