我正在编写一个cuda程序,并尝试使用printf函数在cuda内核中打印一些内容.但是当我编译程序时,我收到了一个错误
error : calling a host function("printf") from a __device__/__global__ function("agent_movement_top") is not allowed
error MSB3721: The command ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_10,compute_10\" --use-local-env --cl-version 2008 -ccbin "c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin" -I"C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.2\C\common\inc" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\include" -G --keep-dir "Debug" -maxrregcount=0 --machine 32 --compile -g -Xcompiler "/EHsc /nologo /Od /Zi /MDd " -o "Debug\test.cu.obj" "C:\Users\umdutta\Desktop\SANKHA_ALL_MATERIALS\PROGRAMMING_FOLDER\ABM_MODELLING_2D_3D\TRY_NUM_2\test_proj_test\test_proj\test_proj\test.cu"" exited with code 2.
Run Code Online (Sandbox Code Playgroud)
我使用具有计算能力大于2.0和卡GTX 560 TI的时候我已经搜索了一下有关从CUDA内核我也看到了,我需要编译器sm_10改变sm_2.0采取充分利用印刷卡片.还有人建议cuPrintf服务于此目的.我有点困惑我应该做什么以及什么应该是在我的控制台屏幕上获取打印输出的最简单和最快捷的方法.如果我需要将nvcc编译器从1.0更改为2.0,那么我该怎么办?还有一件事我想提一下,我正在使用Windows 7.0并在visual studio 2010中编程.感谢您的帮助.
我在学习CUDA编程结构,学习后的感受是;创建块和线程后,这些块中的每一个都分配给每个流式多处理器(例如,我使用 GForce 560Ti,它具有 14 个流式多处理器,因此一次可以将 14 个块分配给所有流式多处理器)。但是当我浏览一些在线材料时,例如这个:
http://moss.csc.ncsu.edu/~mueller/cluster/nvidia/GPU+CUDA.pdf
已经提到可以在一个多处理器上同时运行多个块。我基本上对流式多处理器上的线程和块的执行感到非常困惑。我知道块的分配和线程的执行是绝对任意的,但我想块和线程的映射实际上是如何发生的,以便并发执行可以发生。
我试图在cuda内核中生成随机数随机数.我希望从均匀分布和整数形式生成随机数,从1到8开始.随机数对于每个线程都是不同的.可以生成随机数的范围也可以从一个线程到另一个线程而变化.一个线程中的最大范围可能低至2,或者在另一个线程中,它可以高达8,但不高于该高.所以,我在下面提供了一个如何生成数字的示例:
In thread#1 --> maximum of the range is 2 and so the random number should be between 1 and 2
In thread#2 --> maximum of the range is 6 and so the random number should be between 1 and 6
In thread#3 --> maximum of the range is 5 and so the random number should be between 1 and 5
Run Code Online (Sandbox Code Playgroud)
等等...