[問題] CUDA 如何把2維陣列資料搬到globel mem

看板C_and_CPP (C/C++)作者 (豬內茄仔)時間16年前 (2009/03/28 21:31), 編輯推噓0(006)
留言6則, 1人參與, 最新討論串1/1
假設host 端有一個2維陣列如下 int hst2way[10][10]; 該如何把它的內容值搬到GPU上呢? 而且搬過去後,在GPU上也是一個二維陣列。 從Reference Manual查到很多相關的函數 如: cudaError_t cudaMemcpy2D( void* dst, size_t dpitch, const void* src, size_t spitch, size_t width, size_t height, enum cudaMemcpyKind kind ) cudaError_t cudaMemcpy2DArrayToArray(struct cudaArray* dstArray, size_t dstX, size_t dstY, const struct cudaArray* srcArray, size_t srcX, size_t srcY, size_t width, size_t height, enum cudaMemcpyKind kind) 對於 pitch 似乎是以下的函數產生的: cudaError_t cudaMallocPitch( void** devPtr, size_t* pitch, size_t widthInBytes, size_t height) 但此函數好像無法在host memory 上配置記憶體位置。 不論是cudaMallocPitch()中pitch的定義或cudaMemcpy2DArrayToArray()中srcX和srcY的 定義都不是很明確。 請問有人會解決這個問題嗎? 感謝大家 -- ≡.◥ 蜘蛛人 Orz ▲﹀ 老人家 _ "︷\│ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.128.10 ※ 編輯: p03189 來自: 140.113.128.10 (03/28 21:32)

03/31 00:04, , 1F
pitch是用來把leading dim補到16的倍數
03/31 00:04, 1F

03/31 00:07, , 2F
減少access次數用的 基本上你要把data都看成一維的
03/31 00:07, 2F

03/31 00:08, , 3F
programming guide p.63有個common access patterns
03/31 00:08, 3F

03/31 00:09, , 4F
稍微看一下吧 我自己是沒在用MallocPitch啦 因為麻煩很多
03/31 00:09, 4F

03/31 00:13, , 5F
硬是要用data(x,y)這種方式寫比較順的話
03/31 00:13, 5F

03/31 00:14, , 6F
我是有看過有人用micro去換掉
03/31 00:14, 6F
文章代碼(AID): #19pYQW3x (C_and_CPP)
文章代碼(AID): #19pYQW3x (C_and_CPP)