我正在尝试以下简单的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
有人能帮我调试这段代码吗。谢谢。
发布于 2013-12-27 18:06:42
这条线
printf("%d\n", *c);从堆栈中提取sizeof(*c)字节,其中只有第一个字节是有效内存,分配如下:
int * c;
...
c = (int*) malloc(1);由于sizeof(*c)确实更大,那么1对printf()的调用引发了未消除的行为。
尽管我不能真正解析这一点:
cudaMalloc((void**) &d_tidx, 1);1在我看来是模糊的。
https://stackoverflow.com/questions/20805484
复制相似问题