2011-07-15 57 views
2

我正試圖通過surface<void, 2>寫入2維cudaArray。 該陣列有一個通道格式{32, 32, 0, 0, cudaChannelFormatKindFloat}或更簡單地說,保存vector2 s。寫入由矢量陣列支持的CUDA表面

我想在整數座標(x, y)所指示的位置上寫一個vector2到表面。下面的效果很好:

// write the float2 vector d to outSurf 
surf2Dwrite(d.x, outSurf, x * sizeof(float2), y); 
surf2Dwrite(d.y, outSurf, x * sizeof(float2) + sizeof(float), y); 

但是,如果我這樣做

surf2Dwrite(d, outSurf, x * sizeof(float2), y); 

僅向量的x組件將被寫入。 這個稍微不直觀的行爲的原因是什麼?

回答

2

我發現很難相信任何這些surf2Dwrite調用實際上會做你認爲他們做的事。要編寫float2我會用這樣的:

surf2Dwrite<float2>(d, outSurf, x, y); 

x和y參數是你正在寫在表面上的座標和模板參數告訴正在訪問的類型的大小呼叫。

+0

這就是問題所在。雖然我想知道爲什麼讓Type = vector2無法從編譯器的參數中推導出來。 –

+1

CUDA C編程指南(4.0)的第3.2.10.2.2節指出,表面對x座標使用字節尋址,所以仍然需要用'sizeof(float2)'乘以'x'。 –