電脳遊戯の嵐

PC、ゲーム、自転車を中心にぼちぼち書いていきます。
保証対象外となる作業については自己責任で。

TMPGEnc

【TVMW6】CUDA+スリッパで多重エンコード

Ryzen Threadripperは多コアを活かして多重エンコードをするのが良いのがRyzen7との比較で分かった訳だが、実際に普段使ってるフィルターをCUDAを使って掛けたエンコードではどのぐらい多重エンコードすれば良いのかを検証してみる。

ソースは前回に引き続いてけもフレの1話を使う。
フィルターは高精度映像ノイズ除去(範囲普通(普通))とインターレース解除(アニメ補間)の2つ。

1本だと時間はこんな感じ。
result_1encode
ちょっと待って。
フィルターを掛けてない前回のテストより速いんですけど。
フィルターをCUDAでやってる分速くなったのかな。
高精度ノイズフィルタを掛けてもCPUでインターレース解除するより速いと……
CUDAヤバい。

CPU使用率はこんな感じ。
CPU_USAGE_1encode_s
完全に舐めプですわ。

GPU使用率はこんな感じ。
GPU_USAGE_1encode

2本。
result_2encodes
+16分。
倍にはなってないけど、割りと遅くなった。

CPU使用率。
CPU_USAGE_2encodes_s
CPU使用率が倍になってないね。

GPU使用率。
GPU_USAGE_2encodes
15%ぐらいしか使用率が上がってないな。
GPUが処理しきれてないかな。

3本。
result_3encodes
+14.5分。
順調に時間は伸びていく。
(一応1本当たりの時間は短くなっているけれども)

CPU使用率。
CPU_USAGE_3encodes_s
まぁ、1→2本の時と同じぐらいのCPU使用率の伸び方かなぁ。

GPU使用率
GPU_USAGE_3encodes
+8%。
だんだん使用率の上がり方が少なくなってる?

4本。
result_4encodes
+13分。
追加になる時間がだんだん短くなってる……

CPU使用率。
CPU_USAGE_4encodes_s
急に上がったような気もするけど、使用率を取ったタイミングという説。

GPU使用率。
GPU_USAGE_4encodes
なんだかんだ100%にはならないのよね。

5本
result_5encodes
+13分。
ついに追加になる時間が変わらなくなった。

CPU使用率。
CPU_USAGE_5encodes_s
下がったぞwww
採取するタイミングか……

GPU使用率。
GPU_USAGE_5encodes
ついに使用率がほぼ100%に張り付いた……

6本。
result_6encodes
+20.5分。
ここで追加される時間が伸びた。
この辺が潮時か……

CPU使用率。
CPU_USAGE_6encodes_s
CPU使用率もかなり高くなった。
あれ、5本の時のCPU使用率のグラフ間違えたか?

GPU使用率。
GPU_USAGE_6encodes
まぁ、GPUはほぼ100%に張り付いちゃうよね。

1〜6本でかかった時間をまとめるとこんな感じ。
encode_time_total

1本あたりの時間にするとこんな感じ。
encode_time_per
どうやら5本が一番短かった模様。
でもCPU使用率が100%になっていなくて、GPU使用率が100%だったので、ボトルネックはGPUかなぁ。
駄菓子菓子、今使ってるのはGTX1080なのでこれより上となるとGTX1080TiかTITAN Xpしか……

という訳で、スリッパの能力をTMPGEncで全て引き出すことは現時点ではうちの環境だと不可能……
SLIするとCUDAも速くなったりするのかなぁ……

【2017/10/29更新】Ryzen Threadripper 1950XでTVMW6(Ryzen 7 1700との比較)

(2017/10/29 データ比較のグラフを追加しました)

遅くなったけど、Ryzen7 1700(以降1700)とRyzen Threadripper 1950X(以降1950X)の比較をします。
比較する手段は表題の通り、TMPGEnc Video Mastering Works 6。
とりあえず純粋なCPU性能勝負ってことでCUDAは無効。
テストのためにマイニング用のビデオカードは拝借できません。

