2016-02-20 7 views
6

Создает ли новый компилятор RyuJIT векторные (SIMD) инструкции CPU и когда?При каких условиях компилятор .NET JIT выполняет автоматическую векторизацию?

Замечание: пространство имен System.Numerics содержит типы, которые допускают явное использование векторных операций, которые могут или не могут генерировать инструкции SIMD в зависимости от процессора, версии CLR, версии JITer, независимо от того, компилируется ли непосредственно на собственный код или нет. Этот вопрос конкретно касается того, когда не-векторный код (например, на C# или F #) будет выдавать SIMD-инструкции.

ответ

8

Создание кода SIMD в RuyJIT строго ограничено типами в пространстве имен System.Numerics.Vectors. Универсальная поддержка SIMD потребует очень значительной ревизии CLR, такой код может быть эффективен только в том случае, если переменные SIMD правильно выровнены. По крайней мере, до 16 для SSE2, до 32, чтобы иметь возможность использовать AVX2, до 64 для предстоящего AVX-512.

Это далекое право сейчас, 32-разрядная версия CLR может быть согласована только с 4, 64-разрядной версией до 8. «Естественное» выравнивание для 32-битного и 64-битного кода. Необходимые изменения будут затрагивать каждую часть CLR, сборщик мусора и загрузчик классов спереди. Нет никакого шума из-за такого серьезного изменения, которое рассматривается. И никаких признаков того, что это было рассмотрено в проекте CoreCLR, было бы самой очевидной целевой версией.

Если вы хотите использовать SIMD за пределами текущей поддержки в System.Numerics.Vectors, то сделайте это, используя компилятор C++, используя расширения языка C++/CLI или C++/CX для взаимодействия.

+0

Что касается выравнивания памяти, я нашел этот комментарий от Intel ... «Большинство семантик команд SIMD с цифрой и обработкой данных с операндом памяти имеют требования к выравниванию памяти, чем команды, закодированные с использованием префиксов SIMD» [Intel® 64 и IA -32 Архитектуры Руководство для разработчиков программного обеспечения] (http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-1 -manual.pdf) – redcalx

+2

«Может быть только * эффективным *» является ключевой фразой. Неудовлетворенные нагрузки и магазины очень дороги. –