研究概要 |
現在,大部分のプログラムは汎用言語を利用して作成されている.これらの汎用言語用コンパイラでは,ユーザがプログラムで記述した計算順番に忠実に従ってコードを生成している.これにより,大型計算機やマイクロプロセッサ用には高いコード化効率を得ることができるが,DSPなどをはじめとする最近の高速プロセッサに対してはその内部処理が並列化・パイプライン化されているためコード化効率が劣化してしまう.そこで,本研究ではプログラム中において必ずしも記述された計算順序に従う必要がない部分の計算順序を適当に入れ替えてコード生成することにより,高いコード化効率を実現できるコンパイラの実現を目標としている. 汎用言語としては,現在最もよく使われているC言語を用いることとした.C言語で記述されたプログラムは,各処理部分間に変数などを介した先行制約関係だけにより制御付フローグラフの形で表現できる.ここで,フローグラフから制御による分岐・合流を含まない基本ブロック部分を抜き出せば,その内部については,変数間の先行制約下でASAP(As Soon As Possible)とALAP(As Latest As Possible)を組み合わせたアルゴリズムを適用することにより,近似最適な計算順序を決めることができる.また,基本ブロック間については,分岐・合流におけるオーバーヘッドが少なくなるように基本ブロック内の演算を他の基本ブロックへ移動する操作を行いつつ,スケジューリングを行えば,プログラム全体でオーバーヘッドの少ない計算順序を定めることができる. 本計算順序決定法を適用し,ターゲットプロセッサを信号処理用プロセッサ(DSP)であるTMS320C30(TI)及びμPD77230(NEC)として,C言語用コンパイラを作成した.例題としては,信号処理アルゴリズムの中で条件分岐を含む適応ディジタルフィルタを用い,実際にコード生成を行って,提案した方法の有効性を確認した.ユーザはプログラミングスタイルを気にせずにプログラムを作成でき,コンパイラは与えられたプログラム中のユーザの意志は尊重しながら,ある程度のコード化効率を満たすことができる.一方,DSPにおいては高コード化効率のためには計算順序だけでなくメモリアクセスも重要となる.本研究では,高速演算を可能とする間接メモリアドレッシングについてのメモリアクセスの最適化についても考察を行っている.
|