エンコードするソースは再放送分のけものフレンズ「さばんなちほー」を使うことにした。
以前ソースにしていたファイルは先日の録画ファイル化け事件で全滅したので過去のデータと単純比較できないのはご容赦ください。(しかもコーデック変えちゃったし)

フィルター設定はインターレース解除(2倍fps化&アニメ補完2)のみ。
コーデックの設定はx265の品質固定(詳細省略)

まず1本エンコードする。
1700
R7_1encode_m

1950X
TR_1encode_m

graph_1encode

1950Xの方が速いけど、ご覧の通り動作クロックの分速いだけ。
R7_CPU-Z
TR_CPU-Z

Ryzenでパフォーマンスに影響のあるメモリーの設定はそれなりに合わせてある。
1700
R7_CPU-Z_MEM

1950X
TR_CPU-Z_MEM
そういえば、1950Xはクアッドチャネルにだけど、その恩恵を受けてる感じはしないなぁ。

エンコード中のCPU使用率はこんな感じ。
R7_CPU_Usage
TR_CPU_Usage
Threadripperはコア数多くて壮観ですな。
じゃなくて、コア数の多い分CPU使用率が低い。
当然その分たくさん仕事できるということで、多重作業させるしかない。
という訳で、次に2本同時にエンコード。
1700
R7_2encodes_m

1950X
TR_2encodes_m

graph_2encodes
うむ、Threadripperの本領を発揮し始めてる。
1700も1本当たりにかかる時間は短縮してるから!
(約51分で2本エンコードしたので1本あたり約25.5分という計算で)
1950Xが速すぎるだけだから!(約18.5分……)

エンコード中のCPU使用率。
R7_CPU_Usage_2encodes
TR_CPU_Usage_2encodes
CPU使用率が100%に張り付いてしまった1700に対して1950Xはまだ余力がある。
が、余力があっても、1本の時と同じ速度ではエンコードできてはいないけどね。

更に負荷を上げてみるってことで3本同時にエンコード。
1700
R7_3encodes_m

1950X
TR_3encodes_m

graph_3encodes
1950Xが順調に1700を引き離してる。
1700は1本当たりにかかる時間が2本とほぼ変わらない(約24.5分)のに対して1950Xは順調に時間を短くしてきてる(約15分)
R7_CPU_Usage_3encodes
TR_CPU_Usage_3encodes
1700は完全にCPUを使い切ったw
1950Xはまだ余裕を見せてる。
というか使用率の値が2本の時より低いやん……
スクショを取るタイミングミスった。

1950Xはまだ行けそうということで、4本同時エンコード。
TR_4encodes_m
流石にきつくなってきたけど、何とか1本当たりの時間は短縮(約14分)してるよ……

TR_CPU_Usage_4encodes
そろそろ限界ですな。

1950Xで本数を変えてエンコードした時の時間をまとめるとこんな感じ。
graph_4encodes
時間の伸び方は比例ではなくて一次関数に近い感じ。

かかった時間を同時に実行した本数で割るとこんな感じに。
graph_4encodes_per
1本はThreadripperの無駄遣いと罵られてもしょうがないかなw
やるなら2本以上だね。

という訳で、TMPGEncでは単体でエンコードするとTreadripperの良さはあまり出ません。
エンコード中にCPUの余力を他に回せるけど、それがどのぐらいの利点になるやら。
単体でのエンコードを速くするなら1800X買うか1700をオーバークロックすれば良いと思ふ。
アニメが多くて複数まとめてエンコード!っていうならThreadripperもあり。
そもそもTMPGEnc使うならIntelだろうという説もあるのは(゚ε゚)キニシナイ!!
ダブルグリスバーガー使いたくないしw

16コアでインターネットをやるのもいいけど、今はマイニングという活用方法があるので良いよねぇ。
cpu_mining
RyzenはMoneroをマイニングするのに向いてるらしい。

TURBO-GTX1060-6GでTMPGEnc高速化

よく調べたら少し前のものになるけど、ASCII.jpで比較してた。
やっぱり良いカードになるほど速いのな。

前回TMPGEncを高速化するためにTURBO-GTX1060-6Gを買った。

今回は亜人ちゃんは語りたいでエンコードのテストをしますぞ。
エンコードを少し重くしたいので、フィルターはインターレース解除とノイズ除去(時間軸)の2つ。

