JP2005267024A - 並列処理装置、方法、およびプログラム - Google Patents
並列処理装置、方法、およびプログラム Download PDFInfo
- Publication number
- JP2005267024A JP2005267024A JP2004076105A JP2004076105A JP2005267024A JP 2005267024 A JP2005267024 A JP 2005267024A JP 2004076105 A JP2004076105 A JP 2004076105A JP 2004076105 A JP2004076105 A JP 2004076105A JP 2005267024 A JP2005267024 A JP 2005267024A
- Authority
- JP
- Japan
- Prior art keywords
- processing
- result
- program
- block
- dependent
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
【課題】 プログラムブロック間における依存関係が、条件分岐の判定待ちであるかないかに関わらず、いくつもの命令文からなるプログラムブロックの単位での処理を並列化することができ、プログラムブロックの単位での処理の高速化を実現することができるようにする。
【解決手段】 まず、最適化部2からの指示により、依存関係検出部4はブロック間に依存関係があるかどうかを調べる。依存関係検出部4で依存関係が検出された場合、依存状態解析部3は依存関係にあるブロックの取り得るすべての状態を列挙できるかどうかを調査する。すべての状態を列挙できると判定された場合、プログラム変換部5は、ブロック200を、ブロック100による全ての結果それぞれに対して並列に処理可能なものに変換して最適化部2に戻す。
【選択図】 図1
【解決手段】 まず、最適化部2からの指示により、依存関係検出部4はブロック間に依存関係があるかどうかを調べる。依存関係検出部4で依存関係が検出された場合、依存状態解析部3は依存関係にあるブロックの取り得るすべての状態を列挙できるかどうかを調査する。すべての状態を列挙できると判定された場合、プログラム変換部5は、ブロック200を、ブロック100による全ての結果それぞれに対して並列に処理可能なものに変換して最適化部2に戻す。
【選択図】 図1
Description
本発明は、複数の命令を同時に処理する機能を備えた並列処理装置、方法、およびプログラムに関する。
一般に、マルチプロセッサシステム上で実行性能を上げるためには、可能な限り並列動作可能な範囲を広げて、システムに搭載されている複数のCPUを有効に利用する必要がある。
このように、複数の命令を同時に処理する機能を備えた並列処理装置の処理能力を活かすためには、並列処理可能な範囲を広げることが重要となる。
このように、複数の命令を同時に処理する機能を備えた並列処理装置の処理能力を活かすためには、並列処理可能な範囲を広げることが重要となる。
こうした並列処理装置として、本出願人による特許文献1のものは、プログラム中に条件分岐命令がある場合、その条件分岐の判定をするのに必要なデータがそろうまでの間に、条件分岐命令以降の命令を投機的に実行することで、条件分岐命令の予測ミスによるペナルティを減らすようにしている。
また、特許文献2のものでは、与えられた命令列から分岐命令と該命令の分岐条件が決定される命令とを検索して移動し、分岐条件の成立時と非成立時とに各々実行の移動を空きフィールドに対して行い、実行すべきでないことが示される命令対の一方を無効化するものである。
特開平11−96005号公報
特開平7−152563号公報
ここで、従来の並列処理装置では、プログラムブロック(以下、単に「ブロック」とする)間に依存関係があると並列実行は不可能になり、単体のCPUでしか実行できなくなってしまう。
すなわち、従来の技術では前のブロック内の結果を後ろのブロックで参照している場合など、ブロック間に依存関係があると前のブロックの実行の終了を待ってから後ろのブロックの実行を開始する必要があり、これらのブロックを並列に実行することはできない。このようにブロック間に依存関係があると、並列化をあきらめて逐次に実行を行うが、これでは実行性能が出ないという問題がある。
すなわち、従来の技術では前のブロック内の結果を後ろのブロックで参照している場合など、ブロック間に依存関係があると前のブロックの実行の終了を待ってから後ろのブロックの実行を開始する必要があり、これらのブロックを並列に実行することはできない。このようにブロック間に依存関係があると、並列化をあきらめて逐次に実行を行うが、これでは実行性能が出ないという問題がある。
また、上述した特許文献1のものは、プログラム中に条件分岐命令がある場合についてその条件分岐命令以降の処理の高速化を図るものであり、条件分岐命令がない場合についてまで考慮されたものではない。
また、上述した特許文献1のものでは、例えば図8に示すようなプログラムコードを実行する際、0x10番地に条件分岐命令のif文が配置されているが、その条件分岐の判定に必要なデータ(図8におけるr1とr7)の値が確定するまでの間に投機的に処理を行うことにより結果が出るまでの処理を高速化できるよう工夫したものである。
すなわち、上述した特許文献1のものにおける処理の高速化は、1つの条件分岐命令の判定に対するものであり、いくつもの命令文からなるプログラムブロックの単位での処理の高速化についてまで考慮されたものではなかった。
また、上述した特許文献1のものでは、例えば図8に示すようなプログラムコードを実行する際、0x10番地に条件分岐命令のif文が配置されているが、その条件分岐の判定に必要なデータ(図8におけるr1とr7)の値が確定するまでの間に投機的に処理を行うことにより結果が出るまでの処理を高速化できるよう工夫したものである。
すなわち、上述した特許文献1のものにおける処理の高速化は、1つの条件分岐命令の判定に対するものであり、いくつもの命令文からなるプログラムブロックの単位での処理の高速化についてまで考慮されたものではなかった。
また、上述した特許文献2のものも、プログラム中に条件分岐命令がある場合についてその条件分岐命令以降の処理の高速化を図るものであり、条件分岐命令がない場合についてまで考慮されたものではない。
また、処理の高速化についても、検索された1つの条件分岐命令の判定に対するものであり、いくつもの命令文からなるプログラムブロックの単位での処理の高速化についてまで考慮されたものではなかった。
また、処理の高速化についても、検索された1つの条件分岐命令の判定に対するものであり、いくつもの命令文からなるプログラムブロックの単位での処理の高速化についてまで考慮されたものではなかった。
本発明はこのような状況に鑑みてなされたものであり、プログラムブロック間における依存関係が、条件分岐の判定待ちであるかないかに関わらず、いくつもの命令文からなるプログラムブロックの単位での処理を並列化することができ、プログラムブロックの単位での処理の高速化を実現することができる並列処理装置、方法、およびプログラムを提供することを目的とする。
かかる目的を達成するために、本発明の第1の態様としての並列処理装置は、入力されたソースプログラムから実行コードを生成して処理を行う並列処理装置であって、被依存プログラムブロックによる処理結果に基づいて結果依存プログラムブロックが処理を行うという依存関係にある複数のプログラムブロックを含んだソースプログラムをコンパイルする際に、被依存プログラムブロックの処理により取りうる全ての結果を列挙できるかどうかを解析し、列挙できる場合に該全ての結果を列挙して出力する解析手段と、解析手段による解析結果に基づいて結果依存プログラムブロックを、被依存プログラムブロックによる全ての結果それぞれに対して並列に処理可能なものに変換する変換手段と、を備えたことを特徴とする。
上記した結果依存プログラムブロックが処理を行うために用いる被依存プログラムブロックの処理結果が変数の値である場合、変換手段は、該処理結果として取りうる全ての変数の値に対して、並列化されたそれぞれの結果依存プログラムブロックが個別に処理を行うように変換することが好ましい。
上記した結果依存プログラムブロックが処理を行うために用いる被依存プログラムブロックの処理結果が条件分岐の判定である場合、変換手段は、該条件分岐として取りうる全ての選択肢に対して、並列化されたそれぞれの結果依存プログラムブロックが個別に処理を行うように変換することが好ましい。
また、本発明の第2の態様としての並列処理方法は、入力されたソースプログラムから実行コードを生成して処理を行う並列処理方法であって、被依存プログラムブロックによる処理結果に基づいて結果依存プログラムブロックが処理を行うという依存関係にある複数のプログラムブロックを含んだソースプログラムをコンパイルする際に、被依存プログラムブロックの処理により取りうる全ての結果を列挙できるかどうかを解析し、列挙できる場合に該全ての結果を列挙して出力する解析工程と、解析工程による解析結果に基づいて結果依存プログラムブロックを、被依存プログラムブロックによる全ての結果それぞれに対して並列に処理可能なものに変換する変換工程と、を備えたことを特徴とする。
上記した変換工程では、結果依存プログラムブロックが処理を行うために用いる被依存プログラムブロックの処理結果が変数の値である場合、該処理結果として取りうる全ての変数の値に対して、並列化されたそれぞれの結果依存プログラムブロックが個別に処理を行うように変換することが好ましい。
上記した変換工程では、結果依存プログラムブロックが処理を行うために用いる被依存プログラムブロックの処理結果が条件分岐の判定である場合、該条件分岐として取りうる全ての選択肢に対して、並列化されたそれぞれの結果依存プログラムブロックが個別に処理を行うように変換することが好ましい。
また、本発明の第3の態様としての並列処理プログラムは、入力されたソースプログラムから実行コードを生成する並列処理プログラムであって、コンピュータに、被依存プログラムブロックによる処理結果に基づいて結果依存プログラムブロックが処理を行うという依存関係にある複数のプログラムブロックを含んだソースプログラムをコンパイルする際に、被依存プログラムブロックの処理により取りうる全ての結果を列挙できるかどうかを解析し、列挙できる場合に該全ての結果を列挙して出力する解析処理と、解析処理による解析結果に基づいて結果依存プログラムブロックを、被依存プログラムブロックによる全ての結果それぞれに対して並列に処理可能なものに変換する変換処理と、を実行させることを特徴とする。
上記した変換処理では、結果依存プログラムブロックが処理を行うために用いる被依存プログラムブロックの処理結果が変数の値である場合、該処理結果として取りうる全ての変数の値に対して、並列化されたそれぞれの結果依存プログラムブロックが個別に処理を行うように変換することが好ましい。
上記した変換処理では、結果依存プログラムブロックが処理を行うために用いる被依存プログラムブロックの処理結果が条件分岐の判定である場合、該条件分岐として取りうる全ての選択肢に対して、並列化されたそれぞれの結果依存プログラムブロックが個別に処理を行うように変換することが好ましい。
以上のように、本発明によれば、プログラムブロック間における依存関係が、条件分岐の判定待ちであるかないかに関わらず、いくつもの命令文からなるプログラムブロックの単位での処理を並列化することができ、プログラムブロックの単位での処理の高速化を実現することができる。
次に、本発明に係る並列処理装置、方法、およびプログラムを、図面を用いて詳細に説明する。
本実施形態の並列処理装置は、依存関係があるために従来技術では並列化することができなかったプログラムブロック(以下、単に「ブロック」とする)を並列実行可能とする好適なものを例示している。
本実施形態の並列処理装置は、依存関係があるために従来技術では並列化することができなかったプログラムブロック(以下、単に「ブロック」とする)を並列実行可能とする好適なものを例示している。
本発明の実施形態としての並列処理装置の概要を図1に示す。
本実施形態としての並列処理装置は、この図1に示すように、ソースプログラムを受け取るプリプロセス部と、字句解析部と、解析された字句の意味を解析する意味解析部と、最適化部2と、最適化されたブロックに基づいて実行コードを生成する実行コード生成部と、最適化部2の指示により動作する依存関係検出部4と、プログラム変換部5とを備えたコンパイラ1に依存状態解析部3が追加されて構成されている。
すなわち、本実施形態としての並列処理装置は、入力されたソースプログラムから実行コードを生成するコンパイラ1を備えたコンピュータであって、入力されたソースプログラムから実行コードを生成するコンパイラ1の最適化部2に、依存状態解析部3を追加して構成されている。
本実施形態としての並列処理装置は、この図1に示すように、ソースプログラムを受け取るプリプロセス部と、字句解析部と、解析された字句の意味を解析する意味解析部と、最適化部2と、最適化されたブロックに基づいて実行コードを生成する実行コード生成部と、最適化部2の指示により動作する依存関係検出部4と、プログラム変換部5とを備えたコンパイラ1に依存状態解析部3が追加されて構成されている。
すなわち、本実施形態としての並列処理装置は、入力されたソースプログラムから実行コードを生成するコンパイラ1を備えたコンピュータであって、入力されたソースプログラムから実行コードを生成するコンパイラ1の最適化部2に、依存状態解析部3を追加して構成されている。
まず、本実施形態の概要について説明する。
図2に示すようにブロック100(被依存プログラムブロック)の結果をブロック200(結果依存プログラムブロック)が参照しているプログラムにおいて、従来の技術では依存関係のために並列実行することは不可能であった。ところが、ブロック100の取り得るすべての結果を列挙することが可能であれば、図3のようにプログラムを書き換えることによってブロック100とブロック200を並列に実行することが可能である。
すなわち、ブロック100の取り得る結果の数だけブロック200に相当するブロック(ブロック201〜ブロック20n)を用意し、それぞれ異なるCPUでブロック100と並列に実行する。ブロック100の処理が終了した時点で、実際のブロック100の結果を用いて実行したブロック200に相当するブロックの結果を採用して後続の処理を続ける。
図2に示すようにブロック100(被依存プログラムブロック)の結果をブロック200(結果依存プログラムブロック)が参照しているプログラムにおいて、従来の技術では依存関係のために並列実行することは不可能であった。ところが、ブロック100の取り得るすべての結果を列挙することが可能であれば、図3のようにプログラムを書き換えることによってブロック100とブロック200を並列に実行することが可能である。
すなわち、ブロック100の取り得る結果の数だけブロック200に相当するブロック(ブロック201〜ブロック20n)を用意し、それぞれ異なるCPUでブロック100と並列に実行する。ブロック100の処理が終了した時点で、実際のブロック100の結果を用いて実行したブロック200に相当するブロックの結果を採用して後続の処理を続ける。
本実施形態としての並列処理装置は、図1に示すように構成されることで上述した並列処理を実現しようとするものであり、コンパイラ1の最適化部2に依存状態解析部3を追加した構成とすることで、依存関係検出部4で依存状態が検出された場合は依存状態解析部3に処理を移す変更処理と、プログラム変換部5に上述の図2に示す形式を図3に示す形式のように書き換える並列化処理とをさらに実行できるようになっている。
ここで、上記の依存関係検出部4が検出する対象は、入力されるソースプログラムに含まれる複数のプログラムブロックについて、被依存ブロック(ブロック100)による処理結果に基づいて結果依存ブロック(ブロック200)が処理を行うという依存関係にあるものである。
ここで、上記の依存関係検出部4が検出する対象は、入力されるソースプログラムに含まれる複数のプログラムブロックについて、被依存ブロック(ブロック100)による処理結果に基づいて結果依存ブロック(ブロック200)が処理を行うという依存関係にあるものである。
次に、図1に示す本実施形態としての並列処理装置によるプログラム並列化動作の概要について説明する。
まず、最適化部2からの指示により、依存関係検出部4はブロック間に依存関係があるかどうかを調べる。依存関係が検出されなかったブロックについては、従来の並列化処理方法を用いてプログラム変換部5で並列化が行われ、最適化部2に戻される。
まず、最適化部2からの指示により、依存関係検出部4はブロック間に依存関係があるかどうかを調べる。依存関係が検出されなかったブロックについては、従来の並列化処理方法を用いてプログラム変換部5で並列化が行われ、最適化部2に戻される。
依存関係検出部4で依存関係が検出された場合、依存状態解析部3は依存関係にあるブロックの取り得るすべての状態を列挙できるかどうかを調査する。すべての状態を列挙できると判定された場合、プログラム変換部5は上述の手順で図2に示す依存関係であるものを図3に示す形式のように書き換える並列化を行い、その後で処理を最適化部2に戻す。
すなわち、プログラム変換部5は、ブロック200を、ブロック100による全ての結果それぞれに対して並列に処理可能なものに変換して最適化部2に戻す。
依存状態にあるブロックの取り得るすべての状態を列挙できない場合、並列化をあきらめて処理が最適化部2に戻される。
すなわち、プログラム変換部5は、ブロック200を、ブロック100による全ての結果それぞれに対して並列に処理可能なものに変換して最適化部2に戻す。
依存状態にあるブロックの取り得るすべての状態を列挙できない場合、並列化をあきらめて処理が最適化部2に戻される。
次に、本実施形態としての並列処理装置の実施例1として、コンパイラ1での処理対象となるブロックが図4に示すような依存関係にある場合について説明する。
すなわち、この第1の実施例は、図4に示すような依存関係にあるプログラムに適用して図5に示すような形式に書き換えるものである。
すなわち、この第1の実施例は、図4に示すような依存関係にあるプログラムに適用して図5に示すような形式に書き換えるものである。
図4に示す依存関係としては、ブロック300(被依存プログラムブロック)が例えばn=1,2,3のいずれかを定義し、ブロック400(結果依存プログラムブロック)がそのnの値を参照して処理を行う。
このため、この図4と図5に示す例では、CPU−0からCPU−3までの4つのCPUを用いたコンピュータでの処理として、ブロック300とブロック400とをコンパイルする際に、ブロック400をブロック401、402、403の各ブロックに変換することで、並列化処理を行っている。
このため、この図4と図5に示す例では、CPU−0からCPU−3までの4つのCPUを用いたコンピュータでの処理として、ブロック300とブロック400とをコンパイルする際に、ブロック400をブロック401、402、403の各ブロックに変換することで、並列化処理を行っている。
図4のブロック300では変数nを定義し、ブロック400ではブロック300で定義された変数nを参照している。図5のブロック401、402、403はブロック400と同じ構成のブロックである。CPU−0でブロック300を、CPU−1からCPU−3でそれぞれブロック401からブロック403を実行する構成になっている。
次に、第1の実施例の動作について、図1、図4、図5を参照して詳細に説明する。
図4に示すような依存関係のブロックを有するソースプログラムをコンパイルする際、従来技術では図1の依存関係検出部4で変数nの依存関係を検出し、並列化をあきらめて逐次に実行を行う。
しかし、本発明では、図1の依存状態解析部3でnの取り得る値がn=1、2、3のいずれかになることを解析し、図1のプログラム変換部5でプログラムを図5のように変換する。すなわち、プログラム変換部5がブロック400からブロック401、ブロック402、ブロック403を生成して、それぞれ異なるCPUにより処理されるように最適化部2が割り当てる。
それぞれの処理として、ブロック401はn=1を用いて処理を行い、ブロック402はn=2を、ブロック403はn=3をそれぞれ用いて処理を行う。
図4に示すような依存関係のブロックを有するソースプログラムをコンパイルする際、従来技術では図1の依存関係検出部4で変数nの依存関係を検出し、並列化をあきらめて逐次に実行を行う。
しかし、本発明では、図1の依存状態解析部3でnの取り得る値がn=1、2、3のいずれかになることを解析し、図1のプログラム変換部5でプログラムを図5のように変換する。すなわち、プログラム変換部5がブロック400からブロック401、ブロック402、ブロック403を生成して、それぞれ異なるCPUにより処理されるように最適化部2が割り当てる。
それぞれの処理として、ブロック401はn=1を用いて処理を行い、ブロック402はn=2を、ブロック403はn=3をそれぞれ用いて処理を行う。
CPU−0でブロック300の処理が終了した時点で、ブロック300で実際に定義されたnの値を確認し、その値を用いて処理を行ったブロック401から403の何れかによる結果を用いて後続の処理を行う。変換されたプログラムは最適化部2に戻され、残りの最適化を行う。
プログラムの実行における具体例として説明すると、ブロック401、402、403とブロック300とが並列に実行され、例えばブロック300の処理結果によりn=2と定義された場合、後続の処理としてはブロック402の結果を用いてプログラムの残りの処理が続けられる。
以上のように、本発明の実施例1によれば、プログラム全体のターンアラウンドタイムを短縮することができる。
その理由は、依存関係があるブロックの取り得るすべての状態を列挙できる場合に、そのすべての状態を別々のCPUで並列実行させることができるからである。
換言すると、ブロック300による変数の値の確定(定義)を受けてブロック400が処理を行う依存関係であっても、その処理結果として取りうる全ての変数の値に対しての状態を列挙できる場合に、そのすべての状態を別々のCPUで並列実行させることができるからである。
その理由は、依存関係があるブロックの取り得るすべての状態を列挙できる場合に、そのすべての状態を別々のCPUで並列実行させることができるからである。
換言すると、ブロック300による変数の値の確定(定義)を受けてブロック400が処理を行う依存関係であっても、その処理結果として取りうる全ての変数の値に対しての状態を列挙できる場合に、そのすべての状態を別々のCPUで並列実行させることができるからである。
次に、本実施形態としての並列処理装置の実施例2として、コンパイラ1での処理対象となるブロックが図6に示すような依存関係にある場合について説明する。
すなわち、この第2の実施例は、図6に示すような依存関係にあるプログラムに適用して図7に示すような形式に書き換えるものである。
すなわち、この第2の実施例は、図6に示すような依存関係にあるプログラムに適用して図7に示すような形式に書き換えるものである。
図6に示す依存関係のプログラムは、ブロック500(被依存プログラムブロック)で変数Xの値を定義し、ブロック600(結果依存プログラムブロック)でその値が0.0未満かそれ以外かで処理が異なるプログラムである。
このため、この図6と図7に示す例では、CPU−0からCPU−2までの3つのCPUを用いたコンピュータでの処理として、ブロック500とブロック600とをコンパイルする際に、ブロック600をブロック601、602の各ブロックに変換することで、並列化処理を行っている。
このため、この図6と図7に示す例では、CPU−0からCPU−2までの3つのCPUを用いたコンピュータでの処理として、ブロック500とブロック600とをコンパイルする際に、ブロック600をブロック601、602の各ブロックに変換することで、並列化処理を行っている。
図7のブロック601は、X<0.0の場合の図6のブロック600に相当するブロックであり、ブロック602は、それ以外の場合のブロック600に相当するブロックである。
並列処理としては、CPU−0でブロック500を実行し、CPU−1でブロック601を、CPU−2でブロック602をそれぞれ実行する構成である。
並列処理としては、CPU−0でブロック500を実行し、CPU−1でブロック601を、CPU−2でブロック602をそれぞれ実行する構成である。
次に、第2の実施例の動作について、図1、図6、図7を参照して詳細に説明する。
図6に示すような依存関係のブロックを有するソースプログラムをコンパイルする際、従来技術では図1の依存関係検出部4でブロック500および600の間に変数Xに依存関係が存在することを検出し、プログラムの並列化をあきらめる。
しかし、本発明では、図1の依存関係検出部4で変数Xの依存関係を検出したあとで、依存状態解析部3に処理が移される。依存状態解析部3は、ブロック600において変数XはX<0.0またはX>=0.0のいずれかの状態を取り得ると解析し、プログラム変換部5でプログラムを図7のように変換する。
すなわち、プログラム変換部5は図7に示すようにブロック601と602とを生成し、最適化部2はそのブロック601と602とがそれぞれ異なるCPUで処理されるように割り当てる。
図6に示すような依存関係のブロックを有するソースプログラムをコンパイルする際、従来技術では図1の依存関係検出部4でブロック500および600の間に変数Xに依存関係が存在することを検出し、プログラムの並列化をあきらめる。
しかし、本発明では、図1の依存関係検出部4で変数Xの依存関係を検出したあとで、依存状態解析部3に処理が移される。依存状態解析部3は、ブロック600において変数XはX<0.0またはX>=0.0のいずれかの状態を取り得ると解析し、プログラム変換部5でプログラムを図7のように変換する。
すなわち、プログラム変換部5は図7に示すようにブロック601と602とを生成し、最適化部2はそのブロック601と602とがそれぞれ異なるCPUで処理されるように割り当てる。
ブロック500の処理が完了した時点で処理結果としてのX<0.0の真偽を確認し、ブロック601または602のうちブロック500での処理結果に当てはまる方の処理結果を用いて後続の処理が行われる。変換されたプログラムは、図1の最適化部2に戻されて残りの最適化が行われる。
プログラムの実行における具体例として説明すると、ブロック500と、ブロック601、602とが並列に実行され、ブロック500で例えばX=−1.0と定義された場合、後続の処理としてはブロック601の結果を用いてプログラムの残りの処理が続けられる。
以上のように、本発明の実施例2によっても、プログラム全体のターンアラウンドタイムを短縮することができる。
その理由は、この実施例2においても、ブロック500と、ブロック600に相当するブロック601および602とを別々のCPUで並列実行させることができ、プログラム全体を早く終了させることができるからである。
換言すると、ブロック500による分岐命令の判定結果を受けてブロック600が処理を行う依存関係であっても、その条件分岐の判定として取りうる全ての選択肢に対しての状態を列挙できる場合に、そのすべての状態を別々のCPUで並列実行させることができるからである。
その理由は、この実施例2においても、ブロック500と、ブロック600に相当するブロック601および602とを別々のCPUで並列実行させることができ、プログラム全体を早く終了させることができるからである。
換言すると、ブロック500による分岐命令の判定結果を受けてブロック600が処理を行う依存関係であっても、その条件分岐の判定として取りうる全ての選択肢に対しての状態を列挙できる場合に、そのすべての状態を別々のCPUで並列実行させることができるからである。
なお、上述した各実施形態は、本発明の好適な実施形態であり、本発明の主旨を逸脱しない範囲内において、種々変形して実施することが可能である。
例えば、上述した各実施形態としての並列処理装置を実現するための処理手順をプログラムとして記録媒体に記録することにより、本発明の各実施形態による上述した各機能を、その記録媒体から供給されるプログラムによって、システムを構成するコンピュータのCPUに処理を行わせて実現させることができる。
この場合、上記の記録媒体により、あるいはネットワークを介して外部の記録媒体から、プログラムを含む情報群を出力装置に供給される場合でも本発明は適用されるものである。
すなわち、記録媒体から読み出されたプログラムコード自体が本発明の新規な機能を実現することになり、そのプログラムコードを記憶した記録媒体および該記録媒体から読み出された信号は本発明を構成することになる。
この記録媒体としては、例えば、フロッピー(登録商標)ディスク,ハードディスク,光ディスク,光磁気ディスク,CD−ROM,CD−R,磁気テープ,不揮発性のメモリカード,ROM,EEPROM等を用いてよい。
例えば、上述した各実施形態としての並列処理装置を実現するための処理手順をプログラムとして記録媒体に記録することにより、本発明の各実施形態による上述した各機能を、その記録媒体から供給されるプログラムによって、システムを構成するコンピュータのCPUに処理を行わせて実現させることができる。
この場合、上記の記録媒体により、あるいはネットワークを介して外部の記録媒体から、プログラムを含む情報群を出力装置に供給される場合でも本発明は適用されるものである。
すなわち、記録媒体から読み出されたプログラムコード自体が本発明の新規な機能を実現することになり、そのプログラムコードを記憶した記録媒体および該記録媒体から読み出された信号は本発明を構成することになる。
この記録媒体としては、例えば、フロッピー(登録商標)ディスク,ハードディスク,光ディスク,光磁気ディスク,CD−ROM,CD−R,磁気テープ,不揮発性のメモリカード,ROM,EEPROM等を用いてよい。
この本発明に係るプログラムによれば、当該プログラムによって制御されるコンピュータに、上述した本発明に係る各実施形態としてのコンピュータにおける各機能を実現させることができる。
本発明は、マルチプロセッサシステムにおいて並列実行するプログラムを生成する自動並列化コンパイラなどに適用することができる。
1 コンパイラ
2 最適化部
3 依存状態解析部(解析手段)
4 依存関係検出部
5 プログラム変換部(変換手段)
100、300、500 ブロック(被依存プログラムブロック)
200、400、600 ブロック(結果依存プログラムブロック)
2 最適化部
3 依存状態解析部(解析手段)
4 依存関係検出部
5 プログラム変換部(変換手段)
100、300、500 ブロック(被依存プログラムブロック)
200、400、600 ブロック(結果依存プログラムブロック)
Claims (9)
- 入力されたソースプログラムから実行コードを生成して処理を行う並列処理装置であって、
被依存プログラムブロックによる処理結果に基づいて結果依存プログラムブロックが処理を行うという依存関係にある複数のプログラムブロックを含んだソースプログラムをコンパイルする際に、前記被依存プログラムブロックの処理により取りうる全ての結果を列挙できるかどうかを解析し、列挙できる場合に該全ての結果を列挙して出力する解析手段と、
前記解析手段による解析結果に基づいて前記結果依存プログラムブロックを、前記被依存プログラムブロックによる全ての結果それぞれに対して並列に処理可能なものに変換する変換手段と、を備えたことを特徴とする並列処理装置。 - 前記結果依存プログラムブロックが処理を行うために用いる前記被依存プログラムブロックの処理結果が変数の値である場合、前記変換手段は、該処理結果として取りうる全ての変数の値に対して、並列化されたそれぞれの前記結果依存プログラムブロックが個別に処理を行うように変換することを特徴とする請求項1記載の並列処理装置。
- 前記結果依存プログラムブロックが処理を行うために用いる前記被依存プログラムブロックの処理結果が条件分岐の判定である場合、前記変換手段は、該条件分岐として取りうる全ての選択肢に対して、並列化されたそれぞれの前記結果依存プログラムブロックが個別に処理を行うように変換することを特徴とする請求項1または2記載の並列処理装置。
- 入力されたソースプログラムから実行コードを生成して処理を行う並列処理方法であって、
被依存プログラムブロックによる処理結果に基づいて結果依存プログラムブロックが処理を行うという依存関係にある複数のプログラムブロックを含んだソースプログラムをコンパイルする際に、前記被依存プログラムブロックの処理により取りうる全ての結果を列挙できるかどうかを解析し、列挙できる場合に該全ての結果を列挙して出力する解析工程と、
前記解析工程による解析結果に基づいて前記結果依存プログラムブロックを、前記被依存プログラムブロックによる全ての結果それぞれに対して並列に処理可能なものに変換する変換工程と、を備えたことを特徴とする並列処理方法。 - 前記変換工程では、前記結果依存プログラムブロックが処理を行うために用いる前記被依存プログラムブロックの処理結果が変数の値である場合、該処理結果として取りうる全ての変数の値に対して、並列化されたそれぞれの前記結果依存プログラムブロックが個別に処理を行うように変換することを特徴とする請求項4記載の並列処理方法。
- 前記変換工程では、前記結果依存プログラムブロックが処理を行うために用いる前記被依存プログラムブロックの処理結果が条件分岐の判定である場合、該条件分岐として取りうる全ての選択肢に対して、並列化されたそれぞれの前記結果依存プログラムブロックが個別に処理を行うように変換することを特徴とする請求項4または5記載の並列処理方法。
- 入力されたソースプログラムから実行コードを生成する並列処理プログラムであって、
コンピュータに、
被依存プログラムブロックによる処理結果に基づいて結果依存プログラムブロックが処理を行うという依存関係にある複数のプログラムブロックを含んだソースプログラムをコンパイルする際に、前記被依存プログラムブロックの処理により取りうる全ての結果を列挙できるかどうかを解析し、列挙できる場合に該全ての結果を列挙して出力する解析処理と、
前記解析処理による解析結果に基づいて前記結果依存プログラムブロックを、前記被依存プログラムブロックによる全ての結果それぞれに対して並列に処理可能なものに変換する変換処理と、を実行させることを特徴とする並列処理プログラム。 - 前記変換処理では、前記結果依存プログラムブロックが処理を行うために用いる前記被依存プログラムブロックの処理結果が変数の値である場合、該処理結果として取りうる全ての変数の値に対して、並列化されたそれぞれの前記結果依存プログラムブロックが個別に処理を行うように変換することを特徴とする請求項7記載の並列処理プログラム。
- 前記変換処理では、前記結果依存プログラムブロックが処理を行うために用いる前記被依存プログラムブロックの処理結果が条件分岐の判定である場合、該条件分岐として取りうる全ての選択肢に対して、並列化されたそれぞれの前記結果依存プログラムブロックが個別に処理を行うように変換することを特徴とする請求項7または8記載の並列処理プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004076105A JP2005267024A (ja) | 2004-03-17 | 2004-03-17 | 並列処理装置、方法、およびプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004076105A JP2005267024A (ja) | 2004-03-17 | 2004-03-17 | 並列処理装置、方法、およびプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005267024A true JP2005267024A (ja) | 2005-09-29 |
Family
ID=35091534
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004076105A Pending JP2005267024A (ja) | 2004-03-17 | 2004-03-17 | 並列処理装置、方法、およびプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2005267024A (ja) |
-
2004
- 2004-03-17 JP JP2004076105A patent/JP2005267024A/ja active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2680132B1 (en) | Staged loop instructions | |
US9037554B2 (en) | Bloom bounders for improved computer system performance | |
US8336038B2 (en) | System and method for parallel execution of a program | |
US8789031B2 (en) | Software constructed strands for execution on a multi-core architecture | |
US9164769B2 (en) | Analyzing data flow graph to detect data for copying from central register file to local register file used in different execution modes in reconfigurable processing array | |
US10430191B2 (en) | Methods and apparatus to compile instructions for a vector of instruction pointers processor architecture to enable speculative execution and avoid data corruption | |
JP2001282549A (ja) | プログラム変換装置及び方法並びに記録媒体 | |
JP6427054B2 (ja) | 並列化コンパイル方法、及び並列化コンパイラ | |
JP6172614B2 (ja) | ランタイムにおけるソフトウェアパイプライン | |
EP2924559A2 (en) | Program, compiler method, and compiler apparatus | |
JP3773769B2 (ja) | 命令のインオーダ処理を効率的に実行するスーパースケーラ処理システム及び方法 | |
US6272676B1 (en) | Method and apparatus for finding loop— lever parallelism in a pointer based application | |
JP4420055B2 (ja) | マルチスレッドプロセッサ及びそれに用いるスレッド間同期操作方法 | |
US20060047495A1 (en) | Analyzer for spawning pairs in speculative multithreaded processor | |
JP2005267024A (ja) | 並列処理装置、方法、およびプログラム | |
US20090031118A1 (en) | Apparatus and method for controlling order of instruction | |
JP6254352B2 (ja) | ループのプロローグまたはエピローグの無効演算を処理する装置及び方法 | |
CN114968364B (zh) | 一种条件语句的处理方法、装置及存储介质 | |
JP5392810B2 (ja) | 命令発行制御装置及び命令発行制御方法 | |
Sura et al. | Using multiple threads to accelerate single thread performance | |
Singhvi et al. | Pipeline Hazards and its Resolutions | |
JP2024100561A (ja) | パイプライン数縮退コンパイラおよびパイプライン数縮退方法 | |
JP2002318689A (ja) | 資源使用サイクルの遅延指定付き命令を実行するvliwプロセッサおよび遅延指定命令の生成方法 | |
Jee et al. | Compiler processor tradeoffs for DISVLIW architecture | |
JP2019191796A (ja) | 高位合成方法、高位合成プログラム、高位合成装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20080122 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080507 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20080909 |