Je commence tout juste à apprendre à utiliser CUDA. Je suis en train d'exécuter un code d'exemple simple:CUDA: cudaMemcpy ne fonctionne qu'en mode d'émulation
float *ah, *bh, *ad, *bd;
ah = (float *)malloc(sizeof(float)*4);
bh = (float *)malloc(sizeof(float)*4);
cudaMalloc((void **) &ad, sizeof(float)*4);
cudaMalloc((void **) &bd, sizeof(float)*4);
... initialize ah ...
/* copy array on device */
cudaMemcpy(ad,ah,sizeof(float)*N,cudaMemcpyHostToDevice);
cudaMemcpy(bd,ad,sizeof(float)*N,cudaMemcpyDeviceToDevice);
cudaMemcpy(bh,bd,sizeof(float)*N,cudaMemcpyDeviceToHost);
Quand je lance en mode d'émulation (nvcc -deviceemu), il fonctionne très bien (et en fait une copie du tableau). Mais quand je l'exécute en mode normal, il fonctionne sans erreur, mais ne copie jamais les données. C'est comme si les lignes cudaMemcpy étaient simplement ignorées.
Qu'est-ce que je fais mal?
Merci beaucoup, Jason
Oups. Cela semble être un problème avec cudaMalloc(). Il n'alloue pas la mémoire sur l'appareil. Pourquoi donc? – Jason
avez-vous initialisé l'appareil? utiliser cuda obtenir la dernière erreur pour imprimer le statut – Anycorn
@aaa: Utiliser l'API d'exécution (fonctions préfixées avec cuda au lieu de cu) signifie que vous n'avez pas besoin d'initialiser explicitement un périphérique, il se connectera au premier périphérique compatible sur le premier appel cuda . – Tom