0

我遇到了一个问题,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}
4

0 回答 0