(57)【要約】【課題】  高級プログラミング言語との親和性が高く、従来のソフトウェア資産の利用が可能であり、かつ、従来のプロセッサよりもパフォーマンスを向上させることができるプロセッサを提供する。【解決手段】  プロセッサは、基本ブロック境界を特定する情報と、各基本ブロックについて、制御フローグラフ上で次に位置する基本ブロックである次位基本ブロックを特定する情報を含む実行可能プログラムを実行するものであり、ロードされる基本ブロックを実行する１つ以上の実行計算手段と、実行計算手段に対応して設けられる保存手段と、基本ブロックを単位とした、実行可能プログラムの実行計算手段へのロード制御を行うと共に、ロードした基本ブロックの次位基本ブロックを、ロード先の実行計算手段に対応する保存手段に保存するローディング手段とを備えている。【選択図】  図１
2007087132.tif 000002
【特許請求の範囲】
【請求項１】
基本ブロック境界を特定する情報と、各基本ブロックについて、制御フローグラフ上で次に位置する基本ブロックである次位基本ブロックを特定する情報とを含む実行可能プログラムを実行するプロセッサであって、
ロードされる基本ブロックを実行する、１つ以上の実行計算手段と、
実行計算手段に対応して設けられる保存手段と、
基本ブロックを単位とした、実行可能プログラムの実行計算手段へのロード制御を行うと共に、ロードした基本ブロックの次位基本ブロックを特定する情報を、ロード先の実行計算手段に対応する保存手段に保存するローディング手段と、
を有することを特徴とするプロセッサ。
【請求項２】
実行計算手段は、基本ブロックの実行を終了したときに処理結果情報を含むロード指示を出力し、
ローディング手段は、処理結果情報に基づき、保存手段を参照して次に実行する基本ブロックを判定し、判定した基本ブロックが実行計算手段にロードされていない場合には、判定した基本ブロックの実行計算手段へのロード制御を行うこと、
を特徴とする請求項１に記載のプロセッサ。
【請求項３】
保存手段は、それぞれが１つの次位基本ブロックを特定する情報を保存する複数のフィールドから構成され、
前記処理結果情報には、保存手段のフィールドを指定する情報が含まれており、
ローディング手段は、ロード指示を出力した実行計算手段に対応する保存手段の、処理結果情報で指定されたフィールドを参照することにより、次に実行する基本ブロックを判定すること、
を特徴とする請求項２に記載のプロセッサ。
【請求項４】
前記実行計算手段は、データ駆動型であることを特徴とする請求項１から３のいずれか１項に記載のプロセッサ。
【請求項５】
基本ブロック境界を特定する情報と、各基本ブロックについて、制御フローグラフ上で次に位置する基本ブロックである次位基本ブロックを特定する情報を含む実行可能プログラムの、プロセッサにおける実行方法であって、
基本ブロックをロードするステップと、
基本ブロックを実行するステップと、
実行した基本ブロックの処理結果に基づき、実行した基本ブロックの次位基本ブロックから次に実行する基本ブロックを判定するステップと、
を有することを特徴とする方法。
【請求項６】
ソースプログラムの制御フローを解析して制御フローグラフを生成する制御フローグラフ生成手段と、
基本ブロック境界を特定する情報と、各基本ブロックについて、制御フローグラフ上で次に位置する基本ブロックを特定する情報を含む実行可能プログラムを生成するコード生成手段と、
を有することを特徴とするコンパイラ装置。
【請求項７】
コンピュータを、
ソースプログラムの制御フローを解析して制御フローグラフを生成する制御フローグラフ生成手段と、
基本ブロック境界を特定する情報と、各基本ブロックについて、制御フローグラフ上で次に位置する基本ブロックを特定する情報を含む実行可能プログラムを生成するコード生成手段と、
して機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、基本ブロックを単位として実行可能プログラムをロードして実行するプロセッサ及び該プロセッサに対するコンパイラ装置に関する。
【背景技術】
【０００２】
コンピュータアーキテクチャの１つであるノイマン型は、主記憶装置に保存されている命令を順に読み出して処理を行う逐次処理方式であり、コンピュータで実行する処理を順に記述するＣ言語等の高級プロググラム言語と親和性が高く、現在最も広く使用されているアーキテクチャである。
【０００３】
ノイマン型アーキテクチャによるコンピュータは、クロック速度の増加と共に、そのパフォーマンスも向上するが、同時に消費電力及び発熱量が増大するという問題がある。クロック速度を増加させずにパフォーマンスを向上させる試みとしては、複数の演算器をプロセッサ内に設けて並列処理を行う方法がある。非特許文献１には、複数の演算器を設け、プロセッサが処理する単位である命令語の中に、各演算器で実行する命令をそれぞれ記述したＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）方式について記載がされている。
【０００４】
また、非ノイマン型のアーキテクチャとして、演算対象のデータが揃った時点で演算を行うデータ駆動型があり、プロセッサに設けた複数の演算器間の接続及び各演算器で実行する命令をプログラムで設定する再構成可能なプロセッサが非特許文献２に記載されている。
【０００５】
【非特許文献１】Ｊｏｈｎ  Ｌ  Ｈｅｎｎｅｓｓｙ、Ｄａｖｉｄ  Ａ．Ｐａｔｔｅｒｓｏｎ著、富田眞治、村上和彰、新實治男  訳、“コンピュータ・アーキテクチャ”、第１版、日経ＢＰ社、１９９３年５月、ｐ．３１６‐ｐ．３１９
【非特許文献２】デザインウェーブマガジン、ＣＱ出版社、２００４年８月号、ｐ．２４‐ｐ．２９
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上述したように、現在のところノイマン型アーキテクチャのコンピュータが主流であるが、パフォーマンスの向上のためクロック速度を上げると消費電力及び発熱量が増大するという問題があり、また、ＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）方式といった、クロック速度を上げずにパフォーマンスを向上させる工夫による効果も頭打ちとなってきている。
【０００７】
一方、非ノイマン型アーキテクチャは、対象となるアプリケーションによっては非常に高いパフォーマンスを発揮するが、そのソフトウェアは、現在のところ、主に、専用のプログラム言語により開発されているため、過去のプログラム資産を利用できず、そのために、非ノイマン型アーキテクチャのコンピュータが広まらないという問題点がある。
【０００８】
従って、本発明は、従来よりもパフォーマンスを向上させることができるプロセッサを提供することを目的とする。また、プログラム開発環境として、専用のプログラム言語を必要とせず、従来のノイマン型アーキテクチャによるコンピュータのためのソフトウェア開発に主に用いられている、Ｃ言語等の高級プログラミング言語との親和性が高く、従来のソフトウェア資産の利用が可能なプロセッサを提供することも目的とする。
【０００９】
また、本発明は、上記プロセッサでの実行可能プログラムの実行方法を、更に、上記プロセッサに対するコンパイラ装置を提供することも目的とする。
【課題を解決するための手段】
【００１０】
本発明におけるプロセッサによれば、
基本ブロック境界を特定する情報と、各基本ブロックについて、制御フローグラフ上で次に位置する基本ブロックである次位基本ブロックを特定する情報とを含む実行可能プログラムを実行するプロセッサであって、ロードされる基本ブロックを実行する、１つ以上の実行計算手段と、実行計算手段に対応して設けられる保存手段と、基本ブロックを単位とした、実行可能プログラムの実行計算手段へのロード制御を行うと共に、ロードした基本ブロックの次位基本ブロックを特定する情報を、ロード先の実行計算手段に対応する保存手段に保存するローディング手段とを有することを特徴とする。
【００１１】
本発明のプロセッサにおける他の実施形態によれば、
実行計算手段は、基本ブロックの実行を終了したときに処理結果情報を含むロード指示を出力し、ローディング手段は、処理結果情報に基づき、保存手段を参照して次に実行する基本ブロックを判定し、判定した基本ブロックが実行計算手段にロードされていない場合には、判定した基本ブロックの実行計算手段へのロード制御を行うことも好ましい。
【００１２】
更に、本発明のプロセッサにおける他の実施形態によれば、
保存手段は、それぞれが１つの次位基本ブロックを特定する情報を保存する複数のフィールドから構成され、前記処理結果情報には、保存手段のフィールドを指定する情報が含まれており、ローディング手段は、ロード指示を出力した実行計算手段に対応する保存手段の、処理結果情報で指定されたフィールドを参照することにより、次に実行する基本ブロックを判定することも好ましい。
【００１３】
更に、本発明のプロセッサにおける他の実施形態によれば、
前記実行計算手段は、データ駆動型であることも好ましい。
【００１４】
本発明における実行可能プログラムの実行方法によれば、
基本ブロック境界を特定する情報と、各基本ブロックについて、制御フローグラフ上で次に位置する基本ブロックである次位基本ブロックを特定する情報を含む実行可能プログラムの、プロセッサにおける実行方法であって、基本ブロックをロードするステップと、基本ブロックを実行するステップと、実行した基本ブロックの処理結果に基づき、実行した基本ブロックの次位基本ブロックから次に実行する基本ブロックを判定するステップとを有することを特徴とする。
【００１５】
本発明におけるコンパイラ装置によれば、
ソースプログラムの制御フローを解析して制御フローグラフを生成する制御フローグラフ生成手段と、基本ブロック境界を特定する情報と、各基本ブロックについて、制御フローグラフ上で次に位置する基本ブロックを特定する情報を含む実行可能プログラムを生成するコード生成手段とを有することを特徴とする。
【００１６】
本発明におけるプログラムによれば、
コンピュータを、前記コンパイラ装置として機能させることを特徴とする。
【発明の効果】
【００１７】
本発明によるプロセッサは、基本ブロックを単位として実行可能プログラムを実行計算手段にロードし実行する。従って、プロセッサ外部にあり、実行可能プログラムを保存している主記憶装置へのアクセス数が低減し、メモリアクセス効率が向上する。基本ブロックは制御フローグラフに基づくものであり、単に主記憶装置の近傍にある命令列の塊を、予めより高速なメモリに格納しておく命令キャッシュと異なり、キャッシュミスは発生せず、本発明によるプロセッサではより高速に、プログラムの実行が可能となる。
【００１８】
また、制御フローグラフの解析は、従来の高級プログラム言語用のコンパイラ装置で通常行われているものであり、基本ブロックを単位として実行可能プログラムを生成する本発明によるコンパイラ装置は高級プログラム言語との親和性が高い。
【００１９】
また、実行計算手段をデータ駆動型とした場合には、基本ブロック内で使用するローカル変数に対しては、ロード／ストア命令が発生しないため、更に処理速度が向上するという利点がある。
【発明を実施するための最良の形態】
【００２０】
本発明を実施するための最良の実施形態について、以下では図面を用いて詳細に説明する。
【００２１】
図１は、本発明によるプロセッサ１のブロック図である。図１によると、プロセッサ１は、実行計算部１１と、ブロックポインタ１２と、ローディング部１３とを備えている。また、ローディング部１３は、プロセッサ１の外部にある主記憶装置２と接続するためのインタフェースを有している。
【００２２】
図２（ａ）は、本発明によるコンパイラ装置３のブロック図であり、コンパイラ装置３は、ソースプログラム４を入力として、プロセッサ１が実行する実行可能プログラム５を生成する。図２（ｂ）は、実行可能プログラム５の構成を示す概略図であり、実行可能プログラム５は、基本ブロック６を単位として構成されている。以下に基本ブロックについて説明を行う。
【００２３】
高級プログラム言語のコンパイラ装置は、ソースプログラムを入力として、字句解析及び構文解析を行い、対象とするプロセッサへの最適化後にコードの生成を行う。この最適化の前に、通常、プログラムの制御の流れを示す制御フローグラフを生成するが、この制御フローグラフの単位が基本ブロックである。基本ブロックにおいては、入力となる命令及び出力となる命令、即ち、最初に実行する命令及び最後に実行する命令はただ１つであり、最後に実行する命令を経由することなく他の基本ブロックに分岐したり、停止したりすることがなく、最初に実行する命令から最後に実行する命令まで１直線に実行することができるという特徴がある。以後、ある基本ブロックから見て、制御フローグラフで次に位置する１つ以上の基本ブロックを、その基本ブロックの次位基本ブロックと呼ぶ。
【００２４】
続いて、図２を用いて本発明によるコンパイラ装置３について説明を行う。構文解析部３１は、ソースプログラム４の字句解析及び構文解析を行い、制御フローグラフ生成部３２は、構文解析部３１での字句解析及び構文解析後に、ソースプログラム４の制御の流れを示す制御フローグラフを生成する。続いて、最適化部３３は、対象とするプロセッサ１に応じて、処理速度又はプログラムサイズ等の最適化を行う。最後にコード生成部３４は、対象とするプロセッサ１が実行でき、基本ブロック６を単位として構成される実行可能プログラム５を生成して出力する。
【００２５】
ここでコード生成部３４が出力する実行可能プログラム５は、基本ブロック６内の命令列を解析することなく、実行可能プログラム５を構成する基本ブロック６の境界を特定する情報と、各基本ブロック６の次位基本ブロックを特定する情報を有している。これは、例えば、各基本ブロック６に、そのサイズ情報と、基本ブロックの先頭位置から、各次位基本ブロックまでのビット数又はバイト数の情報を付加することで実現できる。また、実行可能プログラム５の先頭部分にヘッダ部を設け、総ての基本ブロックの位置と、その次位基本ブロックの位置を、実行可能プログラム５の先頭からのビット数又はバイト数で示す情報を設定すること、或いは、上記方法の組合せにより実現できる。尚、本発明によるコンパイラ装置３は、コンピュータに上記機能を実行させるプログラムによっても実現できる。
【００２６】
図３は、コンパイラ装置３が出力する実行可能プログラム５をより具体的に説明する図である。図３（ａ）は、Ｃ言語プログラムの一部分であり、ｓｕｍ及びｉを０に初期化した後、１０未満のｉに対して、ｓｕｍに、（ｘ＋ｉ）*ｈの値を積算していく処理を表している。図３（ｂ）は、図３（ａ）のプログラムに対する制御フローグラフであり、図３（ｃ）は、各基本ブロックでの処理内容をＣ言語に似た記述方法により表現したものである。
【００２７】
図３（ａ）のＣ言語プログラムは、３つの基本ブロックＢ１、Ｂ２、Ｂ３に分割されている。ここで、図３（ｃ）に示す様に、基本ブロックＢ１は変数の初期化を、基本ブロックＢ２はｆｏｒループ内の積算処理及び変数ｉのインクリメントを、基本ブロックＢ３は条件判定を行うブロックである。処理は図３（ｂ）に示す様に、基本ブロックＢ１を実行したのち、基本ブロックＢ３で条件判定を行い、ｉが１０未満である限りはＢ２を実行することを繰り返し、ｉが１０となった場合には、他のブロック（図３（ｃ）においては基本ブロックＢ４としている。）の実行を開始する流れとなる。
【００２８】
図３（ｃ）に示す様に、基本ブロックＢ１には、基本ブロックＢ１の次位基本ブロックである基本ブロックＢ３が記述され、基本ブロックＢ２には、基本ブロックＢ２の次位基本ブロックである基本ブロックＢ３が記述され、基本ブロックＢ３には、基本ブロックＢ３の次位基本ブロックである基本ブロックＢ２及びＢ４が記述されている。図３（ｃ）は理解のためＣ言語に似た記述方法により表現しているが、実際にはコード化されており、また、上述したように、プロセッサ１が、実行可能プログラム５の命令を解析することなく基本ブロック６の境界を認識でき、かつ、各基本ブロック６を見れば、制御フローグラフで次に位置する基本ブロック６を認識できる構造となっている。
【００２９】
例えば、基本ブロック６の境界認識のために、各基本ブロック６に、そのサイズ情報を付加し、次位基本ブロックを特定するために、各基本ブロック６の先頭位置から次位基本ブロックまでのバイト数の情報を用いた場合、実行可能プログラム５を保存する主記憶装置２では、これらサイズ情報及びバイト数の情報は、主記憶装置２のアドレス値の変位、即ちアドレス情報となり、アドレス情報により基本ブロック６の境界及び次位基本ブロックが特定できる。
【００３０】
続いて、図１を用いて、本発明によるプロセッサ１の各部の動作について説明を行う。前提条件として、主記憶装置２は、図２（ｂ）に示す実行可能プログラム５を保存しており、各基本ブロック６の境界及び次位基本ブロックは、主記憶装置２のアドレス情報により特定されるものとする。更に、図３（ｃ）に示す基本ブロックＢ３のように、次位基本ブロックが複数示されている場合には、記載順の番号で参照を行うものとする。つまり、プロセッサ１内では、基本ブロックＢ３の処理において、基本ブロックＢ２を１番目の次位基本ブロックと、基本ブロックＢ４を２番目の次位基本ブロックとして参照するものとする。
【００３１】
ローディング部１３は、基本ブロック６を単位として、実行計算部１１に実行可能プログラム５をロードすると共に、ロードした基本ブロック６の次位基本ブロックを特定するための情報、本例ではアドレス情報を、ブロックポインタ１２に保存する。このとき、実行計算部１１にロードした基本ブロック６をローディング部１３は管理しておく。続いて、実行計算部１１からの、処理結果情報を含むロード指示に対して、ブロックポインタ１２を参照して次に実行する基本ブロック６のアドレス情報を取得し、取得したアドレス情報に基づき主記憶装置２から実行計算部１１に、次に実行する基本ブロック６をロードする。
【００３２】
ブロックポインタ１２は、第１から第Ｋ（Ｋは２以上の整数）のフィールドを有し、各フィールドにはそれぞれ、１つの次位基本ブロックのアドレス情報が保存される。ローディング部１３は、基本ブロック６の次位基本ブロック６のアドレス情報を、その記載順にブロックポインタ１２に保存する。例えば、図３（ｃ）の基本ブロックＢ１のように、次位基本ブロックがＢ３のみである場合には、基本ブロックＢ３のアドレス情報を第１のフィールドに保存し、基本ブロックＢ３のように、次位基本ブロックが複数ある場合には、最初に記載されている基本ブロック、即ち基本ブロックＢ２のアドレス情報を第１のフィールドに、次に記載されている基本ブロックＢ４のアドレス情報を、第２のフィールドに保存する。
【００３３】
実行計算部１１は、ローディング部１３がロードする基本ブロック６の命令内容を解析して命令内容に従った処理を行う。即ち、ローディング部１３により、基本ブロック６を単位としてロードされる実行可能プログラムを実行する。また、ロードされた基本ブロック６の実行が終了した場合は、ローディング部１３にロード指示を行う。このロード指示には、ローディング部１３が次に実行計算部１１で実行すべき基本ブロックを判定するために必要な処理結果情報が含まれている。即ち、実行計算部１１は、図３（ｃ）に示す基本ブロックＢ３の実行を終了した場合、ｉが１０未満のときは１番目を、ｉが１０のときは２番目を示す処理結果情報を含むロード指示をローディング部１３に出力し、ローディング部１３は、この情報を元にブロックポインタ１２の複数のフィールドから、次に実行計算部１１で実行させる基本ブロック６を認識する。
【００３４】
尚、実行可能プログラム５の最初に実行する基本ブロックの特定は、公知の方法を使用することができる。例えば、最初に実行する基本ブロック６は、主記憶装置２の所定の位置に必ず保存するものとし、前記所定の位置を図示しない外部メモリに保存しておき、実行時に、図示しないメモリから前記所定の位置をブロックポインタ１２の第１のフィールドに書き込み、実行計算部１がローディング部１３に１番目を示す処理結果情報を含むロード指示を行うことで、実行計算部１にロードさせる等の方法がある。
【００３５】
図４は、実行計算部１１がデータ駆動型である場合のブロック図であり、図４（ａ）は初期状態を、図４（ｂ）は基本ブロック６がロードされた状態を示している。図４によると、実行計算部１１は複数の演算器１１１を備えており、これら複数の演算器１１１がマトリックス状に配置されている。各演算器１１１での処理内容及び演算器１１１間の接続は、ロードする基本ブロック６により決定され、ロードする基本ブロック６を変更することで異なる処理を実行することができる。
【００３６】
実行計算部１１がデータ駆動型の場合において、本発明によるコンパイラ装置３では、制御フローグラフ生成部３２が制御フローグラフを生成し、最適化部３３が基本ブロックごとにデータフローグラフを生成して最適化処理を行い、コード生成部３４が実行計算部1１にロードする実行可能プログラム５を生成して出力する。
【００３７】
例えば、図３（ｃ）に示す基本ブロックＢ２のデータフローグラフは図６（ａ）のようになり、本発明によるコンパイラ装置３は、図６（ａ）に示す基本ブロックＢ２のデータフローグラフから、基本ブロックＢ２を実行計算部１１にロードしたときに実行計算部１１が図６（ｂ）に示す状態となるように、演算器１１１の処理内容及び演算器１１１間の接続を制御するコードを生成する。この様に、基本ブロックごとに、データフローグラフを生成して実行計算部１１を制御するコードを生成することで、実行計算部１１がデータ駆動型であっても、高級プログラム言語と親和性が高いプロセッサを実現できる。
【００３８】
図４のデータ駆動型の実行計算部１１では、各演算器１１１がそれぞれプログラミングされており、独立して同時に処理を実行することができるため処理速度が向上する。
【００３９】
図５（ａ）は、実行計算部１１がＶＬＩＷ型である場合のブロック図であり、図５（ｂ）は、実行計算部１１に対するＶＬＩＷ命令語６１を示す図である。図５（ａ）によると、実行計算部１１は、それぞれが１つのＶＬＩＷ命令語６１を蓄積するバッファ１１２−１〜１１２−Ｎと、Ｌ個の演算器を有するＶＬＩＷ演算器１１３とを備えている。基本ブロック６を単位としてロードされるＶＬＩＷ命令語６１は、ＶＬＩＷ演算器１１３の各演算器でそれぞれ同時に実行されるＬ個の命令を有し、バッファ１１２−１から処理順で蓄積され、ＶＬＩＷ演算器１１３で順に実行される。
【００４０】
実行計算部１１がＶＬＩＷ型の場合において、本発明によるコンパイラ装置３では、制御フローグラフ生成部３２が制御フローグラフを生成し、最適化部３３がデータ依存関係を解析して同時に実行可能な命令を求め、コード生成部３４が実行計算部１にロードする実行可能プログラム５を生成して出力する。
【００４１】
尚、実行計算部１１には、上記データ駆動型やＶＬＩＷ型のみならず、その他のアーキテクチャも使用可能である。
【００４２】
図７は、図３（ｃ）に示す基本ブロックを実行する場合のシーケンス図である。
【００４３】
（Ｓ７１）ローディング部１３は、実行計算部１１に基本ブロックＢ１をロードして、実行計算部１１で実行させるためのトリガである実行指示を行う。尚、本例では実行計算部１１が１つであるため、基本ブロックをロードしたことをもって実行指示の代わりとすることも可能である。同時に、基本ブロックＢ１の次位基本ブロックである基本ブロックＢ３を、ブロックポインタ１２の第１のフィールドに書き込む。
【００４４】
（Ｓ７２）実行計算部１１は、基本ブロックＢ１の実行が終了したときに処理結果情報を含むロード指示を出力し、ローディング部１３は、処理結果情報に基づきブロックポインタ１２を参照して、次に実行する基本ブロックＢ３のアドレス情報を取得する。続いて、ローディング部１３は、次に実行する基本ブロックＢ３を実行計算部１１にロードすると共に、基本ブロックＢ１の次位基本ブロックのうち１番目に記載されている基本ブロックＢ２を、ブロックポインタ１２の第１のフィールドに、２番目に記載されている基本ブロックＢ４を、ブロックポインタ１２の第２のフィールドに書き込む。
【００４５】
（Ｓ７３）実行計算部１１は、基本ブロックＢ３を実行する。この時点ではｉ＝０であるため、１番目を示す処理結果情報を含むロード指示を出力し、ローディング部１３は、処理結果情報に基づきブロックポインタ１２の第１のフィールドを参照して、基本ブロックＢ２のアドレス情報を取得し、基本ブロックＢ２を実行計算部１１にロードすると共に、基本ブロックＢ２の次位基本ブロックである基本ブロックＢ３を、ブロックポインタ１２の第１のフィールドに書き込む。
【００４６】
（Ｓ７４）以後、基本ブロックＢ２と基本ブロックＢ３が繰り返し実行され、基本ブロックＢ２の１０回目の実行が終了したときに、実行計算部１１は、処理結果情報を含むロード指示を出力し、ローディング部１３は、処理結果情報に基づきブロックポインタ１２を参照して、基本ブロックＢ３のアドレス情報を取得し、基本ブロックＢ３を実行計算部１１にロードすると共に、基本ブロックＢ３の次位基本ブロックのうち１番目に記載されている基本ブロックＢ２を、ブロックポインタ１２の第１のフィールドに、２番目に記載されている基本ブロックＢ４を、ブロックポインタ１２の第２のフィールドに書き込む。
【００４７】
（Ｓ７５）実行計算部１１は、基本ブロックＢ３を実行する。この時点ではｉ＝１０であるため、２番目を示す処理結果情報を含むロード指示を出力し、ローディング部１３は、処理結果情報に基づきブロックポインタ１２の第２のフィールドを参照して、基本ブロックＢ４のアドレス情報を取得し、基本ブロックＢ４を実行計算部１１にロードする。
【００４８】
以上、本発明によるプロセッサ１は、複数の命令を並行して実行可能な実行計算部１１を備え、主記憶装置２から、基本ブロックを単位として実行可能プログラム５を実行計算部１１にロードし実行する。従って、主記憶装置２へのアクセス数が低減し、メモリアクセス効率が向上する。基本ブロックは制御フローグラフに基づくものであり、単に主記憶装置２の近傍にある命令列の塊を、予めより高速なメモリに格納しておく命令キャッシュと異なり、キャッシュミスは発生せず、本発明によるプロセッサ１ではより高速に、プログラムの実行が可能となる。また、実行計算部１をデータ駆動型とした場合には、基本ブロック内で使用するローカル変数に対しては、ロード／ストア命令が発生しないため、更に処理速度が向上するという利点がある。
【００４９】
また、基本ブロック６に基づく制御フローグラフの解析は、従来の高級プログラム言語用のコンパイラ装置で通常行われているものであり、基本ブロック６を単位として実行可能プログラム５のロードを行い実行する本発明によるプロセッサ１は、実行計算部１１のアーキテクチャに係らず、高級プログラム言語との親和性が高く、本発明によるプロセッサ１では、過去のプログラム資産の利用が可能である。
【００５０】
図８は、本発明によるプロセッサ１の他の実施形態におけるブロック図である。図８によると、プロセッサ１は、実行計算部１１−１〜１１−３と、ブロックポインタ１２と、ローディング部１４と、実行計算部１１−１〜１１−３に対応して設けられるバンク１５−１〜１５−３とを有する。また、ローディング部１４は、プロセッサ１外部にある主記憶装置２と接続するためのインタフェースを有している。尚、実行計算部の数は例示であり、３つに限定されない。
【００５１】
実行計算部１１−１〜１１−３は、既に説明した図１の実行計算部１１と同じであり、データ駆動型や、ＶＬＩＷ型等、任意のアーキテクチャが使用可能である。
【００５２】
ブロックポインタ１２は、実行計算部１１−１〜１１−３にロードされた基本ブロック６の次位基本ブロックを特定する情報を、それぞれ、実行計算部１１−１〜１１−３毎に独立して保持する以外は、図１のブロックポインタ１２と同じである。ローディング部１４は、図１のローディング部１３の機能に、複数ある実行計算部１１−１〜１１−３に対するスケジューリング機能を追加したものである。
【００５３】
本実施形態によるプロセッサ１での処理は、ローディング部１４が基本ブロック６を実行計算部１１−１〜１１−３のいずれかにロードし、実行計算部１１−１〜１１−３がロードされた基本ブロック６を実行して処理結果情報を含むロード指示を出力し、ローディング部１４が処理結果情報に基づき、次に実行する基本ブロックを判定し、次に実行する基本ブロックを実行計算部１１−１〜１１−３のいずれにもロードしていない場合には、次に実行する基本ブロックを実行計算部１１−１〜１１−３のいずれかにロードして実行させ、次に実行する基本ブロックを既に、実行計算部１１−１〜１１−３のいずれかにロードしている場合には、次に実行する基本ブロックをロードしている実行計算部に実行指示を行うことで進んでいく。
【００５４】
また、実行計算部において実行終了した基本ブロック６が、ブロックポインタ１２が保存している次位基本ブロックに含まれていない場合、ローディング部１４は、ブロックポインタ１２が保存している次位基本ブロックのうち実行計算部に未だロードされていない基本ブロック６を、前記実行終了した実行計算部に予めロードしておく。同様に、ローディング部１４は、基本ブロック６がロードされていない実行計算部が存在する場合には、ブロックポインタ１２が保存している次位基本ブロックのうち実行計算部に未だロードされていない基本ブロック６を、基本ブロックがロードされていない実行計算部に予めロードしておく。以下に具体例を示す。
【００５５】
図９は、図８に示す実施形態において、図３（ｃ）に示す基本ブロックを実行する場合のシーケンス図である。尚、簡単のため、ブロックポインタ１２はシーケンス図には含めていない。
【００５６】
（Ｓ９１）まず、実行計算部１１−１に基本ブロックＢ１がロードされたものとする。このときロード先である実行計算部１１−１に対応するブロックポインタ１２の第１のフィールドには基本ブロックＢ３が書き込まれる。ローディング部１４は、各実行計算部１１−１〜１１−３にロードした基本ブロックを管理しており、実行計算部１１−１にロードした基本ブロックＢ１の次位基本ブロックである基本ブロックＢ３を、空いている実行計算部１１−２にロードする。基本ブロックＢ３の実行計算部１１−２へのロードにより、実行計算部１１−２に対応するブロックポインタ１２の第１のフィールドには基本ブロックＢ２が、第２のフィールドには基本ブロックＢ４が書き込まれることになる。ローディング部１４は、空いている実行計算部がこの時点では実行計算部１１−３のみであるため、第１のフィールドに示されている基本ブロックＢ２を実行計算部１１−３にロードする。但し、実行計算部１１−２及び実行計算部１１−３はプログラムをロードするのみで実行は行わない。
【００５７】
（Ｓ９２）実行計算部１１−１での基本ブロックＢ１の実行が終了した場合、実行計算部１１−１は、ローディング部１４に処理結果情報を含むロード指示を行う。処理結果情報に基づき実行計算部１１−１に対応するブロックポインタ１２の第１のフィールドを参照し、ローディング部１４は、次に実行する基本ブロックが既に実行計算部１１−２にロードしている基本ブロックＢ３であることを認識し、よって、ローディング部１４は、実行計算部１１−２に実行開始を指示する。また、ロードしたのみで未だ実行が終了していない、実行計算部１１−２及び１１−３にロードした基本ブロックＢ２及びＢ３の次位基本ブロックには、実行終了した基本ブロックＢ１は含まれておらず、逆に基本ブロックＢ２の次位基本ブロックＢ４を未だロードしていないため、ローディング部１４は、基本ブロックＢ４を実行計算部１１−１にロードする。但し、実行計算部１１−１はプログラムをロードするのみで実行は行わない。
【００５８】
尚、実行計算部１１−１からのローディング指示に対して、次に実行する基本ブロックである基本ブロックＢ３が実行計算部のいずれにもロードされていない場合、ローディング部１４は、基本ブロックＢ３を実行計算部のいずれかにロードして実行させる。
【００５９】
（Ｓ９３）実行計算部１１−２での基本ブロックＢ３の実行が終了した場合、実行計算部１１−２は、ローディング部１４に、処理結果情報を含むロード指示を行う。この段階では、処理結果情報は１番目の基本ブロックを示しており、実行計算部１１−２に対応するブロックポインタ１２の第１のフィールドを参照することで、ローディング部１４は次に実行すべき基本ブロックが、実行計算部１１−３にロードしている基本ブロックＢ２であると判定し、よって、実行計算部１１−３に実行指示を行う。
【００６０】
（Ｓ９４）実行計算部１１−３での基本ブロックＢ２の実行が終了した場合、実行計算部１１−３は、ローディング部１４にロード指示を行い、ローディング部１４は、ブロックポインタ１２を参照することで、次に実行すべき基本ブロックが、実行計算部１１−２にロードしている基本ブロックＢ３であることを認識し、実行計算部１１−２に実行指示を行う。
【００６１】
（Ｓ９５）以後、実行計算部１１−３にロードされている基本ブロックＢ２と、実行計算部１１−２にロードされている基本ブロックＢ３が繰り返し実行される。
【００６２】
（Ｓ９６）実行計算部１１−２による基本ブロックＢ３の実行が１１回行われたのち、実行計算部１１−２は、ローディング部１４に、２番目の基本ブロックを示す処理結果情報を含むロード指示を行う。ローディング部１４は、実行計算部１１−２に対応するブロックポインタ１２の第２のフィールドを参照することで、次に実行すべき基本ブロックが、実行計算部１１−１にロードしている基本ブロックＢ４であると判定し、よって、実行計算部１１−１に実行指示を行う。
【００６３】
以上、複数の実行計算部１１−１〜１１−３を備え、ローディング部１４が各実行計算部にロードする基本ブロックを管理し、調整することで、更に、主記憶装置２にアクセスする回数を減少させることができ、よって処理速度が向上する。
【００６４】
また、実行可能プログラム５の制御フローグラフから、例えば、複数の基本ブロック６が並列で処理可能な場合や、異なるプログラムの基本ブロック６を、複数の実行計算部１１を備えることで同時に実行することが可能となり、プログラム処理の柔軟性が増し、かつ、全体の処理速度を向上させることができる。
【００６５】
図８に戻り、バンク１５−１〜１５−３は、基本ブロック６を記憶保存する機能を有する。実行計算部１１−１〜１１−３に対して新たな基本ブロック６をロードすると、既にロードされている基本ブロック６は上書き消去されてしまうが、これら既に実行した基本ブロック６を保存するためにバンク１５−１〜１５−３を使用する。例えば、実行計算部１１が１つの場合のシーケンス図である図７のＳ７３において、実行計算部１１にロードする基本ブロックＢ２の次位基本ブロックは、基本ブロックＢ３であるため、実行計算部１１に既にロードされている基本ブロックＢ３を、バンクに保存しておくことで、基本ブロックＢ２の実行を終了したときにはバンクから基本ブロックＢ３を実行計算部１１にロードさせることができ、あらためて主記憶装置２から基本ブロックＢ３をロードする必要はなくなる。よって、主記憶装置へのアクセス回数を減らすことができ処理速度が向上する。
【００６６】
また、図９のＳ９１において、基本ブロックＢ３の次位基本ブロックである基本ブロックＢ４は実行計算部にはロードされないが、いずれかのバンクに予め基本ブロックＢ４を保存させておくことも可能となる。
【００６７】
以上、バンク１５−１〜１５−３を設けることにより、反復して使用される基本ブロック６について、その都度プロセッサ１の外部にある主記憶装置２から取得する必要がなくなるため、実行計算部１１−１〜１１−３の数を増やすことなく、処理速度を向上させることができる。
【００６８】
また、上記説明において、ローディング部１３及び１４が主記憶装置２から実行可能プログラム５を取得して実行計算部１１にロードする形態で説明を行ったが、ローディング部１３及び１４は、基本ブロックを単位とした、実行可能プログラムの実行計算部１１へのロード制御を行うものであれば、他のロード方法であってもよい。例えば、ローディング部１３及び１４が、実行計算部１１に対してロードすべき基本ブロック６のアドレス情報を通知して実行計算部１１が直接、主記憶装置２から通知されたアドレス情報に基づき基本ブロック６を取得する構成とすることもできる。この場合、実行計算部１１と主記憶装置２とローディング部１３又は１４とを同一バス上に接続する等、実行計算部１１が直接、主記憶装置２にアクセスできる構成とする。
【図面の簡単な説明】
【００６９】
【図１】本発明によるプロセッサのブロック図である。
【図２】本発明によるコンパイラ装置のブロック図である。
【図３】本発明によるコンパイラ装置が出力する実行可能プログラムを説明する図である。
【図４】データ駆動型の実行計算部のブロック図である。
【図５】ＶＬＩＷ型の実行計算部のブロック図である。
【図６】データフローグラフ及び対応するデータ駆動型の実行計算部の設定を示す図である。
【図７】本発明によるプロセッサのシーケンス図である。
【図８】本発明によるプロセッサの他の実施形態におけるブロック図である。
【図９】本発明によるプロセッサの他の実施形態におけるシーケンス図である。
【符号の説明】
【００７０】
１  プロセッサ
２  主記憶装置
３  コンパイラ装置
４  ソースプログラム
５  実行可能プログラム
６  基本ブロック
１１  実行計算部
１２  ブロックポインタ
１３、１４  ローディング部
１５  バンク
３１  構文解析部
３２  制御フローグラフ生成部
３３  最適化部
３４  コード生成部
６１  ＶＬＩＷ命令語
１１１  演算器
１１２−１〜１１２−Ｎ  バッファ
１１３  ＶＬＩＷ演算器
【図１】
2007087132.tif 000003
【図２】
2007087132.tif 000004
【図３】
2007087132.tif 000005
【図４】
2007087132.tif 000006
【図５】
2007087132.tif 000007
【図６】
2007087132.tif 000008
【図７】
2007087132.tif 000009
【図８】
2007087132.tif 000010
【図９】
2007087132.tif 000011