SIMDを使う
QtCreatorでSIMD (MMXやSSE) を使う方法です。先ずは *.proファイルに、
QMAKE_CXXFLAGS += -mmmx QMAKE_CXXFLAGS += -msse2 QMAKE_CXXFLAGS += -msse3
と追加します。あとはソースコード側でヘッダのinclude。
#include <mmintrin.h> // SSE #include <emmintrin.h> // SSE2 #include <pmmintrin.h> // SSE3
あとはサンプルコードを一つ。
__m128i a,b,c; int dst[4] __attribute__((aligned(16))) ; int src1[4] __attribute__((aligned(16))) = {1,2,3,4}; int src2[4] __attribute__((aligned(16))) = {2,3,4,5}; a = _mm_load_si128( (__m128i*)src1 ); b = _mm_load_si128( (__m128i*)src2 ); c = _mm_add_epi32( a, b ); _mm_store_si128( (__m128i*)dst, c );
理解度はイマイチだし、使う予定は無いんですが…動きそうなのを確認しただけ。
Integer Intrinsics Using Streaming SIMD Extensions 2