2012-04-25 15 views

答えて

15

はい、* mmintrin.hヘッダー(emmintrin.hxmmintrin.hなど、使用するSSEのレベルに応じて)の組み込み関数を使用できます。これは、多くの理由でアセンブラを使用するより一般的に好まれます。

#include <emmintrin.h> 

int main(void) 
{ 
    __m128i a = _mm_set_epi32(4, 3, 2, 1); 
    __m128i b = _mm_set_epi32(7, 6, 5, 4); 
    __m128i c = _mm_add_epi32(a, b); 

    // ... 

    return 0; 
} 

このアプローチは、さまざまなプラットフォームのx86およびx86-64コンパイラのほとんどで機能します。 gcc、clang、Linux/Mac OS X/Windows上のインテルのICC、さらにはMicrosoftのVisual C/C++(Windowsのみ)

+0

これはgccまたはVC++用ですか? – pythonic

+4

gccとVC++の両方が組み込み関数をサポートしています。 –

+0

FTW、iccもこれらの組み込み関数をサポートしています – hroptatyr

4

あなたのgccの*intrin.hヘッダーは(/usr/lib/gcc/x86_64-unknown-linux-gnu/4.8.0/include/ここにあります)見つかりました。

ヘッダーimmintrin.hには、許可する機能(たとえば-msse2または-mavxを使用)に応じて、他のすべてのイントリンが含まれています。

4

intrinsicsは、ライブラリ関数のように見えますが、実際にはコンパイラに組み込まれているため、特定のマシンコードに変換されます。

Paul Rとhroptatyrは、GCCのドキュメントの場所を示しています。 Microsoft also has good documentation on the intrinsics in their compiler;あなたがGCCを使っていても、MSのアイデアの説明がより良いチュートリアルであることがわかります。

+0

ARMアーキテクチャはどうですか?それはNEON SIMDをサポートしていますか?これはx86のためのものですか? – enthusiasticgeek

+1

@enthusiasticgeek質問はx86-64を指定します。 ARMおよびNEONには独自のコンパイラと固有の組み込み関数があります。 – Crashworks

関連する問題