我正在尝试以下简单的CUDA C代码但打印垃圾值:
#include <stdio.h>
__global__ void hellocuda(int* tidx){
*tidx = 100;
}
int main(){
int* d_tidx;
int* c;
cudaMalloc((void**) &d_tidx, 1);
c = (int*)malloc(sizeof(int));
hellocuda<<<1,1>>>(d_tidx);
cudaMemcpy(c, d_tidx, sizeof(int), cudaMemcpyDeviceToHost);
printf("%d\n", *c);
return EXIT_SUCCESS;
}
我得到的输出是:-273093020
有人可以帮助调试此代码。感谢。
答案 0 :(得分:2)
这一行
printf("%d\n", *c);
从堆栈中提取sizeof(*c)
个字节,其中只有第一个字节是有效内存,由以下内容分配:
int * c;
...
c = (int*) malloc(1);
由于sizeof(*c)
明确地大于1
,因此上面printf()
的调用会引发不相关的行为。
尽管我无法解析这个:
cudaMalloc((void**) &d_tidx, 1);
1
看起来很模糊。