2010-01-28 56 views
2

我正在設計一個程序,我發現假設隱式高速緩存一致性使設計變得更容易。例如,我的單個作者(總是相同的線程)多個讀者(總是其他線程)的情況下不使用任何互斥體。您是否期望未來的CPU代不會緩存一致?

這對目前的英特爾CPU來說不是問題。但是我希望這個程序至少在未來十年內(軟件的短時間內)能產生收益,所以我想知道你是否認爲這可能是未來cpu架構的一個問題。

+2

什麼時候無論你的作家要更新情況不能自動完成的? – 2010-01-28 01:42:23

+0

在這種情況下,我使用互斥操作,或者將工作線程發送到信號處理程序,更新並讓它繼續(是的,我知道這很髒,但性能提高很多)。 – Lothar 2010-01-28 01:47:13

回答

3

我懷疑未來的CPU世代仍然會爲您處理緩存一致性問題。沒有這些,大多數主流編程方法將會失敗。我懷疑任何將在未來十年內廣泛使用的CPU架構將使當前的編程模型無效 - 它可能會擴展它,但很難放棄如此廣泛的假設。這就是說,假設隱式緩存一致性編程並不總是一個好主意。 false sharing有許多問題,如果您有意識地隔離數據,可以輕鬆避免。正確處理這些問題可能會導致當前CPU產生巨大的性能提升(而不是巨大的性能損失)。當然,這是設計中的更多工作,但它通常是必需的。

0

您正在發出奇怪的請求。你正在問我們的我們的(SO社區)假設關於未來的CPU架構 - 一個非常危險的命題。你是否願意把你的錢放在我們的口?因爲如果我們錯了,你的應用程序將失敗,它會是你誰沒有賺錢..

無論如何,我會懷疑事情不會因爲所有遺留代碼寫入單線程執行,但這只是我的看法。

+0

也許有人更接近英特爾,ARM或SPARC的研究實驗室和論文,那麼我知道一些我從未見過的東西。如果目前沒有人在爲之工作,那麼僅僅10年就不會爲主流做好準備。 – Lothar 2010-01-28 01:55:21

1

我本身並不知道。但我希望看到非緩存相干模式的趨勢。

概念思維轉換很重要(不能只是在方法調用中傳遞數據,必須通過隊列傳遞給異步方法),但是隨着我們越來越多地進入多核世界,它是必需的。每個內存組越接近每個處理器越好。因爲那時我們正在一個網絡信息路由的世界裏工作,在這個世界裏,數據只是不可用,而不是擁有可以沉默地跺腳數據的線程。但是,正如Reed Copsey所指出的那樣,整個x86計算機世界都是建立在緩存一致性的基礎之上的(它甚至比微軟的市場份額還要大)。所以它不會很快消失!

+0

可伸縮性真正需要什麼?恕我直言是一種混合方法,例如,四組八個內核,每組內核強制執行一致性,但組本身不一致。至多有八個內核能夠在一個子任務上進行協作,但是在大多數CPU密集型任務中,可以將其劃分爲足夠多的不同子任務以保持所有組的繁忙。 – supercat 2013-12-10 18:28:32

3

我們已經在那裏。計算機聲稱緩存一致性,但同時它們有一個用於寫入的臨時存儲緩衝區,可以通過此緩衝區而不是緩存完成讀取(即,存儲緩衝區剛剛變爲非連貫緩存),並且無效請求也排隊等待處理器暫時使用它知道已過時的緩存行。

X86不使用這些技術中的很多,但它確實使用了一些。只要內存保持速度比CPU慢得多,期望看到更多的這些技術,而其他設計則可以使用。即使是itanium,它仍然使用了許多這樣的想法,所以希望intel隨着時間的推移將它們遷移到x86中。

至於避免鎖等問題,通常很難在互聯網上看到人們的專業水平,所以要麼你誤導了你認爲可能的工作,要麼你處於無鎖定編程的前沿。很難說。

您是否瞭解MESI協議,內存障礙和可見性?你讀過Paul McKenney等人的東西嗎?

0

這個問題似乎誤導了我。 CPU體系結構並不重要,重要的是您正在爲之工作的平臺的內存模型。

您正在開發的應用程序是一些環境,具有一些定義的內存模型。例如。如果您當前的目標是x86,那麼您可以確定任何未來的平臺在運行x86代碼時都會實現相同的內存模型。 Java或.NET虛擬機和其他執行平臺也是如此。

如果您希望在其他平臺上移植您的當前應用程序,如果平臺內存模型會有所不同,您將不得不對其進行調整,但在這種情況下,您是做端口的人,並且您已經完成了控制你如何做到這一點。然而,即使對於目前的平臺,這也是如此。 PowerPC內存模型允許比x86更多的重新排序。

相關問題