什麼是內存屏障?

從歷史上看,CPU 一直是完美的順序機器。這是高度合乎邏輯且易於理解的,但可能是一個性能問題。多年來,對 CPU 設計進行了許多巧妙的調整,以從矽晶圓中提取盡可能多的性能。不過,其中一個更有趣的是亂序執行。在亂序執行的 CPU 中,指令不一定需要按照它們發出的順序執行。

停滯不前

有序 CPU 遇到的主要性能問題稱為流水線停頓。當指令依賴於某些內存時會發生這種情況,但該內存不能直接在寄存器中使用。在這種情況下,CPU 必須在內存中找到該值。首先檢查 CPU 緩存,因為它們是最快的內存層。如果該值不存在,則會檢查系統 RAM。在此期間,CPU 必須處於空閒狀態,因為依賴於內存的指令必須在後續指令之前按順序完成。

流水線停頓對性能的影響可能不會那麼糟糕,但也可能相對嚴重。例如,L1 緩存通常可以在 5 個 CPU 週期的數量級返回結果。L2 緩存可能需要 20 個週期,L3 大約需要 200 個週期,而係統 RAM 大約需要 400 個週期。鑑於 CPU 可能以 5GHz 左右的頻率運行,即每秒 50 億個時鐘週期,即使 400 個週期也不錯 (0.000008%)。但是,如果您有許多指令需要進一步引用緩存層下的數據,累積效應可能會導致明顯的減速。

亂序執行和寄存器重命名

亂序執行是一種允許調度程序對其隊列中的指令重新排序的技術。通過這種重新排序,它可以選擇將特定線程優先於其他線程。當指令具有尚未滿足的數據依賴性時,它還可以將指令推回隊列中。這會盡可能地防止流水線停頓,從而最大限度地減少空閒週期。

亂序執行需要一種稱為寄存器重命名的功能。CPU 可以在一個週期內訪問保存在寄存器中的數據。寄存器用於存儲正在讀取和寫入的數據。然而,重要的是要確保整個計算機看到的一切都是按邏輯順序發生的,而不是以無序的、CPU 週期優化的順序發生的。為實現這一點,CPU 的邏輯寄存器比 CPU 架構要求的要多得多。

需要寫出但具有尚未完成的“較早”指令的數據被放置在保持寄存器中。當訂單自行解決時,此數據不會轉移到另一個寄存器。取而代之的是,暫存寄存器的名稱被更改為它應該在的寄存器的名稱。這有點類似於在主菜之前準備甜點,然後將其保存在冰箱中直到上菜為止。

這些邏輯寄存器完全沒有地址。CPU 只能真正尋址當前共享體系結構寄存器名稱的邏輯寄存器。也就是說,CPU 也足夠了解它們,如果其他重新排序的指令依賴於邏輯保持寄存器中的數據,它們可以使用它而不是在特定經驗時間架構寄存器中的“過時”數據。

記憶屏障

內存屏障(也稱為 membar、內存柵欄或柵欄指令)是計算機代碼中的一條指令。它允許程序員對內存屏障之前和之後發出的內存操作強制執行排序約束。內存屏障指示 CPU 調度程序確保在屏障之後的任何指令之前處理所有指令。這樣做是為了確保重要的操作以正確的順序完成。

通常,在現代計算機上,這不是必需的。亂序執行和註冊表重命名是成熟的領域。儘管如此,內存屏障對於較老的、不太複雜的、無序的處理器或用於關鍵內存操作可能會有幫助。

內存障礙可能會帶來一些性能損失。這是因為它們主動阻止 CPU 調度程序優化指令流的特定部分。這增加了流水線停頓的機會。

結論

內存屏障是確保對內存操作的排序約束的指令。這很重要,因為亂序執行處理器可能會對特定指令重新排序。雖然註冊表重命名已作為一種確保此環境中內存完整性的方法得到廣泛認可,但手動確保它可能會有所幫助。

內存屏障強制 CPU 調度程序確保指令在屏障之後的任何指令之前完成。這可以防止內存操作被重新排序。它還會阻止 CPU 優化指令流,這會影響性能。



Leave a Comment

如果 Powerbeats Pro 无法在充电盒中充电,该怎么办

如果 Powerbeats Pro 无法在充电盒中充电,该怎么办

如果您的 Powerbeats Pro 无法充电,请使用其他电源并清洁耳塞。充电时请保持充电盒打开。

3D打印基础知识:必读的维护清单

3D打印基础知识:必读的维护清单

保持设备良好的状态是必须的。以下是一些有用的提示,可以帮助您保持您的3D打印机处于最佳状态。

佳能 Pixma MG5220:无需墨水扫描

佳能 Pixma MG5220:无需墨水扫描

当佳能 Pixma MG5220 没有墨水时,如何启用扫描功能。

笔记本电脑过热的5个原因

笔记本电脑过热的5个原因

了解笔记本电脑过热的一些可能原因,以及避免这个问题和保持设备冷却的小贴士和技巧。

如何修复GeForce Now错误代码0xC272008F

如何修复GeForce Now错误代码0xC272008F

您正在为一晚的游戏做准备——这是一次重要的体验——您刚刚在GeForce Now流媒体服务上购买了“星球大战:外部法则”。了解唯一已知的解决方法,教您如何修复GeForce Now错误代码0xC272008F,以便您可以再次开始玩育碧游戏。

3D打印基础:您的3D打印机维护提示

3D打印基础:您的3D打印机维护提示

保持3D打印机的良好状态对于获得最佳效果非常重要。这里有一些重要的维护提示。

如何找到打印机的IP地址

如何找到打印机的IP地址

找不到你的打印机使用的IP地址吗?我们将向您展示如何找到它。

如何在三星手机上使用AirPods

如何在三星手机上使用AirPods

如果您不确定是否应该为您的三星手机购买AirPods,这篇指南可以帮助您。最明显的问题是这两者是否兼容,答案是:是的,它们是兼容的!

什麼是 WPS?它是如何工作的?

什麼是 WPS?它是如何工作的?

通過此詳細教程了解 WPS 的全部內容,學習如何簡單安全地連接無線網絡。

LinkedIn:如何防止其他人知道您看到了他們的個人資料

LinkedIn:如何防止其他人知道您看到了他們的個人資料

了解如何使用LinkedIn的私人模式,防止其他人知道您查看了他們的個人資料。這裡有不同的解決方案,以確保您的隱私。