RyuJIT的華麗轉身【譯文】


  2018-06-19

  RyuJIT是作為.NET即時編譯器的代號稱謂,它是.NET運行時的基本組件之一。與此相反的是,Roslyn作為C#編譯器,其編譯C#代碼成為IL字節碼。然后,其再將IL字節碼編譯成相對於多種處理器的機器碼。

  隨着最近對dotnet/coreclr #18064的合並,將生成組件的遺留代碼(來自較老的JIT實現)從RyuJIT的源碼中進行了移除。這個版本刪除了近5萬行代碼!現在,四種處理理體系結構(x86、x64、ARM32、ARM64)可完全基於RyuJIT架構。

  回顧一下關於RyuJIT短暫的歷史,以及我們是如何做到現在這樣的,是一件很有趣的事情。

  RyuJIT架構的設計開始於9年前,而着手實現開始於7年前。RyuJIT是現有的JIT32編譯器(它支持x86和ARM32)的進化版實現,並逐步用一個新的寄存器分配器和代碼生成器替換了編譯器的大部分“后端”,並入了許多新的和改進的“前端”優化組件。在向新的代碼生成體系結構過渡的過程中,我們將舊代碼與之結合。這樣做提供了好處,但是在測試和維護成本方面,以及開發人員需要處理由大量的分散的遺留代碼的困惑,這些都是非常昂貴的。現在,由於RyuJIT在功能上優於遺留代碼,所以現在是刪除遺留代碼,簡化JIT代碼,以及着眼於未來的時候了。

  在近5年前,RyuJIT的x64版本作為社區技術預覽版展示給世界。這在當時是不尋常的。我們為人們提供了多年的更新,讓人們可以嘗試,並在我們發布產品之前給我們反饋。RyuJIT的x64系列是隨.NET Framework 4.6發布的,它取代了3年前的JIT64,對於現在而言,它是一個遺留的代碼庫。

  在去年發布的.NET Core 2.0中,x86取代了JIT32。作為公共開發過程的一部分,我們宣布了JIT32的替換,並在.NET Core 2.0的發布聲明中分享了完成的工作。

  .NET Core 2.0作為包含支持ARM32架構的預覽版,使用了遺留后端代碼。截至去年12月,對於dotnet/coreclr #15134的合並,.NET Core 2.1版本正式支持了ARM32體系架構。這一變化也包括了三星的許多貢獻。

  RyuJIT對於ARM64架構的支持,在.NET Core 2.1中近乎為預覽版程度,此支持是在RyuJIT架構實現之初就進行構建的。實際上,在過去的4年中,我們一直致力RyuJIT支持ARM64的相關工作,而這項工作最近又被高通的貢獻者們所做的重要工作推進了。

  總的來說,RyuJIT的投入一直專注於發展代碼庫,以便更好地支持:

  1)多代碼生成目標(指令集和操作系統);

  2)改進優化;

  3)更好和更靈活的代碼生成;

  4)開放、靈活和健壯的設計與實現;

  我們相信新的RyuJIT編譯器架構比(現在已刪除)傳統的代碼生成器實現這些目標有很大的改進。

  最近,我們在RyuJIT代碼生成器中,投入了新的代碼生成技術。例如,SIMD支持,特定於硬件內部的體系結構,以及對Linux軟件約定的支持。

  到達這一點是非常令人滿意的,我們已經可以看到,刪除所有這些舊的代碼將使我們在前進的過程中更加靈活。

  感謝所有為這一切長期努力做出貢獻的人!

 

參考鏈接:https://blogs.msdn.microsoft.com/dotnet/2018/06/19/the-ryujit-transition-is-complete/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM