處理器架構和配置

来源:https://www.cnblogs.com/hubert-style/archive/2023/12/18/17911447.html
-Advertisement-
Play Games

成功之前我們要做應該做的事情,成功之後我們才可以做喜歡做的事情。 1. 處理器架構 CPU 架構是 CPU 廠商給屬於同一系列的 CPU 產品定的一個規範,主要目的是為了區分不同類型 CPU 的重要標示。市面上的 CPU 分類主要分有兩大陣營,一個是 intel、AMD 為首的 複雜指令集 CPU, ...


成功之前我們要做應該做的事情,成功之後我們才可以做喜歡做的事情。

CPU 架構

1. 處理器架構

CPU 架構是 CPU 廠商給屬於同一系列的 CPU 產品定的一個規範,主要目的是為了區分不同類型 CPU 的重要標示。市面上的 CPU 分類主要分有兩大陣營,一個是 intelAMD 為首的 複雜指令集 CPU,另一個是以 IBMARM 為首的 精簡指令集 CPU。兩個不同品牌的 CPU,其產品的架構也不相同,例如,Intel、AMD 的 CPU 是 X86架構 的,而 IBM 公司的 CPU是 PowerPC 架構,ARM 公司是 ARM 架構

從 CPU 發明到現在,有非常多種架構,從我們熟悉的 X86、ARM,到不太熟悉的MIPS、IA64,它們之間的差距都非常大。但是如果從最基本的邏輯角度來分類的話,它們可以被分為兩大類,即所謂的“複雜指令集”與“精簡指令集”系統,也就是經常看到的“CISC”與“RISC”

中央處理單元(CPU)主要由運算器、控制器、寄存器三部分組成,從字面意思看運算器就是起著運算的作用,控制器就是負責發出 CPU 每條指令所需要的信息,寄存器就是保存運算或者指令的一些臨時文件,這樣可以保證更高的速度。CPU 有著處理指令、執行操作、控制時間、處理數據四大作用,打個比喻來說,CPU 就像我們的大腦,幫我們完成各種各樣的生理活動。因此如果沒有 CPU,那麼電腦就是一堆廢物,無法工作。移動設備其實很複雜,這些 CPU 需要執行數以百萬計的指示,才能使它向我們期待的方向運行,而 CPU 的速度和功率效率是至關重要的。速度影響用戶體驗,而效率影響電池壽命。最完美的移動設備是高性能和低功耗相結合。

在計算世界中,“體繫結構”一詞被用來描述一個抽象的機器,而不是一個具體的機器實現。一般而言,一個 CPU 的體繫結構有一個指令集加上一些寄存器而組成。

2. 指令集

電腦指令就是指揮機器工作的指示和命令,程式就是一系列按一定順序排列的指令,執行程式的過程就是電腦的工作過程。指令集,就是 CPU 中用來計算和控制電腦系統的一套指令的集合,而每一種新型的 CPU 在設計時就規定了一系列與其他硬體電路相配合的指令系統。而指令集的先進與否,也關係到 CPU 的性能發揮,它也是 CPU 性能體現的一個重要標誌。指令的強弱也是 CPU 的重要指標,指令集是提高微處理器效率的最有效的工具之一。

直觀的解釋指令集主要是指 CPU 硬體和軟體之間的介面描述,它本質上是一段二進位機器碼,CPU 只能識別機器碼,但是機器碼是一串無意義的字元串,程式員很難看看懂這些語句,用它來開發軟體,所以後面就發明瞭彙編語言,彙編語言本質上跟機器碼一一對應的,現在有很多不同版本的彙編語言,本質上就是有不同的指令集,指令集可以簡單的分為複雜指令集和精簡指令集。

指令集架構是電腦體系架構的一部分。指令集是一個很虛的東西,是一個標準規範。例如我們的交通規則,紅燈停、綠燈行、黃燈亮了等—等,只有行人和司機都去遵守這套交通規則我們的交通系統才能有條不紊地運行下去。指令集也一樣,晶元工程師在設計 CPU 時也要以指令集中規定的指令格式為標準實現不同的解碼電路來支持指令集各種指令的運行。指令集最終的實現就是微架構,就是CPU 內部的各種解碼和執行電路。

編譯器廠商在研發編譯器工具或 IDE 時,也要以指令集為標准將我們編寫的 C 語言高級程式轉換為指令集中規定的各種機器指令。為什麼我們編寫的高級程式經過編譯後可以直接在 CPU 上運行呢?就是因為 CPU 設計者和編譯器開發者遵循的是同一個指令集標準,“編譯器最終編譯生成的指令”都是 CPU 硬體電路支持運行的指令,每一種不同架構的 CPU 一般都需要配套一個對應的編譯器。

