第3章 CPU微架構

3.1 指令集架構

指令集ISA是軟件用來與硬件通信的詞匯集合,定義了軟件和硬件之間的通信協議。Intel x86、ARM v8、RISC-V是當今廣泛使用指令集架構的實例。ISA開發者通常要確保符合規范的軟件或固件能在使用該規范構建的任何處理器上執行。廣泛部署的ISA組織通常還要保證向后兼容性以便第X代版本處理器編寫的代碼能夠繼續在第X+i代上運行。

除了提供標量訪存、標量計算和控制指令之外,廣泛部署的架構還在繼續增強其ISA以支持新的計算范式,包括增強的向量處理指令和矩陣/張量指令。

隨著深度學習領域的快速發展,業界對其他數字格式變量驅動的顯著性能提升重新產生了興趣。研究表明,在使用更少的位來表示變量、節省算力和內存帶寬方面,深度學習模型表現同樣出色。

3.2 流水線

流水線是加快CPU速度的基礎技術,其中多條指令在執行過程中可以重疊。簡單5段流水線:取指、譯碼、執行、訪存、寫回。(寄存器重命名、發射、去操作數、提交)

很多現代CPU都是深度流水線化的。流水線的吞吐量定義為單位時間內完成和退出流水線的指令數。任何給定指令的延遲是指經過流水線所有階段的總時間。將指令從一個階段移動到另一個階段所需的時間定義為CPU的基本時鐘周期或時鐘。流水線運行的時鐘周期數通常由流水線最慢的階段決定。理想流水線中每條指令的執行時間由下式給出:
? ? ? ? 流水化中每條指令的執行時間=非流水情況/流水階段數

實際實現中的流水線會引入幾個約束:結構冒險、數據冒險和控制冒險。幸運的是,程序員不需要應對流水線冒險,在現代CPU中所有類別的冒險都是由硬件控制的。

結構冒險由資源沖突引起,可以通過復制硬件資源(多端口寄存器)來消除,代價是硅面積和功耗方面的成本會很高昂。

數據冒險中WAW和WAR可以通過寄存器重命名來避免,RAW可以通過旁路網絡來減輕損失。

控制冒險由程序執行流程的變化而導致的。它們產生于流水線分支指令和其他更改程序流程的指令。決定分支方向的分支條件在流水線的EXE階段才能見分曉。因此,除非消除控制冒險,否則下一條指令的獲取不能被流水線化。不過可以用動態分支預測和投機執行來克服該冒險。

3.3 利用指令級并行

因為程序中大多數指令是獨立的,所以都適合流水線化和并行執行。

3.3.1 亂序執行

亂序執行主要用于避免因為依賴而引起的流水線停頓。指令的動態調度是通過復雜的硬件結構(記分板)和諸如寄存器重命名之類的技術實現的。記分板的大小決定了硬件在調度此類獨立指令時可以提前多長時間進行。

3.3.2 超標量引擎和超長指令字

目前CPU的典型發射寬度為2~6。為了保證恰當的平衡,這種超標量引擎還支持多個執行單元和流水線執行單元。CPU的多發射功能與深度流水線和亂序執行功能相結合,以獲取軟件給定片段的最大ILP。

Intel Itanium等架構使用VLIW,將調度超標量和多執行單元處理器的負擔從硬件轉移到編譯器。基本原理在于要求編譯器選擇正確的指令組合使得機器被充分利用,從而簡化硬件。因為硬件受制于指令窗口長度的限制,而編譯器可以獲取全局信息。

3.3.3 投機執行

如果指令在分支條件得到確定之前停頓,控制冒險可能會導致流水線中顯著的性能損失。硬件分支預測邏輯是一種避免這種性能損失的技術。

在條件結果得以明確之前,無法提交對機器狀態的修改,以確保機器的架構狀態永遠不受投機執行指令的影響。當預測錯誤時,投機執行的結果必須被制止和丟棄,即分支預測錯誤懲罰。

3.4 利用線程級并行

硬件多線程CPU支持專用硬件資源以獨立地跟蹤CPU中每個線程的狀態,目的是線程由于長時延活動(如內存引用)而被阻塞時,以最小的延遲從一個上下文切換到另一個上下文(不會產生保存和恢復線程上下文的成本)。

同步多線程SMT將指令級并行技術和多線程技術相結合,以最大限度地利用硬件資源。來自多個線程的指令在同一時間周期內執行。為了支持SMT,CPU必須復制硬件來存儲線程狀態(程序計數器、寄存器等),跟蹤亂序執行和投機執行的資源可以在線程間復制或分段共享。

3.5 存儲器層次

CPU存儲器層次劃分基于兩個基本特性:時間和空間局部性。

