マルチスレッド処理8コア16スレッドのRyzenでマルチスレッド処理に対応したプログラムをテストします。MultiThreading)と言う仕組みがあります。Compulex)という構成になっています。1800Xは8コア16スレッドとして動作します。タスクマネージャ上のCPU0とかCPU1のこと。CPUコアとか物理プロセッサと呼ばれる部分。SMTの場合、一つのコアに2つの論理プロセッサがあります。4コアを一つのパッケージとしたもの。ビデオコーデックを4スレッドでエンコード、およびデコードするように設定し、処理時間(FPS)をCPU(論理プロセッサ)の割り当てを変えながら計測していきます。論理プロセッサの割り当てについてはCPUマスクと表記し16進数で示します。CPU0からCPU3を使い2コア4スレッドを使って処理します。SMTにより1コアのリソースを2つのスレッドで分け合います。CPU0,2,4,6を使い4コア4スレッドで処理します。各スレッドは1コア分のリソースをほぼ独占できます。CPU0からCPU7までの8つの論理プロセッサのうち空いているリソースをOSが判断して自動で割り当てて処理します。CCX0の1コア2スレッドとCCX1の1コア2スレッドで処理します。2つのCCXをまたがる場合にどうなるか見ます。CCX0の2コア2スレッドとCCX1の2コア2スレッドで処理します。すべてのスレッドが1コア分のリソースをほぼ独占できますがCCXをまたがります。CPU0からCPU15までの16の論理プロセッサのうち空いているリソースをOSが判断して自動で割り当てて処理します。これが既定の動作(特別な設定をしない場合の動作)です。いい結果となったのは0x0055と0x00FFです。0x0055については4スレッド分の処理を行う場合の理想的な割り当てなので、納得です。0x00FFでもほぼ同等の性能を発揮したのでこのテストにおいてはOSによる自動割り当ても十分優秀と言えます。0x000Fは2コア分のリソースしか使えないところに4スレッド分の処理を詰め込むためパフォーマンスが低下しています。0x0055と比べエンコードで約25%減、デコードで約20%減。Ryzenを使う上で気になるのが後半の3パターンです。CCXをまたがって処理すると(CCXをまたがらない場合に比べ)エンコードで約15%減、デコード処理では著しいパフォーマンスの低下は見られませんでした。0x0303はCCXをまたがり且つ2コア分のリソースしか使えないため最悪の結果となり、0x0055と比べエンコード処理は約35%減となっています。以上より、CCXをまたがってマルチスレッド処理を行う場合、パフォーマンスが低下するプログラムと、CCXをまたがっても低下しないプログラムがあることが解ります。0xFFFFは既定の動作なのでRyzenを普通に使っているとマルチスレッドで処理するプログラムの場合にCCXをまたがって10%程度パフォーマンスが低下する場合があるかもしれません。Lake)で可逆圧縮コーデッを使ったベンチマークテストを行いました。シングルスレッド処理における各CPUの性能やSSE命令およびAVX2命令の挙動を見ていきます。720、YUY2の未圧縮に変換。その動画ファイルをAMV4ビデオコーデックのDY3設定でエンコード、デコードした際の処理時間(FPS:一秒間に何フレーム処理できるか)を計測します。両CPU共、動作クロックはRyzenの定格である3.6GHzになるよう設定。メモリの動作クロックも両方とも2133MHzに設定し、なるべく同じ条件でテストします。CPUは8コア、16スレッド、AVX2対応。動作クロックをBIOSにて全コア3.6GHz(定格)に設定しましたがアイドル状態になると3.1GHzまで低下します。テスト中はほぼ3.6GHzで動作しますが完全にクロックを固定できていません。CPUは4コア、8スレッド、AVX2対応。BoostはBIOSで無効化、動作クロックがテスト中に変動しないようにしています。646■考察AVX2を使ったKabylakeが突出した性能を発揮していることが解ります。理論上4K動画を秒間60フレーム以上処理する能力があります。RyzenはAVX2とSSE4どちらでもエンコード処理はほぼ同じ性能となっています。AVX2命令を使っても性能が向上しないためこのテストではKabylakeと比べると少し見劣りする結果となりました。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における豆知識かもしれません。0あまラボへようこそこのブログでは自作ソフトの最新情報やtips、PC動画に関する話題を掲載していきます。各記事へは下にあるカテゴリからアクセスして下さい。