(57)【要約】【課題】非対称マルチコア・プロセッサのようにコア毎のデータ領域とコア間で共有する共有データ領域等の複数のデータ領域がある場合に、全ての領域に対してレジスタ相対アクセスを使用してアクセスできるようにする。【解決手段】マルチコア・プロセッサ向けコンパイラ装置であって、コア毎のデータ領域とコア間で共有する共有データ領域等の複数のデータ領域がある場合に、共通プログラム領域の関数の先頭でレジスタ相対アクセス用レジスタの値を、退避先（コア毎のデータ領域等）に退避させるコードを生成し、レジスタ相対アクセス用レジスタの値に共有データ領域の先頭アドレスを上書きし、関数終了時（関数の呼び出し元に分岐する処理の直前）に、レジスタ相対アクセス用レジスタの値に、退避先に退避させた値を書き戻す（上書きする）コードを生成する。【選択図】図７
2012113518.tif 000002
【特許請求の範囲】
【請求項１】
非対称型マルチコア・プロセッサ向けコンパイラ装置であって、
原始プログラムの構文解析結果を基に、変数のアクセス解析を行い、変数の参照元及び参照回数の解析情報を取得する手段と、
前記解析情報を基に、変数の配置を行った後、中間言語で中間コードを作成する手段と、
前記中間コードからオブジェクトコードを生成する際、共通プログラムか否か判断し、共通プログラムである場合、共通プログラム領域から共有データ領域にレジスタ相対アクセスするコードを追加する手段と
を具備する
コンパイラ装置。
【請求項２】
請求項１に記載のコンパイラ装置であって、
コア毎のデータ領域とコア間で共有する共有データ領域との複数のデータ領域がある場合に、前記共有データ領域の先頭アドレスをデータとして保持するシンボルを生成する手段と、
共通プログラム領域の関数の先頭アドレスに、レジスタ相対アクセス用レジスタの値を前記コア毎のデータ領域に退避させるコードを追加する手段と、
前記レジスタ相対アクセス用レジスタの値に、前記シンボルを上書きするコードを追加する手段と、
前記関数の呼び出し元に分岐する処理の直前に、前記レジスタ相対アクセス用レジスタの値を、前記コア毎のデータ領域に退避させた値に書き戻すコードを追加する手段と
を更に具備する
コンパイラ装置。
【請求項３】
非対称型マルチコア・プロセッサ向けコンパイラ装置により実施されるコード生成方法であって、
原始プログラムの構文解析結果を基に、変数のアクセス解析を行い、変数の参照元及び参照回数の解析情報を取得することと、
前記解析情報を基に、変数の配置を行った後、中間言語で中間コードを作成することと、
前記中間コードからオブジェクトコードを生成する際、共通プログラムか否か判断し、共通プログラムである場合、共通プログラム領域から共有データ領域にレジスタ相対アクセスするコードを追加することと
を含む
コード生成方法。
【請求項４】
請求項３に記載のコード生成方法であって、
コア毎のデータ領域とコア間で共有する共有データ領域との複数のデータ領域がある場合に、前記共有データ領域の先頭アドレスをデータとして保持するシンボルを生成することと、
共通プログラム領域の関数の先頭アドレスに、レジスタ相対アクセス用レジスタの値を前記コア毎のデータ領域に退避させるコードを追加することと、
前記レジスタ相対アクセス用レジスタの値に、前記シンボルを上書きするコードを追加することと、
前記関数の呼び出し元に分岐する処理の直前に、前記レジスタ相対アクセス用レジスタの値を、前記コア毎のデータ領域に退避させた値に書き戻すコードを追加することと
を更に含む
コード生成方法。
【請求項５】
請求項３又は４に記載のコード生成方法を、計算機に実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンパイラ装置に関し、特に非対称型マルチコア・プロセッサ向けコンパイラ装置に関する。
【背景技術】
【０００２】
近年、半導体集積回路が多くの製品に搭載されて複雑な制御を行うようになり、処理能力を向上するために１つの半導体集積回路に複数のプロセッサ・コアを実装したマルチコア・プロセッサが採用されるようになってきた。
【０００３】
マルチコア・プロセッサは、複数のプロセッサ・コアを実装することによる処理能力の向上と、複数のプロセッサを１つにすることによる省消費電力化を期待できる。
【０００４】
その流れの中で、マルチコア・プロセッサを制御するためのプログラムを開発するための開発ツールであるコンパイラ装置も、各ＰＥ（Ｐｒｏｃｃｅｒ  Ｅｌｅｍｅｎｔ：演算ユニットの単位（ここでは、コア））間で制御できるオブジェクトコード（以下、コードと呼ぶ）の生成の必要性が高まってきた。
【０００５】
特に、コア間で共有するプログラムからメモリアクセスを行う場合に、絶対アドレス参照を行うプログラムが一般的であるが、コードの効率が良いレジスタ相対アクセスも使用可能にする要求が高まっている。
【０００６】
＜特許文献１＞
特許文献１（特開２００６−０５８９９１号公報）には、従来のコンパイラ装置の例が開示されている。
【０００７】
従来のコンパイラ装置は、データ領域へのデータ割り付けの最適化を目的とし、データのアクセス回数をコンパイル時に調査し、アクセス回数が多い順に並び替えてデータ領域に配置する機能を有し、データへのアクセスを可能な限り相対アクセスで行うコードを出力する。
【０００８】
［従来のコンパイラ装置］
図１に示すように、従来のコンパイラ装置は、構文解析処理部１と、中間言語レベル最適化部２と、コード生成処理部３と、ソースプログラム格納部４と、中間言語格納部５と、オブジェクトプログラム格納部６を備える。
【０００９】
構文解析処理部１は、ソースプログラム格納部４に格納されている高級言語で記述されたソースプログラムを入力して構文解析を行う。構文解析処理部１は、構文解析結果を、中間言語格納部５に格納する。
【００１０】
中間言語レベル最適化部２は、中間言語格納部５に格納されている構文解析処理部１による構文解析結果を入力し、コード生成時の効率を上げるための最適化を行う。中間言語レベル最適化部２は、最適化結果を、中間言語格納部５に格納する。
【００１１】
コード生成処理部３は、中間言語格納部５に格納されている中間言語レベル最適化部２による最適化結果を入力してコードを生成する。コード生成処理部３は、生成されたコードを、オブジェクトプログラム格納部６に格納する。
【００１２】
［コード生成処理部］
図２に示すように、コード生成処理部３は、ノード変換処理部７と、レジスタ割り付け処理部８と、アドレス割り付け処理部９と、コード出力処理部１０を備える。
【００１３】
ノード変換処理部７は、中間言語格納部５に格納されている中間言語レベル最適化部２による最適化結果を入力してノード変換処理を行う。ノード変換処理部７は、ノード変換結果を、ノード格納部１１に格納する。
【００１４】
レジスタ割り付け処理部８は、データのレジスタ割り付け処理を行う。レジスタ割り付け処理部８は、レジスタ割り付け結果を、ノード格納部１１に格納する。
【００１５】
アドレス割り付け処理部９は、レジスタが割り付かなかったデータのアドレス割り付け処理を行う。アドレス割り付け処理部９は、アドレス割り付け結果を、ノード格納部１１に格納する。
【００１６】
コード出力処理部１０は、コードの出力処理を行う。
【００１７】
［アドレス割り付け処理部］
図３に示すように、アドレス割り付け処理部９は、データ管理情報テーブル連鎖機構１３と、データアクセス回数登録処理部１４と、データ管理情報テーブル連鎖並べ替え処理部１５と、データのアドレス割り付け処理部１６を備える。
【００１８】
データ管理情報テーブル連鎖機構１３は、データ毎のデータ管理情報テーブル１２（１２−ｉ、ｉ＝１〜ｎ：ｎはテーブル数）を有する。
【００１９】
データ管理情報テーブル１２（１２−ｉ、ｉ＝１〜ｎ）の各々は、次のデータ管理情報テーブルを指すポインタを書き換え可能に保持し、当該ポインタにより連鎖の並びを有する。データ管理情報テーブル１２（１２−ｉ、ｉ＝１〜ｎ）は、次のデータ管理情報テーブルを指すポインタを書き換え可能に保持する。また、データ管理情報テーブル１２（１２−ｉ、ｉ＝１〜ｎ）には、データの管理情報や、データのアクセス回数が登録される。
【００２０】
データアクセス回数登録処理部１４は、データ管理情報テーブル１２（１２−ｉ、ｉ＝１〜ｎ）に、データ毎のデータアクセス回数を登録する。
【００２１】
データ管理情報テーブル連鎖並べ替え処理部１５は、データアクセス回数登録処理部１４によるデータ管理情報テーブル１２（１２−ｉ、ｉ＝１〜ｎ）へのデータアクセス回数の登録終了後、データ管理情報テーブル１２（１２−ｉ、ｉ＝１〜ｎ）の連鎖の並びをデータアクセス回数の多い順番に並べ替える。
【００２２】
データのアドレス割り付け処理部１６は、データ管理情報テーブル連鎖並べ替え処理部１５によるデータ管理情報テーブル１２（１２−ｉ、ｉ＝１〜ｎ）の連鎖の並べ替え後に、データのアドレス割り付け処理を行う。
【００２３】
［従来のコンパイラ装置の特徴］
以上のように、従来のコンパイラ装置では、データ毎のデータ管理情報テーブル１２（１２−ｉ、ｉ＝１〜ｎ）が用意され、データアクセス回数登録部１４によりデータ管理情報テーブル１２（１２−ｉ、ｉ＝１〜ｎ）にデータ毎のデータアクセス回数が登録され、その後、データ管理情報テーブル連鎖並べ替え処理部１５により、登録されたデータアクセス回数が多い順となるようにデータ管理情報テーブルの連鎖が並べ替えられる。
【００２４】
そして、データのアドレス割り付け処理部１６により、アドレス回数が多いデータほどベースアドレスに近い位置に配置されるように、アクセス回数の多いデータ用のデータ管理情報テーブルの順にベースアドレスからの相対距離が割り付けられるので、事前のアドレス計算や相対距離のレジスタへの転送の出現回数が減少することになる。
【００２５】
＜特許文献２＞
また、関連する技術として、特許文献２（特開２０００−０２９７１７号公報）には、オブジェクト生成方法及びその処理手順を記憶した媒体、及びにオブジェクト生成装置が開示されている。この関連技術では、高級言語を機械命令に翻訳する際に、変数のアドレスをそのアドレスの全体によって表現した場合と、基点のアドレスとしてのベースポインタの値をレジスタに保持し、そのレジスタの値からの相対値としての表現した場合との効率を比較し、比較結果に基づき、より効率の良い表現を採用したオブジェクトを生成する。
【先行技術文献】
【特許文献】
【００２６】
【特許文献１】特開２００６−０５８９９１号公報
【特許文献２】特開２０００−０２９７１７号公報
【発明の概要】
【発明が解決しようとする課題】
【００２７】
従来のコンパイラ装置には、非対称マルチコア・プロセッサのようにコア毎のデータ領域とコア間で共有する共有データ領域等の複数のデータ領域がある場合に、全ての領域に対してレジスタ相対アクセスを使用してアクセスすることができないという問題がある。
【００２８】
その理由は、非対称マルチコア・プロセッサでは、コア毎のデータ領域と共有のデータ領域は、通常は連続ではない離れた領域に配置されているため、レジスタ相対アクセスでアクセスできる範囲に、これら全ての領域が収まらず、コア毎のデータ領域と共有のデータ領域の両方に対してレジスタ相対アクセスすることができないためである。
【課題を解決するための手段】
【００２９】
本発明のコンパイラ装置は、非対称型マルチコア・プロセッサ向けコンパイラ装置であって、原始プログラムの構文解析結果を基に、変数のアクセス解析を行い、変数の参照元及び参照回数の解析情報を取得する手段と、当該解析情報を基に、変数の配置を行った後、中間言語（Ｉｎｔｅｒｍｅｄｉａｔｅ  ｌａｎｇｕａｇｅ）で中間コードを作成する手段と、当該中間コードからオブジェクトコードを生成する際、共通プログラムか否か判断し、共通プログラムである場合、共通プログラム領域から共有データ領域にレジスタ相対アクセスするコードを追加する手段とを具備する。
【００３０】
本発明のコード生成方法は、非対称型マルチコア・プロセッサ向けコンパイラ装置により実施されるコード生成方法であって、原始プログラムの構文解析結果を基に、変数のアクセス解析を行い、変数の参照元及び参照回数の解析情報を取得することと、当該解析情報を基に、変数の配置を行った後、中間言語で中間コードを作成することと、当該中間コードからオブジェクトコードを生成する際、共通プログラムか否か判断し、共通プログラムである場合、共通プログラム領域から共有データ領域にレジスタ相対アクセスするコードを追加することとを含む。
【００３１】
本発明のプログラムは、上記のコード生成方法における処理を、計算機に実行させるためのプログラムである。なお、本発明のプログラムは、記憶装置や記憶媒体に格納することが可能である。
【発明の効果】
【００３２】
非対称マルチコア・プロセッサのようにコア毎のデータ領域とコア間で共有する共有データ領域等の複数のデータ領域がある場合に、全ての領域に対してレジスタ相対アクセスを使用してアクセスすることができる。
【図面の簡単な説明】
【００３３】
【図１】従来のコンパイラ装置の構成図である。
【図２】従来のコンパイラ装置におけるコード生成処理部の構成図である。
【図３】上記のコード生成処理部におけるアドレス割り付け処理部の構成図である。
【図４】本発明のコンパイラ装置の構成図である。
【図５】実行時のアドレス空間における目的プログラムの配置図である。
【図６】従来と同じくアクセス方法を選択するコード生成処理を示すフローチャートである。
【図７】全ての領域に対してレジスタ相対アクセスを使用するコード生成処理を示すフローチャートである。
【図８】全ての領域に対してレジスタ相対アクセスを使用する目的プログラムの実行処理を示すフローチャートである。
【発明を実施するための形態】
【００３４】
以下に、本発明の第１実施形態について添付図面を参照して説明する。
図４に示すように、本発明のコンパイラ装置１００は、読み込み部１０１と、字句解析部１０２と、構文解析部１０３と、変数アクセス解析部１０４と、変数配置部１０５と、中間語作成部１０６と、最適化部１０７と、コード生成部１０８を備える。
【００３５】
読み込み部１０１は、原始プログラムを読み込む。原始プログラムは、原始プログラム格納部１１０に格納されているソースプログラム（ソースコード）である。
【００３６】
字句解析部１０２は、原始プログラムの字句解析を行い、字句（トークン）を作成する。字句解析部１０２は、字句（トークン）を中間データ格納部１２０に格納する。
【００３７】
構文解析部１０３は、字句解析部１０２で作成した字句（トークン）を基に構文解析を行い、字句（トークン）の並びが文法に照らして正しいかのエラー・チェックを行う。構文解析部１０３は、構文解析結果を中間データ格納部１２０に格納する。
【００３８】
変数アクセス解析部１０４は、構文解析部１０３で得た構文解析結果を基に、変数のアクセス解析を行い、変数の参照元と参照回数の解析情報を得る。変数アクセス解析部１０４は、この解析情報を中間データ格納部１２０に格納する。
【００３９】
変数配置部１０５は、変数アクセス解析部１０４で得た解析情報を基に、変数の配置を行う。変数配置部１０５は、変数の配置結果を中間データ格納部１２０に格納する。
【００４０】
中間語作成部１０６は、変数の配置が行われた後、原始プログラムを基に、中間言語（Ｉｎｔｅｒｍｅｄｉａｔｅ  ｌａｎｇｕａｇｅ）で中間コードを作成する。中間語作成部１０６は、中間コードを中間データ格納部１２０に格納する。
【００４１】
最適化部１０７は、中間データ格納部１２０に格納されている各種情報を基に、中間コードの最適化を行い、中間コードの高速化、サイズの低減を行う。最適化部１０７は、最適化された中間コードを中間データ格納部１２０に格納する。
【００４２】
コード生成部１０８は、最適化された中間コードに基づいてコードを生成し、目的プログラムが完成すると、目的プログラムを目的プログラム格納部１３０に格納する。目的プログラムは、実行可能な形式で記述されたオブジェクトプログラム（オブジェクトコード）である。
【００４３】
［ハードウェアの例示］
コンパイラ装置１００の例として、ＰＣ（パソコン）、アプライアンス（ａｐｐｌｉａｎｃｅ）、ワークステーション、メインフレーム、スーパーコンピュータ等の計算機を想定している。なお、コンパイラ装置１００は、物理マシン上に構築された仮想マシン（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ（ＶＭ））でも良い。
【００４４】
読み込み部１０１の例として、外部の入力装置や記憶装置、或いは他の計算機から情報を取得するためのインターフェース（Ｉ／Ｆ：ｉｎｔｅｒｆａｃｅ）を想定している。入力装置の例として、ＫＶＭ（キーボード・ビデオ・マウス）、コンソール（ｃｏｎｓｏｌｅ）、タッチパネル（ｔｏｕｃｈ  ｐａｎｅｌ）、タブレット（ｔａｂｌｅｔ）、又は各種の情報伝達媒体の読取装置等が考えられる。
【００４５】
字句解析部１０２、構文解析部１０３、変数アクセス解析部１０４、変数配置部１０５、中間語作成部１０６、最適化部１０７、及びコード生成部１０８は、プログラムに基づいて駆動し所定の処理を実行するプロセッサと、当該プログラムや各種データを記憶するメモリとによって実現される。
【００４６】
上記のプロセッサの例として、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、マイクロプロセッサ（ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ）、マイクロコントローラ、或いは、専用の機能を有する半導体集積回路（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ（ＩＣ））等が考えられる。
【００４７】
上記のメモリの例として、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  ａｎｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やフラッシュメモリ等の半導体記憶装置、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）やＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の補助記憶装置、又は、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のリムーバブルディスクや、ＳＤメモリカード（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ  ｍｅｍｏｒｙ  ｃａｒｄ）等の記憶媒体（メディア）等が考えられる。
【００４８】
なお、上記のプロセッサ及び上記のメモリは、一体化していても良い。例えば、近年では、マイコン等の１チップ化が進んでいる。従って、計算機等に搭載される１チップマイコンが、プロセッサ及びメモリを備えている事例が考えられる。
【００４９】
原始プログラム格納部１１０、中間データ格納部１２０、及び目的プログラム格納部１３０の例として、上記のメモリや、周辺機器（外付けＨＤＤ等）及び外部のサーバ（Ｗｅｂサーバやファイルサーバ等）に設置された記憶装置、或いは、ＤＡＳ（Ｄｉｒｅｃｔ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）、ＦＣ−ＳＡＮ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ  −  Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＮＡＳ（Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）、ＩＰ−ＳＡＮ（ＩＰ  −  Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等を用いたストレージ装置が考えられる。
【００５０】
但し、実際には、これらの例に限定されない。
【００５１】
［目的プログラムの実行時のアドレス空間］
図５を参照して、非対称マルチコア・プロセッサにおいて、本発明のコンパイラ装置で生成した目的プログラムが実行される際に、プログラム及びデータが配置されるアドレス空間について説明する。
【００５２】
当該アドレス空間２００は、ＰＥ１用プログラム領域２０１と、ＰＥ２用プログラム領域２０２と、共通プログラム領域２０３と、ＰＥ１用データ領域２０４と、ＰＥ２用データ領域２０５と、共有データ領域２０６を有する。
【００５３】
ＰＥ１用プログラム領域２０１及びＰＥ２用プログラム領域２０２は、コア毎のプログラム領域である。
【００５４】
共通プログラム領域２０３は、コア間で共有する共通プログラム領域である。
【００５５】
ＰＥ１用データ領域２０４及びＰＥ２用データ領域２０５は、コア毎のデータ領域である。
【００５６】
共有データ領域２０６は、コア間で共有する共有データ領域である。
【００５７】
ＰＥ１用プログラム領域２０１、ＰＥ２用プログラム領域２０２、及び共通プログラム領域２０３と、ＰＥ１用データ領域２０４と、ＰＥ２用データ領域２０５と、共有データ領域２０６は、離れたアドレスに配置されている。
【００５８】
図５では、「０ｘ」で始まる表記を１６進数とする。
【００５９】
ＰＥ１用プログラム領域２０１は、「０ｘ００００００」番地から「０ｘ００３ＦＦＦ」番地までとする。
【００６０】
ＰＥ２用プログラム領域２０２は、「０ｘ００４０００」番地から「０ｘ００７ＦＦＦ」番地までとする。
【００６１】
共通プログラム領域２０３は、「０ｘ００８０００」番地から「０ｘ００９ＦＦＦ」番地までとする。
【００６２】
ＰＥ１用データ領域２０４は、「０ｘ１０００００」番地から「０ｘ１３ＦＦＦＦ」番地までとする。
【００６３】
ＰＥ２用データ領域２０５は、「０ｘ２０００００」番地から「０ｘ２３ＦＦＦＦ」番地までとする。
【００６４】
共有データ領域２０６は、「０ｘ３０００００」番地から「０ｘ３３ＦＦＦＦ」番地までとする。
【００６５】
［アクセス方法を選択するコード生成処理］
図６を参照して、従来のようにアクセス方法を選択するコード生成処理について説明する。
【００６６】
（１）ステップＳ１０１
読み込み部１０１は、原始プログラムを読み込む。
【００６７】
（２）ステップＳ１０２
字句解析部１０２は、原始プログラムの字句解析を行う。
【００６８】
（３）ステップＳ１０３
構文解析部１０３は、原始プログラムの構文解析を行う。
【００６９】
（４）ステップＳ１０４
変数アクセス解析部１０４は、構文解析結果を基に、変数のアクセス解析を行い、変数の参照元と参照回数の解析情報を取得する。
【００７０】
（５）ステップＳ１０５
変数配置部１０５は、上記の解析情報を基に、変数の配置を行う。
【００７１】
（６）ステップＳ１０６
中間語作成部１０６は、変数の配置が行われた後、中間言語で、原始プログラムの中間コードを作成する。
【００７２】
（７）ステップＳ１０７
最適化部１０７は、中間コードの最適化を行う。
【００７３】
（８）ステップＳ１０８
コード生成部１０８は、最適化された中間コードに基づいてコード生成を行う際に、共通プログラムであるか否かを判断する。なお、共通プログラムとは、コア間で共有する共通領域のプログラム（共通プログラム領域に格納されたプログラム）である。共通プログラムは、いずれのコアからも実行可能である。ここでは、共通プログラムは、共通プログラム領域に格納されるものとする。
【００７４】
（９）ステップＳ１０９
コード生成部１０８は、共通プログラムである場合、変数のアクセス方法を絶対アドレス参照に決定する。
【００７５】
（１０）ステップＳ１１０
コード生成部１０８は、共通プログラムでない場合、変数のアクセス方法をレジスタ相対アクセスに決定する。
【００７６】
（１１）ステップＳ１１１
コード生成部１０８は、決定した変数のアクセス方法に従ってコードの生成を行い、目的プログラムが完成すると、処理を終了する。
【００７７】
［全ての領域に対してレジスタ相対アクセスを使用するコード生成処理］
図７を参照して、全ての領域に対してレジスタ相対アクセスを使用するコード生成処理について説明する。
【００７８】
（１）ステップＳ２０１
読み込み部１０１は、原始プログラムを読み込む。
【００７９】
（２）ステップＳ２０２
字句解析部１０２は、原始プログラムの字句解析を行う。
【００８０】
（３）ステップＳ２０３
構文解析部１０３は、原始プログラムの構文解析を行う。
【００８１】
（４）ステップＳ２０４
変数アクセス解析部１０４は、構文解析結果を基に、変数のアクセス解析を行い、変数の参照元と参照回数の解析情報を取得する。
【００８２】
（５）ステップＳ２０５
変数配置部１０５は、上記の解析情報を基に、変数の配置を行う。
【００８３】
（６）ステップＳ２０６
中間語作成部１０６は、変数の配置が行われた後、中間言語で、原始プログラムの中間コードを作成する。
【００８４】
（７）ステップＳ２０７
最適化部１０７は、中間コードの最適化を行う。
【００８５】
（８）ステップＳ２０８
コード生成部１０８は、最適化された中間コードに基づいてコード生成を行う際に、コア間で共有する共通プログラムであるか否かを判断する。ここでは、共通プログラムの場合はステップＳ２０９に進み、共通プログラム以外の場合はステップＳ２１３に進む。
【００８６】
（９）ステップＳ２０９
コード生成部１０８は、共通プログラムである場合、共通データ領域の先頭アドレスをデータとして保持するシンボルを生成する。
【００８７】
（１０）ステップＳ２１０
コード生成部１０８は、共通プログラム領域２０３に配置された関数の先頭アドレスに、レジスタ相対アクセス用レジスタの値を退避先（コア毎のデータ領域等）に退避させるコードを追加する。
【００８８】
（１１）ステップＳ２１１
コード生成部１０８は、レジスタ相対アクセス用レジスタの値に、共有データ領域の先頭アドレスをデータとして保持したシンボル（ステップＳ２０９で生成されたシンボル）を上書きするコードを追加する。
【００８９】
（１２）ステップＳ２１２
コード生成部１０８は、共通プログラム領域に配置された関数の呼び出し元に分岐する処理の直前に、レジスタ相対アクセス用レジスタの値を退避先から復帰させる（退避させた値に書き戻す）コードを追加する。
【００９０】
（１３）ステップＳ２１３
コード生成部１０８は、上記のコード追加処理が終了した場合、又は共通プログラム以外の場合、レジスタ相対アクセスのコードを生成する。コード生成部１０８は、全ての中間コードをコードとして生成し、目的プログラムが完成すると、処理を終了する。
【００９１】
［全ての領域に対してレジスタ相対アクセスを使用する目的プログラムの実行処理］
図８を参照して、非対称マルチコア・プロセッサが、上記の目的プログラムを実行した際の動作について説明する。
【００９２】
（１）ステップＳ３０１
非対称マルチコア・プロセッサは、ＰＥ１用プログラム領域２０１又はＰＥ２用プログラム領域２０２の処理から、共通プログラム領域２０３の処理に分岐する。ここでは、非対称マルチコア・プロセッサは、コアの１つであるＰＥ１において、ＰＥ１用プログラム領域２０１の「０ｘ０００５００」番地に配置されたＰＥ１のメイン関数を実行して、共通プログラム領域２０３の「０ｘ００８５００」番地に配置されたサブ関数を呼び出す。
【００９３】
（２）ステップＳ３０２
非対称マルチコア・プロセッサは、サブ関数を実行して、レジスタ相対アクセス用レジスタの値「０ｘ１０００００」を、退避先であるＰＥ１用データ領域２０４の「０ｘ１０Ｆ０００」番地に退避させる。これにより、非対称マルチコア・プロセッサは、ＰＥ１用データ領域２０４の「０ｘ１０Ｆ０００」番地において、レジスタ相対アクセス用レジスタの値「０ｘ１０００００」を保持する。
【００９４】
（３）ステップＳ３０３
非対称マルチコア・プロセッサは、サブ関数を実行して、レジスタ相対アクセス用レジスタの値「０ｘ１０００００」を、共有データ領域２０６の先頭アドレス「０ｘ３０００００」に書き換える（上書きする）。すなわち、非対称マルチコア・プロセッサは、共有データ領域２０６の先頭アドレス「０ｘ３０００００」をデータとして保持するシンボルを生成し、レジスタ相対アクセス用レジスタの値に、このシンボル（共有データ領域２０６の先頭アドレス）を上書きする。
【００９５】
（４）ステップＳ３０４
非対称マルチコア・プロセッサは、サブ関数を実行して、共通プログラム領域２０３の「０ｘ００８６００」番地の命令のレジスタ相対メモリアクセス命令を実行し、共有データ領域２０６の「０ｘ３００１００」番地に配置されたデータにアクセスする。
【００９６】
（５）ステップＳ３０５
非対称マルチコア・プロセッサは、サブ関数を実行して、退避先であるＰＥ１用データ領域２０４の「０ｘ１０Ｆ０００」番地に退避させた値「０ｘ１０００００」を、レジスタ相対アクセス用レジスタの値に書き戻す（上書きする）。これにより、非対称マルチコア・プロセッサは、ＰＥ１用データ領域２０４の「０ｘ１０Ｆ０００」番地において保持していたレジスタ相対アクセス用レジスタの値「０ｘ１０００００」を復帰させる。
【００９７】
（６）ステップＳ３０６
非対称マルチコア・プロセッサは、サブ関数を実行して、共通プログラム領域２０３の「０ｘ００８８００」番地から、ＰＥ１の「０ｘ０００５０４」番地のメイン関数に戻る。
【００９８】
上記のように、共通プログラム領域のプログラム実行時に、レジスタ相対アクセス用レジスタが保持するアドレスを共有データ領域の先頭アドレスに配置できるため、レジスタ相対アクセスにて共有データ領域にアクセスすることができ、共通プログラム領域のプログラム実行時にレジスタ相対アクセスにて共有データ領域にアクセスすることができる効果がある。
【００９９】
また、レジスタ相対アクセスを使用することにより、コード数を削減することができ、生成したコードの実行を高速化することができる効果もある。
【０１００】
＜本発明の特徴＞
本発明のコンパイラ装置は、非対称型マルチコア・プロセッサ用のコンパイラ装置であって、中間コードからオブジェクトコードを生成する際、共通プログラムか否か判断し、共通プログラムである場合、共通プログラム領域から共有データ領域にレジスタ相対アクセスするコードを生成することを特徴とする。
【０１０１】
具体的には、本発明のコンパイラ装置は、非対称型マルチコア・プロセッサ向けコンパイラ装置であって、コア毎のデータ領域とコア間で共有する共有データ領域等の複数のデータ領域がある場合に、共有データ領域の先頭アドレスをデータとして保持するシンボルを生成する手段と、共通プログラム領域の関数の先頭アドレスに、レジスタ相対アクセス用レジスタの値を、退避先（コア毎のデータ領域等）に退避させるコードを追加し、レジスタ相対アクセス用レジスタの値に、生成されたシンボル（共有データ領域の先頭アドレス）を上書きするコードを追加する手段と、共通プログラムの関数呼び出し元に分岐する処理の直前に、レジスタ相対アクセス用レジスタの値に、退避先に退避させた値を書き戻す（上書きする）コードを追加する手段とを具備する。
【０１０２】
また、本発明のコード生成方法は、非対称型マルチコア・プロセッサ用コンパイラ装置のコード生成方法であって、共有データ領域の先頭アドレスをデータとして保持するシンボルを生成する工程と、共通プログラム領域の関数の先頭アドレスに、レジスタ相対アクセス用レジスタの値を、退避先（コア毎のデータ領域等）に退避させるコードを追加する工程と、レジスタ相対アクセス用レジスタの値に、当該シンボル（共有データ領域の先頭アドレス）を上書きするコードを追加する工程と、共通プログラムの関数呼び出し元に分岐する処理の直前に、レジスタ相対アクセス用レジスタの値に、退避先に退避させた値を書き戻す（上書きする）コードを追加する工程とを有することを特徴とする。
【０１０３】
これにより、全ての領域に対してレジスタ相対アクセスができる。
【０１０４】
以上、本発明の実施形態を詳述してきたが、実際には、上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。
【符号の説明】
【０１０５】
１…  構文解析処理部
２…  中間言語レベル最適化部
３…  コード生成処理部
４…  ソースプログラム格納部
５…  中間言語格納部
６…  オブジェクトプログラム格納部
７…  ノード変換処理部
８…  レジスタ割り付け処理部
９…  アドレス割り付け処理部
１０…  コード出力処理部
１１…  ノード格納部
１２（１２−ｉ、ｉ＝１〜ｎ）…  データ管理情報テーブル
１３…  データ管理情報テーブル連鎖機構
１４…  データアクセス回数登録部
１５…  データ管理情報テーブル連鎖並べ替え処理部
１６…  データのアドレス割り付け処理部
１００…  コンパイラ装置
１０１…  読み込み部
１０２…  字句解析部
１０３…  変数アクセス解析部
１０４…  構文解析部
１０５…  変数配置部
１０６…  中間語作成部
１０７…  最適化部
１０８…  コード生成部
１１０…  原始プログラム格納部
１２０…  中間データ格納部
１３０…  目的プログラム格納部
２００…  アドレス空間
２０１…  ＰＥ１用プログラム領域
２０２…  ＰＥ２用プログラム領域
２０３…  共通プログラム領域
２０４…  ＰＥ１用データ領域
２０５…  ＰＥ２用データ領域
２０６…  共有データ領域
【図１】
2012113518.tif 000003
【図２】
2012113518.tif 000004
【図３】
2012113518.tif 000005
【図４】
2012113518.tif 000006
【図５】
2012113518.tif 000007
【図６】
2012113518.tif 000008
【図７】
2012113518.tif 000009
【図８】
2012113518.tif 000010