宇都宮大学 大学院地域創生科学研究科 工農総合科学専攻 横田・大津研究室

PearLab, Utsunomiya Univ.

Japanese/ English

ヘテロジニアスメニーコアプロセッサのための最適な並列処理方式の研究

ヘテロジニアスメニーコアプロセッサ向けに最適な並列化を行うシステム

現在、マルチコアプロセッサが広く普及しており、多くのPCに搭載されています。現在は4コアのマルチコアプロセッサが主流となっていますが、今後更にコア数が増えることが予想されています。将来的には数十のコアが搭載されたメニーコアプロセッサが普及すると考えられます。

またプロセッサのコア数が増えるだけでなく、CPUとGPU(グラフィックボードに搭載されたプロセッサ)といった異なる種類のコアを1つのチップに搭載したヘテロジニアスなプロセッサが普及していくと予想されます。そこで、プログラム全体の処理を複数のコアで分担して行う並列処理に、ヘテロジニアスメニーコアプロセッサを活用することでプログラムの実行時間の短縮が期待できます。

しかし、ヘテロジニアスメニーコアプロセッサを使った並列化には問題点もあります。例として、CPUとGPUの2種類のコアを搭載したプロセッサを使用する場合、それぞれの特性を考慮した並列処理を行わせる必要があります。汎用的なCPUと比べてGPUは大量のデータを一度に処理するのには向いているが、データ毎に異なる処理を行うことには向いていない、といった具合にそれぞれが得意とする処理が異なっているのです。

ヘテロジニアスメニーコアプロセッサの性能を最大限に活用するためには、それぞれのプロセッサコアに適した並列処理を行う必要があります。並列処理の一例としてマルチスレッド実行について紹介しましたが、それに限定せずプロセッサコアの特性にあわせた並列処理方法の選択が重要となります。

当研究室ではプログラムの領域毎に最も適した並列処理方式を自動的に決定するシステムについて研究しています。このシステムでは、まず、後述するプロファイリングによってプログラムの特性を調査し、その情報を基にどのプロセッサコアに処理をさせるか、どのような並列処理を行うかを決定するのです。

 

プロファイリング

並列処理を行うときに問題となるのがプログラム中の依存関係です。依存関係は制御依存とデータ依存の大きく2つに分けられます。制御依存は基本ブロック間の依存関係、データ依存はデータ間の依存関係です。これらの依存関係は実際に実行するまで分からない場合が多いため、プログラムを実行しながら依存関係を正確に把握する必要があります。これがプロファイリングです。制御依存はパスプロファイリング、データ依存は依存プロファイリングというプロファイリングによって解析します。

パスプロファイリング

パスプロファイリングは制御フローの各実行経路(パス)を解析するプロファイリングです。基本ブロックが実行された順番とそれぞれのパスの実行回数を調べて、プログラム中のコード領域ごとに頻繁に実行されるパスを検出します。

依存プロファイリング

依存プロファイリングは何回も繰り返されるループの1回分(イテレーション)の間でレジスタやメモリにデータ依存があるか解析するプロファイリングです。まず命令のアドレスやループ先頭からの命令数などから、レジスタやメモリの読み出しと書き込みの位置を検出します。もしもある1つのレジスタやメモリに対して、読み出しの後に書き込みが行われていればそのレジスタやメモリには依存関係があります。

 

鋼グループではValgrindを用いて、バイナリ変換処理により自動並列処理を実現するシステムを開発していますが、本研究ではその枠組みを利用してプロファイリング処理を実現します。中間表現コードに変換したプログラムコードに対してプロファイルのためのコードを挿入しながら実行することで、実行中のプログラムの挙動を解析することができます。これらのプロファイリングから得られた情報を元に、コード領域毎にCPU向きかGPU向きかを見極め、最適な並列実行方式を決定します。