
プロセッサは、プログラムを実行する主体で、コンピュータをはじめ情報機器の動作を司る部品です。本研究室では、性能を良くするためにどのようにプロセッサを設計するべきか、という研究をしています。プロセッサの性能向上を通じて、情報機器としての性能を向上させることを目指しているわけです。
さて「プロセッサの性能」といってまず思い浮かぶのは、「何々Ghz」といった動作周波数であるかもしれません。どれだけ速く動けるかという指標です。もちろんこれを向上させることも大事ですが、どれだけ速く動けても、何もしていない空回りの時間が多いと効率が良くありません。そして仮に、プロセッサが律儀にプログラム通りの実行をすると、空回りの時間が大半になってしまいます。
研究の方針として、この空回りの待ち時間をいかに減らし、効率を上げるかを主眼としています。
このために投機的実行という技術があるのですが、ここでは一つの例として、分岐予測という技術を紹介します。
プログラムには分岐処理というものがあります。図1、2上側のフローチャートのように、条件によって実行する処理を変えるもので、例えばあるフラグが立っていれば処理Aを、そうでなければ処理Bを実行する、といったものです。律儀に実行すると、当然条件チェック後に、その結果に応じた処理を開始します。しかし、詳細は省きますが、条件チェック後、これに応じた処理に移行するときに待ち時間が発生します。

分岐予測では,条件チェックの結果が出る前その結果をプロセッサが予測し,予測に応じた処理を始めてしまいます。予測ですから,成否は当然不確かで,するべき処理かどうか分からないのに,処理を開始してしまうわけです。そして,条件チェックの結果が出たら,予測が正解だったかを判定します。図1は,成立と予測して,実際成立であったという正解の場合を示しています。既にそちらの処理を開始しているため無駄がありません。しかしあくま予測なので,不正解の場合もあります。図2は不成立と予測して,実際成立であったという例です。その場合,進めていた処理は廃棄し,正しい処理をやり直します。この無効化処理に時間がかかるため,不正解の場合は普通に処理した場合より効率が悪くなってしまいます。
予測の正解率が高くないと逆に効率が悪くなるため,正解率が高くなるような予測法が多く研究されています。予測法として「最近成立が多いから,今回も成立だろう」という簡単なものから,最近の研究では,脳の学習モデルを利用した予測なども提案されています。精度の良い予測法を考えることも,本研究室の研究テーマの一つです。
さて投機的実行の一つとして分岐予測を紹介しましたが,他の例としては「使うデータを予測してを予めメモリから読み出しておく」「計算結果そのものを予測して,先の処理に使う」等々あります。いずれも,成否が不確かな予測で処理を行い,正解だと効率が良く得をし,不正解だと普通に処理するより効率が悪くなり損をする「投機」をしています。
このような投機的実行は、研究段階の技術ではなく、現行のプロセッサでもおこなっています。目の前のコンピュータや情報機器が、内部では、不確かな予測で処理を進めていると考えると、なかなか興味深くないでしょうか。