Подтвердить что ты не робот

Хорошая портативная SIMD-библиотека

может ли кто-нибудь рекомендовать портативную библиотеку SIMD, которая предоставляет API c/С++, работает с расширениями Intel и AMD и совместимость с Visual Studio, GCC. Я хочу ускорить такие вещи, как масштабирование массива удвоений 512x512. Векторные точечные произведения, умножение матриц и т.д.

Пока я нашел только один: http://simdx86.sourceforge.net/, но поскольку первая страница говорит, что она не компилируется на визуальной студии.

Там также Intel IPP, который не работает на AMD из того, что я собираю. И там Framewave от AMD, но у меня возникли проблемы с компиляцией и связыванием их библиотеки, и их форумы полностью мертвы. Кому-нибудь удалось использовать Framewave где-нибудь?

Спасибо.

4b9b3361

Ответ 1

Поскольку вы упоминаете операции высокого уровня над матрицами и векторами, ATLAS, Intel MKL, PLASMA и FLAME может представлять интерес.

Некоторые математические библиотеки матрицы С++ включают uBLAS из Boost, Armadillo, Eigen, IT ++ и Newmat. Библиотека POOMA, вероятно, также включает некоторые из этих вещей. Этот вопрос также относится к MTL.

Если вы ищете примитивы переносимости нижнего уровня, мой коллега разработал оболочку вокруг векторных операций SSE2, Altivec, VSX, Larrabee и Cell SPE. Его можно найти в нашем исходном репозитории, но его лицензирование (академическое) может оказаться неприемлемым, если вы хотите распространять его как часть своей работы, Он также по-прежнему находится в значительном развитии, чтобы охватить диапазон потребностей приложений, на которые он нацелен.

Ответ 2

Eigen - это MPL2 - библиотека С++, предназначенная только для заголовка, которая имеет векторную/матричную математику который оптимизирован для SSE, Neon и Altivec. Они имеют более сложные математические операции в своих дополнительных модулях.

Ответ 3

Попробуйте liboil или связанный ORC. Особенно интересен ORC; он реализует язык ассемблера высокого уровня, который компилируется в код, специфичный для архитектуры. Довольно сложный, гораздо более простой, чем простая библиотека оберток.

Ответ 5

Если вы не против спускаться и пакаться с ассемблером, вы всегда можете использовать встроенные функции для всех SIMD-инструкций. Они будут специфичны для процессора, т.е. Встроенные функции SSE4 будут работать только на процессорах с поддержкой SSE4, и это зависит от вас, чтобы убедиться, что расширения существуют.

Существует хорошая статья здесь о применении SIMD.

Однако вы можете использовать компилятор, который генерирует код SIMD для вас без каких-либо внешних библиотек. VectorC должен быть хорошим, хотя я никогда не использовал его лично. Он не требует каких-либо специальных библиотек, насколько мне известно, он просто показывает те биты исходного кода, которые могут быть полезны из SIMD и компилируются на любой уровень SSE, который вы указываете.