指令集作為 CPU 和編譯器的設計規範和參考標準主要用來定義指令的各種操作、操作數的類型、寄存器的分配、地址的格式等。

指令集也不是—成不變的也會隨著應用需求的推動不斷迭代更新,不斷擴充新的指令。例如 ARM 指令集從最初的 ARMv1 發展到目前的 ARMv9,一直在不斷地發展不斷添加新的指令。

3. 架構和指令集關係?

架構主要是指某一個處理器所使用的具體指令集,比如說 m6ull,他是基於ArmV7 架構的,就是指它是使用 armV7 指令集,在大部分場合,架構等於指令集。

CPU 的硬體結構,即架構,一旦確定,那麼使用該架構的 CPU 能實現的功能大體上是一樣的,而且去實現該功能的指令集也大體上一樣的。

設計 CPU 架構即決定了指令集,如 X86 指令集,是因為該 CPU 採用了 X86 結構,所以才叫 X86 指令集;指令集是指某種架構 CPU 能實現的所有功能,這些功能對應的代碼編號構成指令集;代碼編號應該就是指機器碼這種底層代碼,某種架構 CPU 架構確定後,代碼編號就確定了,這些編號反映了 CPU 以什麼樣的方式去執行某些功能,決定了硬體的執行方式;前面說這些代碼編號可能就是機器碼,機器碼就是二進位數字,二進位數字反映在電路上就是高低電平,從而驅動電路運行;不同代碼編號的二進位數字排列就不同,所以驅動電路的高低電平就不同,所以電路執行的方式就不同。

同一個程式 -> 彙編語言 -> 不同指令集 -> 不同架構的 CPU -> 不同的實現電路 -> 相同的功能。

4. Apple 處理器和配置

下麵對 Apple 處理器做一個格式總結,具體的發展歷程請手動 BD...

處理器/晶元 架構、指令集 搭載機型 發佈時間
A4 Cortex-A8 iPhone 4 iPad 第一代、iPod touch 第四代 2010
A5/ A5X ARM Cortex-A9 iPhone 4S iPad 2 / iPad 第三代 2012、2011
A6/A6X armv7s A6X iPhone 5、iPhone 5C 2012
A7 arm64 iPhone 5S iPad Air、iPad mini 2、iPad mini 3 2013
A8/A8X arm64 iPhone 6系列 iPad mini 4、iPod touch 第六代 2014
A9/A9X arm64 iPhone 6s系列、iPhone SE iPad 第五代 2015
A10/A10X arm64 A10 iPhone 7系列 iPad 第六代、iPod Touch 第七代、 A9X 9.7 英寸 iPad Pro、12.9 英寸 iPad Pro 第一代 / 10.5 英寸 iPad Pro、12.9 英寸 iPad Pro 第二代(2017) 2016、2015
A11 arm64 iPhone 8系列、iPhone X 2017.
A12 arm64e 12.9 英寸 iPad Pro 第三代、11 英寸 iPad Pro、 iPhone XS系列、iPhone XR iPad mini 5、iPad Air 第三代 2018.
A13 arm64e iPad第九代(10.2英寸)、iPhone 11系列、iPhone SE第二代、iPhone SE第二代 2021.
A14 arm64e iPhone 12系列、iPad Air 第四代 2020.9
A15 arm64e iPhone SE第三代、 iPhone 13系列 2022.3、2021.9
A16 arm64e iPhone 14 Pro 和 iPhone 14 Pro Max 2022.9
A17 Pro arm64e iPhone 15 Pro 2023.9
M1 arm64e iPad Pro12.9 2021.4
M1 arm64e iPad Air5 2022.3
M2 arm64e iPad Pro、Mac mini 2022.10

iOS 架構配置:

處理器架構、指令集:

  • armv7|armv7s|arm64 都是 ARM 處理器架構指令集。
  • i386|x86_64 是 Mac 處理器的指令集。

這些指令集在那些設備架構中用到?

armv7:iPhone4|iPhone4S|iPad|iPad2|iPad3(The New iPad)|iPad mini|iPod Touch 3G|iPod Touch4

armv7s:iPhone5|iPhone5C|iPad4(iPad with Retina Display)

arm64:iPhone6s | iphone6s plus|iPhone6| iPhone6 plus|iPhone5S | iPad Air| iPad mini2(iPad mini with Retina Display) 以及更高的版本

armv7|armv7s|arm64 都是 ARM 處理器的指令集:真機 32 位處理器需要 armv7,或者 armv7s 架構指令集、真機64位處理器需要 arm64/arm64e 架構的指令集。

對於模擬器 x86 32 位處理器測試需要 Intel i386 架構指令集,模擬器 64 位處理器測試需要 Intel x86_64 架構的指令集。

i386 是針對 intel 通用微處理器 x86 架構的 32 位處理器
x86_64 是針對 x86 架構的 64 位處理器

