CUDA面記憶體用法總結

洛欣發表於2010-01-21

最近群裡有網友問CUDA中2D GMEM copy的問題,昨天論壇中也有問同樣問題的:copy a sub slice of source GMEM to another GMEM,下面詳細介紹再不需要核心的情況下如何實現:

view plaincopy to clipboardprint?
測試(從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) 
測試(從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)

 

注:以上程式碼經過測試

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22785983/viewspace-625650/,如需轉載,請註明出處,否則將追究法律責任。

相關文章