LINUX.ORG.RU

Чо за проблемы с AVX-512?

 , , , ,


0

2

Привет! Мне тут короче понадобилось двумерную карту флоатов в картинку, по заданной палитре, преобразовать. Если че, это видеостриминг в реалтайме.

Ну я недолго думая привинтил SSE, потом еще подумал, и прикрутил FMA3 инструкции, для более лучшей интерполяции, и для перевода сразу в YUV(линейное преобразование, умножение матрицы на вектор, то сё).

Потом еще подумал, а что это я только по 4 точки прохожу? Вобщем можно и по 8 если AVX. А то и по 16 если AVX-512.

Но тут почитал, что AVX, и особенно AVX-512 делают какую-то черную магию с процессорами, при излишнем использовании. Типа ядра замедляют или чето такое. Поясните че как? Стоит туда жать?

Вопрос лавсану и другим. Можно ли с помощью с помощью шланга работать с 3-х или 4-х векторами из синглов по типу как это сделано в OpenCL? Типа иметь функции select, min, max, итд., умножать, складывать вектора. Чтобы это всё компилялось в эффективный код

deadplace ()
Ответ на: комментарий от lovesan

Это слишком низкоуровневая фигня. Сейчас мне приходится для некоторых функций иметь 2 варианта — с SSE-шнягой из этих хедеров и «обычный», где я работаю с массивами. А хотелось бы более кроссплатформенно и высокоуровнево. Чтобы если на машине нет SIMD-инструкций компилялся «обычный» код, если есть — SIMD

deadplace ()
Ответ на: комментарий от Aber

Э, нет. Цикл по флоатам в векторизированные инструкции точно не переделается. Вот по целым — пожалуйста. А сложение/вычитание/умножение флоатов — не ассоциативная операция, так что увы. Разве что с -ffast-math

А вообще меня больше привлекают такие штуки как blendvps. Избавляет код от кучи ветвлений

deadplace ()

Но тут почитал, что AVX, и особенно AVX-512 делают какую-то черную магию с процессорами, при излишнем использовании

никакой черной магии, просто повышенный нагрев от использования

однако в серверных интулях, скорее всего, это не страшно, сильно страдает только десктоп оверклокеров

Ford_Focus ★★★★★ ()
Ответ на: комментарий от anonymous

а прироста нет, потому что 256битных FPU нет, со времён бульдозера там 2 блока по 128бит.

Однако, в ZEN2 исправят это досадное упущение

в целом же да, если код пишется не под определённую железку, лучше использовать SSE.

Ford_Focus ★★★★★ ()
Ответ на: комментарий от deadplace

Это слишком низкоуровневая фигня. Сейчас мне приходится для некоторых функций иметь 2 варианта — с SSE-шнягой из этих хедеров и «обычный», где я работаю с массивами. А хотелось бы более кроссплатформенно и высокоуровнево. Чтобы если на машине нет SIMD-инструкций компилялся «обычный» код, если есть — SIMD

У GCC есть vector extension, который поддерживается также и в clang. https://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html https://clang.llvm.org/docs/LanguageExtensions.html#vector-literals. Но это не годится т.к. этот vector extension опять-таки работает далеко не на всех платформах, и надо будет мутить какие-то костыли с ифдефами

Интеловский компилятор ICC этого не поддерживает. Интели изобретали какой-то свой особый Intel® Cilk™ Plus https://habr.com/ru/company/intel/blog/204838/, однако из GCC его в итоге выпилили https://www.phoronix.com/scan.php?page=news_item&px=Cilk-Plus-GCC-Dropping

В Clang этот cilk никогда вроде бы и не поддерживался официально, http://cilk.mit.edu/download/ https://cilkplus.github.io/ вот что-то нагуглилось, там патченный LLVM используют.

Про всякие вижуалстудии и прочие проприетарные компиляторы ничего сказать не могу. Стандартного решения вроде как нет

SZT ★★★ ()
Последнее исправление: SZT (всего исправлений: 1)

жми туда, если проц умеет - значит нужно использовать. у интелей на блок с avx отдельные частоты со своим множителем (если я не ошибаюсь). инструкции да, греют камень. но он на то и нужен, чтобы греться и молоть числа.

SevikL ★★★★ ()
Ответ на: комментарий от deadplace

Для Clang надо ext_vector_type а для GCC vector_size. Вот пример: https://stackoverflow.com/a/48538557

Вообще, можно ограничиться атрибутом vector_size - его и Clang и GCC и даже ICC понимает. А вот ext_vector_type понятен только для Clang. Можешь на godbolt потестить.

SZT ★★★ ()