global void hey()
{
int tid = threadIdx.x;
printf(“my id is=%d\n”, tid);
}
int main()
{
hey<<<1, 4>>> ();
return 0;
}
运行之后没有显示任何东西,怎么回事呢
global void hey()
{
int tid = threadIdx.x;
printf(“my id is=%d\n”, tid);
}
int main()
{
hey<<<1, 4>>> ();
return 0;
}
运行之后没有显示任何东西,怎么回事呢
printf 不可用
可以的,我的是CUDA5.0
不知道怎么讲,但是这里的核函数不是4个一起执行么?那这里printf是一起输出还是有先后顺序?要加上同步操作。
int main()
{
hey<<<1, 4>>> ();
cudaDeviceSynchronize();
return 0;
}
翻了一下以前的帖子,找到原因了
因为device上的printf不是也无法直接控制host端的输出,他是通过某种后台同步机制将数据传回来显示的。因为该同步机制会有延迟,有时甚至会出现不显示的情况。如果遇到不显示的情况,您可以添加cudaDeviceSynchronize()或者cudaDeviceReset()等同步函数。(引用自版主ice)
LZ您好:
确实是这样的。
1:当前的CUDA Toolkit 5.0绝对无问题的。
2:需要计算能力为2.0及以上的硬件。(目前主流硬件都无问题的)
3:在编译的时候需要指定编译参数的,如果按照1.x的计算能力版本编译会报错。
4:在main中,return以前,需要加上cudaDeviceReset()等函数,其隐含的一些同步机制会保证之前在某个缓冲区内部的printf的信息在host端输出以后,程序才结束。
5:kernel里面的各个 线程的输出顺序是不被保证的。
以上各楼大致回复如此,供参考。
祝诸位编码顺利~
感谢版主