UpconvにAMD Ryzen 7 2700X(8コア16スレッド32GBメモリ)を投入する

今年はさすがにマシンを新たに自作する予定ですが、おそらくAMDのRyzenにしない限りこのインテルRSTは使っていくでしょうから、これまでの経験を整理しておき生かしていきたいと思います。
さて今年の2月の投稿でこのように書いていたのに気づきました。しかし目の前にあるこの7月に新たに自作したPCには、AMDのRyzen 7 2700Xが搭載されているではありませんか。当人全く、引き続きIntel系で新調すると決めていたのですが、予期せぬバーゲンセールに遭遇諸事情によりこうなってしまいました。反省しています。

 エッジゆえのBSOD多発(ほんと反省)。安定させるまでに時間がかかりましたが、そろそろマシンに活躍してもらいましょうか。仮想マシンやエンコードではすでに大活躍ですが、ふと「Upconvのオプションで、スレッド数とか指定できたなあ」と思い出しました。

 これまでのPCがCore i7とはいえ、あまりにも古すぎたためアップサンプリング処理ではすぐにCPU使用率が天井の100%に張り付いていたこともあり、チューニングうんぬんどころではありませんでした。

 それでは早速Upconvに持てる戦力を、逐次投入せずMAX投入してみましょう。テスト用には48KHz/16bitのWavファイルを使用し、これは以前NHKのBモードで放送されていたNHK交響楽団の3分ほどのリニアPCMそのままの音源です。

バッファ値はAdjustで自動設定されたもの
なお手動で選択できる最大は14000
 4倍アップサンプリングの192KHz/24bitへのコンバートを指定して、ほぼデフォルトのHFA3、ABEまわりの指定をONにして開始です。

upconv(HFA3)処理後半時点でのもの

 メイン処理のupconvに入るとCPUとメモリの使用率がぐんと上がります。が、以前のようにCPUは100%に張り付くことはなく、30%-40%で動作しています。メモリはかなり使い切るところまで行っています。一方、ディスクの使用率はがくんと減りました。ほぼオンメモリで処理が済んでいるのでしょう。

 なおRyzen 7 2700Xはその自動オーバークロック機能により、容易にクロックを4GHzを越えたスピードにできますが、ジッタ対策のためその機能はBIOSでOFFにしています。同様にDDR4メモリも定格2666MHz運用です。

 さて完了までの所要時間(変換時間)は2分14秒でした。おかしい!?とおもったのは事前のインストール後動作確認で、スレッド2バッファ600で行っていたのですが、その結果は1分50秒だったからです。遅くなっている。。。

 何回かこの2つの設定で再試行しましたが、ばらつきがあるもののほぼ同様の結果となりました。当然速くなることを期待していましたから、原因は何だろうと考えてみました。考えを巡らしていると昔の経験が「オーバヘッド」とか「マルチスレッドのパターン」と語りかけてきます。

 まず「オーバーヘッド」ですが、今回最大限利用するような設定でしたが、OSは同時に他の処理も行っているわけで、使い切るとリソースの共有、再割り当てという仕事が発生し続けるわけです。このような処理はオーバーヘッドなので、なるべくそのような仕事を発生させないようにする必要があります。OSまかせにしないようにします。

 そこでSMTの特性を念頭に、スレッド8バッファ12000と、スレッド14バッファ6000の2つの設定で施行してみました。すると結果はそれぞれ、1分44秒、1分46秒と同じような23%程度の改善が得られました。
スレッド8指定でのHFA3処理中の様子


 「マルチスレッドのパターン」は昔サーバーサイドでマルチスレッドのコードを書いたことがあって、それはかなりシビアな、ミリ秒単位での高速化が求められる仕事でした。複数の理論上のアルゴリズムを、それぞれコードパターンに落とし込んで、最終的には実践的なチューニングによって使用するパターンを選択する、というものでした。得たものは、理論と個々のCPUへの最適化のバランスをとることは、とてもとても難しいというものでした。

 現在使用しているWindows10は、Ryzen7への最適化がまだまだ、Intel CPU優先なのは明らかですし、Upconvのアプリ側の実装もこんなマニアック環境ではなく、汎用的なものを前提とするのが当然ですから、現時点では高速化の伸び代を将来に残す、といったところでしょうか。

スレッドバッファ変換時間
2 600 1分50秒 
8 12000 1分44秒 
14 6000 1分46秒 
16 14000 2分14秒 

 とはいえ結果をまとめると上のようになるので、今すぐ"自分でできる最適化”の余地もまだまだ十分残されています。あーあのへんごにょごにょ・・・。今回は1曲だけでしたが、少しでも環境に合わせて最適化できれば、アルバムまるごと、多数の曲をバッチ的に処理させる場合には、その効果が大きく表れるでしょう。

 結論としてはUpconvは楽しい!です!?。このブログで紹介してきた数々のアップサンプリングツールが消えてしまった中、このような豊富なパラメータと優れた性能を持つツールが提供され続けているのは奇跡で、感謝です。