Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 即使编译正常,cuPrintf也不会打印任何内容_C++_Cuda - Fatal编程技术网

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设备生成代码。