Встречайте Ryujit: Новый Jit-Компилятор Для .Net

Мир движется к 64-битным вычислениям, хотя в результате программы не всегда работают быстрее или работают лучше, чем 32-битные.

Многие 32-битные программы по разным причинам могут работать быстрее, чем 64-битные.

Одним из таких примеров является 64-битный JIT-компилятор платформы .

NET. Он проделывает большую работу, чтобы ваша программа работала очень быстро, но сама она, увы, не такая быстрая, как хотелось бы.

Это то, что мы собираемся исправить.

Представляем JIT-компилятор x64 нового поколения, который способен компилировать 64-битный .

NET-код в 2 раза быстрее.



Поговорим о х64

Похоже, что 32-битные компьютеры x86 существуют уже очень давно.

Это отличная архитектура, но у нее есть одна большая проблема: адресное пространство 32-битных указателей ограничено 4 ГБ.

64-битные компьютеры с их расширенными указателями могут обращаться к практически безграничному объему данных.

Когда вышла первая версия Windows x64, оперативная память была относительно дорогой, поэтому в качестве серверов в основном использовались 64-битные машины.

Сейчас архитектура x64 стала основной, и компьютеры обычно поставляются с оперативной памятью не менее 4 ГБ.

Даже некоторые смартфоны перешли на 64-битные процессоры, несмотря на то, что у них всего 1 ГБ оперативной памяти.

.

NET x64 JIT был разработан для обеспечения максимально эффективного кода во время длительных процессов, выполняемых на сервере.

Это отличается от JIT .

NET x86, который оптимизирован для максимально быстрой компиляции IL-кода в машинный код, что позволяет программам работать быстрее.

Оптимизация эффективности кода часто имеет смысл для серверных приложений.

Но к «серверным приложениям» относятся и веб-приложения, одно из требований к которым — максимально быстрый запуск.

64-битный JIT в текущих версиях .

NET редко может похвастаться быстрой компиляцией IL-кода, что заставляет многих использовать другие технологии, такие как NGen или фоновый JIT.

РюДЖИТ спешит на помощь!

РюЧТО? Команда .

NET Code Generation в настоящее время работает над совершенно новым компилятором x64 с рабочим названием RyuJIT. Работает в 2 раза быстрее текущей версии.

Это означает, что время запуска скомпилированных им программ сокращается примерно на 30% (время, затрачиваемое на JIT-компиляцию, является лишь частью процесса выполнения приложения, поэтому то, что JIT работает в 2 раза быстрее, не означает, что приложение должно также ускоряться).

столько же).

Кроме того, новый JIT по-прежнему создает машинный код с высочайшей производительностью.

На графике ниже показано, насколько RyuJIT быстрее текущего JIT64:

Встречайте RyuJIT: новый JIT-компилятор для .
</p><p>
NET

Очевидно, что все примеры работали быстрее с новым JIT. Вы, наверное, заметили, что второй пример (RegEx электронной почты RFC822) буквально вышел за пределы графа.

Это связано с тем, что регулярные выражения особенно плохо работают на JIT64. Компиляция этого примера с помощью JIT64-компилятора заняла 60 секунд и потребовала 1,4 ГБ памяти.

В случае с RyuJIT это заняло всего 1,8 секунды и 199 МБ.

Пример с Paint.NET оказался более нормальным.

Запуск приложения на тестовой машине сократился с 2,3 до 1,8 секунды.

Время компиляции сократилось с 1510 мс до 970 мс.

Я думаю, очевидно, что быстрый бег с минимальным использованием памяти делает наш мир лучше.



И на десерт.

Повышенная производительность RyuJIT и снижение потребления ресурсов — это здорово, но это не самое лучшее.

Когда JIT64 только разрабатывался, мы решили взять структуру оптимизации команд из компилятора C++ вместо существовавшего тогда 32-разрядного JIT-компилятора, который был лучше оптимизирован для сценариев динамической компиляции.

Большинство 64-битных компьютеров тогда использовались в качестве серверов, поэтому важно было сосредоточиться на качестве скомпилированного кода, а не на повышении производительности самого компилятора.

В результате команде .

NET CodeGen пришлось поддерживать код для двух разных компиляторов.

Добавление функций и исправление ошибок в двух местах замедлили внедрение нововведений.

А добавление в последние годы архитектуры ARM и MDIL в Windows Phone 8.0 еще больше усложнило эту работу.

RyuJIT основан на кодовой базе JIT x86. Пока это работает только для 64-битной архитектуры.

Этот модернизированный компилятор впоследствии станет основой всех наших JIT-компиляторов: x86, ARM, MDIL и, возможно, чего-то еще.

Общая база кода означает, что приложения .

NET будут работать максимально одинаково на разных платформах; другими словами, ошибки будут одинаковыми на разных архитектурах.

Однако это также означает, что мы сможем внедрять новые технологии гораздо быстрее.



Что нужно сделать, чтобы попробовать?

CTP-версия RyuJIT доступна, и вы можете опробовать ее в своей тестовой среде прямо сейчас.

Поддержки производства пока нет. Загрузите установщик RyuJIT можно уже сейчас, но это работает только на 64-битных версиях Windows 8.1 и Windows Server 2012 R2. Обратите внимание, что RyuJIT не вносит изменения в NGen в вашей системе — мы хотели сохранить чистоту установки.

А еще, после включения RyuJIT, во время написания кода «Редактировать и продолжить» в VS перестанет работать для x64. После установки есть два способа включить RyuJIT. Если вы хотите включить его только для одного конкретного приложения, добавьте переменную среды « COMPLUS_AltJit=* «Если вы хотите включить его для всех приложений, вам необходимо определить ключ в реестре» HKLM\SOFTWARE\Microsoft\.

NETFramework\AltJit » со строкой «*».

Оба эти метода заставляют 64-битную среду CLR использовать RyuJIT вместо JIT64. Кроме того, оба эти метода обратимы — установка RyuJIT ничего не меняет на вашем компьютере (кроме размещения файлов в каталоге компилятора).

Источник: Блог .

NET Framework Блог группы создания кода .

NET Теги: #ryujit #jit #.

NET #CLR #компиляторы #microsoft #.

NET

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.