#avx2 #meson-build
Вопрос:
Я хочу использовать ret
переменную, чтобы проверить, поддерживает ли мой процессор avx2:
ret = cc.compiles('''
#include <immintrin.h>
int main() {
__m256i m = _mm256_set1_epi32(17);
return sizeof(__mm256_srli_epi32(m 8);
}
''')
но мне нужно как-то добавить флаг компиляции -mavx2
.
Возможно ли это?
Я читал, что в 2019 году этого не было, но, может быть, это изменилось?
Комментарии:
1. Даже при отключенной оптимизации это не проверяет доступность AVX2. Обратите внимание , что
_mm256_srli_epi32(m, 8)
он находится внутри asizeof
, поэтому он никогда не выполняется. GCC даже скомпилирует его только с-mavx
( godbolt.org/z/T3eKz3j3v ), не требующий-mavx2
или-march=znver1
. Лучшая версия godbolt.org/z/q56r769xM позволяет избежать этой проблемы, компилируя (с-O0
), чтобы включитьvpsrld
инструкцию AVX2. (На самом деле , так как я использовалvolatile __m256i
, он правильно тестируется даже с-O3
.)2. Вы, вероятно, можете использовать GNU C
__attribute__((target("avx2")))
для этого, если параметры сборки являются проблемой. Да, godbolt.org/z/fxfPTWGGE показывает, что работает для GCC (и clang/ICC). Вы можете определить его для MSVC, что позволяет использовать встроенный для расширений, которые не включены.3. Видишь это
Ответ №1:
Плохо задокументированное ключевое слово args-это то, что вам нужно:
cc.compiles(..., args : [...])