【发布时间】:2015-04-13 16:47:42
【问题描述】:
我正在尝试将 2D 矩阵从主机复制到设备。这是我写的
int dev=0;
cudaSetDevice(dev);
uint16_t * dev_matrix;
size_t pitch;
cudaMallocPitch(&dev_matrix,&pitch, 1024*sizeof(uint16_t), 65536);
cudaMemcpy2D(dev_matrix, pitch, matrix, 1024*sizeof(uint16_t), 1024*sizeof(uint16_t), 65536, cudaMemcpyHostToDevice);
//kernel function to implement
cudaFree(dev_matrix);
free (matrix);
matrix 是一个 2D uint16_t 向量 (1024x65536)。这段代码返回了分段错误,我不明白为什么
【问题讨论】:
-
提供完整的代码。其他人可以复制、粘贴、编译和运行并查看问题,而无需添加任何内容或更改任何内容。在您开始向他人寻求帮助之前,您应该始终使用proper cuda error checking。为什么不在你的代码中准确地显示你是如何定义
matrix而不是描述它? -
如果我为
matrix添加定义,您发布的代码对我来说很好。我的例子是here。如果您正在做类似std::vector<std::vector<uint16_t> > matrix;的事情,那将无法正常工作。cudaMemcpy的输入必须是平面分配。 -
它有 1000 行长!我剪了。我无法复制和粘贴整个代码!我向你保证它在工作之前写的内容!
-
@domenico:您在评论中发布的详细信息是了解您的问题的关键信息。从一开始就应该在您的问题中。