デュアルコア・シングルコア 2

もう何時のことだか忘れ去ってしまった続きですw

大嘘講座第二段ですな。


プロセスをぶつ切りにした処理と、スレッドを作成した処理のことまで話したかな。

元来、プログラムは手続き型言語と呼ばれ、順番に命令を実行することが前提とされています。
つまり、そもそもプログラム内で別々の処理が同時に実行されることを想定されていません。

分かりやすく言うとですね。

ポリゴンの計算をする->テクスチャを貼り付ける->画面に表示する

という処理なワケで、ポリゴンの計算が終わらないと、テクスチャが貼り付けれません。
テクスチャが終わらないと、画面に出力しても意味がありません。
プロセスをぶつ切りにする、というのは、これを細切れにするんですから、順番に実行してもらわないとプログラムが正常に動作できないわけです。

これがシングルスレッドと呼ばれる処理です。
シングルスレッドは、常に順番に実行されることを前提としており、マルチCPU環境でも単一のCPUしか利用しません。
その間もう一個のCPUはスリープ状態になっているだけで、激しくサボっています。

しかし、実際のプログラムの中身の非常に小さいトコまで踏み込むと、
顔のポリゴン計算->体のポリゴン計算
といったカンジになっているわけで、これは同時に実行してどっちかが先に終わってもぜんぜん問題ありません。

しかし、プロセスを適当にぶつ切りにした場合、それぞれの処理ごとできってくれるワケではありません。
そこでスレッドの登場です。顔のポリゴン計算をひとつのスレッド、体のポリゴンの計算をひとつのスレッドとしてCPUに同時実行可能だよ、と教えてやりさえすれば。
複数のCPUはそれぞれが別々のスレッドを実行し、その結果をプログラムに返してやることが出来ます。

これが、マルチスレッドプログラムと呼ばれるものです。

ここまで読んでいただければ分かるかどうかは知ったことじゃありませんが、シングルスレッド動作のプログラムを実行しても、マルチコアやDualCPU環境で速くなる道理はどこにもありません。
シングルスレッドプログラム実行時は、シングルCPUと扱いはまったく変わりません。

このへんを理解しないと、マルチコアなのに…遅い!とか言い出す人が現れるわけです。


さて、ここで余談。Pentium4のHyperThreading技術について。
CPUは動作中、パイプと呼ばれる多段処理をCPU内部で行っています。詳しいことは省きますが、計算予測とかまあ、いろんなことをやっています。
CPUの中身はとってもとっても小さくて低機能なCPUがいっぱい集まってるんだと思ってください。

で、中身ではとっても小さなCPUが計算して次のとっても小さなCPUに渡して…ってことをしています。

小さなCPU1→小さなCPU2(計算結果がaならこっち)

小さなCPU3(計算結果がbならこっち)

こんなカンジでして、あらかじめCPU1が計算に入ると、過去の経験からCPUは勝手に「この計算なら結果はbだろうからbってことにしてCPU3の計算を開始しちゃえwww」という至極勝手なことをブチかまします。
まあ、計算結果がaだったりすると大慌てで戻ってきてCPU2の計算を始めるので、間違いはないんですが。

で、ですね。そのとき、CPU2ってヒマじゃないですか。こういうちっさなCPUがCPUの中にはいっぱいあるわけです。
これをまとめて、別のスレッド処理をやらせようぜ、ってのがPentium4のHT技術です。
だから、CPUが二個あるように見えるわけです。
しかしマルチコアやDualCPUに比べると単にCPUのあまってるトコを寄せ集めただけなので、性能はたいしたことありません。せいぜいベンチマークで3割増しってとこです。
しかも、計算結果ミスの時に戻ってきた処理とぶつかったりするので、処理内容によっては逆に遅くなったりするわけです。

HTがパチモンのDualだと激しく嫌われるときがあるのは、この計算ミスの時のバッティングによる処理速度低下がかなり大きな痛手になってしまうときが多々あるためです。
ハードウェア的なバックグラウンドはともかくとして、これはIntelがクロック数至上主義によってとにかくクロック数を稼ごうとしたことによる弊害でもあります。

Pentium4が妙に嫌われたりするのはこの辺にも要因があります。とはいえ、HTを捨てる気はさらさらなさそうですけどね>Intel
HT自体もマルチスレッド技術に基づいたものですので、マルチスレッドプログラムでない限り単一のプログラムが複数のCPUを同時利用することはありません。
#複数のプログラムを同時稼動させると、デュアルCPUシステムは両方のCPUを使います。

まあ、そんなわけでマルチコアといってもゲームなどの場合、そのゲーム自体がマルチスレッドプログラムでない限り、シングルCPUより速くなることなんてありません。
逆に純然たるマルチスレッドプログラムのゲームが現れたなら、かなり顕著に差がつきます。
HTの場合は言うほど差は出ませんが。

AMDがAthlon FX系をシングルコアで提供するのは、まだ現状でゲームなどでのマルチスレッドプログラムがほとんどないためです。ゲームなどは単一のプログラムがシステムを占有します。
将来的には増えてくるかもしれませんが、あまり期待しないほうがいいかもしれません。

むしろ、日常使用における利用形態において、マルチコアやDualCPUの快適さは顕著です。
なにせ、マウスを動かす、画面にウィンドウを出す、音楽を鳴らす、ウィンドウを閉じる…etcetc.
こういった処理はすべて別々のスレッドとして起動するのです。
シングルコアより快適になるのが当然です。

デュアルを求める場合は、自分の要求がドコにあるのかを見極めたほうがいいですねー。

0 thoughts on “デュアルコア・シングルコア 2

  1. スミマセン 信廉は中、後奪還の中では弱い方です、、、あれは中の武芸とかヌンジャとかがダメダメでちた、、、押さえるべきところ、指示すべき事を
    きっちりやれてれば大して強くないのですが、、、スミマセンスミマセン

  2. 逆転かなんかでダメがほとんどゴミダメージになるんだっけか。
    まあ行かないので知らんがw
    ま、私としちゃ失敗して失敗してそれでも取り付きに行こうと何度も走る方が戦ってる実感があるので好きだなぁ。
    一発成功あと見てるだけ、ってのも割りとヒマなんですよ!w

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です