为b[10][8]开辟2维的数组空间这样写对不对:
cudaMallocPitch((void**)&dev_b,&pitch, 8 * sizeof(int),10);
将数组b[10][8]从主机复制到设备这样写对不对:
cudaMemcpy2D(dev_b,pitch, b,8* sizeof(int) ,8* sizeof(int),10,cudaMemcpyHostToDevice);
将数组dev_b[10][8]从主机复制到设备这样写对不对:
cudaMemcpy2D(b,sizeof(int)*8, dev_b,pitch,sizeof(int)*8,10,cudaMemcpyDeviceToHost);
目测第三句有问题。
cudaError_t cudaMemcpy2D (void *dst, size_t dpitch,
const void *src, size_t spitch, size_t width, size_t
height, cudaMemcpyKind kind)
Copies data between host and device.
Parameters
dst
- Destination memory address
dpitch
- Pitch of destination memory
src
spitch
width
- Width of matrix transfer (columns in bytes)
height
- Height of matrix transfer (rows)
kind
LZ您好:
1:您上述三条如果是对应使用的,并保证各参数是合适的,那么用法是正确的。(其中第三条是从device到host,您应该是笔误)
2:cudaMallocPitch会引入强制的对齐机制,这样不免会浪费一些存储空间,以及按照您每行只放8个int的用量,这样浪费的空间较多。对于现在主流的GPU(计算能力2.0及以上),对对齐的要求已经大为降低,所以您也可以直接申请一段连续的存储空间,并将您的二维数组一维化存储。
大致如此,各函数详情请您参阅手册。
祝您好运~