タグ

simdに関するumitanukiのブックマーク (3)

  • アセンブラコードで見るC++ Composer XEの強力な最適化機能 2ページ | OSDN Magazine

    このなかでも、特に注目したい機能が自動ベクトル化と自動並列化機能、ハイパフォーマンス最適化機能である。 連続した同一の演算処理をSSEで実行する「自動ベクトル化」 インテルCPUには、「ストリーミングSIMD拡張命令(SSE)」と呼ばれる演算命令が備えられている。SSEはXMMレジスタと呼ばれる専用レジスタを使用して各種演算を実行する機能で、FPU(浮動小数点処理ユニット)の代わりとして利用できるだけでなく、複数データに対する演算を同時に実行することが可能だ。XMMレジスタのサイズは128ビットなので、たとえば8バイトの倍精度浮動小数点データなら2個、4バイトの単精度浮動小数点データなら4個、1バイトのデータであれば16個を同時に処理できる。このように複数のデータを一括して処理する演算は「ベクトル処理」などとも呼ばれ、このような処理を行う命令は「パックド命令」などと呼ばれている。多くのデー

  • Programming Memo: SIMDでテーブル参照

    2009年11月14日土曜日 SIMDでテーブル参照 こんな感じの、いわゆるテーブル参照をSIMDで並列化することを考える。 char table[N] int index[N] char result[N] for ( int i = 0; i Nが16以下ならば簡単。shuffle命令を使えばいい。 __m128i mindex; __m128i mtable; __m128i mresult; mindex = _mm_load_si128( (__m128i *)index ); mtable = _mm_load_si128( (__m128i *)table ); mresult = _mm_shuffle_epi8( mtable, mindex ); _mm_store_si128( (__m128i *)result, mresult ); Nが16より大きい場合は、sh

  • SIMD演算 - MUGI COM

    C言語でSSEやSSE2を使う方法について。ポイントがいくつかあります。 xmmintrin.hやemmintrin.hをインクルードする SSE命令のみならxmmintrin.h、SSE2命令も使うならemmintrin.h SIMD命令でアクセスするメモリは16バイトアラインメントにする gccの場合、_mm_malloc関数を使えばよい。 MMX命令はAMDCPUでは使えない Pentium4以降に限定されますが、SSEやSSE2を使うのが良いでしょう。 これらを踏まえて、画像の各ピクセルのRGB値を反転させる例を示します。 各ピクセルは8bitのRGB値が並んでいるものとします。8bitの整数演算を行うので、8bit計算を16個並列で行うSSE2命令を使用します。 最初はSSE2のインクルードファイル。 #include <emmintrin.h> つづいて16バイトアラインメン

    SIMD演算 - MUGI COM
  • 1