ということでそれぞれでエンコードした結果。
encode3_CUDA
GTX1060はえー!
なし→GTX750Tiで279秒短縮。
なし→GTX1060で839秒短縮。
GTX1060でGTX750Tiの約3倍短縮。
ほぼ仮想FLOPS通り?
これってGTX1070にしたら4.5倍短縮できたってことかしら?
750Tiの4.5倍だと1255秒になるからエンコード時間が975秒……になるかどうか分からないから誰か貸して!(ぉ

折角速くなったので高精度ノイズ除去を使ってみる。
encode3_filter
重杉内。
でも暗いシーンで気になるノイズは高精度ノイズ除去の方がキレイになるのよね。
高精度ノイズ除去はCUDAなしではおそらくやる気にならないけど、GTX1060なら何とか我慢できるレベルかな〜
今後は高精度ノイズ除去を追加していく感じで。
CPUは舐めプしてるのでボトルネックはフィルターにある模様。

RyzenでTMPGEnc追試【更新しました】

(4/7:グラフが見づらかったのとAVXの検証する比較対象データが不適切だったので修正しました)

手持ちのメモリーだとRyzen君の性能がうまく引き出せないので一旦メインマシンを6800Kに戻して、しばらくメモリーを入れ替えて検証し直すことにした。

RyzenはメモリーコントローラーのクロックとInfinity Fabricが同期してるのでメモリークロックを上げると性能が底上げされるというアグレッシブな仕様なので、メモリーをOCタイプのにすることにする。
値段との兼ね合いでCORSAIRのVENGEANCE LPXにした。
型番はAmazonで比較的安かったCMK16GX4M2A2666C16。
XMPを有効にしたら普通に2666で動いた。
memory_setting2
やるなCORSAIR。

ただ、OCして再起動すると一度完全にオフになった後で2133で起動してくる。
一度2400にしてしばらく使ってから再起動して2666に設定すると立ち上がってくるから挙動がよく分からない。
GA-AB350M-Gaming3の癖なのかねぇ?
BIOSアップデートで改善されれば良いのだけど。
改善されないようなら別のM/Bも考えるかなぁ。
とりあえず消えたβBIOSを突っ込んでメモリー電圧を盛ったら起動するようになったので判断保留。
AsrockのAB350M Pro4が次の候補かなー

まぁ、それはともかくとして家の部品をかき集めてマシン作った。
しばらくこれで検証するけど、Zippyの電源うるせぇw
OSは一時的なものなのでWindows10の評価版を入れた。

またTMPGEncで比較するのでTVMW6の評価版を両方に入れてテスト。
CUDAが有効になるような局面でどう変わるのかは、Geforceがメインマシンのみでビデオカードを入れ替えないといけないので未実施

ソース1
けものフレンズ「ゆきやまちほー」
ゆきやまちほー書きかったちゃうんかと。
その通りです(殴
encode_filter_source1
インターレース解除のみ。
CUDAを有効にしててもCPUだけでエンコードが完結する。

ソース2
このすば2期「この素晴らしい仲間たちに祝福を!」
キレたウィズ強すぎない?(そうじゃない
encode_filter_source2
インターレース解除と左右のクロップ。
CUDAを有効にしているとCUDAが仕事をする。
(今回はCUDA無効)

まずはRyzenでメモリー速度を変えてエンコード速度が変わるかどうかを確認。
Ryzen 7 1700の定格のエンコード中のクロックは3.2GHzだった。
ちなみにグラフの単位は全部秒です。

ソース1
encode1_memoryspeed
全体的にTVMW5の時より普通に速いんだけど。
メニーコアに最適化されたんかね?
64bitアプリケーションだからかね?
というかメモリーが1RANKだと速くなるの?
原因はよく分からないけどRyzen君が覚醒した!
メモリー速度がDDR2133→DDR2666で3%程度速くなった。

ソース2
encode2_memoryspeed
こっちはDDR2133→DDR2666で2%程度だけどエンコード時間が長いので短縮した時間は長い。
このソースだと測定ミスを疑うほど圧倒的にCore i7が速いね。

DDR2666でAVX、AVX2を無効にして、マルディプレクスバッファサイズの設定を変更。
ソース1
encode1_avx
無効にしたら3%速くなってCore i7より速くなった。
AVXが苦手なのは本当なのね。

ソース2
encode2_avx
こちらは7%速くなったけどCore i7には遠く及びませんな。

今度はメモリーを2666で動かしたままOCしてみるよ。
ソース1
encode_oc1
3.6GHzが最速になってそれ以上OCすると遅くなっていく……
これは動いているけど不安定だと思った方が良いね。

ソース2
encode_oc2
3.7GHzが抜けてるのは気にするな!
こちらはクロック通りに上がっていくねぇ。
ソース1はミスったのか頭打ちになってたのか。

結論
メモリーは1Rankがいいぞ!
メモリークロックは速い方がエンコードも誤差範囲レベルではあるものの確実に速くなる。
CPUクロックはオーバークロックした方が速くなるけど、適度に喝入れをしないと逆に遅くなるケースもある。
AVX, AVX2は両方無効にした方が速くなる。
基本性能のゴリ押しで命令系の不利はひっくり返せる局面もある。
ひっくり返らない部分はCUDAが使われる場面だと思われるので、CUDAを有効活用すると逆転しないまでも差が縮まると思われる。
今度はCUDAを使った時の検証するか。

Ryzenと6800Kのエンコード比較のまとめ

今更だけど前回のエンコード結果のまとめ。
前回フィルタの話を入れてなかった。
encode_filter
常にインターレース解除の2倍fps化で適応補間のみ。以上!

CPU 周波数(GHz) 時間(Sec) 消費電力(W) エンコード速度(fps) 1Wあたりのfps
Core i7 6800K 3.4 907 142 96.2 0.677
4.0 789 183 110.6 0.604
Ryzen 7 1700 3.0 986 121 88.5 0.731
3.6 855 167 102.0 0.611
3.7 824 170 105.9 0.623

グラフにしてみた。
encode_speed1
絶対的な速度は6800Kの勝ち。
OCしても6800Kの優位は変わらず。

encode_pwr_con1
消費電力はRyzenが明らかに少ない。
OCすると差が詰まるけど。
それにしてもOCすると消費電力増えるな〜

encode_efficiency1
消費電力効率はRyzen優位すな。
消費電力を考えると定格一択かw


Ryzen 7 1700でTMPGEnc

Ryzenがエンコードが速くなると聞いてウズウズするオレガイル。

2ch見たら良い感じに人柱が。
買うなら1700のコスパが良いようね。
マザーは買うならB350でBiostar、MSI、戯画かなぁ。
全体的に載ってるSATA少ないな。

X370で6ポート
B350で4ポート
戯画のB350はM.2と排他だけど6ポートついてるな。

あと、LANが基本的にカニィィィィ!!!!
ワークステーションクラスじゃないとBroadcomとかIntelは載せてくれないか。
K8N-LRっていうAMDとIntelとnVidiaのパーツが載ったマザーがあってな……w

それはそうとMicro-ATXな候補。

BIOSTAR B350GT3 Ver. 6.x
MSI B350M MORTAR
GIGABYTE GA-AB350M-Gaming 3
ASRock AB350M Pro4
ASUSはPCI-Expressの構成で予選落ち

Biostarかなぁと思っていたら戯画のが発売された。
MicroサイズのAM4対応ゲーミングマザーがGIGABYTEから登場(ASCII.jp)
しかも秋葉に在庫があるとのツイートが!

自転車の練習を終えてから久々に秋葉に出動。

着いてCPUが売っているのを確認してからマザーを確保。
金曜入荷分は即日完売だったらしいけど、この日はまだ5枚ぐらい残ってた。
回った店にはマザーが売ってたし、秋葉に限って言えば行けばそれなりに買えるようになり始めたのかな。

そんで購入するなりそそくさと帰宅w

次の日早いし、帰って6800Kで比較するためのベンチマーク取らないといけないしな!
というかAM4向けのクーラーないやんけ……
リテールクーラーが付属してる1700にしておいて良かった。
リテールクーラーはこんな感じ。
wraith_spire

CPUとの設置する場所が銅になっていてそれなりに冷えそう。

そんで翌日に組み始める。

リテールクーラーは大きくないからケース内の作業が楽で良い。
ryzen_in_pc

意気揚々と配線をして起動。
Windows10だし特に問題ないだろう→起動中にBSOD

なん……だと……

まぁ、メモリーのセッティングが速いとダメだっていうからな!
2400MHzから1333MHzに変更したらさすがに起動するべ!

ちなみに我が家にあるDDR4のメモリースペックはこんな感じ。
CrucialのBLS8G4D240FSA。
memory_spec
Ballistix Sportってヤツですな。

起 動 し ま せ ん /(^o^)\ナンテコッタイ

よく分からないからWindows入れ直すか→データコピーでBSOD

ま だ メ モ リ ー か 。

2枚挿しはやめて1枚にするか……

あれ……メモリーの設定を適切にしたら起動したんじゃ……
が、既にOSの領域はフォーマット済み!残念大魔王。
        ____
      /   u \
     /  /    \\    諦めて入れ直すお……
   /  し (○)  (○) \
    | ∪    (__人__)  J |
   \  u   `⌒´   /

しかしこんなこともあろうかとバックアップは取っておいたのだよ!
マイドキュメントはOneDriveで自動バックアップだしクラウド万歳だな。

で、復旧もそこそこに比較するぜよ。

ありきたりなCINEBENCHとかどうでもいいよね。
一応やったけど、巷での結果通り。

肝心なのはメインで使うTMPGEnc。
うちはまだTVMW5なんだけど。

メモリーは2133に設定したら2枚挿しで動作するようになったのでそれが比較対象。
やっぱりデュアルチャネルじゃないとパフォーマンス出ないね。

ソースは24分15秒。
エンコードの設定は適当マン。
1PASSはこんな感じ(雑)
映像の設定
encode_setting1

レート調整モードの詳細
encode_setting2

音声の設定
encode_setting3

GOP構造
encode_setting4

詳細設定(雑)
encode_setting5

その他は特に弄ってないけどこんな感じ。
encode_setting6

結果。
6800K定格は15分7秒。
4
エンコード中の消費電力は142W

Ryzen 7 1700は定格だと16分26秒。
no title
エンコード中の消費電力は121W

3.6GHzで14分15秒。
6
とりあえずは動くけどTMPGEncを完走するにはVcoreに喝入れが必須。
SoC Vcoreと両方設定ができるけど、どちらを盛るのが良いのかわからないね。
エンコード中の消費電力は167W

3.7GHzで13分44秒。
7
エンコード中の消費電力は170W
正直安定しない。
どこに喝入れすれば良いのかねぇ。

メモリーのレイテンシを緩めたら一応2400でも使えるようになった。
クロックを上げると結構早くなる。
memory_setting
ただ、そうするとCPUのOC耐性に余裕が無くなる感じだけど、クロックあたりの性能は上がったかな。

3.5GHzで3.6GHzとほぼ同等の14分14秒に。
5

ちなみに6800Kを4.0GHzにOCすると13分9秒。
no title
Vcoreを0.1Vほど少し盛ったらRyzenの比じゃないぐらい安定。
エンコード中の消費電力は183W

ということでTMPGEncの速さに限れば6800Kの勝利。消費電力多いけどw
ただ、Ryzen君舐めプしてるんだよね。
CPU使用率30%台ってやる気なさすぎやろw
ryzen_namep

Core i7の方がプロセス使えてるけどコア数の違いなのかアーキテクチャーの違いなのかは今回の比較だけでは判断できないな〜
core_i7_fullload
6900Kを使えば条件が一緒になるけど、そうしたら価格帯が違いすぎるし、そもそも買えないっすw

エンコードをシングルで実行するなら6800Kの方が速くて安定してるから良いね。
Ryzenは初物だけあって安定しませんぞw
ただ、2つ同時にエンコードするならシングルで余裕のあるRyzenの方に分があるかな。
その辺の検証はまたの機会に。
プロフィール
アクセスカウンター

最新コメント
  • ライブドアブログ