研究概要 |
ワークステーションやパーソナルコンピュータのプログラムでは,レジスタや演算器などの資源を有効に利用することによりソフトウェアを高速化できるが,最近では,大規模化したメモリのアクセスについてのコストも大きくなったため,メモリアクセスを考慮したハードウェア・ソフトウェア両面からの高速化が重要な課題となっている. メモリアクセスでアドレスポインタを介する間接メモリアドレッシングは,非常に簡単なハードウェアで実現でき,メモリアクセスに要するコストも少ない.また,アドレスポインタに対する簡単な更新操作は算術・論理演算と同時に実行できるようになっている場合が多く,これを次のメモリアクセスのために利用すると高効率のソフトウェアが得られる.この間接アドレッシングを汎用言語プログラムのメモリアクセス全てに用いた場合,現在のコンパイラ技術ではメモリアクセス上のオーバーヘッドを多数生じ,ソフトウェアの効率が大きく劣化してしまう.そこで本研究では,メモリアクセスを全て間接アドレッシングだけで行いプログラムを効率化する諸方法について提案を行う.本年度は従来まで行ってきた研究を元として,より拡張した間接アドレッシングの下で効率的アクセスが可能な変数アドレス配置を求める発見的アルゴリズムを提案している. まず,アドレスポインタが±2まで操作できる間接メモリアドレッシングについて変数のアドレス配置を決定するアルゴリズムの提案を行った.仮定した間接アドレッシングにおいては効率的AR操作だけでメモリアクセス可能なグラフ構造が三角形グラフをチェインした形状(Chained Triangle Graph:CTG)になることを示し,与えられたメモリアクセス系列をグラフ表現し(アクセスグラフ),ここからCTGを抽出することにより効率的なメモリアクセスが可能な変数アドレス配置を得ることができる.次に,アドレスポインタがモジュロ-更新できる場合について検討を行った.この間接アドレッシングにおいて効率的AR操作だけでメモリアクセス可能なアクセスグラフ形状を示し,これを元にしてアドレスを決定する発見的アルゴリズムを提案した.更に,フレームワーク部分としてC言語用コンパイラからのメモリアクセス部分の抽出も進めているが,上記で提案した2つのアルゴリズムがメモリアクセス系列だけを入力としているため,適用は容易であると考えられる.
|