CUDA, C++, Qt : Sortie anticip�e de fonction
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:
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);
} |