【CUDA开发】CUDA面内存拷贝用法总结
生活随笔
收集整理的這篇文章主要介紹了
【CUDA开发】CUDA面内存拷贝用法总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【CUDA開發】CUDA面內存拷貝用法總結
標簽(空格分隔): 【CUDA開發】
主要是在調試CUDA硬解碼并用D3D9或者D3D11顯示的時候遇到了一些代碼,如下所示:
CUdeviceptr g_pRgba = 0; CUDA_MEMCPY2D memcpy2D = { 0 }; memcpy2D.srcMemoryType = CU_MEMORYTYPE_DEVICE; memcpy2D.srcDevice = g_pRgba; memcpy2D.srcPitch = nWidth * 4; memcpy2D.dstMemoryType = CU_MEMORYTYPE_ARRAY; memcpy2D.dstArray = array; memcpy2D.dstPitch = nWidth * 4; memcpy2D.WidthInBytes = nWidth * 4; memcpy2D.Height = nHeight;// clear the surface to solid white checkCudaErrors(cuMemcpy2D(&memcpy2D));將設備內存g_pRgba中的數據拷貝到面內存中;還有另外一種情況:
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,否則必須使用該函數,另外當內存是使用cuMemAllocPitch分配的時候,如果內存布局本事不是2的次冪,則需要將planeMem的srcPitch和dstPitch設置為通過cuMemAllocPitch得到的pitch參數,而不是內存本身的布局大小*sizeof(TYPE)2017-01-26 23:28
張朋藝 pyZhangBIT2010@126.com
轉載于:https://www.cnblogs.com/huty/p/8517368.html
總結
以上是生活随笔為你收集整理的【CUDA开发】CUDA面内存拷贝用法总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OS: Redhat8.4 更换网络源
- 下一篇: WMS、WCS、PLC、AGV