用户
 找回密码
 立即注册
工大的猫猫 该用户已被删除
发表于 2013-9-5 21:31:55
52112

为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);
使用道具 举报 回复
发表于 2013-9-6 08:47:50
目测第三句有问题。
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
- Source memory address

spitch
- Pitch of source memory

width
- Width of matrix transfer (columns in bytes)

height
- Height of matrix transfer (rows)

kind
- Type of transfer
使用道具 举报 回复 支持 反对
发表于 2013-9-6 09:32:03
LZ您好:

1:您上述三条如果是对应使用的,并保证各参数是合适的,那么用法是正确的。(其中第三条是从device到host,您应该是笔误)

2:cudaMallocPitch会引入强制的对齐机制,这样不免会浪费一些存储空间,以及按照您每行只放8个int的用量,这样浪费的空间较多。对于现在主流的GPU(计算能力2.0及以上),对对齐的要求已经大为降低,所以您也可以直接申请一段连续的存储空间,并将您的二维数组一维化存储。

大致如此,各函数详情请您参阅手册。

祝您好运~
使用道具 举报 回复 支持 反对
发新帖
您需要登录后才可以回帖 登录 | 立即注册