CUDA : cours travaux dirigés
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 : ns h w d
./ray_tracing_cpu.exe 20 512 512 1
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:
CPUBitmap bitmap( IMAGE_WIDTH, IMAGE_HEIGHT );
unsigned char *bitmap_d;
cudaMalloc( (void**)&bitmap_d, bitmap.image_size() );
kernel<<<...>>>(bitmap_d, ...);
cudaMemcpy( bitmap.get_ptr(), bitmap_d, bitmap.image_size(),
cudaMemcpyDeviceToHost );
bitmap.display_and_exit();
Ecrire une seconde version GPU :
Ecrire une troisième version GPU :
// declare a static array in constant memory
// modify size if needed
__constant__ Sphere tab_spheres_c[2000];
// before launching the kernel, copy host array of spheres to constant array
cudaMemcpyToSymbol(tab_spheres_c, tab_spheres_h, nbr_spheres * sizeof(Sphere));