Ryzenの得意あるいは不得意

この前ゲットしたRyzenは、cinebenchやx264エンコではかなりの速さを発揮していた

一方、これまで出ているいろいろなベンチマークを見ると、メモリアクセスが遅いとか、特にprefetchが働かない場合のレイテンシが大きいとかいう話を聞く。そこで、実際にRyzenがメモリアクセスが苦手なのか、確認してみた。

また、RyzenはSMTの効果が比較的高い、という話もある。そこで、並列で動作するスレッドの各コアへの割り当てを調整して、速度がどう変化するか調べた。

確認には姫野ベンチマークを使用した。

姫野ベンチは、ポアソン方程式をヤコビ反復法で解く場合の速度をはかるもの。結果はMFLOPSで取得され、値が大きいほどはやいことになる。いくつかの計算サイズが用意されていて、計算サイズが小さい場合には、キャッシュにデータが乗りやすくなり、演算律速となる一方、行列サイズが大きくなると、データがキャッシュに乗らなくなり、メモリ律速になる。

今回は、こちらのページにある"C + OMP, dynamic allocate version"を少しいじったものを使用した。いじった部分はOpenMPのスレッド数を指定した数にしたり、各コアへの割り当てを調整する部分で、計算そのものは変更していない。

VC2017を使ってOpenMPを有効にして、64bitでビルドした。一応、 /arch:AVXもつけたが、ループが複雑なため自動ベクトル化はされてないみたい(逆アセンブルで確認)。

テストしたのはXSサイズとLサイズ。それぞれスレッド数とその割り当てを8通りほど試した。数字がスレッド数、"P"(Physical)は物理コアを優先して割り当てることを意味し、"L"(Logical) は論理コアに優先して割り当てることを意味する。

実際にその様子をタスクマネージャーで確認するとこんな感じ。

P1↓


L2↓


P2↓


L4↓


P4↓


L8↓


P8↓


L16↓




比較環境は以下の通り。前回とだいたい同じだが、今回はメモリ帯域が影響しそうだったので、5960X @ 3.6Ghzについては、メモリを2chのものと4chのものをそれぞれ別に測定した。

・Ryzen7 1700 @ 3.6GHz
・i7 5960X @ 3.6GHz, 2ch (Ryzen合わせ)
・i7 5960X @ 3.6GHz, 4ch
・i7 5960X @ 4.2GHz, 4ch
・i7 7700K @ 4.8GHz

詳細はこんな感じ。
CPURyzen 7 1700
@ 3.6GHz
i7 5960X
@ 3.6GHz,
2ch
i7 5960X
@ 3.6GHz,
4ch
i7 5960X
@ 4.2GHz,
4ch
i7 7700K
@ 4.8GHz
コア数8C/16T8C/16T4C/8T
定格3.0GHz3.0GHz4.2GHz
Turbo3.7GHz3.5GHz4.5GHz
設定Clock3.6GHz3.6GHz4.2GHz4.8GHz
設定電圧1.225V1.100V1.164V1.296V
設定Uncore-3.6GHz3.8GHz4.4GHz
メモリG.Skill F4-3400C16Q-16GRBD Avexir AVD4U24001608G-4MCorsair CMK16GX4M2B4000C19R
メモリ速度DDR4-2400, 2chDDR4-2400, 2chDDR4-2400, 4chDDR4-2666, 4chDDR4-3600, 2ch
メモリタイミング15-15-15-3615-15-15-3516-16-16-39-216-16-16-36-1
メモリ電圧1.20V1.20V1.255V1.35V
マザーボードAsrock AB350 Pro4 (1.50)Asrock Fatal1ty X99 Professional Gaming i7Asrock Z270 Extreme4
SSDPlextor PX-128M3 128GBPlextor M8Pe 1TB (PX-1TM8PeY)Plextor M6 Pro (PX-256M6Pro)
ケースAntec P100Corsair Carbide 330RAntec P100
冷却純正 (Wraith SPIRE)Cooler Master Nepton 280L (簡易水冷 280mm)CRYORIG A80 (簡易水冷 280mm)
電源Enermax EPM600AWTSeasonic SS-760XP2Seasonic SS-660XP2S
OSWin10 x64Win10 x64Win10 x64





結構、実行するたびに値がブレることがあるので注意。2回ほどやって速い方の値だが、まだバックグラウンドのタスクなどで遅くなってしまっているのがあるかもしれない。

まずは、XSの結果から。



・5960X@3.6GHz,2chと5960X@3.6GHz,4chがほぼおなじで、このサイズだとキャッシュが効いてほとんどメモリは関係ない模様。

