Ryzen 1800X 、 Core-i7 7700K 可逆圧縮ベンチマーク
シングルスレッド処理における各CPUの性能やSSE命令およびAVX2命令の挙動を見ていきます。
■テスト方法
動画ファイル Mystery of the Nile (こちらのサンプル動画1)を1280 x 720、YUY2の未圧縮に変換。
その動画ファイルをAMV4ビデオコーデックのDY3設定でエンコード、デコードした際の処理時間(FPS:一秒間に何フレーム処理できるか)を計測します。
両CPU共、動作クロックはRyzenの定格である3.6GHzになるよう設定。
メモリの動作クロックも両方とも2133MHzに設定し、なるべく同じ条件でテストします。
■テスト環境
OS | Microsoft Windows 10 Home 64-bit |
CPU | AMD Ryzen 7 1800X 3.6GHz (100MHz x 36) |
MB | MSI B350 TOMAHAWK |
Memory | DDR4 16GB (8GB x 2 Dual channel) 2133MHz |
備考 | CPUは8コア、16スレッド、AVX2対応。動作クロックをBIOSにて全コア3.6GHz(定格)に設定しましたが アイドル状態になると3.1GHzまで低下します。テスト中はほぼ3.6GHzで動作しますが完全にクロックを固定できていません。 |
OS | Microsoft Windows 10 Home 64-bit |
CPU | Intel(R) Core(TM) i7-7700K 定格4.20GHz テスト時は3.6GHz (100MHz x 36) |
MB | ASUS PRIME Z270-K |
Memory | DDR4 16GB (8GB x 2 Dual channel) 2133MHz |
備考 | CPUは4コア、8スレッド、AVX2対応。動作クロックをRyzenと同じ全コア3.6GHzで固定し、省電力設定およびTurbo BoostはBIOSで無効化、動作クロックがテスト中に変動しないようにしています。 |
AMV4 Video Codec Ver4.02 |
CodecBench64.exe Ver1.01 自作のベンチマークソフト(非公開) |
■結果
Codec | Mode | Module | Encode FPS | Decode FPS |
AMV4 | DY3 | AVX2.0 | 643 | 704 |
AMV4 | DY3 | SSE4.1 | 643 | 880 |
Codec | Mode | Module | Encode FPS | Decode FPS |
AMV4 | DY3 | AVX2.0 | 1106 | 1169 |
AMV4 | DY3 | SSE4.1 | 747 | 646 |
■考察
AVX2を使ったKabylakeが突出した性能を発揮していることが解ります。ちなみにこのFPSが540を超えると 理論上4K動画を秒間60フレーム以上処理する能力があります。
一方、RyzenはAVX2とSSE4どちらでもエンコード処理はほぼ同じ性能となっています。AVX2命令を使っても性能が向上しないためこのテストではKabylakeと比べると少し見劣りする結果となりました。
PC Watchのこちらの記事によると
Ryzenの場合256bitのAVX命令は128bitのマイクロオペレーションコード2つに分解して処理するためAVX命令、SSE命令どちらを使っても単位時間あたりに処理できるデータ数(Byte数)に違いが出ないようです。
また、Ryzenのデコード処理に注目するとAVX2版よりSSE4版の方が2割以上良い結果が出ています。
さらに言えば、KabylakeのSSE4版よりもRyzenの方がいい結果となっています。
これは単にAVX命令とSSE命令による違いではなく、プログラムの実装方法による違いが影響していると思われます。
まだ調べていないので予想となりますが、AMV4ビデオコーデックは条件分岐処理を排除することで処理速度の向上を図っているけど、SSE4版のデコード処理だけは条件分岐処理を使って処理するようになっているので、そのことがRyzenでは良い結果につながっているのかもしれません。
・RyzenはAVX命令を使ってもSSE命令を使ってもパフォーマンスは変わらない(プログラムによっては、AVXを使うとパフォーマンスが低下する場合がある)
・Ryzenは分岐処理を使っても高いパフォーマンスを維持できるかもしれない(未検証)
・KabylakeのAVX命令は額面通りの圧倒的な性能を発揮する(ただしAVX命令を活かせるプログラムは皆無に近い)
・AVX命令を活かせないプログラムの場合にどちらが有利かはプログラム次第、IPCは互角と言って良いのではないでしょうか。ただし、空冷で簡単に5GHzを達成するので動作クロックを考慮するとやはり1コアあたりの性能はKabylakeに軍配が上がることが多いと思います。
最後に、RyzenでAMV4ビデオコーデックを使う場合はSSE4を使うように設定した方が良いです(自動設定だとAVX2を使ってしまいます)。AMV4ビデオコーデック以外でもAVX命令を使うかどうか設定できるプログラムの場合にAVXを使わないように設定することで性能が向上する場合があるようなので、Ryzenにおける豆知識かもしれません。
