最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【轉(zhuǎn)】蘋果的 Rosetta 2 的實現(xiàn)原理大概是怎樣的?

2023-10-09 22:38 作者:小林家的垃圾王R  | 我要投稿


蘋果的 Rosetta 2 的實現(xiàn)原理大概是怎樣的?

是從x86匯編編譯到arm匯編嗎?

還是有其他的黑科技?

2 個回答

宋子明

不負責(zé)修電腦

沒有內(nèi)幕消息,也沒用過蘋果

設(shè)備,以下都是從網(wǎng)上搜索來的,結(jié)合了一些自己的分析。

Rosetta 2 可以將 x86 指令翻譯成 ARM 指令,支持 JIT(Just-In-Time)和 AOT(Ahead-Of-Time)兩種模式。JIT 在程序運行的時候動態(tài)翻譯指令,類似于 JVM。AOT 在軟件安裝的時候直接翻譯成 ARM 指令,Android 也有類似的技術(shù)。

x86 指令集

雖然復(fù)雜,但 Rosetta 2 只需要支持其中的子集,也就是用戶態(tài)指令。特權(quán)指令、虛擬化擴展則不支持,我猜測 SSE、AVX 這類指令也不支持。M1 是一個 64 位的處理器

,翻譯的也是 64 位的 x86_64 指令,相似度很高。

Rosetta 2 的目的是運行 MacOS 軟件,操作系統(tǒng)

已經(jīng)有了 ARM 版,還需要轉(zhuǎn)換系統(tǒng)調(diào)用。畢竟轉(zhuǎn)換前后都是跑在 MacOS 上的,系統(tǒng)調(diào)用都一樣,只要把傳參方式

從 x86 換成 ARM 就行。

其實,x86 切換 ARM 有一個重大優(yōu)勢,那就是兩套指令集都是小端法(little-endian

),翻譯指令的時候不需要做字節(jié)序反轉(zhuǎn)(byteswap)。蘋果上一次從 PowerPC 切換到 x86 就沒有這種運氣,因為 PowerPC 是大端法(big-endian

),轉(zhuǎn)換起來要麻煩許多。

不過,這回遇到了一個新問題,x86 與 ARM 的內(nèi)存一致性模型(memory consistency model)不一樣,會導(dǎo)致多線程

軟件運行結(jié)果出現(xiàn)差異,這也是 ARM 模擬 x86 的最大困難。蘋果用了最暴力的辦法,直接在芯片里做了 Intel 版本的內(nèi)存模型,運行 Rosetta 2 的時候,通過一個后門開關(guān)切換到 Intel 內(nèi)存模型,運行原生 ARM 程序的時候使用正常的 ARM 內(nèi)存模型(見附圖的第4條)。估計這一點才是 Rosetta 2 性能好的最大貢獻。


編輯于 2020-12-07 20:48

真誠贊賞,手留余香

還沒有人贊賞,快來當(dāng)?shù)谝粋€贊賞的人吧!

沙洛特紹

極左極右之間反復(fù)橫跳

原理應(yīng)該和華為收購來這個在鯤鵬處理器

上面跑的ExaGear差不多,看起來是在aarch64上面直接運行了一套amd64的子系統(tǒng)

果子貍7778:菊花的動態(tài)二進制翻譯工具(Exagear)性能簡測22 贊同 · 8 評論文章


編輯于 2020-12-17 16:48


【轉(zhuǎn)】蘋果的 Rosetta 2 的實現(xiàn)原理大概是怎樣的?的評論 (共 條)

分享到微博請遵守國家法律
金门县| 翼城县| 宁乡县| 玉田县| 贵定县| 城市| 高要市| 沐川县| 深泽县| 乐亭县| 大安市| 汤阴县| 东至县| 遂昌县| 广宗县| 马龙县| 通州区| 嵩明县| 临城县| 鄢陵县| 花垣县| 晋江市| 秀山| 永善县| 台中县| 富锦市| 金阳县| 滦平县| 兰坪| 清水河县| 江城| 南溪县| 武平县| 沙洋县| 温泉县| 东方市| 望谟县| 苏尼特左旗| 焦作市| 武胜县| 巴里|