2
簡單問題: 是否有可能來計算或獲得一個數組的最佳間距不分配內存爲計算cudaMalloc的間距在使用cudaMallocPitch
cudaMallocPitch(void** p, size_t *pitch, size_t width, size_t height)
我想獲得的音調,而不分配內存,然後使用函數cudaMalloc來代替!
(這是如果一個人想實現一些緩存分配用於針對CUDA平臺搭分配的關鍵)
它是:
// round width to next mulitple of prop.textureAlignment;
size_t proper_pitch = ((width/(size_t)device.m_prob.textureAlignment) + 1) * device.m_prob.textureAlignment;
更新: 我現在計算proper_pitch作爲32/64/128字節的最小上限倍數: 我沒有嘗試過這一點,我仍然不知道運行時API可以做什麼,也許看看已分配的內存並做一些擬合?在CUDA編程指南,爲完全凝聚的訪問上面是一個必要條件(不充分,因爲在運行時需要扭曲不間斷的訪問)...
// use Cuda Programming Guide Alignmenet (which should be the best i think)
// Upper closest multible of 32/64/128
//size_t upperMultOf32 = ((widthInBytes + 32 - 1)/32)*32; // ((widthInBytes-1)/32 + 1)*32
proper_pitch = std::min(
std::min(((widthInBytes + 32 - 1)>>5)<<5 , ((widthInBytes + 64 - 1)>>6)<<6),
((widthInBytes + 128 - 1)>>7)<<7
);
你可以這樣做:'爲size_t proper_pitch =((寬+ device.m_prob.textureAlignment - 1)/ device.m_prob.textureAlignment)* device.m_prob.textureAlignment;' – sgarizvi
問題在於,紋理對齊不是CUDA驅動程序在執行傾斜分配時考慮的唯一約束。2D複製引擎具有對齊約束,可能與紋理流水線不同。如果NVIDIA不支持它,那麼當調用者只想知道假設分配的音高時,他們可以很容易地讓調用者爲指針回傳傳遞NULL。事實上,你應該嘗試一下,並讓我們知道它是否有效: - ) – ArchaeaSoftware
我一定會試試這個:-) – Gabriel