2009-05-08 3 views

答えて

7

スレッドをサポートするすべての言語とランタイムは、ハイパースレッディングをサポートします。

ハイパースレッディングは、複数のスレッド間でCPUを多重化する方法です。実際のCPUは1つのみですが、2つのCPUとしてオペレーティングシステムに表示されるため、2つのスレッドをスケジューリングできます。 1つのスレッド(メモリ待ち、長いFPU操作など)上のCPU内のストールは、CPUが他のスレッドからコードを実行できるようにします。

ハイパースレッディングに関する詳細はWikipediaです。

+0

実際にはそれよりも細かいです。異なる計算単位(算術、浮動小数点)は、異なるスレッドからの命令の結果を同時に計算することができる。 –

+0

ええ...より完全な答えは、アウトオブオーダーの実行とパイプラインのストールのコンテキストでこれを与えるだろうが、私はヘネシーとパターソンの700ページをここに回答に圧縮したくない:) – Michael

+0

実際には、私はAtomがIn-Orderの部分であるため、異なる計算単位が同時に可能であるかどうかは分かりません。 – Michael

0

ハイパースレッディングは、ほとんどの場合、システム内にプロセッサーを増やすことと同じです。あなたの言語がスレッドをサポートしていなくても、プログラムが別のコピーを作成したり、(オペレーティングシステムでサポートされている場合は)利用可能なプロセッサと均衡を保つワーカープロセスを起動させることは可能です。

言語のスレッドサポートを参照する必要がありますが、スレッドがプログラムを簡単に複雑にし、コードを非同期に実行できるため、バグを見つけにくくなることに注意してください。

あなたの質問への答えは「おそらく、それは依存しています」です。

あなたの他の質問は、ランタイムとコンパイラのサポートによって、Cで複数のスレッドを簡単に実装することができます。たとえば、OpenMPの拡張子http://en.wikipedia.org/wiki/OpenMPが役に立ちます。