在模擬 Nintendo DS 時,基於 ARM 的設備是否比 x86 更有優勢?
最近我一直在模擬 Nintendo DS,在我的 x86 Windows/macOS 機器和我的 ARM 設備上(目前是 Android,但我也想在帶有 ARM CPU 的 Linux 桌面上嘗試。)
我發現我在 ARM 設備上獲得了更好的性能。
這和建築有關係嗎?我知道DS 也有一個 ARM 處理器。這是否使 ARM 設備上的仿真更容易?介於仿真和虛擬化之間?還是最有可能是由於其他一些因素?
我發現我在 ARM 設備上獲得了更好的性能。
這和建築有關係嗎?
是的,它有。
不想讓你厭煩技術細節,執行程式碼很像跟著一本烹飪書。同時,為不同平台編寫的程式碼很像用外語編寫的烹飪書。
有時,將指令從一種語言翻譯成另一種語言很簡單。有時,用一種語言可以用一個詞表達的東西,需要用另一種語言講授哲學。有時,您可能需要在海外非常常見的烹飪工具,但不是您居住的地方。
烹飪書的語言越接近您自己的語言,就越容易理解。這就是為什麼 ARM CPU 在模擬另一個 ARM CPU 時比完全不同架構的 CPU 獲得更好的性能。
介於仿真和虛擬化之間?
你可以這麼說,儘管從技術上講,它仍然是 100% 仿真,0% 虛擬化。
虛擬化是指程式碼可以在 CPU 上本地(直接)執行。即使在 ARM CPU 上,您也不能簡單地在本地執行 NDS 程式碼。其中一些原因包括:
- 非標準擴展:這在控制台中很常見。由於您不需要兼容可能無限數量的硬體配置,因此您可以輕鬆定義一組您需要的功能。如果 ARM 架構不提供它,您可以添加它。使用這些的指令顯然不會在任何其他 ARM CPU 上執行。
- 錯誤和未定義的行為:有時 CPU 中存在錯誤,您在其他任何地方都找不到。有時,有些開發人員有意或無意地依賴於該錯誤引起的奇怪行為。這同樣適用於未定義的行為。
- 計時:這在遊戲機中很常見。由於硬體(和性能)始終保持不變,開發人員假設一秒鐘將始終持續 6700 萬個時鐘週期。顯然,當遊戲突然在 2 GHz CPU(每秒 20 億個週期)上執行時,遊戲可能很快變得無法玩。想像一下以正常速度的 30 倍玩遊戲……
更不用說與CPU無關的東西了,還需要仿真。
還是最有可能是由於其他一些因素?
不是在這種情況下,但它也是可能的。
理論上,您可以設計一個與原始 NDS CPU 具有所有相同功能、錯誤和怪癖的 CPU,但使用完全不同的架構。如果該 CPU 也恰好比正常 ARM CPU 更快、更高效,那麼您最終會得到一個非 ARM CPU,它可以比真正的 ARM CPU 更好地模擬 NDS CPU。
但這純粹是理論。實際上,包含 FPGA(現場可程式門陣列)可能會更容易,並將其程式為 NDS CPU 的完美復製品。在這種情況下,我們甚至不再需要模擬任何東西(除非我們想要圖形放大、快速轉發等便利功能),除了 NDS 的一些獨特功能,比如檢測蓋子是否已關閉。