CUDA : [cours]    [mise en pratique]

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 : -s ns -h 512 -w 512 -v

./ray_tracing_cpu.exe -s 20 -h 512 -w 512 -v

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 g_cst_tab_spheres[2000];

// before launching the kernel, copy host array of spheres to constant array
cudaMemcpyToSymbol(g_cst_tab_spheres, c_tab_spheres, nbr_spheres * sizeof(Sphere));