i386|x86_64 應用在 Mac 處理器的指令集
最新 M1、M2 處理器則採用的也是基於 ARM 架構的指令集

在實際開發中的配置問題,Xcode 中指令集相關選項(Build Setting 中):

  1. Architectures:
    指定工程被編譯成可支持哪些指令集類型,而支持的指令集越多,就會編譯出包含多個指令集代碼的數據包,對應生成二進位包就越大,也就是 ipa 包會變大。

    一般設置預設值為:Standard Architectures (Apple Silicon, Intel) - $(ARCHS_STANDARD),在真機的編譯下實質是(armv7和arm64)、在模擬器的時候是(x86_64、i386)。

  2. Valid Architectures:
    限制可能被支持的指令集的範圍,也就是 Xcode 編譯出來的二進位包類型最終從這些類型產生,而編譯出哪種指令集的包,將由 Architectures 與 Valid Architectures(因此這個不能為空)的交集來確定。Xcode 12 以前,我們通過 Valid Architectures 來配置支持的機型。但在 Xcode12 中, Valid Architectures 這一項被移除掉了,改變成了 VALID_ARCHS 的欄目。但是升級 Xcode12 以後的版本,工程配置是這樣的 EXCLUDED_ARCHS,表示配置不包含的 CPU 架構,在這裡就可以把不需要或者一些三方框架不支持的架構配置在這裡。如果 Excluded architectures 里配置了架構,就會去掉配置里的架構,比如配置了armv7 ,那麼真機里就只有 arm64 了。

  3. Build Active Architecture Only:
    指定是否只對當前連接設備所支持的指令集編譯,當其值設置為 Yes,是為了debug 的時候編譯速度更快,它只編譯當前的 Architecture 版本,而設置為 No 時,會編譯所有的版本。 所以,一般 debug 的時候可以選擇設置為 Yes,release 的時候要改為 No,以適應不同設備。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 目錄創建表用法示例資料分享參考文章 ODBC集成表引擎使得ClickHouse可以通過ODBC方式連接到外部資料庫. 為了安全地實現 ODBC 連接,ClickHouse 使用了一個獨立程式 clickhouse-odbc-bridge. 如果ODBC驅動程式是直接從 clickhouse-serv ...
  • 假設你要為用戶名為'username'@'localhost'的用戶設置新密碼,你可以這樣做: 其中,username 是用戶名,localhost 是主機名, 123456是要更改的新密碼。 方法1: 用 ALTER 語句 ALTER USER 'username'@'localhost' IDE ...
  • MySQL提供了多種方法來鎖定解鎖賬號,下麵是幾種常用的方法: 1.使用ALTER語句鎖定賬號 鎖定賬號: ALTER USER 'username'@'localhost' ACCOUNT LOCK; 解鎖賬號: ALTER USER'username'@'localhost' ACCOUNT U ...
  • 本文分享自華為雲社區《你的JoinHint為什麼不生效【綻放吧!GaussDB(DWS)雲原生數倉】》,作者:你是猴子請來的救兵嗎 。 引言 提起資料庫的Hint,幾乎每個DBA都知道這一強大功能。在GaussDB(DWS)中,Hint可以被用來干預SQL的執行計劃,但是在日常工作中,很多開發人員對 ...
  • 夜黑風高的某一晚,突然收到一條運營後臺資料庫慢sql的報警,耗時竟然達到了60s。看了一下,還好不是很頻繁,內心會更加從容排查問題,應該是特定條件下沒有走到索引導致,如果頻繁出現慢查詢,可能會將資料庫連接池打滿,導致資料庫不可用,從而導致應用不可用。 ...
  • 最近開始體驗FastGPT開源知識庫問答系統,用他們試著開發調試一些小助手。這中間需要使用到MongoDB,就在自己伺服器上進行了安裝,特此記錄下。 環境說明:阿裡雲ECS,2核8G,X86架構,CentOS 7.9操作系統。 選擇版本 1.打開MongoDB社區版下載頁面,選擇我們想要安裝的版本、 ...
  • 直接加減數字 select sysdate 當前時間, sysdate + 1 加一天, sysdate - 1 減一天, sysdate + (1 / 24) 加一小時, sysdate + (1 / 24 / 60) 加一分鐘 from dual; 使用add_months()函數 select ...
  • 一、垂直分庫場景 場景:在業務系統中,涉及一下表結構,但是由於用戶與訂單每天都會產生大量的數據,單台伺服器的數據存儲以及處理能力是有限的,可以對資料庫表進行拆分,原有資料庫如下 說明1:整個業務系統中的表,大致分為四個,商品信息類的表,訂單相關的表,用戶相關表及省市區相關的表,這裡暫時將省市區的表和 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...