Windows7のマルチスレッド機能はXPやVistaから更に進化していて、「Core i7のHT機能が十分に実力発揮できる」という話しを聞いて、早速チャレンジ。
XPだけでなく7RCと比較しても、「HTを有効に利用できなかったいくつかのツール」でも確かに良好な結果が得られました。

サイト内の同系統のお話は以下
 ・AviSynthとWindows7(x64)、バックエンド(読込みツール)との相性

(2009.11.10追加)Core i7のHTとWindows7の相性について分かりやすく解説しているブログ
 ・Core i7 で「Hyper Threading をオフにすると速くなる」は OS によっては正しくない!

AviSynthのMT

XP時代、7RC時代にCore i7のHTを十分に活かしてくれなかった(私の愛用ツールの)代表はAviSynthのMTプラグイン。これを8スレッドで作動するようにしてみました。

公式なサポートフォーラムでも「AviSynthのMTはCore i7のHTでは上手く作動しない」と書かれていましたが、x64Windows7 + Core i7 HT ONな環境で、簡単なスクリプトなら8スレッド処理でエラーを吐かずに完走してくれました。速度も10%ほど高速。

XPやWindows7RCでは、Core i7の8スレッドを有効に使ってくれるアプリが少なくて少し残念な思いをしていました。しかしこれはアプリだけでなくOSレベルでも最適化がまだまだ不十分だったようです。

追記2009.11.28:以下を読む前に

このページに記載してある記述方法(Setmtmodeを使わないマルチスレッド化)は、1画面をスレッド数で分割する方法です。
この方法でITをはじめ各種逆テレシネプラグインを使うと、動きの少ないテレシネ素材では当然解除残しが発生します。

この記事を書いた頃は、その辺りの仕組みがスコーンと頭から抜けていました(^_^;
使用した素材もアクション物の実写素材だったので酷いテレシネ解除ミスも発生せず、全く気が付いていませんでした。

マルチスレッドの本数を増やすのは高速化に大きく貢献しますが、逆テレシネをマルチスレッド化する場合はSetmtmodeを利用するのが無難です。
実写ソースの場合は、画面分割が2~3位までなら解除ミスはほぼ発生しません。

追記終わり

スポンサー リンク

走らせたスクリプト

MPEG2Source("test.d2v")
mt("""IT(fps = 24, ref = "TOP", blend = false)""",8,4)
mt("BicubicResize(960,last.height)",8)
mt("BicubicResize(last.width,544)",8,splitvertical=true)
#mt("BicubicResize(960,last.height)",8)
#mt("LanczosResize(last.width,544)",8,splitvertical=true)
return last

#赤字の8の部分がスレッド数指定箇所

現在ノイズ除去などはGPUフィルタに任せているので、AviSynthにおまかせするのは逆テレシネとリサイズ位。IT、BicubicResize、LanczosResize、全てスレッド数8にした方が高速でした。

※まだサンプル動画(3分)一本、90分映画1本しかエンコードしていないので、
  本当に安定しているかは未確認。
※現在利用しているのはAviSynth2.5.8にMT0.7のdllを上書きしたもの。

でも実際に動いているのは4スレッド

8スレッドでAviSynth
▲エンコーダーにHuffyuvやMJPEGなどCPU負荷が極端に低いものを利用してエンコードすると、MTプラグインを8スレッド設定にしても 8スレッド中4スレッドしか働いていないのが分かります。
(追記:MTは元々HT機能に未対応。MTがエラーを吐かない様に改良された為?)

でも、やっぱりMT("hogehoge",4)よりMT("hogehoge",8)の方が10%程度高速です。

4スレッド分空きが出来ることで、マルチスレッドに対応したエンコーダー側が効率良く働いてくれるようで、Xvidやx264を利用するとHTオン/オフでエンコード速度に20%の差が出ました。

じゃあ動画エンコはx86 XPよりx64 Win7の方が速いの?

これがまた微妙。

  • リサイズはx64 win7で8スレッド使った方が10%高速。
  • ITやAuto24FPSはx86 XPでMTプラグインを使う方が60%高速
  • AviSynthのGPUプラグインは、単体での速度に殆ど差がないけど、重ね掛けするとx64 Win7では速度低下が著しい。
  • エンコーダーは種類による。
    • x264、DivXはx64Win7で8スレッド使った方が20%高速
    • Xvidはx86 XPの4スレッドとx64 Win7の8スレッドで殆ど変わりなし。
      (x264、DivX、Xvid全て初期設定での処理速度。超高速な設定にするとほぼシングルタスク状態になりMT、HTの恩恵は殆どなくなる)

組み合わせ次第ではx64 Windows7の方が速くなる場合もあるけれど、「逆テレシネして、軽くノイズを取って・・・」なんて考えるとまだまだXPの方が速い。

でも、Core i7のHTテクノロジーがかなり有効に働いてくれるので、その差は随分と縮まりました。

これから試す事

AviSynthのマルチスレッド化技術は現在頻繁にアップデートされています。
にーやんさんのAviSynth 2.5.8 MT Version 2009.07.12 (マルチスレッド版 AviSynth/マルチスレッド化プラグイン) - AviSynth Blog rev.2にて進捗状況が刻々と追記されていってます。

私の利用しているのはAviSynth2.5.8と従来のMT0.7。
上記リンク先の最新ビルドを利用するともっと異なる結果が出るかもしれません。

追記2009.11.08:やっぱダメだ

世の中そんなに上手いお話はありませんね(^_^;

HTテクノロジを効率よく使うようになった事で、CPU・QPI共に作動に必要とする電圧が上がるようです。結果的に発熱量も増加し、常用できる限界を探ってみると結局ほぼ同レベルの性能に落ち着きます。

XPを使っていた時代に自機のオーバークロック用データーシートを作成していましたが、Windows7でHT ONにした状態では、このデータが全く当てはまりません。
Windows7でHTをONにすると、XPより概ね10%ほど性能が向上しているように感じますが、性能向上した相当分の電圧が必要でした。(Windows7HTオン:3.5Ghzで作動させたかったら、XP HTオン:3.85Ghz(3.5x1.1)で安定していたCPUvとQPIvが必要)

3.5Ghz(170x21)HT ONで常用を考えていましたが、発熱量の多さに断念。

「オーバークロックなんてやらないよ」って人にはHTの効率アップは嬉しい事ですが、HT OFFでCPUの限界までオーバークロックしている人には、どうでも良いお話になります。
そしてHT ONでオーバークロックしている人は、XP・VistaからWindows7にアップグレードする際には十分注意が必要かと思われます。

おまけ

以下写真はASUS P6T DeluxeでMemtest86+を行ったもの。

HT OFF
▲HT OFFの場合
HT ON
▲HT ONの場合

HT ON/OFFでL3 Cacheの速度が1.5倍違います(今日初めて気が付いた(^_^;)
HT ONで安定作動させるためには、相当分のQPI電圧が必要になります。

experienceindex
▲インデックスエクスペリエンス
オーバークロックした際の耐性テストはエクスペリエンスインデックスの計測が意外に役に立つ事を発見しました。QPIv不足でブルースクリーン突入します(^_^;
CPU coreV:Prime95
CPU QPIv:エクスペリエンスインデックス
メモリ:Memtest86+

別個にテストしないと原因の切り分けは難しくなります。

あとがき

手持ちの愛用アプリを色々テストしてみましたが、ウチの環境ではWindows7でもHT OFFで高クロックで回したほうが色々都合が良さそうです(^_^;