Явный код simd в D

Возможно ли сделать это сейчас в D из коробки? Я использую компилятор LDC2, если это может помочь. Меня интересует использование встроенных функций AVX.


person Stringer    schedule 22.12.2012    source источник


Ответы (3)


На данный момент DMD не имеет встроенных функций AVX. Учитывая, что все компиляторы D используют интерфейс DMD, а также druntime и phobos, я бы сказал, что единственный способ сделать то, что вы хотите, — это использовать встроенную сборку, как это предлагает BCS.

Я бы посоветовал вам время от времени проверять модуль core.simd и смотреть, добавлены ли встроенные функции AVX.

person DejanLekic    schedule 23.12.2012

Есть встроенный ASM. Я думаю, что DMD поддерживает SIMD-инструкции. Не уверен, что история для LDC.

person BCS    schedule 22.12.2012
comment
Встроенный ASM совершенно невозможен из-за ручного распределения регистров. - person Stringer; 23.12.2012
comment
Если вам не нужен asm, то что вам нужно для «явного»? Что-то, что гарантирует их использование? Я полагаю, вы проверили список встроенных функций? Остается только компилятор, обещающий использовать их в операциях с массивами. - person BCS; 23.12.2012
comment
Под явным я подразумеваю использование встроенных функций, таких как _mm256_load_ps, и объявление __m256 переменных и т. д., как вы делаете с gcc или clang. Все равно спасибо. - person Stringer; 23.12.2012

В LDC модуль ldc.gccbuiltins_x86 содержит встроенные функции в стиле GCC, такие как __builtin_ia32_vfnmaddps256.

(есть и ldc.gccbuiltins_arm, и ldc.gccbuiltins_ppc,...)

person johan    schedule 29.07.2017