Хорошая портативная библиотека SIMD [закрыта]
-
13-09-2019 - |
Вопрос
кто-нибудь может порекомендовать портативную библиотеку SIMD, которая предоставляет c / c ++ API, работает с расширениями Intel и AMD и Visual Studio, совместимыми с GCC.Я хочу ускорить такие вещи, как масштабирование массива удвоений размером 512x512.Векторные точечные произведения, матричное умножение и т.д.
Пока единственное, что я нашел, это:http://simdx86.sourceforge.net/ но, как сказано на самой первой странице, он не компилируется в visual studio.
Есть также Intel IPP, который, насколько я понимаю, не работает на AMD.И есть Framewave от AMD, но у меня возникли некоторые проблемы с компиляцией и связыванием их библиотеки, а их форумы полностью отключены.Кому-нибудь удалось где-нибудь использовать Framewave?
Спасибо.
Решение
Поскольку вы упомянули высокоуровневые операции с матрицами и векторами, АТЛАС, MKL от Intel, ПЛАЗМА, и ПЛАМЯ может представлять интерес.
Некоторые матричные математические библиотеки C ++ включают UBLAS от Boost, Armadillo, Eigen, IT ++ и Newmat.Библиотека POOMA, вероятно, также включает в себя некоторые из этих вещей. Этот вопрос также относится к MTL.
Если вы ищете примитивы переносимости более низкого уровня, мой коллега разработал оболочку для векторных операций SSE2, Altivec, VSX, Larrabee и Cell SPE.Это можно найти в нашем исходный репозиторий, но его лицензирование (академическое) может оказаться неподходящим, если вы хотите распространять его как часть своей работы.Он также все еще находится в стадии значительной разработки, чтобы покрыть диапазон потребностей приложений, на которые он ориентирован.
Другие советы
Ознакомьтесь с macstl: http://www.pixelglow.com/macstl/
Если вы не возражаете поработать с ассемблером, то вы всегда можете использовать встроенные функции для всех инструкций SIMD.Они будут зависеть от конкретного процессора, т. е.Встроенные функции SSE4 будут работать только на процессорах с поддержкой SSE4, и вам решать, есть ли расширения.
Есть хорошая статья здесь о применении SIMD.
Однако вы могли бы использовать компилятор, который генерирует SIMD-код для вас без каких-либо внешних библиотек. ВекторК предполагается, что он хорош, хотя я никогда не пользовался им лично.Насколько я знаю, для этого не требуются какие-либо специальные библиотеки, он просто определяет те фрагменты исходного кода, которые могут быть использованы в SIMD, и компилирует до любого уровня SSE, который вы укажете.