2011-02-10 2 views
20

Кто-нибудь знает библиотеку встроенного языка C++ x86 SIMD с открытым исходным кодом?C++ SSE SIMD framework

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

EDIT

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

+0

Какие функции вам нужны? –

+0

SSE1/2 с возможностью обновления до SSE3/4/AVX в будущем. ИМО в хорошо сохранившейся библиотеке добавила бы поддержку для всех из них уже –

+2

SSE2 и объектно-ориентированную? звуки слишком не связаны для меня. – YeenFei

ответ

20

Посмотрите на libsimdpp только для C++ SIMD-обертки.

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

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

+1

Поддерживается ли libdimdpp? – Walter

+0

Я не знаю, но мы пошли с версией 1.0, потому что 2.0 все еще находился в «бета-версии» и был полностью разочарован. Мало того, что документации нет: не было способа загрузить значения в регистр (функции с именами, предполагающими, что это не так), а код с поплавковыми регистрами даже не будет компилироваться. Я полностью советую не использовать его. –

+2

@Sebastian Вы должны заглянуть в версию 2.0, которая теперь находится в стадии выбора кандидата. Там должно быть очень мало ошибок, если они есть, поскольку все поддерживаемые конфигурации постоянно проверяются. Документация также значительно улучшена. Отказ от ответственности: я автор библиотеки. – p12

0
+1

GCC и компилятор Intel имеют большинство из них. –

+0

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

4

Посмотрите AMD's SSEPlus project, может быть, что ваш после

+0

Там больше ничего не упоминается SSEPlus. –

+0

@ VioletGiraffe: у AMD есть эта досадная привычка к разрыву ссылок, обновлена ​​ссылка на страницу sourceforge – Necrolis

+0

Последнее обновление было в 2009 году, стабильно ли? –

1

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

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

4

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

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

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

будут преобразованы в этот assemly код с использованием 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 

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

1

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

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

2

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

+3

Vc не поддерживает NEON на ARM, правильно? –

+1

Нет, это не так. –

11

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

  • Vc
  • повышение :: SIMD (на самом деле не в прирост - часть NT²)
  • Профессор Agner Туман-х Vectorclass library

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

+2

Библиотека Vectorclass не под разрешительной лицензией - только GPL или коммерческая. – p12