C++ 即使编译正常,cuPrintf也不会打印任何内容
以下是我的简历:C++ 即使编译正常,cuPrintf也不会打印任何内容,c++,cuda,C++,Cuda,以下是我的简历: #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, threa
#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>>>();
}
int main(int argc,char**argv)
{
dim3螺纹(1,1);
dim3块(1,1);
testKernel();
}
有人能给我解释一下为什么
cuPrintf
不打印任何东西吗?编译没问题,我使用的是Cuda 5.5如果你有cc 2.0或更高版本的设备,直接从内核使用printf
会更容易。只要compile命令为实际设备指定-arch=sm_20
或类似命令,就可以执行此操作
如果您真的想使用cuPrintf
,那么。在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();
}
int main(int argc,char**argv)
{
dim3螺纹(1,1);
dim3块(1,1);
cudaPrintfInit();
testKernel();
cudaDeviceSynchronize();
cudaPrintfDisplay(标准输出,真);
cudaPrintfEnd();
}
我相信它会起作用。我试过
-arch=sm_20
但它不起作用,这个论点是什么?它可能是一个不同的号码吗?您是否按照之前的建议进行了正确的cuda错误检查?您可以阅读nvcc编译器的参数。-arch=sm_20
开关告诉编译器为cc2.0设备生成代码。