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 moment Si 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