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記憶體
- Java記憶體模型學習總結Java記憶體模型
- Android 記憶體洩漏總結Android記憶體
- Java記憶體模型深度解析:總結Java記憶體模型
- Sql Server實體記憶體及虛擬記憶體設定的總結SQLServer記憶體
- 記憶體使用總結篇 -- Android 記憶體優化第五彈記憶體Android優化
- 垃圾回收與記憶體分配——總結篇記憶體
- Linux記憶體管理複習總結Linux記憶體
- oracle 記憶體分配和調優 總結Oracle記憶體
- Js記憶體洩露問題總結JS記憶體洩露
- linux記憶體管理學習總結Linux記憶體
- CUDA總結2——cudaMemcpymemcpy
- CUDA 有 unified memory 還需要記憶體優化嗎?Nifi記憶體優化
- 8. CUDA 記憶體使用 global 二------GPU的革命記憶體GPU
- 深入理解Java記憶體模型(七)——總結Java記憶體模型
- Android常見記憶體洩漏總結Android記憶體
- 全面總結Android記憶體洩漏(下)Android記憶體
- Scrapy的記憶體洩露問題總結記憶體洩露
- iphone 記憶體管理的一些總結iPhone記憶體
- 記憶體結構記憶體
- Linux下找出吃記憶體的方法總結Linux記憶體
- Linux 記憶體管理知識學習總結Linux記憶體
- 記憶體資料庫快取介紹總結記憶體資料庫快取
- CUDA總體優化策略優化
- 記憶體不能為written與記憶體不能為read的解決辦法總結記憶體
- PostgreSQL:記憶體結構SQL記憶體
- oracle 記憶體結構Oracle記憶體
- JVM記憶體結構JVM記憶體
- Android記憶體溢位、記憶體洩漏常見案例分析及最佳實踐總結Android記憶體溢位
- Java記憶體區域總結(堆、棧、方法區等)Java記憶體
- Android對Bitmap的記憶體優化方案總結Android記憶體優化
- 虛擬記憶體,實體記憶體,頁面檔案,還有工作管理員記憶體
- 結構體記憶體對齊結構體記憶體