什麼是最快的x86彙編代碼來同步對內存中數組的訪問?最快的x86彙編代碼來同步對數組的訪問?
更確切地說:我們在內存中有一個malloc化的連續單頁區域,操作系統在我們的實驗期間不會調出這個區域。一個線程將寫入數組,一個線程將從數組中讀取。陣列很小,但比你的cpu的原子寫入能力還要大(這樣就需要一個單獨的鎖)
「最快」:有效速度:不只是假設字節碼的長度很重要,考慮到關於周圍代碼的鎖定和分支行爲的緩存行爲。
它具有上的x86-32和/或工作的x86-64
它必須在最上層的(或後代)工作的Windows XP以來,Linux的內核以來2.2,或MAXOS X(用戶-模式)。
請不要「它取決於」 - 迴應:如果它取決於我在這裏沒有指定的任何東西,只需編寫自己的示例並說明在那些/那些情況下最快的。
郵政編碼! (這是爲了防止模糊的描述)
郵政不僅是你的2線LOCK
+ CMPXCHG
比較&交換,但我們展示你如何在一個線程讀取指令和其他寫指令整合它。
如果您喜歡,請解釋您對緩存最優化的調整,以及如果分支目標依賴於(1)是否獲取鎖定(2)較大的第一個字節-read是。
如果您喜歡區分多重處理和任務切換:如果線程不是在2 cpus上執行,而是隻保留一個,您的代碼將如何執行?
@Ken白:哈哈好笑。或者你是認真的?如果是這樣的話:看看我使用的術語和我已經回答的問題。 – 2011-03-12 16:54:10
@Ken - 我會對把這種類型的問題作爲家庭作業的學校非常感興趣。 – linuxuser27 2011-03-12 16:55:38
@eznme,我讀了使用的術語。它看起來像直接從教科書中出來的東西。 「不僅僅是發佈你的2線......而是展示」。沒有任何意圖 - 它看起來並不像一個典型的問題所包含的東西。 @ linuxuser27,你看過MIT或RIT的任何高級課程嗎? – 2011-03-12 17:00:48