・8コア使い切ったときはR7 1700@3.6GHzのほうが、5960X@3.6GHzより高速で、これはx264とかでも同じ。Ryzenの演算力の高さが表れている。さすがに5960X@4.2GHzには勝てない。

・5960XでもR7 1700でも、P2 > L4, P4 > L8などとなっていて、この場合にはSMTを切ったほうがいいらしい。これは同じコアにスレッドが入ることで、L1/L2キャッシュで競合がおき、遅くなってしまっていると思われる。




次にLサイズの結果。



・5960X@3.6GHz,2chと5960X@3.6GHz,4chでそこそこ差が出ていて、Lサイズではメモリ帯域が重要になってきている事がわかる。

・メモリが効くようになったためか、R7 1700@3.6GHzはだいぶ遅くなってしまい、同じクロックの5960X@3.6Ghz,2chと互角、あるいはやや遅いぐらいまで後退してしまった。また、5960X@3.6Ghz,4ch相手では歯が立たない感じになっている。特にスレッド数を増やした場合に顕著。

・5960Xでは相変わらずP2 > L4, P4 > L8などとなっていて、やはりこの場合にはSMTを切ったほうがいいらしい。

・R7 1700では、XSサイズのときと異なり、P2 < L4, P4 < L8となっていて、面白い。7700Kも同様。原因はよくわからないが、どうせキャッシュミスするのだから、キャッシュの競合は大きな問題にならず、逆にSMTによってメモリアクセスのレイテンシが遮蔽できたのかもしれない。



というわけで、演算中心のときはやはりRyzenは速いが、メモリアクセスが重要な場面では遅くなるのかもしれない、ということがわかった。メモリをDual channelに揃えた5960X@3.6Ghz,2chと比較しても、XSサイズでは優勢なのに対し、Lサイズでは互角あるいは劣勢となってしまっている。

SMTについては効果のあるときとないときがはっきり出た。やはり演算対象によって効果がだいぶ変わってくるようだ。

まあ、x264エンコードなら前の記事のように、Ryzenは優秀だし、SMTも有効な方がいいに決まっている。ただ、姫野ベンチのメモリアクセスパターンが複雑なのもあるだろうけど、メモリアクセスが中心の計算になってくると不得意なものもあるよ、ということがわかった。
スポンサーサイト



コメントの投稿

非公開コメント

No title

メモリアクセス部分で遅くなるという下馬評通りの結果にはなっていますね。
それでもこの価格でこの性能はやはり素晴らしいですが。
今後、内部バス部分の改良や高速化、メモリコントローラーの改良や、4ch化等でまだまだ伸びる、伸びしろを感じます。

新GPUのVegaには、High Bandwith Cache Controller(HBCC)というものがあって、HMB2の高速メモリをキャッシュに使い、あらゆる種類のメモリを統合的に扱えるそうです。
この仕組み、そのうちCPU側にも入りそうな気がしますね。
そうすれば、メモリ速度に悩まされている問題が大幅に解決しそうですし。

Re: No title

たしかに値段を考えれば、全く問題ない性能だと思います。

内部バスのクロックがメモリクロックに連動するということなので、やはり高クロックのメモリでも安定するようになって欲しいですね。メモリが速くなれば、メモリ周りの弱点も目立たなくなるかもですので、そのうち来るという噂のBIOSアップデートには期待したいところです。

HMB2は楽しみですね。APUにもぜひほしいところです。

No title

メモリークロックは確かに気になりますね
5月に落ちてくるアップデートでうまく回ってくれると良いのですが・・・・

あの時からの追記ですが2933MHzで安定しました
メモリの電圧を1.35Vから1.36Vにしたら安定しました
原因は電圧不足だったようです
私以外にも電圧を上げると安定した報告もあるようです

Ryzen7で公式サポートされているメモリに関して

はじめまして。興味深く読ませて頂きました。

ところで、ベンチ結果には影響しないとは思うのですが、
Ryzen7のメモリは、現状、公式サポートは、
DIMM 4枚挿しの場合 片面実装でDDR2133、両面実装の場合1866までとなっています。
https://bucci.bp7.org/archives/37675
(後々、BIOSアップデートなどで改善して欲しいところですね…)

前の記事に合った『DDR4-2400を越える場合に不安定』の原因はこれかなぁと。
2400でもサポート外なので、まだ下げたほうが安定するのかもしれませんね。

No title

7700KはDDR4の3600じゃなくて2400に落とさないと比較にならないのではないでしょうか

No title

>Ryzen7で公式サポートされているメモリに関して
公式サポートはおっしゃるとおりです。まあ、なので無茶を使用とはしているとは思います。

