2011-07-03 3 views
1

J'ai un noyau qui fonctionne deux fois avec une taille de grille différente.CUDA, cuPrintf provoque "échec de lancement non spécifié"?

Mon problème est avec cuPrintf. Quand je n'ai pas cudaPrintfInit() avant l'exécution du noyau et cudaPrintfDisplay(stdout, true) et cudaPrintfEnd() après l'exécution du noyau, je n'ai pas d'erreur mais quand je les mets là je reçois l'erreur "échec de lancement non spécifié".

Dans mon code de l'appareil, il n'y a qu'une seule boucle comme celui-ci pour l'impression:

if (threadIdx.x==0) { 
    cuPrintf("MAX:%f x:%d y:%d\n", maxVal, blockIdx.x, blockIdx.y); 
} 

J'utilise CUDA 4.0 avec une carte avec la capacité de cuda 2.0 et donc je compiler mon code avec cette syntaxe :

nvcc LB2.0.cu -arch=compute_20 -code=sm_20 

Répondre

1

Si vous êtes sur un GPU CC 2.0, vous n'avez pas besoin du tout cuPrintf - CUDA a printf intégré pour CC-2.0 et processeurs graphiques plus élevés. Il suffit donc de remplacer votre appel à cuPrintf avec ceci:

#if __CUDA_ARCH__ >= 200 
if (threadIdx.x==0) { 
    printf("MAX:%f x:%d y:%d\n", maxVal, blockIdx.x, blockIdx.y); 
} 
#endif 

(Notez que vous avez seulement besoin des lignes #if/#endif si vous compilez votre code pour sm_20 et aussi des versions antérieures avec l'exemple de ligne de commande de compilation que vous avez donné. , vous pouvez les éliminer.)

Avec printf, vous n'avez pas besoin de cudaPrintfInit() ou de cudaPrintfDisplay() - c'est automatique. Toutefois, si vous imprimez beaucoup de données, vous devrez peut-être augmenter la taille FIFO printf par défaut avec cudaDeviceSetLimit(), en passant l'option cudaLimitPrintfFifoSize.

Questions connexes