研究概要 |
ディジタル信号処理プロセッサ(DSP)では、効率的なプログラムコードを自動的に生成・最適化できるコンパイラ技術が嘱望されている。通常は、計算順序の変更などによりレジスタと演算器などの計算資源を有効活用する方法が一般的である。しかしながら、DSPでは間接アドレッシングと自動修飾更新機構により簡単なメモリアクセスを効率化できるが,逆にこの機構を十分に活用できない場合は等価的にオーバーヘッドが生ずることになる。このオーバーヘッドは変数のアドレス配置の工夫により抑えることができる。本研究では、レジスタとメモリを演算引数としてとれる命令セットのDSPにおいて,アドレスレジスタ(AR)による間接アドレッシングを仮定し、計算順序と変数アドレスの両面を考慮した最適化によりコード化効率の改善を図っている。 提案するDSPコンパイラでは、計算順序決定の自由度を高めるために、従来よりもコードに近い細かい中間コード表現を用いて計算順序決定・コード生成を行う。また,レジスタ割り当てとコード生成が終了した後にレジスタ割り当ての結果を利用して計算順序を再決定する構成をとる。まず、データフローグラフ(DFG)中の各変数値の参照・定義回数によって値を保持すべき変数を調べ,これを考慮した計算順序決定及びレジスタ割当を行い,その後のコード生成,メモリ配置により,得られたメモリアクセス順序についてのオーバーヘッドコード数がわかる。次に、メモリに格納された変数値データを参照する中間コードについて実行順序の交換を逐次試行し,計算順序の再決定を行う.このとき,得られた計算順序についてはコード生成を再度行い、オーバーヘッド数を評価する.この操作を全ての実行順序が交換可能な中間コードについて行い,オーバーヘッドが最良となる計算順序交換の組合せを求める。 実際に提案手法を仮定したDSPに近いμPD77230を対象としたコンパイラに適用し,いくつかの例題についてのコード生成結果から,コード効率の向上並びにメモリアクセスに伴うオーバーヘッドの低減を確認している。
|