Мир движется к 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:
Очевидно, что все примеры работали быстрее с новым 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
-
Расширенные Возможности Мира Google
19 Oct, 24 -
Как Решить Любую Проблему Программирования
19 Oct, 24 -
Google Bodyбраузер
19 Oct, 24 -
Айфон В Китае
19 Oct, 24 -
Отчет Меньшинства
19 Oct, 24