2014-06-12 55 views
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 
        ); 
+0

你可以這樣做:'爲size_t proper_pitch =((寬+ device.m_prob.textureAlignment - 1)/ device.m_prob.textureAlignment)* device.m_prob.textureAlignment;' – sgarizvi

+4

問題在於,紋理對齊不是CUDA驅動程序在執行傾斜分配時考慮的唯一約束。2D複製引擎具有對齊約束,可能與紋理流水線不同。如果NVIDIA不支持它,那麼當調用者只想知道假設分配的音高時,他們可以很容易地讓調用者爲指針回傳傳遞NULL。事實上,你應該嘗試一下,並讓我們知道它是否有效: - ) – ArchaeaSoftware

+0

我一定會試試這個:-) – Gabriel

回答

2

目前沒有獲得瀝青的方法計算。細節可能是硬件版本特定的,NVIDIA既沒有記錄計算結果,也沒有通過API公開計算結果(儘管如此指出這對他們來說是微不足道的)。

如果這是真實世界用例的嚴重限制,我會建議通過NVIDIA註冊開發者的門戶網站提出錯誤報告/功能請求。根據我的經驗,他們確實傾聽嚴重的功能要求。

[這個答案是從組裝的意見大多和添加爲社區維基條目遇到的問題是關閉未回答列表]