Le programme de la console simple ne se fermera pas si cudaMalloc est appelé

Le programme simple suivant ne se termine jamais si l’appel cudaMalloc est exécuté. Commenter uniquement le cudaMalloc provoque sa sortie normale.

#include  using std::cout; using std::cin; #include "cuda.h" #include "cutil_inline.h" void PrintCudaVersion(int version, const char *name) { int versionMaj = version / 1000; int versionMin = (version - (versionMaj * 1000)) / 10; cout << "CUDA " << name << " version: " << versionMaj << "." << versionMin << "\n"; } void ReportCudaVersions() { int version = 0; cudaDriverGetVersion(&version); PrintCudaVersion(version, "Driver"); cudaRuntimeGetVersion(&version); PrintCudaVersion(version, "Runtime"); } int main(int argc, char **argv) { //CUresult r = cuInit(0); << These two lines were in original post //cout << "Init result: " << r << "\n"; << but have no effect on the problem ReportCudaVersions(); void *ptr = NULL; cudaError_t err = cudaSuccess; err = cudaMalloc(&ptr, 1024*1024); cout << "cudaMalloc returned: " << err << " ptr: " << ptr << "\n"; err = cudaFree(ptr); cout << "cudaFree returned: " << err << "\n"; return(0); } 

Cela fonctionne sous Windows 7, pilote CUDA 4.1, runtime CUDA 3.2. Je trace le retour de main à travers le CRT à ExitProcess (), dont il ne retourne jamais (comme prévu) mais le processus ne se termine jamais non plus. À partir de VS2008, je peux arrêter le débogage OK. De la ligne de commande, je dois tuer la fenêtre de la console.

Sortie du programme:

 Init result: 0 CUDA Driver version: 4.1 CUDA Runtime version: 3.2 cudaMalloc returned: 0 ptr: 00210000 cudaFree returned: 0 

J’ai essayé de rendre le montant de l’allocation si important que cudaMalloc échouerait. Il l’a fait et a signalé une erreur, mais le programme ne pouvait toujours pas sortir. Il semble donc qu’il s’agisse simplement d’appeler cudaMalloc, pas l’existence de la mémoire allouée.

Des idées sur ce qui se passe ici?

EDIT: Je me suis trompé dans la deuxième phrase – je dois éliminer le cudaMalloc et le cudaFree pour que le programme sorte. Laissant l’un ou l’autre provoque le raccrochage.

EDIT: Bien qu’il y ait de nombreuses références au fait que les versions de pilotes CUDA sont rétrocompatibles, ce problème a disparu lorsque j’ai remplacé le pilote par V3.2.

Il semble que vous cuInit API du pilote ( cuInit ) avec l’API d’exécution ( cudaMalloc ).

Je ne sais pas si quelque chose de drôle se passe (ou devrait arriver) en coulisse, mais une chose que vous pouvez essayer est de supprimer le cuInit et de voir ce qui se passe.