在我的內核中,如果滿足條件,則我更新輸出緩衝器Cuda的 - 選擇性存儲器存儲
if (condition(input[i])) //?
output[i] = 1;
的項目否則輸出可保持爲0。
相同,具有值取決於輸入,更新的密度相當難以預測。此外哪個輸出位置將被更新也是未知的。 (我可能會強迫他們,但在某些情況下)
我的問題是,編寫所有項目,實現合併還是進行選擇性寫入更好?
output[i] = condition(input[i]); //?
您是否介意討論您的陳述?
如果寫入輸出緩衝區的速率非常低,該怎麼辦? – phoad
您的意思是,「如果商店中每條經紗的線程比例很低,該怎麼辦?」?因爲內存事務是按每個warp執行的,所以假設每個warp至少有一個線程執行一個store,那麼我的答案是一樣的。如果每個warp至少有一個線程執行存儲,那麼成本(假設完美合併)與所有線程都完成相同。但是如果很大一部分經紗沒有商店,那麼'if()'方法絕對是優越的。 – harrism
謝謝@哈里斯。那麼,將結果存儲到共享內存並將它們一次性存儲回全局內存沒有好處嗎?雖然可以將寫入類型從float更改爲float4。在全局內存寫入之前就足夠同步了嗎?你能指出一個好的方法來存儲全局內存,限制寫入的方式,還是不限制它們? (我也可以把它轉換成一個問題:) – phoad