JP2000222369A - 並列/ベクトル化方法およびその手順が記録された記録媒体 - Google Patents
並列/ベクトル化方法およびその手順が記録された記録媒体Info
- Publication number
- JP2000222369A JP2000222369A JP11020748A JP2074899A JP2000222369A JP 2000222369 A JP2000222369 A JP 2000222369A JP 11020748 A JP11020748 A JP 11020748A JP 2074899 A JP2074899 A JP 2074899A JP 2000222369 A JP2000222369 A JP 2000222369A
- Authority
- JP
- Japan
- Prior art keywords
- parallel
- vectorization
- intermediate text
- text
- program
- 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
Landscapes
- Multi Processors (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】
【課題】 多重にネストしている条件分岐を持つソース
プログラムに対して実行性能を向上させる目的プログラ
ムを生成する。 【解決手段】 並列/ベクトルテキスト生成部33は、
並列/ベクトル化用の中間テキストを生成する。効果シ
ミュレート部34は、本方式によって作成されるであろ
う目的プログラムの予測実行時間と、対象となる全処理
をスカラで行なった場合の予測実行時間とを比較するこ
とにより、本方式の効果をシミュレートする。ここで、
スカラの方が効果があると判定されれば、並列/ベクト
ル化テキスト生成部33で作成した中間テキストを中間
テキスト5に反映させない。逆に並列/ベクトル化の方
が効果があると判定されれば、中間テキスト5は、中間
テキスト4に並列/ベクトル化を反映させたものとな
る。コード生成部22は、中間テキスト5から目的プロ
グラム6を生成/出力する。
プログラムに対して実行性能を向上させる目的プログラ
ムを生成する。 【解決手段】 並列/ベクトルテキスト生成部33は、
並列/ベクトル化用の中間テキストを生成する。効果シ
ミュレート部34は、本方式によって作成されるであろ
う目的プログラムの予測実行時間と、対象となる全処理
をスカラで行なった場合の予測実行時間とを比較するこ
とにより、本方式の効果をシミュレートする。ここで、
スカラの方が効果があると判定されれば、並列/ベクト
ル化テキスト生成部33で作成した中間テキストを中間
テキスト5に反映させない。逆に並列/ベクトル化の方
が効果があると判定されれば、中間テキスト5は、中間
テキスト4に並列/ベクトル化を反映させたものとな
る。コード生成部22は、中間テキスト5から目的プロ
グラム6を生成/出力する。
Description
【0001】
【発明の属する技術分野】本発明は、ベクトル化機能お
よび並列化機能を有するコンパイラに係り、多重にネス
トしている条件分岐をもつループのベクトル/並列化方
法および記憶媒体に関する。
よび並列化機能を有するコンパイラに係り、多重にネス
トしている条件分岐をもつループのベクトル/並列化方
法および記憶媒体に関する。
【0002】
【従来の技術】従来、プログラムを並列に実行する並列
処理システムにおいては、ソースプログラムから中間テ
キストを生成し、次いで、該中間テキストに基づいて並
列化可能な処理に対して並列/ベクトル化し、ソースプ
ログラムから並列実行可能な目的(オブジェクト)プロ
グラムを生成する。
処理システムにおいては、ソースプログラムから中間テ
キストを生成し、次いで、該中間テキストに基づいて並
列化可能な処理に対して並列/ベクトル化し、ソースプ
ログラムから並列実行可能な目的(オブジェクト)プロ
グラムを生成する。
【0003】
【発明が解決しようとする課題】ところで、従来技術で
は、ソースプログラムが多重にネストしている条件分岐
を持つ場合、データ依存関係の有無にかかわらず、ベク
トル化を行わないことが多い。何故なら、多重にネスト
している条件文の配下の処理は、その処理を行なう回数
が確率的に少ないことを意味していることが多いためで
ある。すなわち、ベクトル化は、その性質上、処理の実
行回数が少ない場合は、それほどの性能向上は見込めな
い。そればかりか、実行回数が極端に少なければ、ベク
トル化しない方が性能がよいことが多々ありうる。
は、ソースプログラムが多重にネストしている条件分岐
を持つ場合、データ依存関係の有無にかかわらず、ベク
トル化を行わないことが多い。何故なら、多重にネスト
している条件文の配下の処理は、その処理を行なう回数
が確率的に少ないことを意味していることが多いためで
ある。すなわち、ベクトル化は、その性質上、処理の実
行回数が少ない場合は、それほどの性能向上は見込めな
い。そればかりか、実行回数が極端に少なければ、ベク
トル化しない方が性能がよいことが多々ありうる。
【0004】このように、従来、条件分岐が多重にネス
トしている場合には、ベクトル化を行なわないケースが
多く見られる。これは技術的に不可能であるためではな
く、 各条件分岐文配下の処理の実行回数が少ない、ネス
トしているため、マスク作成が複雑になり、その分オー
バーヘッドが大きくなる、マスク付きベクトル演算は
全ベクトル演算と同等のコストがかかるなどといった理
由により、スカラの場合よりも性能が低下するケースが
多いためである。
トしている場合には、ベクトル化を行なわないケースが
多く見られる。これは技術的に不可能であるためではな
く、 各条件分岐文配下の処理の実行回数が少ない、ネス
トしているため、マスク作成が複雑になり、その分オー
バーヘッドが大きくなる、マスク付きベクトル演算は
全ベクトル演算と同等のコストがかかるなどといった理
由により、スカラの場合よりも性能が低下するケースが
多いためである。
【0005】しかしながら、ソースプログラムが多重に
ネストしている条件分岐を持つ場合であっても、ベクト
ル化を行った方が、全体として実行性能を向上させるこ
とが有り得るにも拘わらず、従来技術では、単純にベク
トル化を行わないようにしているので、実行性能を向上
させることができないという問題があった。
ネストしている条件分岐を持つ場合であっても、ベクト
ル化を行った方が、全体として実行性能を向上させるこ
とが有り得るにも拘わらず、従来技術では、単純にベク
トル化を行わないようにしているので、実行性能を向上
させることができないという問題があった。
【0006】この発明は上述した事情に鑑みてなされた
もので、多重にネストしている条件分岐を持つソースプ
ログラムに対して実行性能を向上させる目的プログラム
を生成することができるベクトル/並列化方式および記
憶媒体を提供することを目的とする。
もので、多重にネストしている条件分岐を持つソースプ
ログラムに対して実行性能を向上させる目的プログラム
を生成することができるベクトル/並列化方式および記
憶媒体を提供することを目的とする。
【0007】
【課題を解決するための手段】上述した問題点を解決す
るために、請求項1記載の発明では、ソースプログラム
から中間テキストを生成し、該中間テキストに基づいて
複数のプロセッサにより並列実行可能な目的プログラム
を生成する並列/ベクトル化方法において、前記中間テ
キストに基づいて、ループ中に条件分岐が多重にネスト
している場合、各条件分岐の配下の並列/ベクトル化が
可能か否かを判別するステップと、並列/ベクトル化可
能であった場合には、並列/ベクトル化用の並列/ベク
トル化中間テキストを生成するステップと、並列/ベク
トル化した場合の目的プログラムの予測実行時間と、ス
カラで行なった場合の目的プログラムの予測実行時間と
をシミュレーションにより算出して比較するステップ
と、前記比較結果に基づいて、スカラの方が効果がある
と判定されれば、前記並列/ベクトル化中間テキストを
前記中間テキストに反映せず、逆に並列/ベクトル化の
方が効果があると判定されれば、前記並列/ベクトル化
中間テキストを前記中間テキストに反映させるステップ
と、前記中間テキストから目的プログラムを生成するス
テップとを有することを特徴する。
るために、請求項1記載の発明では、ソースプログラム
から中間テキストを生成し、該中間テキストに基づいて
複数のプロセッサにより並列実行可能な目的プログラム
を生成する並列/ベクトル化方法において、前記中間テ
キストに基づいて、ループ中に条件分岐が多重にネスト
している場合、各条件分岐の配下の並列/ベクトル化が
可能か否かを判別するステップと、並列/ベクトル化可
能であった場合には、並列/ベクトル化用の並列/ベク
トル化中間テキストを生成するステップと、並列/ベク
トル化した場合の目的プログラムの予測実行時間と、ス
カラで行なった場合の目的プログラムの予測実行時間と
をシミュレーションにより算出して比較するステップ
と、前記比較結果に基づいて、スカラの方が効果がある
と判定されれば、前記並列/ベクトル化中間テキストを
前記中間テキストに反映せず、逆に並列/ベクトル化の
方が効果があると判定されれば、前記並列/ベクトル化
中間テキストを前記中間テキストに反映させるステップ
と、前記中間テキストから目的プログラムを生成するス
テップとを有することを特徴する。
【0008】また、請求項2記載の発明では、請求項1
記載の並列/ベクトル化方法において、前記ループ中の
分岐条件が確定しており、かつ、その処理の実行回数が
ベクトル化が有効となる回数より少なければ、前記予測
実行時間の比較を行うことなく、スカラにより前記中間
テキストから目的プログラムを生成することを特徴とす
る。
記載の並列/ベクトル化方法において、前記ループ中の
分岐条件が確定しており、かつ、その処理の実行回数が
ベクトル化が有効となる回数より少なければ、前記予測
実行時間の比較を行うことなく、スカラにより前記中間
テキストから目的プログラムを生成することを特徴とす
る。
【0009】また、請求項3記載の発明では、請求項1
記載の並列/ベクトル化方法において、前記シミュレー
ションにより算出した、並列/ベクトル化した場合の目
的プログラムの予測実行時間に基づいて、各プロセッサ
に割り当てる処理が均等になるように、前記並列/ベク
トル化中間コードを編成するステップを有することを特
徴とする。
記載の並列/ベクトル化方法において、前記シミュレー
ションにより算出した、並列/ベクトル化した場合の目
的プログラムの予測実行時間に基づいて、各プロセッサ
に割り当てる処理が均等になるように、前記並列/ベク
トル化中間コードを編成するステップを有することを特
徴とする。
【0010】また、請求項4記載の発明では、請求項3
記載の並列/ベクトル化方法において、前記編成ステッ
プでは、前記シミュレーションにより算出した予測実行
時間が最も大となる処理を上限とすることを特徴とす
る。
記載の並列/ベクトル化方法において、前記編成ステッ
プでは、前記シミュレーションにより算出した予測実行
時間が最も大となる処理を上限とすることを特徴とす
る。
【0011】また、請求項5記載の発明では、前記請求
項1ないし4のいずれかに記載の複数のステップからな
るプログラムを記憶することを特徴とする。
項1ないし4のいずれかに記載の複数のステップからな
るプログラムを記憶することを特徴とする。
【0012】この発明では、中間テキストに基づいて、
ループ中に条件分岐が多重にネストしている場合、各条
件分岐の配下の並列/ベクトル化が可能か否かを判別
し、並列/ベクトル化可能であった場合には、並列/ベ
クトル化用の並列/ベクトル化中間テキストを生成す
る。次に、並列/ベクトル化した場合の目的プログラム
の予測実行時間と、スカラで行なった場合の目的プログ
ラムの予測実行時間とをシミュレーションにより算出し
て比較する。次に、前記比較結果に基づいて、並列/ベ
クトル化の方が効果があると判定された場合にのみ、前
記並列/ベクトル化中間テキストを前記中間テキストに
反映させる。そして、前記中間テキストから目的プログ
ラムを生成する。したがって、並列/ベクトル化が可能
であるとされ、並列/ベクトル化による効果が期待でき
るとされた場合には、ループ中に条件分岐が多重にネス
トされている場合であっても、ベクトル化して目的プロ
グラムを生成するので、目的プログラムの実行性能を向
上させることが可能となる。
ループ中に条件分岐が多重にネストしている場合、各条
件分岐の配下の並列/ベクトル化が可能か否かを判別
し、並列/ベクトル化可能であった場合には、並列/ベ
クトル化用の並列/ベクトル化中間テキストを生成す
る。次に、並列/ベクトル化した場合の目的プログラム
の予測実行時間と、スカラで行なった場合の目的プログ
ラムの予測実行時間とをシミュレーションにより算出し
て比較する。次に、前記比較結果に基づいて、並列/ベ
クトル化の方が効果があると判定された場合にのみ、前
記並列/ベクトル化中間テキストを前記中間テキストに
反映させる。そして、前記中間テキストから目的プログ
ラムを生成する。したがって、並列/ベクトル化が可能
であるとされ、並列/ベクトル化による効果が期待でき
るとされた場合には、ループ中に条件分岐が多重にネス
トされている場合であっても、ベクトル化して目的プロ
グラムを生成するので、目的プログラムの実行性能を向
上させることが可能となる。
【0013】
【発明の実施の形態】以下、図面を用いて本発明の実施
の形態を説明する。 A.実施形態の構成 本発明は、記憶領域上に規則的に並んでいるデータに対
し、直接演算を行なうベクトル命令および、マスクのオ
ン、オフにより対応する要素の処理を行なうマスク付き
ベクトル演算機能を有する複数のベクトル演算プロセッ
サを持ち、それを並列処理できるシステムに対し、以下
のような構造をもつコンパイラによって達成される。
の形態を説明する。 A.実施形態の構成 本発明は、記憶領域上に規則的に並んでいるデータに対
し、直接演算を行なうベクトル命令および、マスクのオ
ン、オフにより対応する要素の処理を行なうマスク付き
ベクトル演算機能を有する複数のベクトル演算プロセッ
サを持ち、それを並列処理できるシステムに対し、以下
のような構造をもつコンパイラによって達成される。
【0014】図1は、本発明の実施形態による全体の構
成を示すブロック図である。図において、1は、高級言
語でかかれたソースプログラムである。コンパイラ2
は、構文解析部21、並列/ベクトル化処理部3および
コード生成部22から構成されている。構文解析部21
は、高級言語でかかれたソースプログラム1を読み込
み、構文解析を行って中間テキスト4を生成する。
成を示すブロック図である。図において、1は、高級言
語でかかれたソースプログラムである。コンパイラ2
は、構文解析部21、並列/ベクトル化処理部3および
コード生成部22から構成されている。構文解析部21
は、高級言語でかかれたソースプログラム1を読み込
み、構文解析を行って中間テキスト4を生成する。
【0015】次に、並列/ベクトル化処理部3は、構造
解析部31、データ依存関係解析部32、並列/ベクト
ルテキスト生成部33および効果シミュレート部34か
ら構成されている。構造解析部31は、中間テキスト4
に従って構造解析を行なう。データ依存関係解析部32
は、分割/並列/ベクトル化した場合、各変数に対し、
定義参照関係に矛盾が生じるか否かを解析する。並列/
ベクトルテキスト生成部33は、並列/ベクトル化用の
中間テキストを生成する。
解析部31、データ依存関係解析部32、並列/ベクト
ルテキスト生成部33および効果シミュレート部34か
ら構成されている。構造解析部31は、中間テキスト4
に従って構造解析を行なう。データ依存関係解析部32
は、分割/並列/ベクトル化した場合、各変数に対し、
定義参照関係に矛盾が生じるか否かを解析する。並列/
ベクトルテキスト生成部33は、並列/ベクトル化用の
中間テキストを生成する。
【0016】効果シミュレート部34は、本方式によっ
て作成されるであろう目的プログラムの予測実行時間
と、対象となる全処理をスカラで行なった場合の予測実
行時間とを比較することにより、本方式の効果をシミュ
レートし、スカラの方が効果があると判定されれば、並
列/ベクトル化テキスト生成部33で作成した中間テキ
ストを中間テキスト4に反映させず、中間テキスト4を
そのまま中間テキスト5とし、逆に並列/ベクトル化の
方が効果があると判定されれば、並列/ベクトル化テキ
スト生成部33で作成した中間テキストを中間テキスト
4に反映させて中間テキスト5とする。コード生成部2
2は、中間テキスト5から目的プログラム6を生成/出
力を行なう。
て作成されるであろう目的プログラムの予測実行時間
と、対象となる全処理をスカラで行なった場合の予測実
行時間とを比較することにより、本方式の効果をシミュ
レートし、スカラの方が効果があると判定されれば、並
列/ベクトル化テキスト生成部33で作成した中間テキ
ストを中間テキスト4に反映させず、中間テキスト4を
そのまま中間テキスト5とし、逆に並列/ベクトル化の
方が効果があると判定されれば、並列/ベクトル化テキ
スト生成部33で作成した中間テキストを中間テキスト
4に反映させて中間テキスト5とする。コード生成部2
2は、中間テキスト5から目的プログラム6を生成/出
力を行なう。
【0017】B.実施形態の動作 次に、本実施形態の全体の動作について詳細に説明す
る。図2は、並列/ベクトル化処理部3での処理の流れ
を示すフローチャートである。また、図3は、本方式の
適用が予測されるソースプログラムの一例を示す概念図
である。まず、コンパイラ2は、ソースプログラム1を
読み込み、構文解析部21で中間テキスト4を生成す
る。次に、この情報を並列/ベクトル化処理部3に渡
す。並列/ベクトル化処理部3では、まず、中間テキス
ト4を読み込み(ステップSa1)、構造解析部31お
よびデータ依存関係解析部32により並列/ベクトル化
の判断を行なう(ステップSa2,Sa3)。ここで言
う並列化の解析対象は、各条件分岐文の配下にある処理
(図3の処理_Pi:i=1〜n)および、それぞれの
条件分岐の条件式等のマスク生成に必要な処理である。
また、ここでは、ネストが深いという理由では、ベクト
ル化不可にしない。
る。図2は、並列/ベクトル化処理部3での処理の流れ
を示すフローチャートである。また、図3は、本方式の
適用が予測されるソースプログラムの一例を示す概念図
である。まず、コンパイラ2は、ソースプログラム1を
読み込み、構文解析部21で中間テキスト4を生成す
る。次に、この情報を並列/ベクトル化処理部3に渡
す。並列/ベクトル化処理部3では、まず、中間テキス
ト4を読み込み(ステップSa1)、構造解析部31お
よびデータ依存関係解析部32により並列/ベクトル化
の判断を行なう(ステップSa2,Sa3)。ここで言
う並列化の解析対象は、各条件分岐文の配下にある処理
(図3の処理_Pi:i=1〜n)および、それぞれの
条件分岐の条件式等のマスク生成に必要な処理である。
また、ここでは、ネストが深いという理由では、ベクト
ル化不可にしない。
【0018】次に、上記解析結果に基づいて並列/ベク
トル化が可能であるか否かを判断し(ステップSa
4)、並列/ベクトル化が不可能な場合には、並列/ベ
クトル化処理部3を抜け、構文解析部21で作成した中
間テキスト4に従ってスカラの目的プログラム6を作成
する。
トル化が可能であるか否かを判断し(ステップSa
4)、並列/ベクトル化が不可能な場合には、並列/ベ
クトル化処理部3を抜け、構文解析部21で作成した中
間テキスト4に従ってスカラの目的プログラム6を作成
する。
【0019】一方、並列/ベクトル化可能であった場合
には、処理を並列/ベクトル化テキスト生成部33に移
し、該並列/ベクトル化テキスト生成部33により、以
下のものに対し、中間テキストを生成する(ステップS
a5)。 (1−1) 並列/ベクトル化のための準備 (1−2) マスク生成のための情報収集およびマスク
の作成 (1−3) 必要な変数に対するマスク付きストア処理 (2) 処理_P1 (3) 処理_P2 ・ ・ ・ (n+1) 処理_Pn
には、処理を並列/ベクトル化テキスト生成部33に移
し、該並列/ベクトル化テキスト生成部33により、以
下のものに対し、中間テキストを生成する(ステップS
a5)。 (1−1) 並列/ベクトル化のための準備 (1−2) マスク生成のための情報収集およびマスク
の作成 (1−3) 必要な変数に対するマスク付きストア処理 (2) 処理_P1 (3) 処理_P2 ・ ・ ・ (n+1) 処理_Pn
【0020】このとき、(1−2)、(2)〜(n+
1)が並列になるように中間テキストを生成する。この
ため、これらの処理中でストアされる変数は、直接その
変数の記憶領域を変更しないように、作業領域にストア
するようにする。実際の記憶領域へのストアは(1−
3)において、(1−2)で作成されたマスクを用いて
行なう。ここで、図4は、図3のソースプログラムが、
本方法により目的プログラムになった場合の、各プロセ
ッサに割り当てられる処理の内容を示す概念図である。
1)が並列になるように中間テキストを生成する。この
ため、これらの処理中でストアされる変数は、直接その
変数の記憶領域を変更しないように、作業領域にストア
するようにする。実際の記憶領域へのストアは(1−
3)において、(1−2)で作成されたマスクを用いて
行なう。ここで、図4は、図3のソースプログラムが、
本方法により目的プログラムになった場合の、各プロセ
ッサに割り当てられる処理の内容を示す概念図である。
【0021】並列/ベクトル化テキスト生成部33によ
る処理後、処理を効果シミュレート部34に移す。効果
シミュレート部34では、本方式が効果的か否かの判断
を行なう(ステップSa6)。本方式を用いた場合、並
列/ベクトル化を用いているため、多くのオーバーヘッ
ドが生じる。そのため、本方式を用いた方が、スカラで
演算した場合よりも実行性能が低下する場合がありう
る。そこで、ここでは並列/ベクトル化を用いた場合の
コスト(実行時間)と、スカラの場合のコスト(実行時
間)とをシミュレートし、その結果の比較を行う。
る処理後、処理を効果シミュレート部34に移す。効果
シミュレート部34では、本方式が効果的か否かの判断
を行なう(ステップSa6)。本方式を用いた場合、並
列/ベクトル化を用いているため、多くのオーバーヘッ
ドが生じる。そのため、本方式を用いた方が、スカラで
演算した場合よりも実行性能が低下する場合がありう
る。そこで、ここでは並列/ベクトル化を用いた場合の
コスト(実行時間)と、スカラの場合のコスト(実行時
間)とをシミュレートし、その結果の比較を行う。
【0022】並列/ベクトル化を用いた場合のコスト
は、以下のコストの加算になる。 1.並列/ベクトル化のための準備 2.並列/ベクトル化のための後処理 3.以下の項目でもっともコストの高いもの
は、以下のコストの加算になる。 1.並列/ベクトル化のための準備 2.並列/ベクトル化のための後処理 3.以下の項目でもっともコストの高いもの
【0023】以下の項目は、並列に処理されるため、同
期をとる必要があり、最もコストの高いものがこの区間
での全体のコストとなる。 ・マスク生成のためのデータ収集およびマスクの作成 ・処理_P1 ・処理_P2 ・ ・ ・ ・処理_Pn
期をとる必要があり、最もコストの高いものがこの区間
での全体のコストとなる。 ・マスク生成のためのデータ収集およびマスクの作成 ・処理_P1 ・処理_P2 ・ ・ ・ ・処理_Pn
【0024】スカラの計算において、処理_Pi(i=
1〜n)のどれが、どれだけ実行されるか不明である場
合には、不明分の全てが上記「3」で選択された処理が
行われるものとして計算する。これらによって求められ
た予想コストを比較し、コストの低い方を選択する(ス
テップSa7)。つまり、スカラの方がコストが低けれ
ば、並列/ベクトル化の利点がないため、従来通りスカ
ラで処理することとし、並列/ベクトル化テキスト生成
部33で作成した中間テキストを反映させない。この場
合、中間テキスト5は、中間テキスト4と同じ物であ
る。逆にスカラの方がコストが高ければ、中間テキスト
5は、中間テキスト4に並列/ベクトル化を反映させた
ものとなる(ステップSa8)。効果シミュレート部3
4による処理後、処理をコード生成部22へ移す。コー
ド生成部22では、中間テキスト5に従って目的プログ
ラム6の生成/出力を行なう。
1〜n)のどれが、どれだけ実行されるか不明である場
合には、不明分の全てが上記「3」で選択された処理が
行われるものとして計算する。これらによって求められ
た予想コストを比較し、コストの低い方を選択する(ス
テップSa7)。つまり、スカラの方がコストが低けれ
ば、並列/ベクトル化の利点がないため、従来通りスカ
ラで処理することとし、並列/ベクトル化テキスト生成
部33で作成した中間テキストを反映させない。この場
合、中間テキスト5は、中間テキスト4と同じ物であ
る。逆にスカラの方がコストが高ければ、中間テキスト
5は、中間テキスト4に並列/ベクトル化を反映させた
ものとなる(ステップSa8)。効果シミュレート部3
4による処理後、処理をコード生成部22へ移す。コー
ド生成部22では、中間テキスト5に従って目的プログ
ラム6の生成/出力を行なう。
【0025】C.実施形態の拡張 上述した実施形態では、処理_Pi(i=1〜n)が全
てベクトル化された場合について示されているが、分岐
条件がコンパイル時に確定しており、かつ、その処理の
実行回数がベクトル化が有効となる回数より少なけれ
ば、わざわざベクトル化する必要はない。図5は、この
場合の典型例を示すソースプログラムの一例を示す概念
図である。最初の条件分岐文(if(I.eq.2.or.I.eq.3)th
en)の条件が明確であり、しかも予め実行回数が2回と
分かっているため、ベクトルによるオーバーヘッドを考
えた場合に、そのままスカラにしたほうがよいことが分
かる。このような場合には、図6で示すように、スカラ
のままプロセッサ1に残す。もし、その処理がコストが
かかるようならば、図4のプロセッサ2の処理をベクト
ルからスカラとした形で並列処理にしてもよい。この場
合でも、「i」が「2」の場合と「3」の場合のスカラ
コードを作成すればよいため、マスクにおけるストアは
不用である。
てベクトル化された場合について示されているが、分岐
条件がコンパイル時に確定しており、かつ、その処理の
実行回数がベクトル化が有効となる回数より少なけれ
ば、わざわざベクトル化する必要はない。図5は、この
場合の典型例を示すソースプログラムの一例を示す概念
図である。最初の条件分岐文(if(I.eq.2.or.I.eq.3)th
en)の条件が明確であり、しかも予め実行回数が2回と
分かっているため、ベクトルによるオーバーヘッドを考
えた場合に、そのままスカラにしたほうがよいことが分
かる。このような場合には、図6で示すように、スカラ
のままプロセッサ1に残す。もし、その処理がコストが
かかるようならば、図4のプロセッサ2の処理をベクト
ルからスカラとした形で並列処理にしてもよい。この場
合でも、「i」が「2」の場合と「3」の場合のスカラ
コードを作成すればよいため、マスクにおけるストアは
不用である。
【0026】D.他の実施形態 次に、本発明の他の実施形態について図面を参照して詳
細に説明する。ここで、図7は、本発明の他の実施形態
によるによる全体の構成を示すブロック図である。図に
おいて、本実施形態は、並列/ベクトル化処理部3に、
タスクリプレス部35が追加された点が図1に示す実施
形態と異なっている。他の機能については、図1に示す
実施形態と同じであるため説明を省略し、ここではタス
クリプレス部35の説明とその効果について説明する。
細に説明する。ここで、図7は、本発明の他の実施形態
によるによる全体の構成を示すブロック図である。図に
おいて、本実施形態は、並列/ベクトル化処理部3に、
タスクリプレス部35が追加された点が図1に示す実施
形態と異なっている。他の機能については、図1に示す
実施形態と同じであるため説明を省略し、ここではタス
クリプレス部35の説明とその効果について説明する。
【0027】タスクリプレス部35は、最もコストのか
かる処理を上限として、タスク割り当ての最適化を行な
う。例えば、処理_P1が他と比べて非常にコストが高
い場合、他のプロセッサは、処理_P1の処理が終了す
るまで、待たされることになってしまう。そこで、タス
クリプレス部35では、効果シミュレート部34の結果
に基づいて、各プロセッサに割り当てる処理が、最もコ
ストのかかる処理を上限として、なるべく均等になるよ
う編成を行なう(図8参照)。この方法により、並列/
ベクトル化による実行性能の向上のみならず、使用する
CPU等の資源の削減も期待できる。
かる処理を上限として、タスク割り当ての最適化を行な
う。例えば、処理_P1が他と比べて非常にコストが高
い場合、他のプロセッサは、処理_P1の処理が終了す
るまで、待たされることになってしまう。そこで、タス
クリプレス部35では、効果シミュレート部34の結果
に基づいて、各プロセッサに割り当てる処理が、最もコ
ストのかかる処理を上限として、なるべく均等になるよ
う編成を行なう(図8参照)。この方法により、並列/
ベクトル化による実行性能の向上のみならず、使用する
CPU等の資源の削減も期待できる。
【0028】
【発明の効果】以上説明したように、本発明によれば、
中間テキストに基づいて、ループ中に条件分岐が多重に
ネストしている場合、各条件分岐の配下の並列/ベクト
ル化が可能か否かを判別し、並列/ベクトル化可能であ
った場合には、並列/ベクトル化用の並列/ベクトル化
中間テキストを生成し、並列/ベクトル化した場合の目
的プログラムの予測実行時間と、スカラで行なった場合
の目的プログラムの予測実行時間とをシミュレーション
により算出して比較し、該比較結果に基づいて、並列/
ベクトル化の方が効果があると判定された場合には、前
記並列/ベクトル化中間テキストを前記中間テキストに
反映させ、該中間テキストから目的プログラムを生成す
るようにしたので、並列/ベクトル化が可能であるとさ
れ、並列/ベクトル化による効果が期待できるとされた
場合には、ループ中に条件分岐が多重にネストされてい
る場合であっても、ベクトル化して目的プログラムを生
成するため、多重にネストしている条件分岐を持つソー
スプログラムに対して実行性能を向上させる目的プログ
ラムを生成することができるという利点が得られる。
中間テキストに基づいて、ループ中に条件分岐が多重に
ネストしている場合、各条件分岐の配下の並列/ベクト
ル化が可能か否かを判別し、並列/ベクトル化可能であ
った場合には、並列/ベクトル化用の並列/ベクトル化
中間テキストを生成し、並列/ベクトル化した場合の目
的プログラムの予測実行時間と、スカラで行なった場合
の目的プログラムの予測実行時間とをシミュレーション
により算出して比較し、該比較結果に基づいて、並列/
ベクトル化の方が効果があると判定された場合には、前
記並列/ベクトル化中間テキストを前記中間テキストに
反映させ、該中間テキストから目的プログラムを生成す
るようにしたので、並列/ベクトル化が可能であるとさ
れ、並列/ベクトル化による効果が期待できるとされた
場合には、ループ中に条件分岐が多重にネストされてい
る場合であっても、ベクトル化して目的プログラムを生
成するため、多重にネストしている条件分岐を持つソー
スプログラムに対して実行性能を向上させる目的プログ
ラムを生成することができるという利点が得られる。
【図面の簡単な説明】
【図1】 本発明の実施形態による全体の構成を示すブ
ロック図である。
ロック図である。
【図2】 並列/ベクトル化処理部3での処理の流れを
示すフローチャートである。
示すフローチャートである。
【図3】 本方式の適用が予測されるソースプログラム
の一例を示す概念図である。
の一例を示す概念図である。
【図4】 図3に示すソースプログラムが本方法により
目的プログラムになった場合の各プロセッサに割り当て
られる処理の内容を示す概念図である。
目的プログラムになった場合の各プロセッサに割り当て
られる処理の内容を示す概念図である。
【図5】 ベクトル化が有効でない場合の典型例を示す
ソースプログラムの一例を示す概念図である。
ソースプログラムの一例を示す概念図である。
【図6】 ベクトル化が有効でない場合の各プロセッサ
に割り当てられる処理の内容を示す概念図である。
に割り当てられる処理の内容を示す概念図である。
【図7】 本発明の他の実施形態によるによる全体の構
成を示すブロック図である。
成を示すブロック図である。
【図8】 他の実施形態により目的プログラムになった
場合の各プロセッサに割り当てられる処理の内容を示す
概念図である。
場合の各プロセッサに割り当てられる処理の内容を示す
概念図である。
1 ソースプログラム 2 コンパイラ 3 並列/ベクトル化処理部 4 中間テキスト 5 中間テキスト 6 目的プログラム 21 構文解析部 22 コード生成部 31 構造解析部 32 データ依存関係解析部 33 並列/ベクトルテキスト生成部 34 効果シミュレート部
Claims (5)
- 【請求項1】 ソースプログラムから中間テキストを生
成し、該中間テキストに基づいて複数のプロセッサによ
り並列実行可能な目的プログラムを生成する並列/ベク
トル化方法において、 前記中間テキストに基づいて、ループ中に条件分岐が多
重にネストしている場合、各条件分岐の配下の並列/ベ
クトル化が可能か否かを判別するステップと、並列/ベ
クトル化可能であった場合には、並列/ベクトル化用の
並列/ベクトル化中間テキストを生成するステップと、 並列/ベクトル化した場合の目的プログラムの予測実行
時間と、スカラで行なった場合の目的プログラムの予測
実行時間とをシミュレーションにより算出して比較する
ステップと、 前記比較結果に基づいて、スカラの方が効果があると判
定されれば、前記並列/ベクトル化中間テキストを前記
中間テキストに反映せず、逆に並列/ベクトル化の方が
効果があると判定されれば、前記並列/ベクトル化中間
テキストを前記中間テキストに反映させるステップと、 前記中間テキストから目的プログラムを生成するステッ
プとを有することを特徴する並列/ベクトル化方法。 - 【請求項2】 前記ループ中の分岐条件が確定してお
り、かつ、その処理の実行回数がベクトル化が有効とな
る回数より少なければ、前記予測実行時間の比較を行う
ことなく、スカラにより前記中間テキストから目的プロ
グラムを生成することを特徴とする請求項1記載の並列
/ベクトル化方法。 - 【請求項3】 前記シミュレーションにより算出した、
並列/ベクトル化した場合の目的プログラムの予測実行
時間に基づいて、各プロセッサに割り当てる処理が均等
になるように、前記並列/ベクトル化中間コードを編成
するステップを有することを特徴とする請求項1記載の
並列/ベクトル化方法。 - 【請求項4】 前記編成ステップでは、前記シミュレー
ションにより算出した予測実行時間が最も大となる処理
を上限とすることを特徴とする請求項3記載の並列/ベ
クトル化方法。 - 【請求項5】 前記請求項1ないし4のいずれかに記載
の複数のステップからなるプログラムが記録された記録
媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP11020748A JP2000222369A (ja) | 1999-01-28 | 1999-01-28 | 並列/ベクトル化方法およびその手順が記録された記録媒体 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP11020748A JP2000222369A (ja) | 1999-01-28 | 1999-01-28 | 並列/ベクトル化方法およびその手順が記録された記録媒体 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2000222369A true JP2000222369A (ja) | 2000-08-11 |
Family
ID=12035822
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP11020748A Pending JP2000222369A (ja) | 1999-01-28 | 1999-01-28 | 並列/ベクトル化方法およびその手順が記録された記録媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2000222369A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2006061926A1 (ja) * | 2004-12-09 | 2006-06-15 | National University Corporation NARA Institute of Science and Technology | 量子コンピュータを含むコンピュータシステムのためのプログラム開発支援装置、プログラム開発支援用プログラム、及びシミュレーション装置 |
-
1999
- 1999-01-28 JP JP11020748A patent/JP2000222369A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2006061926A1 (ja) * | 2004-12-09 | 2006-06-15 | National University Corporation NARA Institute of Science and Technology | 量子コンピュータを含むコンピュータシステムのためのプログラム開発支援装置、プログラム開発支援用プログラム、及びシミュレーション装置 |
JP4867009B2 (ja) * | 2004-12-09 | 2012-02-01 | 国立大学法人 奈良先端科学技術大学院大学 | 量子コンピュータを含むコンピュータシステムのためのプログラム開発支援装置、プログラム開発支援用プログラム、及びシミュレーション装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3664473B2 (ja) | プログラムの最適化方法及びこれを用いたコンパイラ | |
US4710872A (en) | Method for vectorizing and executing on an SIMD machine outer loops in the presence of recurrent inner loops | |
Triolet et al. | Direct parallelization of call statements | |
JP4042604B2 (ja) | プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム | |
Gross et al. | Structured dataflow analysis for arrays and its use in an optimizing compiler | |
US6550059B1 (en) | Method for generating optimized vector instructions from high level programming languages | |
US5852734A (en) | Method and compiler for parallel execution of a program | |
JP2921190B2 (ja) | 並列実行方式 | |
US8656347B2 (en) | Generation of parallelized program based on program dependence graph | |
Zhang et al. | Using hammock graphs to structure programs | |
JPH0814817B2 (ja) | 自動ベクトル化方法 | |
JP2001167060A (ja) | タスク並列化方法 | |
JP2001166949A (ja) | シンボリック実行を用いてソースコードをコンパイルするための方法及び装置 | |
JPH06324881A (ja) | メモリデータの重なり判定機能を備えたコンパイラ装置 | |
Huda et al. | Automatic parallel pattern detection in the algorithm structure design space | |
Ivanenko et al. | TuningGenie: auto-tuning framework based on rewriting rules | |
JP2001166946A (ja) | 階層の平坦化によりソースコードをコンパイルする方法及び装置 | |
Campos et al. | On data parallelism code restructuring for HLS targeting FPGAs | |
JP2000222369A (ja) | 並列/ベクトル化方法およびその手順が記録された記録媒体 | |
JPH04293150A (ja) | コンパイル方法 | |
Han et al. | Genetic algorithm based parallelization planning for legacy real-time embedded programs | |
JPH09160784A (ja) | 並列化コンパイル方式 | |
JP2008015665A (ja) | プログラム解析方法及びプログラム解析装置 | |
Ghafar et al. | Parallel Processing-A Case Study on Automatic Parallelization | |
JP3697652B2 (ja) | 分散メモリ型マルチプロセッサ向けプログラム作成システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20011204 |