Utilisation avancée des processeurs graphiques avec Qt
Utilisation avancée des processeurs graphiques avec Qt
Utilisation avancée des processeurs graphiques avec Qt
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Utilisation</strong> <strong>avancée</strong> <strong>des</strong> <strong>processeurs</strong> <strong>graphiques</strong> <strong>avec</strong> <strong>Qt</strong> par Rémi Achard Guillaume Belz<br />
Les vecteurs sont ensuite stockés dans la mémoire globale (DRAM) du GPU et initialisés dans le cas <strong>des</strong> deux<br />
vecteurs d'entrée.<br />
cpp<br />
// Version C<br />
cl_mem dev_A = clCreateBuffer(gpuContext, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, size *<br />
sizeof(cl_float), A, &err);<br />
cl_mem dev_B = clCreateBuffer(gpuContext, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, size *<br />
sizeof(cl_float), B, &err);<br />
cl_mem dev_C = clCreateBuffer(gpuContext, CL_MEM_WRITE_ONLY , size * sizeof(cl_float), 0 , &err);<br />
// Version C++<br />
char * outH = new char[hw.length()+1];<br />
cl::Buffer outCL(context, CL_MEM_WRITE_ONLY | CL_MEM_USE_HOST_PTR, hw.length()+1, outH, &err);<br />
// Version <strong>Qt</strong>OpenCL<br />
QCLBuffer -> création d'un buffer à partir d'un vector<br />
QCLVector -> création d'un vecteur et d'un buffer et transfère automatique CPUGPU<br />
QCLVector input1 = context.createVector(2048);<br />
Le résultat étant stocké sur le GPU, on recopie son contenu dans le pointeur C à l'aide de la fonction<br />
clEnqueueReadBuffer().<br />
cpp<br />
clEnqueueReadBuffer(clCommandQueue, dev_C, CL_TRUE, 0, size * sizeof(cl_float), C, 0, 0, 0);<br />
Enfin, les buffers alloués sur le GPU sont libérés.<br />
cpp<br />
clReleaseMemObject(dev_A);<br />
clReleaseMemObject(dev_B);<br />
clReleaseMemObject(dev_C);<br />
- 70 -<br />
http://gbelz.developpez.com/remi-achard/gpu-avance-<strong>avec</strong>-qt/modified/