22

オープンソースのC++x86 SIMD組み込み関数ライブラリを知っている人はいますか?

Intelは、統合されたパフォーマンスプリミティブライブラリで必要なものを正確に提供していますが、著作権がいたるところにあるため、それを使用することはできません。

編集

私はすでにコンパイラーによって提供される組み込み関数を知っています。私が必要としているのは、それらを使用するための便利なインターフェースです。

4

8 に答える 8

24

libsimdppヘッダーのみのC++SIMDラッパーライブラリを見てください。

ライブラリは、単一のインターフェイスを介していくつかの命令セットをサポートします:SSE2、SSE3、SSSE3、SSE4.1、AVX、AVX2、AVX512F、XOP、FMA3 / 4、NEON、NEONv2、Altivec。Clang、GCC、MSVC、ICCのすべてがサポートされています。

命令セット間の違いは、サポートされている命令の組み合わせとして欠落している命令を実装することで解決されます。ボーナスとして、複数の命令セットに対して同じコードをコンパイルし、結果のオブジェクトファイルを単一の実行可能ファイルにリンクし、便利な動的ディスパッチメカニズムを使用して、現在のプロセッサに最も合わせた実装を実行することができます。

于 2013-05-10T22:17:57.423 に答える
12

明示的なSIMDプログラミングを抽象化するために近年出現したライブラリがいくつかあります。最も重要なもの:

探すべき最も重要なことは、与えられたターゲットに対して利用可能な最良のSIMDレジスタと命令を正しく抽象化する使用可能なタイプのセットを持つことです。そして、明らかに、SIMDをサポートしていないシステムへの完全な移植性。

于 2014-05-09T11:29:51.693 に答える
6

ほぼ完璧な品質のASMコードに変換するGLSLスタイルのライブラリを作成しました

非常に一般的な操作-外積:

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

ライブラリはまだ完全ではなく、まだ新しいため、バグが見つからない可能性が高いことに注意してください。

于 2011-03-01T04:56:15.810 に答える
5

AMDのSSEPlusプロジェクトを見てください。

于 2011-02-10T04:01:24.467 に答える
3

Microsoftは、新しい「DirectXMath」ライブラリをリリースしました。SSE2およびNEON組み込み関数のサポートが含まれています。ドキュメントもまともなようです。

DirectXMath APIは、DirectXアプリケーションに共通の一般的な線形代数およびグラフィックス数学演算用のSIMD対応のC++タイプおよび関数を提供します。このライブラリは、Windows 32ビット(x86)、Windows 64ビット(x64)、およびWindows onARMのSSE2およびVisualStudioコンパイラでのARM-NEON組み込み関数のサポートに最適化されたバージョンを提供します。

于 2012-10-25T11:41:36.617 に答える
2

Vcは、ベクトルクラスを実装し、使用される実際の命令セットから独立したベクトル化されたコードを記述できるようにする別のC++ライブラリです。

于 2013-07-26T11:41:45.677 に答える
1

macstlを確認することをお勧めします。元々はMac(およびPowerPC)用に開発されましたが、現在はLinuxおよびx86でも動作します。

また、画像を使用している場合は、OpenCVをご覧ください。これには、多くの一般的な画像処理タスク用にSSEに最適化されたルーチンがあり、CおよびC++APIがあります。

于 2011-02-10T08:54:55.610 に答える
0

どのコンパイラ?Visual Studio C ++コンパイラは、SIMD、SIMD2、およびMMX組み込み関数のセットをサポートします。

于 2011-02-10T03:49:02.180 に答える