掲示板お問い合わせランダムジャンプ

トップスペース

2008年04月29日
MMXとSSEに対応
 最近AviUtlのプラグインのことばかりですが、「間引ける1/2縮小」と「ガウスぼかし」をMMXとSSEに対応させて見ました。いつものところにアップしてあります。
 AviUtl プラグイン フィルタ by うえぽん
 もうこれ以上やることはないだろうし、道具が出来上がったのであとはプレイ動画を作ってニコニコにコッソリアップするだけです。AviUtlのプラグインを作るのはもう飽きました。

●組み込み関数を使おう
 MMXやSSEはアセンブラで組むものと思っている人も多いかもしれませんが、わざわざアセンブラを書かなくても“組み込み関数”を使えばC言語でもプログラムを組めます。しかもこれならコンパイラが最適化してくれるので、超凄腕のアセンブラ職人でもない限り組み込み関数で組んだ方が速いコードになります。超凄腕の人以外は組み込み関数を使いましょう。
 ただし、アセンブラは書かなくとも多少は読めたほうがいいです。コンパイラにアセンブラコードを出力させて、最適化度合いを見るからです。次第にC言語で書いてるのにアセンブラコードが見えるようになります。

●キャッシュしないと速くなることもある
 以前の「間引ける1/2縮小」のベンチマークではメモリ速度の壁にぶつかっていてこれ以上速度アップできないと思ってましたが、SSEのキャッシュ制御で出力時にL1やL2にキャッシュしないようにしたところ、なんとさらなる速度アップができました。
 しばらくアクセスしないデータはキャッシュしない方がL1、L2に余裕ができ、結果的に速くなるらしいです。
 以下ベンチマークの結果。Athlon64x2 4200+(2.4GHzにOC) DDR2 800MHzで、1280x720の動画(秒速5センチメートル)での結果です。
間引き方スレッド数SIMDなしMMXSSE
4ドットブレンド22.02 sec2.02 sec1.54 sec
12.57 sec2.30 sec1.94 sec
横ブレンド21.25 sec1.25 sec0.89 sec
11.70 sec1.58 sec1.37 sec
縦ブレンド22.01 sec2.01 sec1.53 sec
12.36 sec2.23 sec1.81 sec
間引く21.25 sec1.25 sec0.84 sec
12.36 sec2.23 sec1.81 sec


●メモリアライメントは揃えた方が速い
 「ガウスぼかし」もSSEに対応して速くなりました。ただし4個同時に乗算や除算することよりも、short型x3のピクセルデータをfloat型x4に拡張して128bitのメモリアライメントに並べたことによる速度アップが大きかったです。
 以下マルチスレッドでのベンチマーク結果。環境は上と同じ。設定の半径は24。シングルだとこれのちょうど2倍の時間が掛かりました。
モード時間
double(倍精度)で計算0.172 sec
longで計算0.250 sec
SSE(単精度)で計算0.125 sec

 キャッシュ制御といい、これといい、メモリ周りの見直しが一番速度アップになりそうです。

【余談】
 なまじ3D Now!に対応してしまうと、メンテナンスのためにAMDのCPUを所有し続けるはめになるんだよな。
[ 投稿者:うえぽん at 23:59 | AviUtlや画像処理 | コメント(2) | トラックバック(0) ]

この記事へのコメント
なまじSSEに対応してしまうと
なまじSSEに対応してしまうと、メンテナンスのためにINTELのCPUを所有し続けるはめになるんじゃないでしょうか?
投稿者: Taro at 2008-06-18 13:27:46
AMDでもSSEは使えます
AMDのCPUはこれからもずっとSSEを使えますよ。
(商標の関係で3DNow! Professionalと呼んでますが)

一応「3DNow!はなんだったんだろう」という自虐ネタなんですけどね……。

無印の3DNow!はAMDのCPUでしか使えないんです。
しかも最近のAMDのCPUは3DNow!とSSEの両方に対応してます。
それならSSEに対応すれば多くのCPUに対応できますし、その方が高速だったりもします。
AMDのCPUを使ってるユーザーでも3DNow!を使っている人はごく少数じゃないでしょうか。
投稿者: うえぽん at 2008-06-18 16:16:30

この記事へのトラックバック

この記事へのトラックバックURL
http://shinshu.fm/MHz/14.30/a13493/0000236875.trackback

この記事の固定URL
http://shinshu.fm/MHz/14.30/archives/0000236875.html

記事へのコメント
 
簡単演算認証: 5 x 5 + 5 =
計算の答えを半角英数字で入力して下さい。
名前: [必須]
URL/Email:
タイトル:
コメント:
※記事・コメントなどの削除要請はこちら