AMV4はハイパースレッディングテクノロジーに対応しているの?
ただしHTTについては対応しているかどうかではなく内容を理解する必要があるように思います。
1.HTTに対応するとはどういうことか
そもそもこれが良くわかりません。個人的には複数のスレッドを使って動作するソフトウエアは結果的にHTTの恩恵を受ける可能性があるようなので、 マルチスレッドで動作するソフトウエアはHTT対応を謳って良いのかなと考えます。
AMV4はシングルスレッド版しか作っていないのでこの考え方からHTT非対応となります。
ただ、この考え方だと、AMV2MTはマルチスレッドで動作するためHTT対応を謳ってもいいのか?と言う疑問がでてきます。
AMV2MTの開発にあたってはHTTを意識していなかったため、HTTに対応しているかと訊かれれば「AMV2MTはHTTに非対応」と回答してきましたが、先日行ったベンチマークの結果「ビデオコーデック・ベンチマーク2014夏」ではHTTの恩恵が得られているように見えます。 そこでAMV2MTとHTTについて追試してみました。
2.AMV2MTとHTTに関するベンチマークテスト
テスト方法や使うPCは先日のベンチマーク「ビデオコーデック・ベンチマーク2014夏」と同じです。
ベンチマークソフトのオプションにCPUマスクを指定して、CPUの割り当てを変更した場合にパフォーマンスがどう変わるかを観察します。
2.1.テスト条件
OS | Windows8.1 x64 Professional |
CPU | Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz Haswell |
MB | ASRock H87 Performance (Intel H87) |
Memory | DDR3 1600 16GB(8GBx2 Dual Cannel)read=25.4GB/s write=14.8GB/s |
Software | Video Codec Test 2.0.0 AMV2MT Ver2.20i |
備考 | CPUは4コア、8スレッド、HTT対応、AVX2対応。動作クロックを3.4GHz(定格)で固定し、省電力設定およびTurbo BoostはBIOSで無効化、動作クロックがテスト中に変動しないようにしています。 |
※ メモリーのread,writeはCrystalMark 0.9.114によるものです。
タイトル | Mystery of the Nile |
情報 | 1280*720、2082frames、1分26秒、3,837,598,360Byte ![]() |
備考 | AviUtlを使ってYUY2未圧縮に変換。 動きが激しくて、画質も悪いため圧縮しにくい不利な条件のそろった動画によるテスト。 いつものベンチマークで使っている動画と同じものです。 |
2.2.テスト結果
(1)は4つのスレッドをどのCPUを使って処理するか明示しない場合で、通常の利用シーンではこの結果が適用されます。
4つのスレッドをどのCPUへ割り当てるかはOSがその時のPCの状況に合わせてうまくやってくれることになっています。が、デコード処理は良いけどエンコード処理はパフォーマンスが低下していてうまく割り当てられていないように見えます。また、タスクマネージャを見るとまんべんなく割り当てられているのが解ります。
(2)は4つのスレッドを2つのCPUコアへ割り当ててHTTにより処理した結果です。もっとも低いパフォーマンスとなっています。
(3)は4つのスレッドを4つのCPUコアへ割り当てて処理しています。この条件ではHTTは使われないはずですが、心配なので念のためBIOSからHTTを無効にした(4)のテストも行いました。
(3)と(4)の結果がほぼ一致することからHTTを使わない場合のパフォーマンスとみてよさそうです。
(5)は4コア8スレッドのテストです。CPUリソースを最大限に利用するはずなので最もいい結果が期待できます。
しかし、エンコード速度は(3)の4コア4スレッドとほぼ変わらないためHTTの恩恵は得られないと言えます。
デコード速度は(3)より21%向上しているためHTTの恩恵を少しだけ受けられると言えそうです。
以上からAMV2MTはHTTに対応していると言っても差支えないけど、デコード速度が少し早くなるだけで
HTTに対応しているかどうかはそんなに重要ではない。と言ったところでしょうか。
3.エンコーダーでHTTの恩恵がなく、デコーダーで恩恵があるのは何で?
推察になりますが、条件分岐処理の影響が要因の一つと思います。
AMV2MTのエンコード処理には条件分岐が含まれていないのに対し、AMV2MTのデコード処理の中心部では条件分岐を使っています。
参考「AVX2対応デコーダーはなぜ3倍も高速化できたのか」
条件分岐の分岐予測が外れると、しばらくの間、演算器を使わない状態になるので、その間にもう一方のスレッドが動作して全体のパフォーマンスが向上していると思われます。
また、上記のAMV2MTのデコード処理はHTTの恩恵を受けられますが、後に公開したAVX2対応 AMVデコーダー デモ版では条件分岐処理を廃止することで大幅にパフォーマンスを向上させています。
マルチスレッドに対応していないので確認はできませんが、おそらく条件分岐処理がないためHTTの恩恵は受けられないと思われますが、HTTの恩恵以上のパフォーマンスを発揮しています。
HTTによるパフォーマンス向上より、条件分岐処理を行わないなどの最適化の方がよりパフォーマンス向上が見込めるのでこの点からも、HTTに対応しているかどうかと言うのはあまり重要ではないように思います。
4.HTTについてのカン違い
いままで私がHTTを語る際に使っていた整数スレッド、実数スレッドのような概念は関係なかったようです。
Haswellを例にとると1つのコアに4つのALUが実装されているので整数スレッド2つでもHTTの恩恵を受けられる可能性があります。SSE命令やAVX命令も1コアあたり最大3つ使えるようです。
また、前述の条件分岐のようにスレッドが一時的に止まっている間、もう一方のスレッドが動作するので、整数処理しか行わないプログラムであってもHTTの恩恵は受けられます。