3.5.1 高速緩存層次

高速緩存時CPU流水線發出訪存時的存儲器層次中的第一級。理想情況下,流水線在具有最小訪問延遲和無限容量緩存時表現最佳。實際上高速緩存訪問時間隨其容量的增加而增加。因此,高速緩存被組織為最接近執行單元的小型快速存儲塊的層次結構,且由更大、更慢的塊進行備份。

高速緩存由多個確定大小的塊(緩存行)組成,典型大小為64字節。L1大小通常在8KB~32KB,而LLC大小通常在64KB~16MB。任何層級的高速緩存的架構都可以由以下4個屬性定義:
3.5.1.1 高速緩存中數據的放置

內存訪問請求中的地址可以用來訪問高速緩存。在直接映射中,內存塊的地址只能出現在高速緩存中的一個位置。在全相聯中,給定的緩存塊可以放在高速緩存的任何位置。在組相聯中,給定地址首先映射到一個組中,該地址可以映射在組中的任何位置。

3.5.1.2 在高速緩存中查找數據

????????????????????????????????????????address:標簽 索引 塊偏移量

地址中的最低順序位定義了塊內偏移量,組則是基于索引位來選擇,一旦組被選定,就可以使用標簽位來與該組中的所有標簽進行比較。如果其中一個標簽與傳入請求的標簽匹配并且設施了有效位,則緩存命中。與該塊條目相關聯的數據被提供給流水線。如果不匹配,則緩存未命中。

3.5.1.3 管理緩存未命中

當發生高速未命中,控制器必須在緩存中選擇要替換的塊,以分配給導致緩存未命中的地址。直接映射只能分配一個位置,組相連可以分配組內任何位置,全相聯可以分配所有位置。不過組相連和全相連一般會使用LRU策略來釋放緩存塊,為未命中地址騰出緩存空間。

3.5.1.4 管理寫操作

CPU設計使用2種基本機制來處理高速緩存中的緩存命中寫入操作:
? ? ? ? 1. 寫直達:命中的數據同時寫入緩存塊和層次結構中較低的層級。
? ? ? ? 2. 寫回:命中的數據只寫入緩存。因此層次結構較低層級中就會包含過期數據,修改后的緩存行的狀態通過標簽中的臟標識來追蹤。當修改后的緩存行最終被從緩存行中驅逐時,寫回操作會強制將緩存行寫回層次結構的較低層級中。

寫入操作時的高速緩存未命中可以通過2種方式處理:
? ? ? ? 1. 寫分配:未命中位置的數據從層次結構中較低層級加載到高速緩存中,隨后像寫入命中情況一樣處理剩余寫入操作。
? ? ? ? 2. 寫不分配:未命中事務直接被發送到層次結構中所有的較低層級,并且緩存塊不會被加載到高速緩存中。

大多數設計寫分配+寫回,寫不分配+寫直達策略。

3.5.1.5 其他高速緩存優化技術

從流水線的角度來說,任何訪問請求的延遲都可以由以下公式計算出來:
? ? ? ? 平均延遲 = 命中時間 + 未命中比例 * 未命中時間;

未命中比例高度依賴緩存的架構(塊大小、關聯性)以及運行在機器上的軟件。

硬件和軟件預取:減少緩存未命中以及后續停頓的方法之一,先于流水線需要將指令和數據預取到高速緩存層次的不同層級。

硬件預取器觀察正在運行的應用程序的行為,并基于重復的高速緩存未命中規律啟動預取。硬件預取技術可以自動適應程序行為,并且不需要優化編譯器或者剖析功能的支持。另外,硬件預取也不會有額外的地址生成和指令預取開銷。

軟件預取是對硬件預取的補充,開發者可以通過特定的硬件指令提前指定需要的內存位置。編譯器還可以自動將預取指令添加到代碼中。預取技術需要平衡實際需求和預取請求,以避免預取流量擠壓實際需求流量。

3.5.2 主存

主存使用大容量且成本合適的DRAM技術,主要屬性定義為延遲、帶寬和容量。延遲包括2部分,內存訪問時間和內存周期時間。
內存訪問時間:請求到數據可用時所消耗的時間。
內存周期時間:兩個連續的內存訪問之間所需的最短時間。

歷史上,DRAM帶寬每一代都得到提升,而延遲保持不變,甚至更高。

新的DRAM技術,GDDR和HBM在需要更大更寬的定制處理器上使用,所以不被DDR接口支持。

現代CPU支持多個獨立通道的DRAM。一般而言,每一個內存通道的寬度是32位或者64位。

3.6 虛擬內存

