CUDA : cours    travaux dirigés

Sommaire

Travaux dirigés et pratiques

5. TP 5 : Lancer de rayon - Ray tracing

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.

5.1. Implantation sur le CPU

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

5.2. Implantation sur le GPU - version 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();

5.3. Implantation sur le GPU - version 2

Ecrire une seconde version GPU :

5.4. Implantation sur le GPU - version 3

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));