groupe de travail introduction gpu/glsl
DESCRIPTION
Groupe de Travail Introduction GPU/GLSL. Sébastien Barbier Laboratoire Jean Kuntzmann/EVASION Grenoble [email protected]. Plan. Historique Fonctionnalités des cartes graphiques GLSL Communications CPU GPU Rendu Off-Screen GPGPU. Plan. Historique - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/1.jpg)
Groupe de Travail Introduction GPU/GLSL
Sébastien BarbierLaboratoire Jean Kuntzmann/EVASIONGrenoble
![Page 2: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/2.jpg)
Plan
1. Historique2. Fonctionnalités des cartes graphiques3. GLSL4. Communications CPU GPU5. Rendu Off-Screen6. GPGPU
![Page 3: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/3.jpg)
Plan
1. Historique2. Fonctionnalités des cartes graphiques3. GLSL4. Communications CPU GPU5. Rendu Off-Screen6. GPGPU
![Page 4: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/4.jpg)
• Le CPU s’occupe : Simulation physique, Intelligence Artificielle, Son,
Réseau…
• Le GPU doit vérifier : Accès mémoire rapide
• Nombreux accès [ vertices, normal, textures, … ]
Une bonne bande passante• Go/s au meilleur cas
Une grande force de calcul• Flops = Floating Point Operations [ ADD, MUL, SUB, … ]• Illustration: matrix-vector products
– (16 MUL + 12 ADD) x (#vertices + #normals) x fps =– (28 Flops) x (6.000.000) x 30 ≈ 5GFlops
Motivations
![Page 5: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/5.jpg)
• Interactivité : 15-60 fps• Haute Résolution
Motivations
![Page 6: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/6.jpg)
LOD selectionFrustum CullingPortal Culling…
Application
Modelview/Projection tr. Clipping Lighting Division by wPrimitive Assembly Viewport transformBackface culling
Geometry Processing
Scan ConversionFragment Shading [Color and Texture interpol.]Frame Buffer Ops [Z-buffer, Alpha Blending,…]
Rasterization
Output to DeviceOutput
Pipeline Graphique
![Page 7: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/7.jpg)
LOD selectionFrustum CullingPortal Culling…
Application
Clipping Division by wViewport transform
Backface culling
Geometry Processing
Scan ConversionRasterization
Output to DeviceOutput
Pro
gra
mm
ab
le
VERTEX SHADER
FRAGMENT SHADER
GEOMETRY SHADER
Pipeline Graphique
![Page 8: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/8.jpg)
VERTEX SHADER
( x’, y’, z’, w’ )( nx’, ny’, nz’ )( s’, t’, r’, q’ )( r’, g’, b’, a’ )
( x, y )( r, g, b, a )( depth )
GEOMETRY SHADER( x, y )( r’, g’, b’, a’ )( depth’ )
( x, y, z, w )( nx, ny, nz )( s, t, r, q )( r, g, b, a )
FRAGMENTSHADER
Shaders
![Page 9: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/9.jpg)
Plan
1. Historique2. Fonctionnalités des cartes graphiques3. GLSL4. Communications CPU GPU5. Rendu Off-Screen6. GPGPU
![Page 10: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/10.jpg)
Pipeline Graphique
![Page 11: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/11.jpg)
Fonctionnalités des cartes graphiquesShaders
On agit au niveau local : Vertex shader : un sommet à la fois
• On ne connaît pas les sommets voisins
![Page 12: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/12.jpg)
On agit au niveau local : Geometry shader : une primitive à la fois
• On ne connait que les sommets de la primitive courante• On peut aussi connaître ses voisins
Fonctionnalités des cartes graphiquesShaders
![Page 13: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/13.jpg)
Fonctionnalités des cartes graphiquesShaders
On agit au niveau local : Pixel shader : un pixel à la fois
• On ne connaît pas les pixels voisins• Au mieux, variation d’une valeur par rapport au pixel d’à côté
![Page 14: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/14.jpg)
Fonctionnalités des cartes graphiquesShaders
Ce qu’on peut faire Au niveau des sommets :
• Des transformations/projections • Des calculs de coordonnées de textures• Des calculs d’illumination, de couleurs
( x, y, z, w )( nx, ny, nz )( s, t, r, q )( r, g, b, a )
![Page 15: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/15.jpg)
Fonctionnalités des cartes graphiquesShaders
Ce qu’on peut faire Au niveau des primitives :
• Ajouter/Supprimer des sommets• Modifier les primitives• Récupérer directement la géométrie sans “tramage”.
![Page 16: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/16.jpg)
Fonctionnalités des cartes graphiquesShaders
Ce qu’on peut faire Au niveau des pixels :
• La même chose qu’aux sommets, mais par pixel• Utiliser le contenu de textures dans des calculs• Changer la profondeur des pixels
![Page 17: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/17.jpg)
Fonctionnalités des cartes graphiquesShaders
Ce qu’on ne peut pas (encore ?) faire Modifier le tramage (rasterizer) Modifier la composition (output merger) Lire le buffer de dessin sur la fenêtre
![Page 18: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/18.jpg)
Plan
1. Historique2. Fonctionnalités des cartes graphiques3. GLSL4. Communications CPU GPU5. Rendu Off-Screen6. GPGPU
![Page 19: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/19.jpg)
GLSLTypes de base
• Flottants, entiers, booléens float, bool, int, unsigned int
• Vecteurs 2,3,4 [b,u,i]vec{2,3,4}
• Matrices 2x2, 3x3, 4x4 mat{2,3,4}
• Accesseurs de textures sampler{1,2,3}D, samplerCube, samplerRect, (et plein
d’autres !!)
• Structures struct my_struct { int index; float value};
• Tableaux int array[5];
![Page 20: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/20.jpg)
GLSL Entrées
• Built-in : tous les états d’OpenGL, passés par OpenGL Position (glVertex3fv, …) Couleurs (glColor4f, …) Directions des lumières (glLighiv, …) Textures flottantes ou entières (glTexCoord[1|2|3][i|f], …) Matrices (glMatrixMode, …) Matériaux (glMateriali, …)
• Attribute : passés par le programme OpenGL Peuvent varier pour chaque sommet (couleurs, textures, normales, …)
• Uniform : passés par le programme OpenGL Ne varie pas entre glBegin/glEnd (matrices, textures, lumières, …)
• Varying : échanges entre les différents shaders In : d’entrées Out : de sortie
• Constant : constant au sein des shaders
![Page 21: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/21.jpg)
GLSLEntrées built-in
Vertex/Geometry shader : Position : gl_Vertex Couleurs : gl_Color, gl_SecondaryColor Normale : gl_Normal Coordonnées de textures : gl_MultiTexCoordn
Fragment shader : gl_FragCoord : coordonnées du pixel dans la fenêtre gl_Color : couleur du pixel interpolée gl_TexCoord[] : coordonnées de textures interpolées gl_FrontFacing : face ou dos du triangle
![Page 22: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/22.jpg)
GLSLSorties
Vertex/Geometry shader : gl_Position : position du sommet en coordonnées
homogènes (obligatoire) gl_PointSize : taille d’un point en rendu par point gl_FrontColor, gl_BackColor : couleurs gl_TexCoord[] : coordonnées de textures
Fragment Shader : gl_FragColor : couleur du pixel (obligatoire) gl_FragData[] : rendu offscreen (obligatoire) gl_FragDepth : profondeur du pixel
![Page 23: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/23.jpg)
GLSLGénération
Geometry shader : EmitVertex() EndPrimitive()
Types des primitives Points, Lignes, Triangles Lignes, Triangles avec Adjacences
1 2 3 4
2
1
6
5
30 1 2 3
0
1
23
4
5
![Page 24: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/24.jpg)
GLSLFonctions built-in
Trigonométrie sin, cos, tan, asin, acos, atan, …
Exponentiation exp, pow, log, exp2, log2, sqrt, …
Arithmétiques abs, sign, floor, ceil, fract, mod, min, max, clamp, mix,
step, …Géométriques
length, distance, dot, cross, normalize, reflect, refractAccès aux textures
texture1D, texture2D, texture3D, textureCube, shadow, …Manipulation de bits
<< , >> , | , & …Et d’autres…
![Page 25: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/25.jpg)
• Convention de notations (vec4) position : x, y, z, w couleur : r, g, b, a texture : s, t, p, q
• Permutation des variables Toutes les combinaisons sont possibles :
vec4 res; res.xyzw (par défaut)res.xxxx, res.xyxy, res.xyzx, res.wzyx, res.xyww, etc…
• Changement de dimensionsvec4 start; vec3 triple; vec2 couple; float alone;triple = start.xyz; couple = start.xy; alone = start.x;
GLSLSwizzle
![Page 26: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/26.jpg)
uniform vec4 Bidule;
vec4 UneFonction( vec4 Entree ){
return Entree.zxyw;}
void main(){
vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex;gl_Position = pos + UneFonction( Bidule );
}
GLSLPremier Programme
Entrée
Fonction
Point d’entrée
Variable locale
Entrées OpenGL
Sortie OpenGLMultiplication
matrice-vecteur
Swizzle
![Page 27: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/27.jpg)
GLSLCompilation
• Création Kernel shader_id = glCreateShaderObjectARB(type);
• Type = {GL_VERTEX_SHADER_ARB, GL_FRAGMENT_SHADER_ARB, GL_GEOMETRY_SHADER_EXT
glShaderSourceARB(shader_id,1,&const_shader_src,NULL);• const_shader_src = programme
• Compilation glCompileShaderARB(shader_id);
• Debug glGetProgramivARB(shader_id,GL_OBJECT_INFO_LOG_LEN
GTH_ARB,&info_log_length); c_infolog = new char[info_log_length]; glGetInfoLogARB(shader_id,info_log_length,&nread,c_infol
og);
![Page 28: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/28.jpg)
GLSLCompilation
• Création Programme _program_shader = glCreateProgramObjectARB();
• Propriétés Geometry Kernel glProgramParameteriEXT(_program_shader,
GL_GEOMETRY_INPUT_TYPE_EXT, _input_device); glProgramParameteriEXT(_program_shader,
GL_GEOMETRY_OUTPUT_TYPE_EXT, _output_device); glProgramParameteriEXT(_program_shader,
GL_GEOMETRY_VERTICES_OUT_EXT, _nb_max_vertices);• Attacher
glAttachObjectARB(_program_shader,_vertex_shader); glAttachObjectARB(_program_shader,
_geometry_shader);
glAttachObjectARB(_program_shader,_fragment_shader);• Lier
glLinkProgramARB(_program_shader);
![Page 29: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/29.jpg)
glUseProgramObjectARB( Program );
glGetUniformLocationARB();
glUniform{1,2,3,4}f[v]ARB();
glUniformMatrix{2,3,4}fvARB();
glGetAttribLocationARB();
glVertexAttrib{1,2,3,4}f[v]ARB();
glUseProgramObjectARB(0);
Utilisation d’un programme
Réglage d’un uniform
Réglage d’un attribute
Fin de programme
GLSLUniforms/Attributes
![Page 30: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/30.jpg)
Plan
1. Historique2. Fonctionnalités des cartes graphiques3. GLSL4. Communications CPU GPU5. Rendu Off-Screen6. GPGPU
![Page 31: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/31.jpg)
GénéralitésTypes de Buffer
• Mise à jour: static, dynamic, stream Static: une et une seule fois pour l’application Dynamic: modification multiples pour plusieurs rendus Stream: une modification, un rendu
• Accès : read, draw, copy Read: From GPU to CPU Draw: From CPU to GPU Copy: Both and From GPU to GPU
• Création glGenBuffersARB(1, &_name); glBindBufferARB(NATURE, _name); glBufferDataARB(NATURE, size, ptr, TYPE);
![Page 32: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/32.jpg)
Communications CPU GPU du CPU vers le GPU
• Vertex et Index Buffer Objects (VBO) Envoyer la géométrie via des tableaux
• Position, Normal, Couleurs, Coordonnées de textures (GL_ARRAY_BUFFER_ARB)
• Topologie (GL_ELEMENT_ARRAY_BUFFER_ARB)
Type : [STATIC|DYNAMIC|STREAM]_DRAW
![Page 33: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/33.jpg)
Communications CPU GPUdu CPU vers le GPU
• Pixel Buffer Object UNPACK (PBO) Envoyer une texture au GPU GL_PIXEL_UNPACK_BUFFER_ARB
• Activer le buffer• Remplir le buffer• Instancier la texture
Type : [STATIC|DYNAMIC|STREAM]_DRAW
![Page 34: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/34.jpg)
Communications CPU GPUdu GPU vers le CPU
• Pixel Buffer Object PACK (PBO) Récupérer une texture du GPU GL_PIXEL_PACK_BUFFER_EXT
• Activer le buffer• Lire la sortie glReadPixels• Mapping
Type : [STATIC|DYNAMIC|STREAM]_READ
![Page 35: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/35.jpg)
Communications CPU GPUdu GPU vers le CPU/GPU
• TRANSFORM FEEDBACK BUFFER OBJECTBuffer d’éléments spécial GL_ARRAY_BUFFER_ARBSpécifier
• Les éléments à récupérer à la fin du VS ou du GS• Comment ? Un/Plusieurs buffers
Lors du rendu : GL_TRANSFORM_FEEDBACK_BUFFER_NV• Activer ou Désactiver la Rasterisation : glEnable(GL_RASTERIZER_DISCARD)
TYPE : [DYNAMIC|STREAM]_[COPY|READ]
![Page 36: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/36.jpg)
Communications CPU GPU du CPU/GPU vers le GPU
• Texture Buffer Objects (TBO) Envoyer une texture accessible comme un tableau
• Utilisation : Réutiliser la sortie du pixel shader comme un buffer de géometrie
GL_TEXTURE_BUFFER_EXT Type : [STATIC|DYNAMIC|STREAM]_[DRAW|COPY] glTexBufferEXT: association avec la texture
Texture Buffer
![Page 37: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/37.jpg)
Communications CPU GPU du CPU vers le GPU
• Bindable Uniform Buffer Objects (BUBO) Envoyer des uniforms accessibles par TOUS les shaders
• Minimiser l’envoi de constantes (et aussi la place mémoire)
GL_UNIFORM_BUFFER_EXT Type : STATIC_DRAW glUniformBufferExt: association mémoire buffer
![Page 38: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/38.jpg)
Plan
1. Historique2. Fonctionnalités des cartes graphiques3. GLSL4. Communications CPU GPU5. Rendu Off-Screen6. GPGPU
![Page 39: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/39.jpg)
Rendu off-screen
• FrameBuffer Objects (FBO) Object : GL_FRAMEBUFFER_EXT Attacher
• n textures : GL_COLOR_ATTACHMENTn_EXT• z-buffer: GL_DEPTH_ATTACHMENT_EXT• stencil-buffer : GL_STENCIL_ATTACHMENT_EXT
![Page 40: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/40.jpg)
Rendu off-screen
• FrameBuffer Objects (FBO) :Type de Textures Flottantes rectangles : gl_FragData[n] Entières rectangles : varying out [i|u]vec4 data Tableau de textures 1D, 2D (layers) :
• glFramebufferTextureArrayExt(),TEXTURE_[1D|2D]_ARRAY_EXT• gl_Layer
![Page 41: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/41.jpg)
Rendu off-screen
• FrameBuffer Objects (FBO) Rendu
• Activer le FrameBuffer • Activer le rendu dans les différentes textures• Dessiner• Terminer
![Page 42: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/42.jpg)
Plan
1. Historique2. Fonctionnalités des cartes graphiques3. GLSL4. Communications CPU GPU5. Rendu Off-Screen6. GPGPU
![Page 43: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/43.jpg)
GPGPU
• General-Purpose Computation Using Graphics Hardware
• Un GPU = un processeur SIMD• Une texture = un tableau d’entrée• Une image = un tableau de sortie
![Page 44: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/44.jpg)
GPGPU Applications
• Rendu avancé Illumination globale Image-based rendering …
• Traitement du signal• Géométrie algorithmique• Algorithmes génétiques• A priori, tout ce qui peut se paralléliser
![Page 45: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/45.jpg)
GPGPULimitations
• Récupérer l’image rendue = lent PCI Express
• Opérateurs, fonctions, types assez limités• Un algorithme parallélisé n’est pas forcément
plus rapide que l’algorithme séquentiel
![Page 46: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/46.jpg)
GPGPULangages
• CUDA (NVIDIA)
• CTM (ATI)
• Shallows (Johan S. Seland – Chercheur à SINTEF ICT - Norvège)
• OpenCL (KRONOS, initié par APPLE)
Exploite les puissances combinées du CPU et du GPU
![Page 47: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/47.jpg)
GPGPUCUDA
• Compute Unified Device Architecture Basé sur le langage C Propose une mémoire partagée de 16 Ko pour les
threads Pensé pour simplifier les accès, les retours et la
compilation des kernels pour les non-spécialistes d’OpenGL.
Librairies fournies• FFT • BLAS : Algèbre Linéaire
![Page 48: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/48.jpg)
GPGPUExemple Cuda
cudaArray* cu_array; float* gpu_array;float* cpu_array = new float[width*height];texture<float, 2, cudaReadModeElementType> tex;
//Allocate arraycudaMalloc((void**)&gpu_array, width*height*sizeof(float));// Bind the array to the texturecudaBindTextureToArray(tex, cuArray);// Run kernel dim3 blockDim(16, 16); dim3 gridDim(width / blockDim.x, height / blockDm.y); kernel <<<gridDim, blockDim>>>(gpu_array, cu_array, width);cudaUnbindTexture(tex);//Copy GPU data to arraycudaMemcpy(cpu_array,gpu_array,width*height*sizeof(float),cudaMemcpyDeviceToHost); //Free memorycudaFree(gpu_array); delete [] cpu_array;
__global__ void kernel(float* odata, float* idata, int width) {
unsigned int x = blockIdx.x*blockDim.x + threadIdx.x;unsigned int y = blockIdx.y*blockDim.y + threadIdx.y; odata[y*width+x] = idata[x+y*width];
}
![Page 49: Groupe de Travail Introduction GPU/GLSL](https://reader035.vdocuments.us/reader035/viewer/2022062410/568154c5550346895dc2ca6a/html5/thumbnails/49.jpg)
Références/Liens Utiles
• La spec GLSL : http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.30.08.pdf• Cg : http://developer.nvidia.com/page/cg_main.html• Cuda : http://www.nvidia.com/cuda• OpenCL : http://www.kronos.org/opencl/
• Libraries pour les extensions GLUX (de Sylvain !) : http://www-sop.inria.fr/reves/Sylvain.Lefebvre/glux/ GLEW : http://glew.sourceforge.net/
• Un éditeur spécial shader (malheureusement pas à jour, mais bien pour débuter) http://www.typhoonlabs.com/
• Erreurs openGL/GLSL : un débogueur simple, efficace, super utile, vite pris en main. http://www.vis.uni-stuttgart.de/glsldevil/
• Des tas d’exemples (à tester, éplucher, torturer) : http://developer.nvidia.com/object/sdk_home.html
• La référence GPGPU avec code, forums, tutoriaux : http://www.gpgpu.org/