虛擬內存是讓所有運行在CPU上的進程可以共享屬于該CPU的物理內存的機制。虛擬內存提供一種保護機制,可以限制其他進程對分配給指定進程內存的訪問。虛擬內存還提供重定位機制,即能將程序加載到物理內存的任意位置而無需改變程序內尋址方式。

虛擬地址由提供虛擬地址和物理地址之間映射的專用硬件表翻譯成物理地址,這些表被稱為頁表。

????????????????????????????????虛擬地址:虛擬頁編號?頁偏移量

其中虛擬頁編號通過頁表被轉換為物理地址。如果請求的頁不在主存內,則會導致缺頁問題。

CPU通常使用層級結構的頁表格式將虛擬地址位有效地映射到可用的物理內存,缺點是缺頁代價很高,需要遍歷整個層級結構。為了減少地址翻譯時間,CPU支持TLB的硬件結構來緩存最近使用過的翻譯。

3.7 SIMD多處理器

向量和矩陣計算都非常適合SIMD架構,因為向量或矩陣的每個元素都需要使用相同的指令進行處理。SIMD多處理器主要用于數據并行并且只需要少量功能和操作的特殊用途任務。MMX-SSE-AVX。

起初,新的SIMD指令以匯編的方式編程。后來,引入了特殊的編譯器內建函數。

3.9 性能監控單元

現代CPU包含性能檢測單元PMU,PMU有一組性能監控計數器PMC,用以收集程序運行過程中發生的各種性能事件。

PMU提供固定功能計數器以及可編程計數器。固定功能計數器總是測量CPU核內的同一事件,而可編程計數器由用戶來選擇想要測量的事件。通常,每個邏輯核有4個可編程計數器和3個固定功能計數器。固定功能通常被設置為計算核時鐘、參考時鐘和退休指令。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42290.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42290.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42290.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

20W IP網絡吸頂喇叭 POE供電吸頂喇叭

SV-29852T 20W IP網絡吸頂喇叭產品簡介 產品用途: ◆室內豪華型吸頂喇叭一體化網絡音頻解碼揚聲器,用于廣播分區音頻解碼、聲音還原作用 ◆應用場地如火車站、地鐵、教堂、工廠、倉庫、公園停車場等;室內使用效果均佳。 產品特點&#xff…

vue-router中的一些 API

在Vue.js的vue-router中,一些重要api 1、RouterHistory:這是 vue-router 提供的路由歷史記錄對象。它可以跟蹤當前頁面的路由歷史,并提供一些方法和屬性來管理導航和歷史記錄。在 vue-router 中,有兩種類型的路由歷史記錄對象&…

pytorch_lightning報錯 You requested gpu: [1],But your machine only has: [0]

pytorch_lightning報錯 You requested gpu: [1],But your machine only has: [0] 問題及分析 報錯圖片如下: 分析 gpu:[1]指代的gpu的標號,如果筆記本中只包含一個GPU,一般序號為[0].所以無法找到程序指定的GPU。 解決方法 …

機器學習之邏輯回歸

import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression # 獲得數據 names[Sample code number,Clump Thickness,Uniformity…

編程語言學習筆記-架構師和工程師的區別,PHP架構師之路

🏆作者簡介,黑夜開發者,全棧領域新星創作者?,CSDN博客專家,阿里云社區專家博主,2023年6月CSDN上海賽道top4。 🏆數年電商行業從業經驗,歷任核心研發工程師,項目技術負責…

Egg.js構建一個stream流式接口服務

經常需要用到 stream 流式接口服務,比如:大文件下載、日志實時輸出等等。本文將介紹如何使用Egg.js構建一個 stream 流式接口服務。 一、準備工作 目錄結構: app//controllerindex.jstest.txttest.shindex.js 控制器test.txt 測試文件,最好…

5G+AI數字化智能工廠建設解決方案PPT

導讀:原文《5GAI數字化智能工廠建設解決方案》(獲取來源見文尾),本文精選其中精華及架構部分,邏輯清晰、內容完整,為快速形成售前方案提供參考。數字化智能工廠定義 智能基礎架構協同框架 - 端、邊、云、網…

激光雷達 01 線數

一、線數 對于 360 旋轉式和一維轉鏡式架構的激光雷達來說,有幾組激光收發模塊,垂直方向上就有幾條線,被稱為線數。這種情況下,線數就等同于激光雷達內部激光器的數量[參考]。 通俗來講,線數越高,激光器的…

npm run xxx 的時候發生了什么?(以npm run dev舉例說明)

文章目錄 一、去package.json尋找scripts對應的命令二、去node_modules尋找vue-cli-service三、從package-lock.json獲取.bin的軟鏈接1. bin目錄下的那些軟連接存在于項目最外層的package-lock.json文件中。2.vue-cli-service文件的作用3.npm install 的作用 總結 一、去packag…

