【发布时间】:2012-04-02 12:19:06
【问题描述】:
我必须提取数组的部分并将块设置为另一个数组。
例如,我有一个二维数组(一维格式),如 A[32 X 32];还有另一个数组 B[64 X 64],我想复制一个 8X8 的 B 块,从 B 的 (0,8) 开始,并将其放在 A 的 (8,8) 中。
目前,我可能会使用类似于下面的内核的东西,以便在传递偏移量时获取部分数据。类似的也可以用于将块设置为更大的数组。
__global__ void get_chunk (double *data, double *sub, int xstart, int ystart, int rows, int cols, int subset)
{
int i,j;
i = blockIdx.x * blockDim.x + threadIdx.x;
for (j = 0; j < subset; j++)
sub[i*subset+j] = data[i*cols + (xstart*cols + ystart)+j];
}
我认为使用 cudamemCpy* 的变体(也许是 cudamemCpyArray(...))也可以做到这一点,但我不知道该怎么做。我需要一些代码示例,或者一些关于如何完成的指导。
PS 我在 nvidia 论坛上遇到了完全相同的问题,没有得到回复,所以在这里尝试。 http://forums.nvidia.com/index.php?showtopic=223386
谢谢。
【问题讨论】: