我正在研究如何将每行的可变宽度的二维数组复制到 GPU 中。
int rows = 1000;
int cols;
int** host_matrix = malloc(sizeof(*int)*rows);
int *d_array;
int *length;
...
每个都host_matrix[i]
可能有不同的长度,我知道length[i]
,这就是问题开始的地方。我想避免复制虚拟数据。有更好的方法吗?
根据这个线程,这不是一个聪明的方法:
cudaMalloc(d_array, rows*sizeof(int*));
for(int i = 0 ; i < rows ; i++) {
cudaMalloc((void **)&d_array[i], length[i] * sizeof(int));
}
但我想不出任何其他方法。还有其他更聪明的方法吗?可以使用 cudaMallocPitch 和 cudaMemCpy2D 改进它吗?