1> pitch的含义
我们知道,对于内存的存取来说,对准偏移量为2的幂(现在一般要求2^4=16)的地址能获取更快的速度,而如果不对齐,可能你需要的数据需要更多的存取次数才能得到。
为了满足这个条件,对于一个二维数组来说(行优先row major),就希望每一行的开头都满足“对齐”,那么如果一行的长度不规整,导致下一行开头不在指定的位置,那就需要在每一行末尾进行填充(padding),从而使得每一行都对齐,这和BMP格式的像素存储是一个道理。
我们知道,对于内存的存取来说,对准偏移量为2的幂(现在一般要求2^4=16)的地址能获取更快的速度,而如果不对齐,可能你需要的数据需要更多的存取次数才能得到。
为了满足这个条件,对于一个二维数组来说(行优先row major),就希望每一行的开头都满足“对齐”,那么如果一行的长度不规整,导致下一行开头不在指定的位置,那就需要在每一行末尾进行填充(padding),从而使得每一行都对齐,这和BMP格式的像素存储是一个道理。
pitch就是指 每一行的字节数 + padding的字节数 。
2 对于你的问题,对应于CPU端的pitch,就是sizeof(int) * 2,对应于GPU端的pitch,就是d_pitch。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
cudaMemcpy2D( d_A,
// 目的指针
d_pitch,
// 目的pitch
bmp1,
// 源指针
sizeof
(
int
)*2,
// 源数据pitch
sizeof
(
int
)*2,
// 数据拷贝宽度
2,
// 数据拷贝高度
cudaMemcpyHostToDevice);
cudaMemcpy2D( bmp2,
sizeof
(
int
)*2,
d_A,
d_pitch,
sizeof
(
int
)*2,
2,
cudaMemcpyDeviceToHost);
|