研究概要 |
現在,大部分のプログラムは汎用言語を利用して作成されている.これらの汎用言語用コンパイラでは,ユーザがプログラムで記述した計算順番に忠実に従ってコードを生成している.これにより,大型計算機やマイクロプロセッサ用には高いコード化効率を得ることができるが,DSPなどをはじめとする最近の高速プロセッサに対してはその内部処理が並列化・パイプライン化されているためコード化効率が劣化してしまう.そこで,本研究ではプログラム中において必ずしも記述された計算順序に従う必要がない部分の計算順序を適当に入れ替えるてコード生成することにより,高いコード化効率を実現できるコンパイラの実現を目指している. 本研究では汎用言語として,現在最もよく使われているC言語を用いることとし,まず,C言語で記述されたプログラムをコンピュータ上に読み込み,コンパイラで処理しやすいデータ(中間コード)に変換する部分(パーザー部分)を作成した.この結果,与えられたプログラム全体は各処理部分間に変数などを介した先行制約関係だけにより制御付フローグラフの形で表現できる.ここで,変数間の先行制約関係に対して適切なスケジューリング方法を適用し全体の計算順序を定める.このとき,全試行を行えば最適解を求めることができるが,処理対象の規模が大きくなると実用時間内にスケジューリングできなくなる.そこで,実用時間内にスケジューリングを完了させるために,ASAP(As Soon As Possible)とALAP(As Latest As Possible)を組み合わせた単純なアルゴリズムを考案した.本アルゴリズムによって与えられた計算順序に従ってコード生成を行えば,ユーザはプログラミングスタイルを気にせずにプログラムを作成でき,コンパイラは与えられたプログラム中のユーザの意志は尊重しながら,ある程度のコード化効率を満たすことが見込める.ターゲットプロセッサとしては信号処理用プロセッサ(DSP)であるTMS320シリーズを選び,コード生成部分を現在作成中である. 一方,コード化効率を高めるためには計算順序だけでなくメモリアクセスの重要である.高速演算が可能となる間接メモリアドレッシングについてメモリアクセスを効率化するための諸方法についても考察を行った.
|