2013-12-07 140 views
0

這裏是我的包括:cuPrintf沒有打印任何東西

#include "cuPrintf.cu" 
#include "cuPrintf.cuh" 

我的內核:

__global__ void testKernel() 
{ 
    cuPrintf("Test"); 
} 

和我的主:

int main(int argc, char** argv) 
{ 
    dim3 threads(1,1); 
    dim3 blocks(1, 1); 
    testKernel<<<blocks, threads>>>(); 
} 

有人能解釋我爲什麼cuPrintf不打印任何東西,彙編是好的,我用Cuda 5.5

回答

0

如果您有cc 2.0或更高版本的設備,則直接從內核直接使用printf會更容易。只要你的編譯命令指定了-arch=sm_20或類似的東西,無論你的實際設備是什麼,都可以這樣做。

如果你真的想用cuPrintf,然後study the relevant sample code。您在main例程中缺少幾個函數調用,這些函數需要cuPrintf才能正常工作。

最後,無論何時從內核打印,在程序退出之前都應該確保有一些同步功能。如果你沒有別的你的內核後,那麼下面會做什麼:

cudaDeviceSynchronize(); 

main程序,最後內核調用後。

如果修改main程序是這樣的:

int main(int argc, char** argv) 
{ 
    dim3 threads(1,1); 
    dim3 blocks(1, 1); 
    cudaPrintfInit(); 
    testKernel<<<blocks, threads>>>(); 
    cudaDeviceSynchronize(); 
    cudaPrintfDisplay(stdout,true); 
    cudaPrintfEnd(); 
} 

我相信它會工作。

+0

我試過'-arch = sm_20',但它沒有工作,這個參數是什麼?它可以是不同的數字? –

+0

您是否正在進行正確的cuda錯誤檢查?你可以閱讀有關nvcc編譯器的參數[這裏](http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#nvcc-command-options)。 '-arch = sm_20'開關告訴編譯器爲cc2.0設備生成代碼。 –