CUDA plane memory使用技巧

这点文字是从我blog上copy的:

群里有网友问CUDA中2D GMEM copy的问题,昨天论坛中也有问同样问题的:copy a sub slice of source GMEM to another GMEM,下面详细介绍在不需要内核的情况下如何实现:



测试(从100x100的GMEM区域,起始索引为(25,25)的位置开始复制一块大小为50x50的子区域到目标GMEM):

src GMEM pointer : dpSrc

src GMEM layout  : 100x100

dst GMEM pointer : dpDst

dst GMEM layout  : 50*50

将src GMEM按行序初始化为:0~9999的值

CUDA_MEMCPY2D planeMem;
memset(&planeMem,0,sizeof(planeMem));
planeMem.srcMemoryType=CU_MEMORYTYPE_DEVICE;
planeMem.srcDevice    =dpSrc;
planeMem.srcXInBytes  =25*sizeof(float);
planeMem.srcY         =25;
planeMem.srcPitch     =100*sizeof(float);
planeMem.dstMemoryType=CU_MEMORYTYPE_DEVICE;
planeMem.dstDevice    =dpDst;
planeMem.dstXInBytes  =0;
planeMem.dstY         =0;
planeMem.dstPitch     =50*sizeof(float);
planeMem.WidthInBytes =planeMem.dstPitch;
planeMem.Height       =50;

cuMemcpy2DUnaligned(&planeMem); //如果数据已经对齐则最好使用cuMemcpy2D,否则必须使用该函数,另外当内存是使用cu垃圾广告llocPitch分配的时候,如果内存布局本事不是2的次幂,则需要将planeMem的srcPitch和dstPitch设置为通过cu垃圾广告llocPitch得到的pitch参数,而不是内存本身的布局大小*sizeof(TYPE)

本文来自CSDN博客,转载请标明出处:[url]http://blog.csdn.net/Cyrosly/archive/2009/12/30/5103486.aspx[/url]


[ 本帖最后由 cyrosly 于 2010-2-26 15:37 编辑 ]

。。。

你用的是驱动API?牛叉:right:

cyrosly可是 CUDA大牛,当然牛X了!.

External Media

开源图形处理器体系结构论坛(OpenGPU论坛) http://www.opengpu.org/bbs/

OpenGPU Graphics Open Source community图形开源社区),聚焦领域(focus domain)包括:
* GPU Architecture(图形处理器体系结构).
* Graphics Algorithm(图形算法).
* GPGPU Programming (面向通用的图形处理器编程).
* Open Source Rendering Engine(开源渲染器).
* Open Source GPU Simulator/RTL Implement(开源GPU模拟器).

[ 本帖最后由 OpenGPU 于 2010-3-10 17:10 编辑 ]

呵呵!:slight_smile:

你也相当牛叉,您们是我的偶像啊!