【发布时间】:2018-03-13 06:30:30
【问题描述】:
我有这个结构
struct Data {
int x
int y;
float z;
};
我发送给内核没有问题
__global__ void calculate(Data *d_data) {
d_data[myCounter].x = 1;
d_data[myCounter].y = 1;
d_data[myCounter].z = 1.0;
}
#DEFINE MAX_SIZE 100
int main() {
Data * data = (Data *)malloc(MAX_SIZE * sizeof(Data));
Data *d_data;
const int DATA_BYTES = MAX_SIZE * sizeof(Data);
int elements = 20;
cudaError_t cudaStatus;
cudaStatus = cudaMalloc((void **)&d_data, DATA_BYTES);
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMalloc failed!");
}
cudaStatus = cudaMemcpy(d_data, data, DATA_BYTES, cudaMemcpyHostToDevice);
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMemcpy failed!");
}
calculate << < 1, elements >> > (d_data);
cudaMemcpy(data, d_data, DATA_BYTES, cudaMemcpyDeviceToHost);
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMemcpy failed!");
}
cudaDeviceSynchronize();
for (i = 0; i < elements; i++) {
printf("%2d %2.1f %s\n", d_data[i].x, d_data[i].y,
d_data[i].z); // this prints nothing
}
cudaStatus = cudaDeviceReset();
}
当我在内核函数中测试 struct array 计算时,它打印出正确的结果,但是当我尝试使用 cudaMemcpy 程序从设备发送数据到主机时,程序崩溃,没有错误并且什么也不打印,我如何从设备传输这个 struct array?
【问题讨论】:
-
您能否在上面的代码中提供一些有关
myCounter值的详细信息?另外,您能否提供您用于此代码的编译方案?实际上,结构对齐可能会有所不同。最后,您要在执行cudaDeviceSynchronize时检查错误。