Bonjour,
J'ai quelques problèmes pour réussir à mettre en pratique OpenCL dans un bout de code simple : je réalise dans un premier temps une simple "copie" vers la mémoire du GPU puis une simple copie vers la mémoire vive.
Après avoir initialisé avec succès OpenCL, j'essaie le code suivant :
OpenCL ne retourne aucune erreur mais j'obtiens le message suivant "Test failed" (!). (le buffer reste à zéro)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 #define TMPSIZE 100 char* tmpData = new char[TMPSIZE]; memset(tmpData, 127, TMPSIZE); //Envoi cl_mem mm1 = clCreateBuffer(HdlOCL::context(), CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR, TMPSIZE, tmpData, HdlOCL::errorFB()); std::cout << "After sending : "; HdlOCL::getErrors(); //modification en RAM memset(tmpData, 0, TMPSIZE); // Sécurité clFinish(HdlOCL::queue()); //Réception (*HdlOCL::errorFB()) = clEnqueueReadBuffer(HdlOCL::queue(), mm1, CL_TRUE, 0, TMPSIZE, tmpData, 0, NULL, NULL); std::cout << "After receiving : "; HdlOCL::getErrors(); //Test if(tmpData[0]!=0) std::cout << "Test succeed" << std::endl; else std::cout << "Test failed" << std::endl; delete[] tmpData;
Dans un second temps, je dois réaliser un boucle de retour pour récupérer rapidement des informations issues d'OpenGL. Là aussi, l'initialisation fonctionne correctement, tout comme clEnqueueAcquireGLObjects et clEnqueueReleaseGLObjects. Mais dès que j'essaie d'utiliser clEnqueueReadBuffer ou clEnqueueReadImage ils me retournent tous CL_INVALID_VALUE.
Auriez-vous des pistes à me proposer?
Merci d'avance!
EDIT
Windows 7 x64 - GTX 280M - Drivers 257.21 - OpenCL 1.1
EDIT
Pour le premier problème, tout fonctionne parfaitement avec l'utilisation de clEnqueueWriteBuffer à la place de l'initalisation automatique proposée par clCreateBuffer.
Partager