2013-11-21 46 views
1

我幾乎沒有關於C++編程的問題。我想知道是否有可能以異步方式(順序代碼)在內存中寫入?但讓我明確我的問題。 我正在尋找一種算法的改進,似乎我的代碼的瓶頸寫入內存。我想寫在內存中,仍然繼續計算。一個處理器可以這樣做嗎?就像使用ALU並使用寫入塊一樣?知道,我沒有在下一次計算中使用結果。它被寫入向量結果。C++:異步寫內存

謝謝您花時間回覆,無論是閱讀。

+0

您的瓶頸不寫入內存。它要麼以錯誤的方式加載內存頁面,要麼只是一個長時間的同步循環,只需花費時間就可以遍歷整個範圍。 –

+0

您是否嘗試過使用叉子? – JoeC

+0

如果您對現代處理器在低級別上的實際操作感興趣,我建議您選擇Hennesey和Patterson等計算機體系結構教科書。現代處理器已經非常「無序」了。 –

回答

0

是的,沒有。編譯器將優化內存寫入,以便您的處理器可以在寫入內存塊時執行任務。這是延遲隱藏的一種形式。這是「是」的答案。

「不」部分是,不幸的是,從代碼的角度來看,我們不能用單個線程來做到這一點。

輸入/輸出是許多程序中的瓶頸,所以它只是您必須優化和處理的問題。

+0

我已經使用繞過緩存內在函數來優化寫入內存過程,但它就像我覺得我可以做更多的事情。但也許這只是純粹的幻想。無論如何感謝您的回答 – user3018144

+0

@ user3018144:不客氣。如果您想粘貼您的代碼或算法,我們可能會提供更多幫助。此外,代碼審查http://codereview.stackexchange.com/上的人員活着進行代碼優化,因此您可能還想在其中發佈代碼。 – AndyG

+0

感謝您的建議,我會將其發佈到網站上。 – user3018144

0

這不是C++或其他任何問題,它只是一個CPU支持問題:如果底層硬件無法支持它,C++不能爲您提供這樣的功能。

x86指令提供了沒有這樣的設施,但AFAIK較新的PPC版本。如果你想遵循硬件路線,你應該首先檢查你當前使用的硬件:內存延遲與不同的x86 CPU差別很大。

+0

我想知道是否有可能在C++下做這樣的事情。但好的,謝謝你的回答。 – user3018144

0

您可以優化內存寫入。

  1. 壓縮您編寫的數據以節省內存帶寬。
  2. 本地寫入 - 連接到一個連續內存塊以更有效地使用處理器的寫入緩衝區。
  3. 從一個線程寫入,以防止錯誤分享。
  4. 也許__builtin_prefetch可以在這裏幫助,但我不確定。