/ / При яких умовах компілятор .NET JIT виконує автоматичну векторизацію? - .net, векторизація, simd, автоматична векторизація, rujit

На яких умовах компілятор .NET JIT виконує автоматичну векторизацію? - .net, векторизація, simd, автоматична векторизація, rujit

Чи новий компілятор RyuJIT коли-небудь генерує вектори (SIMD) інструкції процесора, і коли?

Примітка: Система.Простір назв чисел містить типи, які дозволяють явне використання векторних операцій, які можуть викликати або не генерувати інструкції SIMD залежно від версії процесора, CLR, версії JITer, незалежно від компіляції безпосередньо з власним кодом чи ні. Це питання конкретно про те, коли невекторний код (наприклад, в C # або F #) буде виробляти SIMD-інструкції.

Відповіді:

10 за відповідь № 1

Створення 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 для взаємодії.