我不认为我是Cuda的完全新手,但显然我是.
我最近将我的cuda设备升级到1.3到2.1(Geforce GT 630).我还想完全升级到Cuda toolkit 5.0.
我可以编译一般的cuda内核,但是即使设置-arch = sm_20,printf也不能工作.
码:
#include <stdio.h>
#include <assert.h>
#include <cuda.h>
#include <cuda_runtime.h>
__global__ void test(){
printf("Hi Cuda World");
}
int main( int argc, char** argv )
{
test<<<1,1>>>();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译:
Error 2 error MSB3721: The command ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_20,compute_10\" --use-local-env --cl-version 2010 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -G --keep-dir "Debug" -maxrregcount=0 --machine 32 --compile -arch=sm_20 -g -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd " -o "Debug\main.cu.obj" "d:\userstore\documents\visual studio 2010\Projects\testCuda\testCuda\main.cu"" exited with code 2. C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA 5.0.targets 592 10 testCuda
Error 1 error : calling a __host__ function("printf") from a __global__ function("test") is not allowed d:\userstore\documents\visual studio 2010\Projects\testCuda\testCuda\main.cu 9 1 testCuda
Run Code Online (Sandbox Code Playgroud)
因为这个问题我完成了生活...已完成.请回答我在屋顶上的答案.
Tom*_*ski 20
如果你printf
在内核中使用,你应该使用cudaDeviceSynchronize()
:
#include <stdio.h>
#include <assert.h>
#include <cuda.h>
#include <cuda_runtime.h>
__global__ void test(){
printf("Hi Cuda World");
}
int main( int argc, char** argv )
{
test<<<1,1>>>();
cudaDeviceSynchronize();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在内核中,printf仅在计算能力2或更高的硬件中受支持.因为你的项目设置,以建立双方计算能力1.0和2.1计算,NVCC编译代码多次,构建一个多架构fatbinary对象.在计算能力1.0编译周期期间,正在生成错误,因为该架构printf
不支持该调用.
如果从项目中删除计算能力1.0构建目标,则错误将消失.
你也可以像这样编写内核:
__global__ void test()
{
#if __CUDA_ARCH__ >= 200
printf("Hi Cuda World");
#endif
}
Run Code Online (Sandbox Code Playgroud)
[免责声明:用浏览器编写,永不编译,自担风险使用]
__CUDA_ARCH__
在构建计算能力2.0或高目标时,符号将仅> = 200,这将允许您为计算能力1.x设备编译此代码而不会遇到语法错误.
归档时间: |
|
查看次数: |
13918 次 |
最近记录: |