CUDA面記憶體用法總結
最近群裡有網友問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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- CUDA記憶體介紹記憶體
- JVM記憶體模型總結JVM記憶體模型
- CUDA一維紋理記憶體記憶體
- JVM記憶體管理——總結篇JVM記憶體
- JVM之記憶體區域總結JVM記憶體
- linux記憶體管理學習總結Linux記憶體
- Java記憶體模型學習總結Java記憶體模型
- 垃圾回收與記憶體分配——總結篇記憶體
- Android常見記憶體洩漏總結Android記憶體
- CUDA總結2——cudaMemcpymemcpy
- Oracle面試寶典-記憶體結構篇Oracle面試記憶體
- 深入理解Java記憶體模型(七)——總結Java記憶體模型
- Linux下找出吃記憶體的方法總結Linux記憶體
- CUDA 有 unified memory 還需要記憶體優化嗎?Nifi記憶體優化
- 記憶體結構記憶體
- Android記憶體溢位、記憶體洩漏常見案例分析及最佳實踐總結Android記憶體溢位
- JVM記憶體結構JVM記憶體
- PostgreSQL:記憶體結構SQL記憶體
- Java記憶體區域總結(堆、棧、方法區等)Java記憶體
- 填坑總結:python記憶體洩漏排查小技巧Python記憶體
- 結構體記憶體對齊結構體記憶體
- 面試官問我JVM記憶體結構,我真的是面試JVM記憶體
- ThreadLocal原理用法詳解ThreadLocal記憶體洩漏thread記憶體
- Android之記憶體洩漏除錯學習與總結Android記憶體除錯
- android 關於記憶體優化的一些總結Android記憶體優化
- Android記憶體洩漏監控和優化技巧總結Android記憶體優化
- JVM記憶體結構、Java記憶體模型和Java物件模型JVM記憶體Java模型物件
- Promise用法總結Promise
- layui用法總結UI
- axios用法總結iOS
- less用法總結
- pandas用法總結
- Const 用法總結
- Java常見知識點彙總(⑱)——Jvm記憶體結構、Java記憶體模型、Java物件模型的區別JavaJVM記憶體模型物件
- 面試準備之java虛擬機器記憶體結構面試Java虛擬機記憶體
- 言簡意賅——總結Java記憶體區域和常量池Java記憶體
- 記錄近期面試題,面試總結面試題
- 理解JVM(一):記憶體結構JVM記憶體
- JVM(七):JVM記憶體結構JVM記憶體