08/12/23 22:27:30 qfqIdVCu0
>>945
まずアセンブラレベルで使えるようになること。
Instric命令で作るときにも無駄の無いコードが書けます。
私の場合、まずMMXの頃にキュービック法静止画拡大プログラムを書いたりしました。
そのときにMMXのプログラム本を参考にしたのですが、今からやるならインテルのサイトから
IA32アーキテクチャのドキュメントを落としてきましょう。SSE3までなら日本語版のものがあります。
『IA-32 インテルR アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル』
上巻:基本アーキテクチャ(資料番号253665-013J)
中巻A:命令セット・リファレンスA-M (資料番号253666-013J)
中巻B:命令セット・リファレンスN-Z (資料番号253667-013J)
下巻:システム・プログラミング・ガイド(資料番号253668-013J)
下巻は特に必須ではありません。
後は他人のプログラムを見たほうがいいです。自分の得意なジャンルで等価の非SIMDコードと比較したりします。
参考本は単なる命令セットの羅列に終わったり、需要が少なく高価だったりしますのであまりお勧めしません。
単にSIMD化しただけでは早くならない場合もあります。データ構造を変えたり16バイトアラインメントに気を使ったりします。
warpsharp mtの場合も最も重いInterpolateCubicで単にSIMD化しただけでは早くならずいったん浮動小数点を経由させ計算数を減少させたりしています。
不要な条件分岐を減らすなどの通常の最適化テクニックも必要です。
SIMDが世に出てからしばらく立ちますが最適化が出来る人はなかなか増えません。ぜひ、習得してください。