タグ

ブックマーク / tt.atnifty.com (2)

  • SSE2命令(pxor)を使用した高速XOR演算プログラム - ちーちーの小ネタ部屋

    SSE2では、128ビット整数演算のSIMD命令の拡張が行われており、たとえば、pxor命令を使うことで128ビット単位でXORの演算を行うことができます。 pxor命令を使って128ビット単位で演算を行うには、SSE/SSE2用のxmmレジスタにmovdqu/movdqa命令(「SIMD拡張 命令を使用したメモリ間転送プログラム」で解説)でデータをメモリから転送し、pxor命令を呼ぶことで実行できます。pxor命令は、指定されたレジスタが mmx(64ビット)かxmm(128ビット)かを判断して演算を行ってくれます。以下がpxor命令を使ったXOR演算のソースコードになります。SSE2非対応の場合を想定して、longで演算を行う部分も書いてま す。#define SSE2をコメントアウトするとlong演算になります。 ソースコード #include #include #define SS

  • SSE2命令(movdqu)を使用した128ビット単位のメモリ間転送プログラム - ちーちーの小ネタ部屋

    SSE2では、128ビット整数演算のSIMD命令の拡張が行われており、演算だけでなく、movdqa・movdquという命令を使うことで128ビット単位でメモリ間のデータコピーを高速に行うことができます。movdqaは転送対象のメモリのアドレスが16バイトの境界(アライメン ト)に揃ってる必要があります(アドレス値が16で割り切れる)。これに対して、movdquでは16バイトのアライメント制約はなく、どのアドレス値からでも読み書きできます。ただ、アライメントが揃っている分、CPUが処理しやすいため、movdqa命令の方が実行速度が速いです。速さを追求するならば、mallocや配列の確保時に16バイトのアライメントを意識する必要があります。各命令の基的な実行速度はIntelから以下の資料が出ていますが、この資料上ではmovdqa・ movdquのスループットとレイテンシは同じになってますね・

  • 1