我有一個巨大的數組,必須由不同的線程並行讀取。每個線程必須從整個陣列的不同位置讀取不同的條目,從頭到尾。該緩衝區是隻讀的,所以我不認爲需要「臨界區」。使用CUDA儘可能快地訪問只讀全局數組?
但是恐怕這種方法的性能很差。但我沒有看到其他方式去做。我可以將整個數組加載到每個塊的共享內存中,但我認爲這沒有足夠的共享內存。
任何想法?
編輯:有些人問我爲什麼要訪問數組的不同部分,所以這裏有一些解釋:我試圖實現"auction algorithm"。在一個內核中,每個線程(人)必須針對具有價格的項目進行投標,這取決於其對該項目的興趣。每個線程都必須檢查它對大數組中給定對象的興趣,但這不是問題,我可以將共享內存中的讀數合併。問題是,當一個線程選擇爲一個物品出價時,首先要檢查它的價格,並且由於有很多很多物品要競標,所以我不能將所有這些信息都放到共享內存中。此外,每個線程都必須訪問整個價格緩衝區,因爲他們可以競標任何對象。我唯一的優點是緩衝區是隻讀的。
你的應用程序試圖計算什麼?有可能有另一種方式來以結構化的方式訪問數據。 –
你可以在內核中添加一個訪問模式的例子嗎? – pQB
我編輯的問題更加明確! –