みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ハイパースレディングのレジスタについて

ハイパースレディングのレジスタについて

ハイパースレッデイングのCPUで2つのスレッドA,Bを動かすとする。
このときAの実行状態を示す汎用レジスタやプログラムカウンタと
    Bの実行状態を示す汎用レジスタやプログラムカウンタの扱いはどうなのでしょうか。

次の2つの方法が考えられる。
(1) レジスタのロード、実行、レジスタのセーブを繰り返す方法。
    CPU内に高速なメモリを持ち、実行前にレジスタに値をロードして、命令を実行して、レジスタの値を保存を繰り返して、A,Bのスレッドを実行する方法。
(2) A用のレジスタとB用のレジスタを2組用意して、相互に切り替えながら実行する方法。
    Aを実行するときはA用のレジスタを使用して、Bを実行するときはB用のレジスタを使用する方法。
の2つが考えられるが、それとも他の方法があるのでしょうか。

それに関連して、1度に実行する機械語命令の個数はいくつなのでしょうか。
スレッドAの機械語命令を実行して、切り替えてBの機械語命令を実行するときに、
Aの1命令を実行してから、Bの1命令を実行する。1命令毎に切り替えるのでしょうか、
それともAの数個の命令を実行してから、Bの数個の命令を実行するのでしょうか。
このときスレッドを切り替える際に1度に実行する機械語命令の個数はいくつでしょうか。
ご存知の方がおりましたら、教えて下さい。

投稿日時 - 2010-06-05 22:05:23

QNo.5947375

暇なときに回答ください

質問者が選んだベストアンサー

答えは(2)ですが、実際にはもうちょっと複雑であり、ある意味もっと簡単です。

最近のCPUでは、「レジスタリネーミング」といって、並列実行しやすいように、
アーキテクチャ的にプログラム側から見えるレジスタは少ないままですが、
CPU内部では、もっと数多くのレジスタを内蔵しています。
(内部的なレジスタと、プログラム側から見えるレジスタの、対応表を持っている)


ハイパースレッディングでは、この「プログラム側から見えるレジスタ」の数が2倍になるだけです。

命令の実行頻度については、基本的に1命令ごとです。
ですが「実行しようとする」のが1命令ごとなのであり、実際に1命令ごとに実行するとはかぎりません。
(ていうか、必ず交互に実行するとしたら、ハイパースレッディングの意味はありません。
片側の仮想CPUがメモリ読み込み待ちなどで実行できなくなっている時でも、もう片方の仮想CPUは動き続けることで、トータルでの稼働率が上がることになります)

投稿日時 - 2010-06-06 01:10:55

ANo.1

このQ&Aは役に立ちましたか?

29人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問