Google API實戰與操作

Google api實戰與操作 一. Google API 權限配置二. 操作API2.1 引入依賴2.2 導入代碼 Google官網 實現一套用java程序控制GoogleAPI實現自動生成監控日報等功能,具體能操作Gsheet及document 一. Google API 權限配置 打開上面官網,新建項目 啟用API 搜索sheet及document …

【山河送書第七期】:《強化學習:原理與Python實戰》揭秘大模型核心技術RLHF!

《強化學習:原理與Python實戰》揭秘大模型核心技術RLHF! 一圖書簡介二RLHF是什么?三RLHF適用于哪些任務?四RLHF和其他構造獎勵模型的方法相比有何優劣?五什么樣的人類反饋才是好反饋?六如何減小人類反饋帶來…

LVGL圖層的介紹

一.UI界面顯示的圖層 在lvgl開發的過程中,UI界面的顯示都是位于lv_sct_act()圖層 二.彈窗顯示 lvgl開發過程中,有些窗口有可能在任何時候顯示,比如錯誤信息彈窗,外部觸發的一些中斷。 這個時候,這些窗口不能建立在lv_s…

web前端開發基礎入門html5+css3+js學習筆記(一)

目錄 1.第一個前端程序2.前端工具的選擇與安裝3.VSCode開發者工具快捷鍵4.HTML5簡介與基礎骨架4.1 HTML5的DOCTYPE聲明4.2 HTML5基本骨架4.2.1 html標簽4.2.2 head標簽4.2.3 body標簽4.2.4 title標簽4.2.5 meta標簽 5.標簽之標題5.1 快捷鍵5.1 標題標簽位置擺放 6.標簽之段落、…

LeetCode每日一題——2682. 找出轉圈游戲輸家

n 個朋友在玩游戲。這些朋友坐成一個圈&#xff0c;按 順時針方向 從 1 到 n 編號。從第 i 個朋友的位置開始順時針移動 1 步會到達第 (i 1) 個朋友的位置&#xff08;1 < i < n&#xff09;&#xff0c;而從第 n 個朋友的位置開始順時針移動 1 步會回到第 1 個朋友的位…

leetcode 377. 組合總和 Ⅳ

2023.8.17 本題屬于完全背包問題&#xff0c;乍一看和昨天那題 零錢兌換II 類似&#xff0c;但細看題目發現&#xff1a;今天這題是排列問題&#xff0c;而“零錢兌換II”是組合問題。排列問題強調順序&#xff0c;而組合順序不強調順序。 這里先說個結論&#xff1a;先遍歷物品…

并查集、樹狀數組

并查集、樹狀數組、線段樹 并查集樹狀數組樹狀數組1 (單點修改&#xff0c;區間查詢)樹狀數組2 (單點查詢&#xff0c;區間修改) 并查集 【模板】并查集 題目描述 如題&#xff0c;現在有一個并查集&#xff0c;你需要完成合并和查詢操作。 輸入格式 第一行包含兩個整數 …

Scala中的Either的用法

在 Scala 中&#xff0c;Either 是一種表示兩種可能值的數據類型。它可以用來處理函數可能返回的兩種不同類型的結果&#xff0c;通常用于錯誤處理或者結果分支情況。Either 有兩個子類&#xff1a;Left 和 Right&#xff0c;其中 Left 通常用于表示錯誤或異常情況&#xff0c;…

1.物聯網LWIP網絡,TCP/IP協議簇

一。TCP/IP協議簇 1.應用層&#xff1a;FTP&#xff0c;HTTP&#xff0c;Telent&#xff0c;DNS&#xff0c;RIP 2.傳輸層&#xff1a;TCP&#xff0c;UDP 3.網絡層&#xff1a;IPV4&#xff0c;IPV6&#xff0c;OSPF&#xff0c;EIGRP 4.數據鏈路層&#xff1a;Ethernet&#…

YOLOv5改進系列(21)——替換主干網絡之RepViT(清華 ICCV 2023|最新開源移動端ViT)

【YOLOv5改進系列】前期回顧: YOLOv5改進系列(0)——重要性能指標與訓練結果評價及分析 YOLOv5改進系列(1)——添加SE注意力機制 YOLOv5改進系列(2

兩階段提交:詳解數據庫宕機引起的主從不一致問題、redolog與binlog的兩階段提交

0、基礎知識and問題 從基礎上我們了解&#xff1a; &#xff08;1&#xff09;redolog作為數據庫保證持久化的日志&#xff0c;在update事務提交后就會按一定的策略刷入磁盤中&#xff0c;在刷入后&#xff0c;即使數據庫斷電宕機&#xff0c;mysql也能從redolog中恢復數據到磁…