2012-02-02 99 views
2

我想問一下在CUDA中寫入全局內存的效果。衆所周知,全局內存讀取通常會對性能產生很大影響(合併,緩存,存儲體衝突),因爲它們可能需要相當多的週期來等待傳入的內存,這可能會暫時阻止執行。在CUDA中寫入全局內存

但是,在CUDA中寫入內存怎麼樣?它是否遭受任何類型的內存寫入模式?總成本是否直接是內核中所有寫入的總和?

任何相關的參考文獻和意見,將不勝感激。

+4

這正是那種使用實驗程序探索會很有趣的問題。您可以編寫基本的OpenCL或CUDA程序,以各種模式執行數百萬次的讀寫操作。在循環中反覆運行測試,並查看平均得到的結果。這可能是學習每個API的無聊部分來引導的好方法。 – James 2012-02-02 05:56:20

+0

感謝詹姆斯的評論! – Zk1001 2012-02-04 10:50:02

回答

2

一般來說,您的問題的答案是「是」,商店類似於負載。不同之處在於,由於商店是「火併且遺忘」的,如果有工作要做並不取決於存儲的地址,那麼在發佈商店之後,多處理器可以立即運行該商店,並且只有當遇到讀寫後依賴性。

有關完整的詳細信息,我建議閱讀最新CUDA programming guide的5.3.2節。

有關不同架構系列的具體信息,另請參閱該文檔的附錄F.例如,計算能力1.x比計算能力2.x(費米)設備具有更多的性能「懸崖」。

+0

感謝您的回答。我意識到這個理論的大部分可以通過微觀基準來證實。然而,當費米來到現場時,很少有事情會變得混亂。我注意到在費米之前,有記憶合併的性能計數器,但現在它們已經消失了!這背後有什麼理由嗎?我不認爲記憶合併對Fermi完全沒有影響(對於讀寫),而是它的概念由於緩存的貢獻而變得複雜。所以,我的猜測,這就是NVIDIA爲什麼要移除這些計數器。任何人都有這個想法嗎? – Zk1001 2012-02-04 10:59:27

+0

是的,這是正確的。計數器被緩存命中/未命中計數器替換。最新的可視化剖析器版本(4.1)通過從計數器中構建有用的指標而非顯示原始計數器數據,可以更輕鬆地解釋這些數據。在Fermi上,這取決於獲取的緩存行數量,而不是合併的內存段數量。 – harrism 2012-02-06 00:24:28