【最初の注意】
本記事は、私が2002年当時に今はなき「XWIN II Web Page」で掲載したものを、基本的にそのままの形で再掲載したものです。では、どうぞ。
この前の記事「マルチスレッドでのHyper-Threading ── TMPGEnc編」
巻頭言 978 「マルチスレッドでのHyper-Threading ── TMPGEnc編 II」
次回は、TMPGEnc 2.02とSuper πを同時実行させながら、Hyper-Threadingテクノロジの有用性を探っていく予定である──としていたが予定を変更させていただくことにする。理由の一つ目は、Intel社のMobileプロセッサに関する話題を一回挟んだこと。これは結果としてそうなったというものだが、もう一つの理由は、TMPGEncによるベンチマークテストを同時に二つ実行した場合どうなるか、ということを確かめるためである。このテストを新たに追加する目的は、 CPUの割り当てが物理プロセッサの割り当て個数の違いだけで、論理プロセッサの個数に依存しないという事実を再確認することが目的である。
Super πでは、同じ実行スレッドが2つであっても、単一物理プロセッサ内の論理プロセッサでスレッドを分け合うことによって、明らかに差が生じていた。だが、 TMPGEncではどのように論理プロセッサを割り当てても、物理プロセッサとしていくつ割り当てられているかによってのみ差が生じた。これをよりはっきりさせるには、二つのTMPGEncを同時実行させ、それぞれに物理プロセッサを一つずつ割り当てる(CPU 0とCPU 2に一つ目のTMPGEnc、CPU 1とCPU 3に二つ目のTMPGEnc)ものと、それぞれに物理プロセッサを二つ割り当てる(CPU 0とCPU 1に一つ目のTMPGEnc、CPU 2とCPU 3に二つ目のTMPGEnc)ものを比較することである。それでは、その結果を以下に示そう。
CPU 0, CPU 2に一つ目のTMPGEncを、CPU 1, CPU 3に二つ目のTMPGEncを割当て実行
CPU 0, CPU 1に一つ目のTMPGEncを、CPU 2, CPU 3に二つ目のTMPGEncを割当て実行
テスト内容及び方法は、巻頭言976を参照いただきたいが、なかなか興味深い結果となっている。その差はわずかに1秒だが、これは測定誤差の範疇に収めても支障はないものだろう。つまり、物理プロセッサを意識して割り当ててもそうでなくても、どちらも結果は変わらないということである。これだけでも驚くべき結果だが、それ以上に興味深いのは、マルチスレッドオプションを有効にしないテストとほぼ同じ実行タイムとなっているということだ。これはどういうことだろう。
以前にも議論したように、TMPGEnc 2.02でマルチスレッドを有効にすると、処理を実行するスレッドは二つになるが、この実行スレッドはプロセッサリソースを使い切るか、あるいはスレッド間同期によって、事実上一つのスレッドが一つの物理プロセッサを完全に占有してしまうと考えられる(厳密に言えばそうはならないが、アプリケーション間同士ではそう見えるということ)。このため、物理プロセッサが一つしかない場合(強制的に一つしか割当てられていないことも同義)、マルチスレッドは有効に機能せず、結果としてシングルスレッドと同じになってしまうわけである。
TMPGEncを二つ同時に実行するということは、言い換えれば4つの実行スレッドのうち、2つの実行スレッドだけが意味を持つので、残る2つはプロセッサリソースを占有することができず、まったく実行されることがない(ほとんど実行されることがない)ということである。だからこそ、マルチスレッドであってもシングルスレッドと同じ結果となるわけだが、ここで一つ疑問が生ずる。それは、CPU 0とCPU2、CPU 1とCPU 3というように、明確に物理プロセッサを一つずつTMPGEncに与えれば問題はないが、CPU 0とCPU 1、CPU 2とCPU 3というように、物理プロセッサをまたいで割り当てを行うと、物理プロセッサを占有するスレッドが両方とも一方のTMPGEncになった場合、物理プロセッサが割り当てられないTMPGEncは処理が停止してしまうのではないかという疑問である。
このことを確認するために、CPU 0とCPU 1、CPU 2とCPU 3という割り当てで、何度かテストを繰り返すと、4度目のテストでは、一方のTMPGEncの処理が完全に停止してしまい、処理が継続している TMPGEncが終了して、ようやくもう一方のTMPGEncの停止状態が解除されることで、実行タイムが大きく乖離するという現象が発生した。このように予想通りの結果を見たことから、先ほどの推論はまったくの的外れではないということと、また、OS(Windows XP)が論理プロセッサの割り当てに関して、物理プロセッサとの関係を意識していないで割り当てを行っていることも、結果として確かめられたとなるだろう。この点が、まさにHyper-Threadingのアキレス腱というわけである。
さて、次回の予定だが、今度こそSuper πとTMPGEncの同時実行によるHyper-Threadingの検証を行うつもりである。(2002/1/22)
コメント