研 究 概 要


このページでは、我々の研究の主なテーマに関して概要を述べます。研究の詳細に関しては、本Webサイトにリンクしている論文を参考にされるか、当方にご質問をいだだければと思います。

不規則アクセス・パターンを持つデータのプリフェッチ

現在では、プロセッサと主記憶の速度差は非常に大きく、一旦キャッシュをミスすると性能は大きく低下してしまう。ひとたび主記憶へアクセスが生じるとデータを得るまでに数百サイクルを要し、これによりアウトオブオーダ実行を行う現在のプロセッサでさえ、完全にストールしてしまう。これを解決する1つの方法はキャッシュの容量を大きくし、ミスを生じにくくすることである。実際、現在数Mバイトのキャッシュが搭載されており、プロセッサ・チップの中で最も大きな面積を占有している。しかしそれにも関わらずキャッシュ・ミスを頻繁に生じるアプリケーションは多く存在し、十分な対策とはいえない。

キャッシュを大容量にする以外の有力な解決策として、データのプリフェッチがある。この手法はデータを必要とする前に、主記憶からデータをキャッシュに移動しておくものである。事前にデータを移動するには、事前にどのデータが必要とされるかを知る必要がある。このため、種々の予測手法が考案されているが、多くは規則的なアクセス・パターンに対応できるのみである。

これに対して我々は不規則なアクセス・パターンにも対応できるデータ・プリフェッチ手法について研究している。この手法のアイデアは、実際の命令の実行に先だって命令の実行を何らかの方法で行うというものである。この実行のことを「先行実行」と呼んでいる。先行実行の研究は多くあるが、そのほとんどはプログラムから命令列を抜きだし、別スレッドで実行するものである。これらの手法の欠点は、マルチコアなどのマルチスレッド環境を必要とする点である。我々は、単一スレッド環境で先行実行を実現する方式を研究している。

メモリ・レベル並列の利用

前述したように、プロセッサと主記憶の速度ギャップは非常に大きい。これへの対策の1つとしてメモリ・レベル並列(MLP: memory-level parallelism)の利用がある。これは、主記憶アクセスをできるだけオーバラップさせ、1要求当たりのデータ待ち時間を実効的に短くしようというものである。もしもMLPをうまく利用することができれば、キャッシュ・ミスを多く起こすアプリケーションでは数倍もの性能向上が得られることが知られている。

MLPを利用する1つの方法は、リオーダ・バッファ、レジスタ・ファイル、発行キュー、ロード/ストア・キューなどの資源を非常に大きくし、命令の実行順変更能力を高め、できるだけ多くのキャッシュ・ミスを起こすロードを時間的に固めて実行することである。しかし、単純にこれらの資源を大きくすると、その遅延によりクロック時間が延びてしまい性能は逆に低下する。この問題は資源をパイプライン化すれば解決するが、今度は、依存する命令を連続したサイクルで発行できなくなり、命令レベル並列(ILP: instruction-level parallelism)を損ねてしまう。これに対して、我々は、MLP、ILP共に十分に利用できる方式を研究している。

マルチスレッド・アーキテクチャ

現在、マイクロプロセッサ・チップには複数のプロセッサが内蔵されている。これをマルチコア・プロセッサと呼ぶ。マルチコアでは、各コアで別々のプログラムを実行させることができるため、単位時間当たりに終了できるプログラムの数、つまりスループットを高くすることができる。しかし現在のところ単一のプログラムの実行時間をマルチコア構成を利用して短縮させることは、プログラムの構造が規則的であるなど単純な場合でしか可能でない。

単一のプログラムの実行時間をマルチコアで短縮するには、まずプログラムをスレッドと呼ぶ小さな断片に分解する必要がある。そして各スレッドをコアで並列に実行することにより実行時間を短縮することができる。このような並列をスレッド・レベル並列(TLP: thread-level parallelism)と呼ぶ。

スレッドの並列実行を実現するには、まず第1に、コンパイラがプログラムをスレッドに分割する際に、スレッド間のデータ依存や制御依存が把握でき、かつそれらが存在しないか、あるいは存在しても十分な並列度が得られることが解析できなければならない。しかしポインタや複雑な制御構造などの存在でコンパイラには解析が困難な場合は多い。

我々はTLPを利用し単一プログラムの実行性能を高めるためのコンパイラとマルチコア・プロセッサのハードウェア構成の研究を行っている。前述したように、コンパイラは複雑なプログラムでは並列なスレッドへの分割が困難である。現在の技術では、実用的な多くのプログラムでそのようなスレッド分割自体が不可能である場合が多い。このような問題に対し、我々は、ソフトウェアとハードウェアの協調により解決する手法を研究している。

低消費電力アーキテクチャ

現在のプロセッサの消費電力は非常に大きく、空冷の限界に達している。このため、これ以上高速なクロックで動作させるといった簡単な方法では性能を上げることが困難になっており、巧妙なアーキテクチャ技術により電力を削減することが強く望まれている。

これに対して、我々は、通常のプロセッサの実行コアの前段に、電力効率の優れた単純な演算器アレイを配置し、ここでできるだけ多くの命令を実行することによりプロセッサ全体の電力を低下させるアーキテクチャについて研究している。