我正在CUDA写一个小程序,我有以下错误:
contraste.cu(167): error: calling a host function from a __device__/__global__ function is not allowed
我不明白为什么。你能帮帮我,告诉我我的错误。看来我的程序是正确的。以下是导致问题的一堆代码:
__global__ void kernel_contraste(float power,
unsigned char tab_in[],
unsigned char tab_out[],
int nbl, int nbc) {
int x = threadIdx.x;
printf("I am the thread %d\n", x);
}
我的主要计划的一部分:
unsigned char *dimg, *dimg_res;
.....
cudaMalloc((void **)dimg, h * w * sizeof(char));
cudaMemcpy(dimg, r.data, h*w*sizeof(char), cudaMemcpyHostToDevice);
cudaMalloc((void **)dimg_res, h*w*sizeof(char));
dim3 nbThreadparBloc(256);
dim3 numblocs(1);
kernel_contraste<<<numblocs, nbThreadparBloc >>>(puissance, dimg, dimg_res, h, w);
cudaThreadSynchronize();
.....
cudaFree(dimg);
cudaFree(dimg_res);
第167行是我在函数kernel_contraste中调用printf的行。
有关信息,此程序将图像作为输入(太阳光栅文件)和电源,然后计算该图像的对比度。
谢谢!
答案 0 :(得分:3)
查看Here了解cuprintf()
上的教程。我想是你想要的。
答案 1 :(得分:2)
您正尝试从gpu设备调用printf
。你必须有费米卡这样做......
答案 2 :(得分:2)
正如错误消息所示,您无法从GPU上运行的内核函数调用主机函数(在本例中为printf)。