2014-03-02 31 views
0

使用本地內存時是否有初始性能命中? 我正在轉換使用全局內存的現有內核,並在成功轉換時看到性能下降。顯然你可能會認爲我可能沒有正確使用它,我甚至可能會同意並找到更多優化。但這不是問題。使用本地內存初始性能命中

作爲一個側面實驗,我使用了全局內存的同樣的內核,因爲沒有訪問本地內存。然後我所做的全部都是通過帶有本地內存(大約1024個整數)的內核參數傳遞的。在這裏我看到這個內核執行花費了將近兩倍的時間。 因此,本地內存本身的分配會導致一些初始性能下降?有沒有人看到這個,也許有一個解釋?

[更新]謝謝大家的意見和解答。 我試圖編寫一個單獨的測試內核來查看這種行爲是否可重複。事實並非如此。 我發現一篇文章Is private memory slower than local memory? 提到過度使用私有內存可能會導致溢出到全局內存,因此可能會減慢內核執行速度。看起來這可能是特定於nVidia卡,我不知道AMD卡上會發生什麼。 難道是本地內存的分配突然導致私有內存溢出爲本地內存騰出空間?我現在正在從這個角度看待我的實施,除非你們中的任何人有其他建議。 是否有任何文檔或書籍提及您可能會意識到的內容?

再次感謝。

+0

您如何使用全局內存?你如何設置你的工作組來共享本地內存?你在使用MEM_FENCE命令嗎?你是否意外編碼了內核,以便所有線程都將全局複製到本地而不是一個工作項從全局移動到本地一個值? – Austin

+0

@奧斯汀,在這一點上我的問題是不使用本地內存,雖然我可能需要在稍後階段的幫助。它更多的是創建本地內存緩衝區並看到緩慢下降(我的問題中的第二段)。在我的實驗中,我只使用了全局內存,並沒有以任何方式引用本地內存。我通過傳遞內核參數來創建本地內存緩衝區,並且通過這樣做,內核需要兩倍的時間。你見過這樣的行爲嗎?有沒有解釋爲什麼?謝謝。 – user3371762

+0

您使用的硬件是什麼?您使用的是本地工作大小?使用本地內存可能會減少可以計劃到計算單元的工作組數量,因爲它們都必須適合可用的本地內存。 – chippies

回答

0

可能會通過使用非最佳尺寸的本地工作組或WG中的WI同步來施加性能影響。

讀入本地內存本身並不會引入任何性能問題 - 它與讀入私有內存(都放在芯片上)具有相同的速度。

此外,請檢查您的數據是否適合本地內存大小,因爲它通常具有較小的大小。

+0

那麼如何確定最佳尺寸?它只是對兩件或幾件東西的力量? – user3371762

+0

這取決於硬件架構。通常,gpu是包含流處理器(ALU)的簇的組合。這種處理器或多個處理器的數量是最佳的 - WI將在同一塊芯片上共享資源。對於AMD卡的最佳尺寸是WLIV架構的64倍 –