我遇到了一个问题,cuda-gdb
即在取消引用它们时在结构(例如 float2)上打印 0。在此示例中,打印 ( zz
) 和z[0]
) 具有不同的结果,即使它们相同。
主文件
#include <stdio.h>
__global__ void kernel_1(float2 *z){
float2 zz=z[0];
printf("x=%g, y=%g\n",z[0].x,z[0].y);
}
int main(){
float2 *floats_d, *floats_h;
cudaMalloc(&floats_d,sizeof(float2)*100);
floats_h=new float2[100];
floats_h[0]=(float2){1,2};
floats_h[1]=(float2){3,4};
cudaMemcpy(floats_d,floats_h,sizeof(float2)*100,cudaMemcpyHostToDevice);
kernel_1<<<1,1>>>(floats_d);
cudaDeviceSynchronize();
delete [] floats_h;
cudaFree(floats_d);
return 0;
}
cuda-gdb
nvcc main.cu -o main.exe -g -G
cuda-gdb --args ./main.exe
# break at printf("x=%g, y=%g\n",z[0].x,z[0].y);
b main.cu : 5
r
p z[0]
p zz
p zz
印刷{x = 1, y = 2}
p z[0]
印刷{x = 0, y = 0}