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

С++ SSE SIMD framework

Кто-нибудь знает библиотеку встроенных скриптов С++ x86 SIMD?

Intel предоставляет именно то, что мне нужно, в их интегрированной библиотеке примитивов производительности, но я не могу использовать это из-за авторских прав повсюду.

ИЗМЕНИТЬ

Я уже знаю внутренности, предоставляемые компиляторами. Мне нужен удобный интерфейс для их использования.

4b9b3361

Ответ 1

Взгляните на libsimdpp библиотеку оболочек С++ SIMD только для заголовка.

Библиотека поддерживает несколько наборов команд через один интерфейс: SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AVX512F, XOP, FMA3/4, NEON, NEONv2, Altivec. Все Clang, GCC, MSVC и ICC поддерживаются.

Любые различия между наборами команд разрешаются путем реализации отсутствующих инструкций как комбинации поддерживаемых. В качестве бонуса можно скомпилировать один и тот же код для нескольких наборов команд, связать полученные объектные файлы с одним исполняемым файлом и использовать удобный динамический механизм отправки, чтобы выполнить реализацию, наиболее адаптированную к текущему процессору.

Ответ 2

В последние годы появилось несколько библиотек для абстрактного явного программирования SIMD. Самые важные из них:

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

Ответ 4

Я написал библиотеку стиля GLSL, которая преобразует в почти идеальный код ASM качества.

Очень распространенная операция - кросс-продукт:

vec4 cross(const vec4 &a, const vec4 &b)
{
    return a.yzxw * b.zxyw - a.zxyw * b.yzxw;
}

будет преобразован в этот готовый код с помощью glsl-sse2:

_Z5crossRK4vec4S1_:
    movaps    (%rsi), %xmm1
    movaps    (%rdx), %xmm2
    pshufd    $201, %xmm1, %xmm5
    pshufd    $210, %xmm2, %xmm0
    pshufd    $210, %xmm1, %xmm4
    pshufd    $201, %xmm2, %xmm3
    mulps     %xmm0, %xmm5
    mulps     %xmm3, %xmm4
    subps     %xmm4, %xmm5
    movaps    %xmm5, (%rdi)
    ret

Обратите внимание, что библиотека еще не совершенна и, скорее всего, имеет необоснованные ошибки, поскольку она еще нова.

Ответ 5

Vc - еще одна библиотека С++, которая реализует векторные классы и позволяет писать векторизованный код, который не зависит от используемого фактического набора команд.

Ответ 6

Возможно, вы захотите посмотреть macstl - хотя он был первоначально разработан для Mac (и PowerPC), он теперь работает на Linux и x86 тоже.

Кроме того, если вы работаете с изображениями, посмотрите OpenCV - у этого есть процедуры, оптимизированные по SSE, для многих обычных задач обработки изображений и имеет C и С++ API.

Ответ 7

Microsoft только что выпустила свою новую "DirectXMath" библиотеку. Он включает поддержку функций SSE2 и NEON. Документация выглядит прилично.

API DirectXMath предоставляет SIMD-совместимые типы и функции С++ для общая линейная алгебра и графические математические операции, общие для DirectX Приложения. Библиотека предоставляет оптимизированные версии для Windows 32-разрядная (x86), 64-разрядная (64-разрядная) Windows и Windows на ARM через SSE2 и поддержка ARM-NEON в компиляторе Visual Studio.