gccで simd mmx sse sse2

ここでは、「 gccで simd mmx sse sse2」 に関する記事を紹介しています。
gccもVer4くらいから自動ベクトル化に対応。コンパイルオプションとして-O2などと同時に-ftree-vectorizeをつける。

【C++】高速化手法【SSE】
http://pc11.2ch.net/test/read.cgi/tech/1130349336/
Cマガジン2005年10月号に「最適化コンパイラの効率的なパフォーマンス向上」という特別記事がある。
http://www.cmagazine.jp/contents/200510.html
Auto-vectorization in GCC
http://gcc.gnu.org/projects/tree-ssa/vectorization.html
MMX SSE 3D NOW!のプログラミング
http://pc11.2ch.net/test/read.cgi/tech/1085749218/

日本語技術資料のダウンロード
http://www.intel.co.jp/jp/download/index.htm Intel系CPUの資料が大量においてある。以下はその中から抜粋。

AP-943 インテル® アーキテクチャー (IA) 浮動小数点ユニット (FPU)、ストリーミング SIMD拡張命令 (SSE)、ストリーミング SIMD 拡張命令 2 (SSE2) を使用した浮動小数点算術演算
http://download.intel.com/jp/developer/jpdoc/w_fp_precision_j.pdf 

AP-941 ストリーミング SIMD 拡張命令 2 (SSE2) を使用した大数の乗算の実行
http://download.intel.com/jp/developer/jpdoc/w_big_mul_j.pdf 多倍長乗算のSIMD化の話

AP-803 Increasing the Accuracy of the Results from the Reciprocal and Reciprocal Square Root Instructions using the Newton-Raphson Method
http://cache-www.intel.com/cd/00/00/04/10/41007_nrmethod.pdf 『ニュートン・ラフソン法を使用した逆数命令および逆数の平方根命令の結果の精度の向上』資料番号 243637
http://softwarecommunity.intel.com/articles/eng/1818.htm の

IA-32 インテル® アーキテクチャソフトウェア・デベロッパーズ・マニュアル上巻
http://download.intel.com/jp/developer/jpdoc/IA32_Arh_Dev_Man_Vol1_Online_i.pdf にMMXやSSEの各テクノロジでのレジスタや命令セットの説明や、それぞれのテクノロジの間の互換性がまとまっている。有用。
IA-32 インテル® アーキテクチャソフトウェア・デベロッパーズ・マニュアル中巻
http://download.intel.com/jp/developer/jpdoc/IA32_Arh_Dev_Man_Vol2B_i.pdf の「機能的に同等のインテル®C/C++ コンパイラ組み込み関数」の章にSIMD命令と機能的に同等なコンパイラの組み込み関数が列挙されている。

Extending the World’s Most Popular Processor Architecture
http://cache-www.intel.com/cd/00/00/32/26/322663_322663.pdf SSE4関連のドキュメント



SSE2による浮動小数演算の仕組みと検証(CodeZine)
http://codezine.jp/a/article/aid/458.aspx
http://codezine.jp/a/article/aid/458.aspx?p=2 には、各CPUが持っているSIMD命令の種類の一覧表、SSE2のいくつかの命令セットが紹介さいていて、簡単なコード例が載っている。ただし性能的にFPUとの差が出るところまでは行かなかった模様。


x86拡張命令一覧表(Programming Lab)
http://krypton1.at.infoseek.co.jp/x86/x86ext.htm うまく分類され、要領よくまとまっている。やりたい処理から命令を探すことができて便利。

SIMD演算テクニック(Programming Lab)
http://krypton1.at.infoseek.co.jp/x86/simdcalc.htm こちらには、SIMDの環境でのレジスタの初期化や定数の代入、いくつかの四則演算の例が載っている。有用。


- SSEによる単精度の数値積分の高速化 -
http://yosirin9.hp.infoseek.co.jp/contents/no1/paper_no1_v2.htm rcpps命令の使用例あり。また、ソースコードや性能評価が書いてある。



2. MMX
http://homepage1.nifty.com/herumi/adv/adv10.html 読み込み・書き込み、加減、乗算、積和演算、比較、ビット演算、パック・アンパック演算などに付いて解説してある。
MMXテクノロジ最適化テクニック』のアンパック演算の解説にはいくつか誤りがあるらしい。

4. SSE
http://homepage1.nifty.com/herumi/adv/adv50.html 読み込み・書き込み、四則演算、比較→マスク、比較→フラグ、逆数、平方根、最大最小、型変換、ビット演算、パック演算、シャッフル演算等について解説。逆数や逆数平方根の近似式 についての解説も。

6. SSE2
http://homepage1.nifty.com/herumi/adv/adv52.html 命名規則を括り出したうえで、データ移動や型変換命令を説明してあってコンパクト。


SSE Performance Programming Apple のサイト。

8.2 SIMD並列化 COINSコンパイラ・インフラストラクチャより

SIMD Programming on x86 東京大学/国立天文台似鳥啓吾氏。4x4行列転置の例がある

行列の積とかsseでやってみた。 4x4行列積のSSE版。Delphi













アセンブラ画像処理プログラミング―SIMDによる処理の高速化
IA-32SIMDリファレンスブック 上 (1)マルチコアCPUのための並列プログラミング―並列処理&マルチスレッド入門IA-32SIMDリファレンスブック 下 (3)インテル スレッディング・ビルディング・ブロック ―マルチコア時代のC++並列プログラミング
MMXテクノロジオフィシャルガイド (SOFTBANK BOOKS)MMXテクノロジ最適化テクニック (Ascii books)



コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://tekitobibouroku.blog42.fc2.com/tb.php/10-15c0b542
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック