Zen2のSIMD命令のthroughputとlatency

Zen2のポイントの一つとしては、AVX/AVX2/FMA3などの256bit SIMD命令のスループット改善を挙げることができ、その効果はAVX2が効果的なx264/x265で垣間見ることができる

そこで、今回はこれを直接測定してみた。


実行ファイルはこちら。 (ソースコードはこちら)

ざっとまとめるとこんな感じ。

Zen2ZenHaswell   Skylake   
整数 加減算256bit x3128bit x3256bit x2256bit x3
 飽和処理付き256bit x2128bit x2256bit x2256bit x2
整数 積算256bit x1128bit x1256bit x1256bit x2
整数 論理演算256bit x4128bit x4256bit x3256bit x3
整数 シフト256bit x1128bit x1256bit x1256bit x2
整数 比較256bit x3128bit x3256bit x2256bit x2
整数 最大最小256bit x3128bit x3256bit x2256bit x2
整数 平均256bit x2128bit x2256bit x2256bit x2
整数 シャッフル256bit x2128bit x2256bit x1256bit x1
 pblendvb256bit x1128bit x1256bit x0.5256bit x0.5
128bit x3 (謎)
 pblendd256bit x3128bit x3256bit x3256bit x3
 pblendw256bit x3128bit x3256bit x1256bit x1


Zen2はほぼZenの構成のまま256bit化を果たしたように見える。これにより、シフトと積算を除き、理論上はSkylakeと同等ないし上回るスループットを得られることになる。

なお、Skylakeはシフトと積算も2基ついている(port0/port1)が、これはSkylake-Xでport0とport1を束ねてAVX512として使用するための準備だと思われる。

生データはこんな感じ。x264/x265では浮動小数はほぼ使わないのであまり関係ないが、AMDからメッセージのあった通り、浮動小数の積算のレイテンシが3となっているのも確認できる。

Zenはpshufbとかのshuffleが2基ついてるの素敵。なんでIntelはHaswellで1基に減らしちゃったんですかね、SandyBridgeまでは2基あったはずなのに。


microbench 0.02 by rigaya
AMD Ryzen 7 3700X 8-Core Processor
core frequency: 4391 MHz
Throughput, Latency
instruction IPC, Cycle
movdqa : T: 4.00, L: 0.25
movdqa(256) : T: 4.00, L: 0.25
por : T: 4.00, L: 1.00
por(256) : T: 4.00, L: 1.00
pand : T: 4.00, L: 1.00
pand(256) : T: 4.00, L: 1.00
pandn : T: 4.00, L: 1.00
pandn(256) : T: 4.00, L: 1.00
pxor : T: 4.00, L: 1.00
pxor(256) : T: 4.00, L: 1.00
psllw : T: 1.00, L: 1.00
psllw(256) : T: 1.00, L: 1.00
pslldq : T: 2.00, L: 1.00
pslldq(256) : T: 2.00, L: 1.00
paddw : T: 3.00, L: 1.00
paddw(256) : T: 3.00, L: 1.00
paddsw : T: 2.00, L: 1.00
paddsw(256) : T: 2.00, L: 1.00
paddd : T: 3.00, L: 1.00
paddd(256) : T: 3.00, L: 1.00
paddq : T: 3.00, L: 1.00
paddq(256) : T: 3.00, L: 1.00
pabsw : T: 2.00, L: 1.00
pabsw(256) : T: 2.00, L: 1.00
pmullw : T: 1.00, L: 3.00
pmullw(256) : T: 1.00, L: 3.00
pmuludq : T: 1.00, L: 3.00
pmuludq(256) : T: 1.00, L: 3.00
pmulld : T: 0.50, L: 4.00
pmulld(256) : T: 0.50, L: 4.00
pmaddwd : T: 1.00, L: 3.00
pmaddwd(256) : T: 1.00, L: 3.00
pmaddubsw : T: 1.00, L: 4.00
pmaddubsw(256) : T: 1.00, L: 4.00
pmaxsw : T: 3.00, L: 1.00
pmaxsw(256) : T: 3.00, L: 1.00
pminsw : T: 3.00, L: 1.00
pminsw(256) : T: 3.00, L: 1.00
pavgw : T: 2.00, L: 1.00
pavgw(256) : T: 2.00, L: 1.00
psadbw : T: 1.00, L: 3.00
psadbw(256) : T: 1.00, L: 3.00
packssdw : T: 2.00, L: 1.00
packssdw(256) : T: 2.00, L: 1.00
pmovsxwd : T: 2.00, L: 1.00
pmovsxwd(256) : T: 0.90, L: 4.00
packsswb : T: 2.00, L: 1.00
packsswb(256) : T: 2.00, L: 1.00
pmovsxbw : T: 2.00, L: 1.00
pmovsxbw(256) : T: 0.90, L: 4.00
pmovsxbd : T: 2.00, L: 1.00
pmovsxbd(256) : T: 0.90, L: 4.00
punpckhwd : T: 2.00, L: 1.00
punpckhwd(256) : T: 2.00, L: 1.00
palignr : T: 2.00, L: 1.00
palignr(256) : T: 2.00, L: 1.00
pshufb : T: 2.00, L: 1.00
pshufb(256) : T: 2.00, L: 1.00
pblendw : T: 3.00, L: 1.00
pblendw(256) : T: 3.00, L: 1.00
pblendvb : T: 1.00, L: 1.00
pblendvb(vex) : T: 1.00, L: 1.00
pblendvb(256) : T: 1.00, L: 1.00
pblendd(vex) : T: 3.00, L: 1.00
pblendd(256) : T: 3.00, L: 1.00
extractf128(256) : T: 1.00, L: 3.00
insertf128(256) : T: 1.00, L: 1.00
perm2f128(256) : T: 1.00, L: 3.00
permd(256) : T: 0.50, L: 8.01
permq(256) : T: 0.78, L: 6.00
pbroadcastw(vex) : T: 2.00, L: 1.00
pbroadcastw(256) : T: 1.00, L: 4.00
pcmpeqw : T: 3.00, L: 1.00
pcmpeqw(256) : T: 3.00, L: 1.00
pcmpgtw : T: 3.00, L: 1.00
pcmpgtw(256) : T: 3.00, L: 1.00
addps : T: 2.00, L: 3.00, 35.1 GFLOPS
addps(256) : T: 2.00, L: 3.00, 70.3 GFLOPS
addpd : T: 2.00, L: 3.00, 17.6 GFLOPS
addpd(256) : T: 2.00, L: 3.00, 35.1 GFLOPS
mulps : T: 2.00, L: 3.00, 35.1 GFLOPS
mulps(256) : T: 2.00, L: 3.00, 70.3 GFLOPS
mulpd : T: 2.00, L: 3.00, 17.6 GFLOPS
mulpd(256) : T: 2.00, L: 3.00, 35.1 GFLOPS
addps_mulps : T: 4.00, L: 6.03, 70.3 GFLOPS
addps_mulps(256) : T: 4.00, L: 6.01, 140.5 GFLOPS
addpd_mulpd : T: 4.00, L: 6.01, 35.1 GFLOPS
addpd_mulpd(256) : T: 4.00, L: 6.00, 70.3 GFLOPS
fmadd132ps(vex) : T: 2.00, L: 5.00, 70.3 GFLOPS
fmadd132ps(256) : T: 2.00, L: 5.00, 140.5 GFLOPS
fmadd132pd(vex) : T: 2.00, L: 5.00, 35.1 GFLOPS
fmadd132pd(256) : T: 2.00, L: 5.00, 70.3 GFLOPS
fmadd132ps_addps(128): T: 2.18, L: 8.01, 57.4 GFLOPS
fmadd132ps_addps(256): T: 2.18, L: 8.02, 114.8 GFLOPS
fmadd132pd_addpd(128): T: 2.18, L: 8.00, 28.7 GFLOPS
fmadd132pd_addpd(256): T: 2.18, L: 8.00, 57.4 GFLOPS
fmadd132ps_mulps(128): T: 2.00, L: 8.00, 52.7 GFLOPS
fmadd132ps_mulps(256): T: 2.00, L: 8.00, 105.4 GFLOPS
fmadd132pd_mulpd(128): T: 2.00, L: 8.00, 26.3 GFLOPS
fmadd132pd_mulpd(256): T: 2.00, L: 8.00, 52.7 GFLOPS
divps : T: 0.29, L: 10.01
divps(256) : T: 0.29, L: 10.01
divpd : T: 0.20, L: 13.05
divpd(256) : T: 0.20, L: 13.04
sqrtps : T: 0.18, L: 5.50
sqrtps(256) : T: 0.18, L: 5.50
sqrtpd : T: 0.12, L: 8.50
sqrtpd(256) : T: 0.12, L: 8.52
rcpps : T: 1.00, L: 5.00
rcpps(256) : T: 1.00, L: 5.01
rsqrtps : T: 1.00, L: 5.00
rsqrtps(256) : T: 1.00, L: 5.00
maxps : T: 2.00, L: 1.00
maxps(256) : T: 2.00, L: 1.00
maxpd : T: 2.00, L: 1.00
maxpd(256) : T: 2.00, L: 1.00
minps : T: 2.00, L: 1.00
minps(256) : T: 2.00, L: 1.00
minpd : T: 2.00, L: 1.00
minpd(256) : T: 2.00, L: 1.00
cvttps2dq : T: 1.00, L: 3.00
cvttps2dq(256) : T: 1.00, L: 3.00
cvttpd2dq : T: 1.00, L: 3.00
cvttpd2dq(256) : T: 1.00, L: 6.00
cvtdq2ps : T: 1.00, L: 3.00
cvtdq2ps(256) : T: 1.00, L: 3.00
cvtdq2pd : T: 1.00, L: 3.00
cvtdq2pd(256) : T: 1.00, L: 4.00
cvtps2pd : T: 1.00, L: 3.00
cvtps2pd(256) : T: 1.00, L: 4.00
cvtpd2ps : T: 1.00, L: 3.00
cvtpd2ps(256) : T: 1.00, L: 6.02
スポンサーサイト



コメントの投稿

非公開コメント

プロフィール

rigaya

Author:rigaya
アニメとか見たり、エンコードしたり。
連絡先(@を半角にしてください!)
rigaya34589@live.jp
github

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

○Aviutlプラグイン
x264guiEx 2.xx (ミラー)
- x264を使用したH264出力
- x264guiExの導入>
- x264.exeはこちら>

x265guiEx (ミラー)
- x265を使用したH.265/HEVC出力
- x265.exeはこちら>

QSVEnc + QSVEncC (ミラー)
- QuickSyncVideoによるH264出力
- QSVEncCはコマンドライン版
- QSVEncC 導入/使用方法>
- QSVEncCオプション一覧>

NVEnc + NVEncC (ミラー)
- NVIDIAのNVEncによるH264出力
- NVEncCオプション一覧>

VCEEnc + VCEEncC (ミラー)
- AMDのVCEによるH.264出力
- VCEEncCオプション一覧>

svtAV1guiEx (ミラー)
- SVT-AV1によるAV1出力

ffmpegOut (ミラー)
- ffmpeg/avconvを使用した出力

自動フィールドシフト (ミラー)
- SSE2~AVX2による高速化版
- オリジナル: aji様

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

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

PMD_MT (ミラー)
- SSE2~FMA3による高速化版
- オリジナル: スレ48≫989氏

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

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

○その他
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 (ミラー)

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

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

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