今後のBIOSアップデートに期待ですね。

>7700K
記事の中では、基本的に1700@3.6GHzを5960X@3.6GHzと比較していろいろ書きました。1700と7700Kを比較してどうのこうのというコメントは書いていないと思いますが…。

おっしゃるように、7700Kのほうはメモリ速度は揃えていません。7700Kも3.6GHz,DDR4-2400,2chにすればよかったのかもですが、まあそもそもコア数違うので、あまり比べてもしょうがないかなと思い、より興味のあった常用している速度でどのくらい頑張れるか見てみました。

記事に書いたように、1700@3.6GHzと比較するのであれば、8コア同士となる5960X@3.6GHz,2chだと思います。(2chにするためにわざわざ5960Xのメモリ2枚引っこ抜いたので)

5960Xのメモリを戻したとき、一度起動しなくて焦りました…。
プロフィール

rigaya

Author:rigaya
アニメとか見たり、エンコードしたり。
連絡先: rigaya34589@live.jp
github twitter

最新記事
最新コメント
カテゴリ
月別アーカイブ
カウンター
検索フォーム
いろいろ
公開中のAviutlプラグインとかのダウンロード

○Aviutl 出力プラグイン
x264guiEx 3.xx
- x264を使用したH264出力
- x264guiExの導入紹介動画>
- x264guiExの導入
- x264guiExのエラーと対処方法>
- x264.exeはこちら>

x265guiEx
- x265を使用したH.265/HEVC出力
- x265guiExの導入>
- x265.exeはこちら>

QSVEnc + QSVEncC
- QuickSyncVideoによるHWエンコード
- QSVEnc 導入/使用方法>
- QSVEncCオプション一覧>

NVEnc + NVEncC
- NVIDIAのNVEncによるHWエンコード
- NVEnc 導入/使用方法>
- NVEncCオプション一覧>

VCEEnc + VCEEncC
- AMDのVCE/VCNによるHWエンコード
- VCEEnc 導入/使用方法>
- VCEEncCオプション一覧>

svtAV1guiEx
- SVT-AV1によるAV1出力
- svtAV1guiExの導入>
- SVT-AV1単体はこちら>

VVenCguiEx
- VVenCによるVVC出力
- VVenCguiExの導入>

ffmpegOut
- ffmpegを使用した出力
- ffmpegOutの導入>


○Aviutl フィルタプラグイン
自動フィールドシフト (ミラー)
- SSE2~AVX512による高速化版
- オリジナル: aji様

clfilters 
- OpenCLベースの複数のGPUフィルタ集
- 対応フィルタの一覧等はこちら

エッジレベル調整MT (ミラー)
- エッジレベル調整の並列化/高速化
- SSE2~AVX512対応
- オリジナル: まじぽか太郎様

バンディング低減MT (ミラー)
- SSE2~AVX512による高速化版
- オリジナル: まじぽか太郎様

PMD_MT
- SSE2~AVX512による高速化版
- オリジナル: スレ48≫989氏

透過性ロゴ (ミラー)
- SSE2~FMA3によるSIMD版
- オリジナル: MakKi氏

AviutlColor (ミラー)
- BT.2020nc向け色変換プラグイン
- BT.709/BT.601向けも同梱

○その他
Amatsukaze改造版
- AmatsukazeのAV1対応版

x264afs (ミラー)
- x264のafs対応版

aui_indexer (ミラー使い方>)
- lsmashinput.aui/m2v.auiの
 インデックス事前・一括生成

auc_export (ミラー使い方>)
- Aviutl Controlの
 エクスポートプラグイン版
 エクスポートをコマンドから

aup_reseter (ミラー)
- aupプロジェクトファイルの
 終了フラグを一括リセット

CheckBitrate (ミラー, 使い方, ソース)
- ビットレート分布の分析(HEVC対応)

チャプター変換 (使い方>)
- nero/appleチャプター形式変換

エッジレベル調整 (avisynth)
- Avisynth用エッジレベル調整

メモリ・キャッシュ速度測定
- スレッド数を変えて測定
- これまでの測定結果はこちら

○ビルドしたものとか
L-SMASH (ミラー)
x264 (ミラー)
x265 (ミラー)
SVT-AV1 (ミラー)

○その他
サンプル動画
その他

○読みもの (ミラー)
Aviutl/x264guiExの色変換
動画関連ダウンロードリンク集
簡易インストーラの概要

○更新停止・公開終了
改造版x264gui
x264guiEx 0.xx
RSSリンクの表示
リンク
QRコード
QR