Поддерживаются ли функции AVX512 в Clang на OSX 32-bit? - PullRequest
0 голосов
/ 16 октября 2018

Я получаю миллионы ошибок при использовании встроенных функций AVX512 в OSX, но только при сборке 32-разрядных приложений 64-разрядная версия подходит.Это поддерживается?Я включаю его через x86intrin.h и immintrin.h.zmmintrin.h, видимо, там вообще нет ...

1 Ответ

0 голосов
/ 17 октября 2018

Я могу воспроизвести его с помощью clang6.0 (mainline, а не версии Apple) на Godbolt (https://godbolt.org/z/d-mnAy),, но не clang7.0.

Возможно, это ошибка, но Intel перечисляет _mm512_maskz_set1_epi64 в качестве встроенного для vpbroadcastq zmm {k}, r64, который, очевидно, доступен только в 64-битном режиме.

Конечно, это глупо, и vpbroadcastq с источником памяти или xmm по-прежнемудоступны в 32-битном режиме. Последние версии clang, которые поддерживают его в 32-битном режиме, компилируют этот код в не широковещательную загрузку векторной константы, даже в 64-битном режиме:

#include <immintrin.h>

__m512i foo() {
    return _mm512_maskz_set1_epi64(0xf0, 123);
}

Но clang5.0 и старше компилирует это так в 64-битном режиме, хотя:

foo:                                    # @foo
    mov     al, -16
    kmovd   k1, eax
    mov     eax, 123
    vpbroadcastq    zmm0 {k1} {z}, rax
    ret

И clang 5.0 -m32 выдает внутреннюю ошибку компилятора.


Я неу вас есть Mac, чтобы попробовать настоящий Xcode, но совершенно очевидно, что некоторые версии clang / LLVM рассматривают _mm512_maskz_set1_epi64 и _mm512_set1_epi64 только как 64-битный режим. Вы можете определить свой собственный для 32-битного режима, используяте же встроенные модули, что и заголовки.

...