国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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)原理大概是怎樣的?的評論 (共 條)

分享到微博請遵守國家法律
乌兰县| 巴中市| 达州市| 云浮市| 色达县| 安康市| 尼玛县| 辽宁省| 九江市| 鸡东县| 五台县| 白沙| 淮安市| 闵行区| 镶黄旗| 香港 | 蒙自县| 昆明市| 黑水县| 南皮县| 灵丘县| 丹寨县| 荆州市| 上虞市| 伽师县| 淮滨县| 定州市| 辽源市| 新津县| 鄂伦春自治旗| 武胜县| 高邑县| 昭平县| 新巴尔虎左旗| 吉木萨尔县| 景泰县| 安阳市| 保亭| 丰顺县| 武威市| 营口市|