Bonjour !
Je travaille actuellement � la cr�ation d'une librairie C++ (sous linux) qui utilise CUDA pour une partie des calculs. Tout ceci est effectu� avec l'IDE QtCreator et donc l'utilisation de l'API qui va avec.
Je vous expose donc mon probl�me :
Lors d'une �tape du calcul j'instancie un thread pour garder la main
Dans le thread j'appelle une fonction CUDA d�finie dans un fichier .cu
A la suite de cette instruction je recopie le r�sultat et termine le thread.
Mais les instructions suivant l'appel CUDA ne sont jamais ex�cut�es, je l'ai v�rifi� � l'aide de gdb (quand l'appel est comment� les points d'arr�t sont atteints mais sinon ils ne sont jamais rencontr�s)
Je me doute qu'il y a une explication enfantine mais j'avoue avoir atteint les limites de ma patience pour le momentSi jamais l'un de vous avait une info ou un bon lien � m'indiquer je serais preneur !
Merci d'avance.
[EDIT: un petit bout de code]
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
26
27
28
29
30
31
32 void FonctionPrincipale(){ QMutexLocker ml(&mMutex); WorkThread* wthread = new WorkThread(this); wthread->start(); } void WorkThread::run() { //initialisation de variables FonctionCuda(Parametre p1); //autres instructions jamais exécutées } /**Fichier .cu **/ __host__ void FonctionCuda(Parametre p1) { double *a_cuda; double *b_cuda; unsigned int nBytes = sizeof(double) * n; int threadsPerBlock = 256; int blocksPerGrid = (n + threadsPerBlock - 1) / threadsPerBlock; // allocate and copy memory into the device cudaMalloc((void **)& a_cuda, nBytes); cudaMalloc((void **)& b_cuda, nBytes); cudaMemcpy(b_cuda, a, nBytes, cudaMemcpyHostToDevice); compute<<<blocksPerGrid, threadsPerBlock>>>(b_cuda,a_cuda); cudaMemcpy(a, a_cuda, n*sizeof(double),cudaMemcpyDeviceToHost); cudaFree(a_cuda); cudaFree(b_cuda); }
Partager