Как я могу определить, поддерживает ли Clang данную инструкцию SIMD?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как я могу определить, поддерживает ли Clang данную инструкцию SIMD?

Сообщение Anonymous »

Есть ли способ определить, поддерживает ли текущая версия компилятора Clang данную расширенную инструкцию ЦП?
Как я это знал:

Код: Выделить всё

#if __has_builtin(__builtin_ia32_packssdw256)
[[gnu::target("avx2")]]
__m256i my256_add_epi32(__m256i a, __256i b)
{
return _mm256_add_epi32(a, b, c);
}
#endif
Проблема в том, что __has_builtin(__builtin_ia32_packssdw256) возвращает 1 только в том случае, если вы передаете -mavx2 в командную строку Clang. Однако это плохо: мой код использует [[gnu::target]] специально для того, чтобы избежать необходимости -mavx2, потому что -mavx2 дает компилятору карт-бланш на использование инструкций AVX2 где угодно. Это может привести к сбоям из-за создания экземпляров функции шаблона, которые могут происходить из файла .cpp, скомпилированного с -mavx2, а не из файла .cpp, которого не было.
Проверка версий Clang затруднена, поскольку у него есть два набора номеров версий: LLVM и Apple.
В моем примере с AVX2 это не проблема, поскольку каждая версия компилятора, с которой мы работаем, поддерживает AVX2. Реальный пример, с которым я столкнулся, — это обнаружение внутренней поддержки SHA-512 для ARM64, которая намного новее. Вышеупомянутый AVX2 предназначен для демонстрации проблемы.

Подробнее здесь: https://stackoverflow.com/questions/795 ... nstruction
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»