獨立於架構的自旋等待迴圈

2021-08-27 10:58:49 字數 1125 閱讀 8176

由 jon kennedy. (intel), idzsupport k. 發布於 2018 年 4 月 26 日

翻譯簡體中文正體中文英語法語德語義大利語葡萄牙語俄語西班牙語土耳其語

翻譯為了充分利用當今多核處理器的功能,遊戲開發人員正使用更高階的任務處理系統使工作分散到執行緒池的多個執行緒之中。隨著執行緒數量的增加,諸如任務佇列鎖和其他共享資源結構上的執行緒之間發生爭用的可能性也會增加。有多種解決辦法,但是自旋等待迴圈是常見的結構。

1while(!acquire_lock())

2

9}

_mm_pause 指令在多數前幾代英特爾平台上擁有相似的延遲。由於存在這種歷史一致性,許多開發人員在調整自旋迴圈時會考慮到這一點。但是,從第六代智慧型英特爾® 酷睿™ i 處理器產品家族開始,pause 指令的延遲增加了多個數量級,旨在為許多場景提供更好的節能機會。

由於延遲發生了變化,以上固定數量的自旋迴圈將消耗比之前高乙個數量級的週期,這將對您的應用效能造成不利影響。為了避免未來的指令架構變動引起任何問題,對所有自旋等待迴圈進行檢查,以確保未使用固定數量的 pause 指令實施它們。可以對上述自旋等待迴圈進行以下適當修改:

01while(!acquire_lock())

02

12while((__rdtsc() - prev) < max_spin_time)

13}

儘管上述自旋等待迴圈非常簡單,軟體開發人員一般會使用更高階的自旋迴圈(支援指數退避等),但是它展示了如何使軟體變得更強大,以應對未來指令延遲的架構變動。

請參閱以下文章,進一步了解 _mm_pause 指令與自旋等待迴圈:有益於功耗與效能的睡眠迴圈

如欲獲取關於英特爾® 架構程式設計的更多資訊,請參閱以下軟體開發手冊:《64 位和 32 位英特爾®架構軟體開發人員手冊》

泛型演算法 獨立於容器的演算法

一 泛型演算法 簡介 1 所有標準庫容器都有支援遞增運算子 遞減運算子 這四種運算子的迭代器 string 和 vector 提供了更多的運算子 以及iter n,iter n,iter n,iter n,iter1 iter2 2 標準庫並未給每乙個容器都定義成員函式來實現排序 查詢 複製等操作,...

暢想 獨立於框架的Model集中驗證

在學asp.net mvc 中 用到了system.componentmodel.dataannotations 以特性的形式來給屬性加資料有效性限定,於是有了乙個想法,希望能夠寫乙個只依賴於model的驗證方式,在研究asp.net mvc 資料驗證的過程中,發現輸入值如果不能轉為了對應的屬性值,...

獨立開發 乙個社交 APP 的架構分享 已實現

本部落格為原創 前言 一 功能架構 二 移動端架構概述 三 服務端架構概述 一 功能架構 公共部分 使用者管理 登入 登入方式 帖子模組 瀏覽 按編輯 按型別 內容布局各不相同 我的作品,混排,瀑布流顯示 操作 文章模組 發布 相容 許可權 我的模組 使用者資訊 我的訊息模組 資料管理模組 帖子管理...