- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ハイパースレディングのレジスタについて)
ハイパースレディングのレジスタについて
このQ&Aのポイント
- ハイパースレッデイングのCPUで2つのスレッドA、Bを動かすとする。このときAの実行状態を示す汎用レジスタやプログラムカウンタとBの実行状態を示す汎用レジスタやプログラムカウンタの扱いはどうなのでしょうか。
- ハイパースレッデイングのCPUでのAとBのスレッドの実行方法には2つの方法が考えられます。1つはレジスタのロード、実行、レジスタのセーブを繰り返す方法であり、もう1つはA用のレジスタとB用のレジスタを2組用意して相互に切り替えながら実行する方法です。
- ハイパースレッデイングにおいて、1度に実行する機械語命令の個数はいくつなのかについては明確な回答がないようです。スレッドAの機械語命令を実行してから切り替えてBの機械語命令を実行する場合、1命令毎に切り替えるのか、それともAの複数の命令を実行してからBの複数の命令を実行するのかは実装に依存するようです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
答えは(2)ですが、実際にはもうちょっと複雑であり、ある意味もっと簡単です。 最近のCPUでは、「レジスタリネーミング」といって、並列実行しやすいように、 アーキテクチャ的にプログラム側から見えるレジスタは少ないままですが、 CPU内部では、もっと数多くのレジスタを内蔵しています。 (内部的なレジスタと、プログラム側から見えるレジスタの、対応表を持っている) ハイパースレッディングでは、この「プログラム側から見えるレジスタ」の数が2倍になるだけです。 命令の実行頻度については、基本的に1命令ごとです。 ですが「実行しようとする」のが1命令ごとなのであり、実際に1命令ごとに実行するとはかぎりません。 (ていうか、必ず交互に実行するとしたら、ハイパースレッディングの意味はありません。 片側の仮想CPUがメモリ読み込み待ちなどで実行できなくなっている時でも、もう片方の仮想CPUは動き続けることで、トータルでの稼働率が上がることになります)