• 締切済み

CPUの条件分岐について教えて下さい。

現在趣味でSF物の小説を書いています。その中で 「暴走した人型ロボットのCPUの弱点(欠陥)をついて倒す」 というシチュエーションを使おうと思っています。 CPUはCell BroadBandEngineやFUSIONコアをベースに自分なりに調べて設定を作りました。その中で 「汎用CPUではないので分岐予測をカットしその分高速化を図った」 という設定をつくったまでは良いのですが「分岐予測」、「パイプライン」がどういうものなのかイマイチわかりません。とりあえず 「CPUという工場」には「パイプライン」というコンベアーがあり「IF,ID,EX,MA,WB」という五人の従業員がそれぞれ担当の仕事をしては隣のコンベヤーに移り作業をする。結果5ターン目以降次々と製品がでてくるが、『もし甲さんが来たら携帯を、乙さんが来たら電子辞書を作る』といった「条件付命令」がありこのままではどちらかが来るまで工場はストップせざるをえない。そこで『こういうときには乙さんが来る』といった今までの事例を「分岐フェッチ」という帳簿につけ、あらかじめ電子辞書を作り始めておく。という風に理解しています。 質問したいのはこの条件付命令であり、なぜCellプロセッサがハードウェア分岐予測を持たないのか(ゲーム機には分岐予測は必要ないのか)、どのような状況で予測ミスによるペナルティが発生するのかが知りたいのです。アマチュアとはいえ小説下記のクセにわかりづらい文章ですみませんが1つよろしくお願いします。

みんなの回答

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.1

では、分岐予測の簡単なところだけの説明を。 分岐予測が出来るのは、2つ以上の命令処理パイプラインが必要です。 パイプラインとは、1つのハード命令(あとで説明)を幾つかに分解 し、命令の全てを処理してパイプラインを通過したことになる訳です。 パイプラインは、例えば分かり易く、命令を4つに分けたとしたら、 1つの命令が4段階目に来た時は、次の命令は3段階目にこれるわけで 3つめの命令は2段階目に、4つめの命令は最初の段階に、というよう に命令の実行が4分の1の時間で済む訳です。従って処理時間を速く する為に、命令を6に分解したり、8に分解したりと、分解の段階を増 やそうとします。 この時に分岐命令があると、二つのパイプラインに処理をさせ、有得 る二つの処理を行い、分岐が決定した時に、必要で無い方を捨て、 正しい方を実行させるわけです。 ということで、分岐予測はコストになりますので、プロセッサの設計 コンセプトで予測をいれるかどうか決まるのだと思います。 この分岐予測は、一時期かなり大掛かりになり、要らない命令の実行 が凄まじく、発熱の原因になったり、時として処理速度の足をひっぱ たり、目的と逆の結果がでたりしたそうで、これを論理的に説明する のもかなり高度な世界になります。ペナルティということですが、 コストが掛かるのが第一ですね。 ハード命令ですが、例えば、a という場所に値を 1 加えたい時に、 各種代表的な言語で書けば、a++ とか a=a+1 になりますが、これを ハード命令にすると。 L a,R1 // aをレジスタにロード A n0001,R1 // 1という値が入っている内容をレジスタに加える ST a,R1 // レジスタ1の内容をaに書き込む と3つの命令になります。この一つ一つをさらに4段階とか6段階に 分解するわけですね。また、これらはハード命令でもシンプルな 命令であり、ちょっと大きな仕事をする命令、凄く沢山の処理を する命令など、一言で4段階6段階という分類にならないのが普通 です。 なお、汎用機でも分岐予測を始めたのは第4世代か4.5世代のCPUか らだったと思います。32~34年くらい前からでしょうか。

C5326j
質問者

お礼

ありがとうございます。認識間違ってましたかorz。 要するに「もしaの値が0なら8へ、1なら9へ飛べ」といった命令があった場合まずパイプラインを使って89両方へとんで処理を行なってみた上でaの値が1と決まった瞬間に「9へ飛んだときの結果」を返す、といった感じでしょうか。この時に「8へ飛んだときの結果」を破棄する、と。 Cellに分岐予測が搭載されなかったのはSPEで代用できるからなのでしょうか。それともあらかじめ分岐予測(ここはこう分岐する)と言った情報をあらかじめ仕込んで置けるからなのでしょうか。

関連するQ&A