我使用此网站http://code.google.com/p/stanford-cs193g-sp2010/wiki/TutorialHelloWorld
在cuda中复制了一个hello world程序代码是
#include "util/cuPrintf.cu"
#include <stdio.h>
__global__ void device_greetings(void)
{
cuPrintf("Hello, world from the device!\n");
}
int main(void)
{
// greet from the host
printf("Hello, world from the host!\n");
// initialize cuPrintf
cudaPrintfInit();
// launch a kernel with a single thread to greet from the device
device_greetings<<<1,1>>>();
// display the device's greeting
cudaPrintfDisplay();
// clean up after cuPrintf
cudaPrintfEnd();
return 0;
}
然后使用nvcc hello_world.cu -o hello_world
编译但是我只看到hello fom主机而不是设备。
我甚至尝试过
printf("{CudaPrintfInt => %s}\n",cudaGetErrorString(cudaPrintfInit()));
printf("{cudaPrintfDisplay => %s}\n",cudaGetErrorString(cudaPrintfDisplay(stdout, true)));
并使用nvcc -arch=sm_11 hello_world.cu -o hello_world
编译,但我得到:
$ ./hello_world
Hello, world from the host!
{CudaPrintfInt => initialization error}
{cudaPrintfDisplay => __global__ function call is not configured}
$
图形模型是:
$/sbin/lspci -v | grep VGA
07:01.0 VGA compatible controller: Matrox Graphics, Inc. MGA G200eW WPCM450 (rev 0a) (prog-if 00 [VGA controller])
和cuda版本是4:
$ ls /usr/local/cuda/lib/
libcublas.so libcudart.so.4.0.17 libcurand.so.4 libnpp.so
libcublas.so.4 libcufft.so libcurand.so.4.0.17 libnpp.so.4
libcublas.so.4.0.17 libcufft.so.4 libcusparse.so libnpp.so.4.0.17
libcudart.so libcufft.so.4.0.17 libcusparse.so.4
libcudart.so.4 libcurand.so libcusparse.so.4.0.17
答案 0 :(得分:1)
“如果您使用的是CC 2.0 GPU,则根本不需要cuPrintf - CUDA内置了适用于CC-2.0和更高版本GPU的printf。所以只需将您的cuPrintf替换为实际打印”( source)
以这种方式编写代码只是为了检查导致此问题的原因。
#include <cuda_runtime.h>
#include "util/cuPrintf.cu"
#include <stdio.h>
__global__ void device_greetings(void)
{
cuPrintf("Hello, world from the device!\n");
}
int main(void)
{
// greet from the host
printf("Hello, world from the host!\n");
// initialize cuPrintf
printf("{CudaPrintfInt => %s}\n",cudaGetErrorString(cudaPrintfInit()));
// launch a kernel with a single thread to greet from the device
device_greetings<<<1,1>>>();
// display the device's greeting
printf("{cudaPrintfDisplay => %s}\n",cudaGetErrorString(cudaPrintfDisplay()));
// clean up after cuPrintf
cudaPrintfEnd();
return 0;
}
Here说发生这种情况是因为: “之前未通过cudaConfigureCall()函数配置调用的设备函数(通常通过cudaLaunch())。”