JPH08501167A - 並列コンピュータシステムにおけるアプリケーションプログラムの処理方法 - Google Patents

並列コンピュータシステムにおけるアプリケーションプログラムの処理方法

Info

Publication number
JPH08501167A
JPH08501167A JP6507645A JP50764594A JPH08501167A JP H08501167 A JPH08501167 A JP H08501167A JP 6507645 A JP6507645 A JP 6507645A JP 50764594 A JP50764594 A JP 50764594A JP H08501167 A JPH08501167 A JP H08501167A
Authority
JP
Japan
Prior art keywords
instruction
program
data item
parallel
variable
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
Application number
JP6507645A
Other languages
English (en)
Inventor
クノップ,ユルゲン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Siemens AG
Original Assignee
Siemens AG
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Siemens AG filed Critical Siemens AG
Publication of JPH08501167A publication Critical patent/JPH08501167A/ja
Pending legal-status Critical Current

Links

Classifications

    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06F—ELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00—Arrangements for software engineering
    • G06F8/40—Transformation of program code
    • G06F8/41—Compilation
    • G06F8/43—Checking; Contextual analysis
    • G06F8/433—Dependency analysis; Data or control flow analysis
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06F—ELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00—Arrangements for software engineering
    • G06F8/40—Transformation of program code
    • G06F8/41—Compilation
    • G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Multi Processors (AREA)

Abstract

(57)【要約】 1つの並列システムの種々のC1におけるユーザプログラムの実行の際問題となるのは一方のコンピュータにて実行されるデータ項目が他方のコンピュータにより並列的に実行されるプロセスにて生成されることである。データ項目に対するアクセスを含む各インストラクション(命令)に対してプログラム実行中当該データ項目が並列プロセスで求められるか否かをしらべる必要性を回避するためにユーザプログラムのコンパイルの際既にデータ項目へのアクセスを行わせるコマンドがタグ付けされ、上記データ項目は実際の(現在の)プロセスにて既に計算されているか、又は並列プロセスにてアクセスの時点にて既に計算されて存在しているものである。上記コマンドの実行は直列ケースにおけるように行われる。

Description

【発明の詳細な説明】 並列コンピュータシステムにおけるアプリケーションプログラムの処理方法 斬新な、比較的高速のノイマン形コンピュータの発展は次のような事情により 損なわれる、即ち使用されているテクノロジーの物理的限界に達することにより 損なわれる。最近数十年の趨勢における更なる性能の増大の見込みは見られない 。並列コンピュータは当該状況を次のようにして緩和している、即ちアプリケー ションプログラムの実行のため複数のプロセッサが使用されるのである。勿論こ のことは並列コンピュータの用意だけでは不十分である。簡単に自動的に並列化 され得る、アプリケーションプログラムは極めて僅かである。いずれにしろ必要 なのは当該並列化(手法)ないし並行性を明示的に生成することを可能にするイ ンストラクション(命令)又はコンストラクト(構成子)である。 過去何年にも亘って、並列プログラミングのために並列化(手法)を表現する ことを可能にする種々のプログラミング言語−コンストラクト(構成体)多数が 創出された。然し乍ら、いずれの並列化(手法)も関与する各プロセッサ間の管 理(機能)を包含するという問題を回避できない。従って一般的に、甘受しなけ ればならないことには各並列化プログラムは1つのプロセッサに関して先ず速度 損失を甘受しなければならない。なんとなれば並列的環境ではプログラムは直列 的環境におけるよりも並列的環境では緩慢に進行経過するからである。潜在的並 列化(手法)のみでも付加的コストを要する。従って並列化(手法)により達成 される、プログラム処理の加速度の一部が失われる。 上記問題を図1及び図2を用いて説明する。 通常の直列的ノイマン(コンピュータ)にてすべてのデータDAは主(ワーク )メモリSPのロケーションSP内に保持される。それによりプログラムの実行 の際必要とされるデータヘ直接的にアクセスをし得る(図1)。 これに反して並列的に処理さるべきプログラムの実行時間に屡々データは並列 的に計算される。従って、データは直列的な場合におけるようにデータが表され 得るのではなく、一層より複雑な構造が存在する(図2)メモリロケーションS P1は識別子KNを含みこの識別子は通常の(シーケンシャルなケース)又は並 列的に計算さるべきデータ項目が生じているか否かの情報を含み、SPは場合に よりデータ項目が見出されるべきか否かについての情報を含む。並列評価の特徴 とするところはデータが既に計算されているか否か又はそうでないかが不明のこ とである。当該特性は直列的プログラムの場合プログラムの実行により生じるが 、 並列的場合にはより一層複雑な状況が生じる。データ項目は他のプロセッサにて 実行されるプロセスで計算されるべきこととなり得る。第1のケースが生じる場 合は当該データは既に並列化プロセスにて計算されているかも知れないし、そう でないかも知れない。そのような関係状況を図2に示す。ケース2はそれ自体図 1のケースに相応しており、そして次のような点でのみ異なる、即ちプログラム は可能な並列的実行処理のためデータ項目の異なる他の記憶を必要とするという 点でのみ異なる。ここでデータ項目DAは識別子KNと結合されており、このK Nは当該データ項目は直列的に又は通常のように計算されていることを表す。そ のようなデータ項目は以下“現行”(present)(“present”) と称され、コード中では$符号を付与される。一方ケース1はアプリケーション プログラムのプロセスの並列的処理が生起しているケースに係わる。ここでは各 メモリロケーション毎に識別子KNが用意されており、この識別子はデータ項目 が並列に実行されるプログラムにて求められることを表す。データ項目の代わり に、ダミーPLが用意されており、このPLはデータ項目DAがメモリロケーシ ョンASP内のどこに存在しているかを表す。ケース1,1ではデータ項目DA は既に計算済みであるべきものとする(当該データ項目へアクセスが行われると き)。このケースは以下“確定的”(determined) (determined)と称され、以下コード中で感嘆マーク(!)で表示さ れる。これに反しケース1,2ではダミーPLによりデータ項目に対してアクセ スの時点で空き状態におかれている(つまり当該データ項目は並列に実行される プロセスでは未だ計算されていない)メモリロケーションSP2である。このケ ースは以下“未確定”又は“未知”(unknown)と称され、コード中で“ ?”と略称される。 プログラムのプロセスの並列の計算の際の前述の問題点は刊行物WO91/1 952(PCT出願)において、一層詳しく述べられている。 並列化(手法)モデルでは任意のインストラクション(命令)に対して図2の 簡単なケース2のほかに図2のケース1,1又は1,2のうちの1つが起こり得 る。要するに各アクセス毎に、インストラクション(命令)は実行の際当該のデ ータ項目を本当に必要とするか否かが調べられなければならない。1つのデータ 項目を本当に必要とするアクセスを以下“非参照”(形)(“derefere neing”)(略称deref)と称される。非参照(形)アクセスの場合、 常に留意しなければならないのは場合により間接的に(ケース1,1)又は直接 的に(ケース2)データにアクセスしなければならず、そして、未だ計算されて ない(ケース1,2)データにはアクセスしないことである。これによりデータ 項目をアクセスするインス トラクション(命令)の場合プログラムの実行の際下記について常にチェックし なければならない。 a)通常の(ケース2)又は並列に計算さるべき(ケース1)データ項目が存 在するか否か(“現行”(present)テスト) b)場合により、ケースIにおいてデータ項目が既に計算されたか否かがチェ ックされる(“確定的”(determined)テスト) データ項目が既に計算されている場合データ項目にアクセスできる(ケース1 ,1)。そうでない場合(ケース1,2)、データ項目の計算を待機しなければ ならず、そして、その際はじめて、ケース1,1におけるように進行経過され得 る。当該の待機のため以下暗黙的同期化について言及する。 本発明の基礎を成す問題点とするところは処理さるベきアプリケーションプロ グラムのコンパイルの際既にどのインストラクション(命令)に対してテストa ないしbが省かれ得るかが確定される方法を提供することにある。上記問題は請 求の範囲1の構成要件により解決される。 従って、コンパイルの際どのカテゴリ内にプログラムのインストラクション( 命令)が分類さるべきかが調べられ、次のようにインストラクション(命令)が タグ付けされる、即ち“現行”(present)(ケース2)又は“確定的” (determined) (ケース1,1)であるデータ項目へアクセスを行わせるインストラクション( 命令)がタグ付けされる。当該の2つのケース(場合)に対して、“現行”(p resent)テスト又は“確定的”(determined)テストを行うこ とはもはや必要でない。なおケース1,2においてのみ従来通常一般のように手 段を講じなければならない。換言すれば“現行”(present)テスト及び “確定的”(determined)テストが実施され、データ項目の計算を待 機しなければならない。 プログラミングの言語のすべてのインストラクション(命令)はそれのコンテ キストにより1つのリストにて指定されるようにすると有利である。ここにおい て上記コンテキストにより指示されるのは当該インストラクション(命令)の実 行が次のようなアクセスを含む、即ち、データ項目を必要とする(“非参照的” (dereferencing) (“deref”)又は必要としない(非参 照的(deref)でない”(“non−deref”)アクセスを含むことで ある。上記のリストを用いてはコンパイル中にその中にインストラクション(命 令)が位置付けられているコンテキストが調べられる。 プログラムのコンパイルの際インストラクション(命令)中に含まれている変 数に、それの特性が対応付けられる、要するに、それが“現行(presen t)” “確定的”(determined)又は“未知”(unknown) であるかの特性が対応付けられる。このことは概して次のようにすれば調べられ 得る、即ち個々の変数がそれの発生時にシンボルテーブル内に含まれそこに付加 的に、どのような特性を各変数が有するかが指示されるようにして調べられ得る 。プログラム実行と共に、それら特性は変化し得る。従って、テーブル中には各 変数(これはインストラクション(命令)検査(検証)の時点に用いられ得る) に対する前履歴(プレヒストリ)が含まれている。 分岐化命令を表すインストラクション(命令)は有利に次のように扱い処理( ハンドリング)される、即ち各分岐に対して変数の特性が調べられ(確定され) 、シンボルテーブル内にエントリされ、次いで判断のため分岐(それの変数特性 が最も不利である)が用いられ得るように取り扱い処理される。 1つのインストラクション(命令)が再帰を包含する場合、スタート特性“現 行”(present)及び(“非参照的”(deref))特性を出発点とし 、再帰を、変数の特性がもはや変化しなくなるまで実施すると有利である。 ループのため、シンボルテーブルから生じる特性を基礎として、パスは、変数 の特性がもはや変化しなくなるまで反復される。 すべての変数(これは特性“確定的”(deter mined)を有する)に特性“現行”(present)が対応付けられ(割 り当てられ)、そのために付加的にインストラクション(命令)を導入し、この インストラクション(命令)は当該インストラクション(命令)の実行を変数の 定まる(“確定的”(determined)になる)までストップすると有利 である。 本発明の他の発展形態は引用請求項に示される。 図示の実施処理例を用いて本発明を説明する。 各図の内容は次の通りである。 図3は比較的に容易な理解のため擬似コードで既述されているプログラムセク ションを示す。 図4は本発明に相応したタグ(識別子)符号を有する同じプログラムを示し、 図5〜図13は本発明の方法により個々のインストラクション(命令)又はコン ストラクトを調べる手法の各例を示す。 暗黙的同期化付きの大抵の言語において、当該の同期化に関して基本オペレー ション(演算)(コンストラクト又はインストラクション(命令))のセマンテ ィクス(意味)を定義付ける(規定)することが必要である。このことはリスト (この中に当該の特性が含まれている)を用いて行われ得る。例えば次のような 定義付け(規定)が成立ち得る。 当該インストラクション(命令)はそれの引数の各々に関して下記のように修 飾される。 −引数は常に“非参照的”(deref)に必要とされる。 −引数は時々“非参照的”(deref)に必要とされる。 −引数は当該インストラクション(命令)により“非参照的”(deref) には必要とされない。 上記の事前定義付けられたインストラクション(命令)はそれの結果の各々に 関して修飾され、ここにおいて、複数の結果を有するインストラクション(命令 )又は関数が存在する。 −結果は常に計算された(計算済み)値である; −結果は必ずしも計算済み値ではない。 引数が“非参照的”(deref)形態で、又はそうでない特性(“non− deref”)形態で必要とされるかに関する各インストラクション(命令)の 特性はリスト内に収集され、事後的にコンパイルの際使用され得る。 インストラクション(命令)の結果の特性は“非参照的”(deref)又は そうでない(“non−deref”)ような修飾(化)に依存するのみならず 、使用された変数がどのような特性を有するか、“現行”(present)、 “確定的”(deremined)又は“未知”(unknown)であるかの 特性に依存する。変数のそれらの特性は所謂シンボルテーブルにて収集され得る 。 方法ないしメソッドは図3のプログラムセクションを用いて最良に説明され得 る。ここでは幾つかの典型的なインストラクション(命令)が擬似コードで表現 されており、当該インストラクション(命令)はどのようなコンテキストにて生 じているかが指定されている。シンボルテーブル中には生起変数がどのような特 性を有するかが指定されている。付加的にはプログラムコードのどのロケーショ ン(個所)に変数がタグ付けさるべきかがselfの下方に示されている。 シンボルテーブル中にはインストラクション(命令)の実行処理の前後の特性 が指示されている。コンテキストの割当は夫々のサブ構造に係わる。当該のサブ 構造が2つのコンポーネントを有する場合(例えばX==4)L又はRコンテキ ストについて言及され、唯一のコンポーネントが存在する場合(print(Y ))にはたんにコンテキストについて言及する。付加的には相応のサブ構造のs elf va1ue)が含まれている。それにより目的プログラムがタグ(識別 子)付けさるべき個所(ロケーション)が得られる。ここでもL−及びRは左及 び右(サブ構造指定(参照)のため利用される。留意すべきとことには非参照的 (deref)な個所(ロケーション)においてのみself特性は意味を有す る(有意である)ということである。ここにおいてのみ、実行時に“現行” ( present)に対するテストが行われるが、ここにおい てのみ抑圧すべきものがある。 X−init−value及び Y−init−value に対して想定してあることには X−init−valueは“未知”(unknown) (?)であり Y− init−valueは“現行”(present) ($)である。 図3のプログラムセクションではたんに2つの変数X,Yが生じ、これらは第 1コマンドで挿入され、シンボルテーブル中に含まれる。インストラクション( 命令)2により 変数Xには1が割付られ、従って、Xに対してシンボルテーブ ル中に特性presentが取り込まれる(包含される)。インストラクション (命令)2のコンテキストは明確であり、それ以上説明する必要はない。 インストラクション(命令)3の内容はYをXの関数として計算することであ る。関数Fは“未知”(unknown)であるのでこの時点で変数Yは“未知 ”(unknown)である。このことはシンボルテーブル内にエントリされる 。Fは“未知”(unknown)であるので、非参照的(deref)でない (確実な近似化)と仮定される。 プログラムのライン4〜6はif...then...elseインストラク ション(命令)を有する。インストラクション(命令)のコマンド(その中にー チ ェックさるべき条件が含まれている)はコンテキスト中ではderefであり、 使用される変数Xはシンボルテーブルから明らかなようにpresentであり 、要するに条件はチェックされ得る。インストラクション(命令)のコマンド5 ではYがプリントされるべきである(条件が充足された場合には)。Yは“未知 ”(unknown)であるので、当該コマンドはYがインストラクション(命 令)3により計算されたときのみ実行され得る。システムはこのことを待機しな ければならない。換言すれば当該コマンドが実行されると変数Yは“確定的”( determined)でなければならない。コマンド4による条件が充足され ない場合、コマンド6が実行されるべきであり、以て変数Yは1に等しくセット され、そして“現行”(present)になることになる。 変数Xに対するプリントコマンドを与えるインストラクション(命令)7はコ ンテキスト中でderefである、それというのは変数Xが存在する場合のみプ リントし得るからである。このことは変数が存在するので可能である。 インストラクション(命令)8は変数Yに対するプリントコマンドを与える。 当該インストラクション(命令)は同様にderefであり、また同様に実行さ れ得る。それというのはYは少なくとも特性“確定的”(determined )を有しなければならな いからである。コマンド5はプリントコマンド8の時点で実行されているか、又 はコマンド6の割付4が行われているからである。 インストラクション(命令)9a,9bは算術的演算即ち加算を表している。 算術的演算のコンテキストは常にderefである。当該インストラクション( 命令)は実行され得る、それというのはXが“現行”(present)である からである。それにより、Yも“現行”(present)であり、相応にシン ボルテーブル中で指定される。 インストラクション(命令)はやはりifインストラクション(命令)インス トラクション(命令)4〜6に相応して扱われる。インストラクション(命令) のコマンドのコンテキストはderefである;変数は“現行”(presen t)であるので、コマンドはまた直ちに実行され得る。それにより変数の特性は 変化せず、その結果シンボルテーブルにて変数に対する変化はエントリされる必 要はない。 従って、図3からはどのようにプログラムにて使用された変数が第1の割付の 際シンボルテーブル内にエントリされ得るか、及びどのように次いで、変数の当 該の特性は事後的に他のインストラクション(命令)の際に使用され、その際特 性的に変化し得るかが明らかである。要するに各インストラクション(命令)の 変数に対してシンボルテーブル内に含まれている前履 歴(プレヒストリ)が存在する。インストラクション(命令)のコンテキストは インストラクション(命令)を表す関数から生じ、リスト内に定義つけられ得る 。 図4は変数の特性のタグ識別子付きのプログラムセクションを示す。変数の特 性が“現行”(present)である場合変数の後方に$シンボルがセットさ れ、そして、変数の特性が“確定的”(determined)である場合!が セットそれが“未知”(unknown)である場合は変数はタグ(識別子)を 付されない。更にインストラクション(命令)の結果は相応に識別子を付される 。このことは例えばコマンド4又は9から看取され得る。プログラムのインスト ラクション(命令)がそのように識別子を付された場合、プログラム実行中下記 を調べ得る、即ちデータへのアクセス付きインストラクション(命令)の場合に 当該データは直接的にアドレッシングされ得るか、又はダミーを介してアドレッ シングされ得るのか、そして存在しること、又はダミーを介してアドレッシング されなければならず、そして、存在しないことを調ベ得る。それに相応して上述 のテストが省かれ得(アクセスにより“現行”(present)であるデータ 項目が生ぜしめられる場合には)、一方determinedであるデータ項目 へのアクセスに対してはデータ項目を待機しなければならないことはない。 付加的には“確定的”(determined)で あるデータ項目をアクセスするすべてのインストラクション(命令)にて当該デ ータ項目に特性“現行”(present)が割り付けられる場合、換言すれば ダミーがデータ項目によりオーバーライトされる場合、当該ケース(場合)に対 してもテストはもはや必要でない。 本発明の方法を以下何らのアプリケーションに特定されずに一層抽象的に論じ る。このためにプログラミング言語による幾つかの典型的インストラクシヨン( 命令)を検討する。 図5はインストラクション(命令)の結果がタグ(識別子)付きされなければ ないか、又はされなくてもよいかを調べるためどのような解析を実施しなければ ならないかを全く一般的に示す。このためにインストラクション(命令)のコマ ンドの引数コンテキス卜(この中にインストラクション(命令)が位置している )、インストラクション(命令)の引数の特性の検査が必要である。このことは 解析関数の左式中に擬似コードで表される。検査の結果により結果コード(RE Sコード)が得られ、この結果コードはタグ付き又はそうでない。更に結果シン ボルテーブル(RES−Symb)が得られ、ここにおいて、インストラクショ ン(命令)の実行により生じる、結果変数の特性の変化がエントリされ、付加的 に、結果の特性(これはコードのタグ中に表現される)は再度概略的(syn optic)コンテキストの解析の際利用のためself−propの指示の下 方に与えられる。 第1に算術演算を行うべき(図6)インストラクション(命令)を調べる。こ こで2つの算術演算は2つのオペランドleft,rightを結合するもので ある。解析関数を用いて両オペランドと結果の双方が再帰的に調べられる。左オ ペランドleft(今やnleftと称される)が明らかにしているように当該 オペランドはコンテキストderefを有し、オペランドの特性がシンボルテー ブルSYMB、要するに当該変数の前履歴(プレヒストリ)から明らかになる。 このことは図6の第2行に示されている。次ぎに右オペランドrightが調べ られる(検査される)。勿論当該オペランドもコンテキスト中でderefであ り、特性はleftオペランドの検査後に存在するようなシンボルテーブルから 明らかになる。それ故に、そのテーブル、ここではL−SYMBと称される。結 果(result)が明らかにしているところによれば、インストラクション( 命令)n−Left+n−Rightは常に特性presentを有しなければ ならず以て、コード中$でタグ付きされるべきである。結果の特性はオペレーシ ョンの実行により得られる特性により規定される。オペランドの特性がleft ないしrightがdeterminedでもpresentでもない場合、タ グ付けされない。このことが 意味することとなるのはオペランドが少なくともdeterminedになるま でオペレーシヨンの実行をシステムは待たねばならないということである。それ にも拘わらずオペレーションの結果は常にpresentである、ないし存在す る。それというのはオペランドがdeterinedである場合、新たな値が生 成されるからである。 図7は関数Cons(これによりリストが形成される)の検査の様子を示す。 上記関数はリスト(それのコンポーネントはConsの2つの引数である)を形 成する。リスト形成には引数の有効値は重要でないので、ここで再帰的呼出(コ ール)が行われこれはコンテキストでnon−derefである。ここでもイン ストラクション(命令)のコンテキストの検査の時点でのシンボルテーブルから 引数の特性が明らかになる。換言すれば、シンボルテーブルは常時最も新しい状 態に保持される。結果resultはインストラクション(命令)Consの場 合presentであり、換言すればリストノードは直ちに生成される(リスト エレメント自体はその際は未計算状態にあり得る)。 図8はLETインストラクション(命令)に係わる。例えば図3のプログラム が示すように、LETコマンドの生起に対して初期値は存在する必要がない、換 言すれば“VALUE”はコンテキスト中でderefである。VALUFの特 性は(VALUEの解析)に より生じる。図3から更に明らかなように新たなシンボルテーブル内に変数Xが エントリされる。それの特性はVALUFの特性と同一である。newSYMB はBODYへ渡される(パスされる)、換言すればENDとLET−ENDとの 間のプログラム領域へ渡される。BODYのコンテキストはLETインストラク ション(命令)全体のコンテキストと同じである。生成されるシンボルテーブル はBODYにて計算されたシンボルテーブルであり、ここでXの新たなエントリ が除かれる(Cut−Top−Level)。それというのは当該のLETクロ ーズ(clause)外で可視でないからである。上述の事情関係は図8から明 らかである。 割当のケースを図9に示す。ここでは変数Xに変数Yが割り当てられる。変数 XはYのすべての特性を継承(インヘリタンス)する。Xの特性は変わらない状 態におかれ、前履歴(プレヒストリ)から明らかになる。当該インストラクショ ン(命令)の結果特性は右辺の特性と一致する。それというのは、ある1つの割 当の結果は常に割当られる値に等しいからである。newSYMB(X/RES −PROP)の表記の意味するところはシンボルテーブルnewSYMBにてX の下方でRES−PROPの特性がエントリされることである。 図10はif−then−elseインストラクシ ョン(命令)に係わる。当該のインストラクシヨン(命令)からは所定の特性が derefに関して明瞭になる。条件BEDは実行中常に必要とされる。ifは それの第1の引数においてderefであり、而して、解析関数ANAの呼出し (call up)の際一定のコンテキストderefが転送(トランスファ) される。2つのケース識別(差別化)分岐はケース識別分類全体のコンテキスト を継承する。評価順序としては先ず条件の実行、次いで、両分岐のうちの1つの 実行である。条件は“未知”(unknown)であるので、仮定されていると ころによれば両ケース識別(差別化)分岐は処理されなければならず、結果につ いて保存的(保守的)に近似される。RES−PROPは両分岐の特性のカット (cut)により規定され、従って値として比較的に劣った特性を受け取る。同 様にシンボルテーブルはカット(cut)により計算される;すべてのエントリ に対してその都度比較的悪い値が取られる。 保存的(保守的)近似の同じパターンは他のインストラクション(命令)によ り適用される。(部分)コントラクトがパス(転送)されるか否か、又はどのく らい頻繁にパスされるか分からない場合、すべての可能性が考慮され、カットの 形成により保存的に近似化される。例えばループはそのようにして扱い処理(ハ ンドリング)される;ループは多重に(幾回も)扱い 処理され、ここで新たな終端条件及び終端シンボルテーブルは先行のものをもっ てカットされる。もはや何も変わらない状態が起こると直ちに任意の数のループ パスに亘って近似化が行われている。スタチック(ランダム)に識別可能なルー プの特性は定まっている。 図11の例のついて、変数の特性がどのように変化し得るか(新たな値を取る ことなく)を説明する。例えばインストラクション(命令)が検査される; Y=IF VAR THEN VAR +1 ELSE VAR 変数VARは条件derefの形態にて必要とされる。 このことから明らかなように加算にて変数の利用の際以下のことを基礎とし得 る、即ち,VARが少なくとも“確定的”(determined)であること を基礎とし得る。この例において当該特性はYに継承される。それにより図11 による変数に対する一般的な解析関数が生ぜしめられる。VARが先だって“確 定的”(determined)でなかった場合、留意すべきことにはdere fなアクセスにより変数は“現行(present)”でなく“確定的”(de termined)になることである。 個々のユーザにより定義付けれられた関数の解析はそれらが呼び出す他のユー ザ定義関数の解析に有用である。例えば、いずれの単一変数の単一値の関数F; f→Yに対して、図12による関数ANA−Fが生成される。関数引数の元来の 特性から出発して、次のような特性が計算される、即ち、引数及び、当該の呼出 しの結果が有する特性が計算される。比較的多くの引数及び結果を有する関数に 対して同様のことが成立つ。関数の解析中呼び出された関数のソースコードがア クセス可能ではなくなると直ちにペシミスティックに近似化される。そのような 関数の呼出では呼出ロケーションのすべての特性が破壊される。 再帰的関数はループと同様に扱われる(ハンドリングされる)。 再帰的関数呼出のための初期特性を基にして、関数ボディが解析される。当該 手続きプロセデュアは繰り返される。:関数の新たに計算された特性を基にして 、再びボディは解析される。ここで、新たな特性が決定される。特性がもはや変 化しないと直ちに、当該手続きプルセデュアは終了され得る。ここで重要なこと は適正な初期特性を選定することである。解析における他のすべてのポイントに おけるとは異なって、ここではオプティミスティックな近似化が行われるべきで ある。初期特性が表しているところでは再帰的関数のすべての引数がderef になり、すべての結果がpresentになる。 derefなアクセスにより変数は特性“確定的”(determined) を獲得する。比較的良好な 結果が得られることとなる(変数がpresentになれば)。このことは欠点 を生じさせることなく行われ得る。メソッドは次のように変化をさせなければな らない、即ち、変化が“確定的”(determined)になると直ちに自己 の値でオーバーライトされるように変化されなければならない。これによりケー ス1,1はケース2により置換される(図2)。特性が可用であるので、すべて の更なる相応の変数のderefな利用においてテストがもはや必要でない。同 じことが当該特性を継承するすべての更なる変数に対して成立つ。1つの例を図 13に示す。 本発明の方法の利点とするところはパラレル(並列)プログラムの実行時に行 うべきダイナミックなチェックが除去されることである。プログラムのスタチッ ク(ランダム)な解析によってはどのロケーションにそのようなチェックを行な わなくてもよいかが確かめられる、それというのはプログラムのシーケンスがチ ェックの結果がどのようなものかが明白になるからである。 そのために下記のことが重要である。 ベーシックコンストラクト又はインストラクション(命令)は特性deref 、時々deref,derefで決してない、に関して修飾されると、 −変数及び(部分)式はそれの特性“現行”(present)“確定的”( determined)、 又は“未知”(unknown)に従ってプログラムの抽象的解釈により修飾さ れることが必要である。解析の結果は変換されたプログラムであり、これからは テストがどこで省かれ得るかが明らかである。 −“確定的”(determined)である変数はそれの固有の値でオーバ ーライトされ、それにより”現行”(present)になることが重要である 。それにより解析結果は決定的に改善され、その際プログラムの意義重要性が変 わることはない。 個々の関数の解析結果の利用が他の関数の解析に用いられ得る。 再帰の扱い処理(ハンドリング)、がオプティミスティックな近似化を基にし て反復により行われることが重要である。
【手続補正書】特許法第184条の8 【提出日】1994年9月5日 【補正内容】 請求の範囲 1.並列コンピュータにおけるアプリケーションプログラムの処理方法において 、 a)プログラムの個々のプロセスを種々のコンピュータにて処理し、 b)アプリケーションプログラムのコードを読込み、 c)アプリケーションプログラムのコンパイルの際各インストラクション(命 令)に対して、リストを用いてそれの実行にはデータ項目に対するアクセスが必 要とされるか否かをしらべ、上記リスト中にはインストラクション(命令)の実 行がデータ項目に対するアクセスを必要とするか(deref)否かが指定され ており、 d)当該インストラクション(命令)に対してシンボルテーブル中にそれらの 特性に対する変数が下記の状態(d1〜d3)におかれているか、否かが特性と してエントリされ、 d1)実際のプロセスにて既に書込まれているか(present)否か d2)並列的に実行可能であり、実際のプロセスが変数を必要とする際既に計 算されているか否か(determined) d3)並列的に実行可能であり、実際のプロセスが変数を必要とする際おそら く未だ計算されていない 状態におかれている(unknown)か否か、エントリされ e)コンパイルされたプログラミングにてケースd1)の成立つインストラク ションには第1の(識別)タグ符号が付与され、これに対して、ケース(d2, 1)の成立つインストラクション(命令)には第2のタグ識別子が付与されると ことを特徴とする並列コンピュータシステムにおけるアプリケーションプログラ ムの処理方法。 2.−各分岐に対する分岐化コマンドに対して結果の特性が調べられ、シンボル テーブル内にエントリされ −分岐化コマンドの結果として当該結果及び分岐のシンボルテーブルが選定 され、上記分岐の特性は最も不利なものであるようにした請求の範囲1記載の方 法。 3.再帰インストラクション(命令)ないしループインストラクション(命令) の際スタート特性“現行”(present)を基にして、ないし前履歴に相応 して“非参照的”(deref)関数は特性がもはや変化しなくなるまで反復的 に解析される請求の範囲1記載の方法。 4.特性“確定的”(determined)を有するすべての変数は特性“現 行”(present)を割り付けられ、そのために所定インストラクショ ン(命令)が付加的に挿入され、上記所定インターフェースは変数が定まるイン ストラクシヨン(命令)の実行処理をストップするようにした請求の範囲1から 3までのいずれか1項記載の方法。

Claims (1)

  1. 【特許請求の範囲】 1.並列コンピュータシステムにおけるアプリケーションプログラムの処理方法 において、 a)プログラムの個々のプロセスを種々異なるコンピュータで処理し、 b)各インストラクションに対してユーザプログラムのコンパイルの際それの 実行にはデータ項目に対するアクセスが必要とされるか否かを調べ(確定し) c)上記インストラクションに対して当該の必要とされたデータ項目は下記に ついて調べられ(確定され)、 c1)考察された実際のプロセスにて計算されたか否か、がしらべられ、 c2)並列的に進行経過する(実行される)プロセスにより供給されたか否 かが調べられ、そしてc2)の場合にはc2.1)が調べられ即ち、 c2.1)データ項目へのアクセスの時点でデータ項目が存在しているか否 かが調べられ、 d)コンパイルされたプログラムにてケースc1)の成立つインストラクショ ンには第1の(識別)タグ符号が付与され、これに対して、ケース(c2.1) の成立つインストラクション(命令)には第2のタグ識別子が付与されることを 特徴とする並列コンピュータシステムにおけるアプリケーションプロ グラムの処理方法。 2.リストを用いて下記が指示され、即ちコマンドの実行がアクセスを包含する に際して、該アクセスはデータ項目を必要とする(“非参照的”(deref) )か、又は必要としないかが指示されるものである請求の範囲1記載の方法。 3.プログラムのコンパイルの際にインストラクション(命令)の変数の特性が 調べられ、そして下記のものに区別される、 −実際のプロセスにて既に書き込まれたもの(“現行” (present) ) −変数が実際のプロセスにより必要とされるとき並列的に実行処理可能であり 、既に計算済みであるもの、 −変数が実際のプロセスにより変数が必要とされるときなお“未知”(unk nown)であって並列的に実行処理可能であるもの(“未知”(unknow n))に区別される請求範囲1又は2記載の方法。 4.プログラムのコードが読み込まれ −インストラクション(命令)の各変数に対してシンボルテーブル中に変数の 特性(“現行”(present)“確定的”(determined)“未知 ”(unknown))がエントリされ、 −各インストラクション(命令)に対して当該イ ンストラクション(命令)のコンテキストが調べられ、 −実行されたインストラクション(命令)の結果はそれの特性に従ってタグ付 け(識別)され、結果変数はそれの特性をもってシンボルテーブル内にエントリ されるようにしたことを特徴とする請求の範囲3記載の方法。 5.−各分岐に対する分岐命令に対して結果の特性が調べられ、シンボルテーブ ル内にエントリされ −分岐化コマンドの結果として当該結果及び分岐のシンボルテーブルが選定さ れ、上記分岐の特性は最も不利なものであるようにした請求の範囲4記載の方法 。 6.再帰インストラクション(命令)ないしループインストラクション(命令) の際スタート特性“現行”(present)を基にしてないし前履歴に相応し て“非参照的”(deref)関数は特性がもはや変化しなくなるまで反復的に 解析される請求の範囲4記載の方法。 7.特性“確定的”(determined)を有するすべての変数は特性“現 行”(present)を割り付けられ、そのために所定インストラクション( 命令)が付加的に挿入され、上記所定インターフェースは変数が定まるインスト ラクシヨン(命令)の実施処理をストップするようにした請求の範囲3 から6までのうちいずれか1項記載の方法。
JP6507645A 1992-09-22 1993-08-18 並列コンピュータシステムにおけるアプリケーションプログラムの処理方法 Pending JPH08501167A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
DE4231709.6 1992-09-22
DE4231709 1992-09-22
PCT/DE1993/000744 WO1994007197A1 (de) 1992-09-22 1993-08-18 Verfahren zur bearbeitung eines anwenderprogramms auf einem parallelrechnersystem

Publications (1)

Publication Number Publication Date
JPH08501167A true JPH08501167A (ja) 1996-02-06

Family

ID=6468550

Family Applications (1)

Application Number Title Priority Date Filing Date
JP6507645A Pending JPH08501167A (ja) 1992-09-22 1993-08-18 並列コンピュータシステムにおけるアプリケーションプログラムの処理方法

Country Status (5)

Country Link
US (1) US5671431A (ja)
EP (1) EP0662226B1 (ja)
JP (1) JPH08501167A (ja)
DE (1) DE59301610D1 (ja)
WO (1) WO1994007197A1 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5920721A (en) * 1997-06-11 1999-07-06 Digital Equipment Corporation Compiler generating functionally-alike code sequences in an executable program intended for execution in different run-time environments
US7243342B2 (en) * 2002-06-11 2007-07-10 Intel Corporation Methods and apparatus for determining if a user-defined software function is a memory allocation function during compile-time
US8065665B1 (en) * 2004-02-28 2011-11-22 Oracle America, Inc. Method and apparatus for correlating profile data
US9946635B2 (en) 2015-09-29 2018-04-17 International Business Machines Corporation Synchronizing multi-system program instruction sequences

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5119495A (en) * 1989-12-21 1992-06-02 Bull Hn Information Systems Inc. Minimizing hardware pipeline breaks using software scheduling techniques during compilation
CA2037708C (en) * 1990-05-04 1998-01-20 Richard J. Eickemeyer General purpose compound apparatus for instruction-level parallel processors
US5303356A (en) * 1990-05-04 1994-04-12 International Business Machines Corporation System for issuing instructions for parallel execution subsequent to branch into a group of member instructions with compoundability in dictation tag
US5295249A (en) * 1990-05-04 1994-03-15 International Business Machines Corporation Compounding preprocessor for cache for identifying multiple instructions which may be executed in parallel
DE4018012A1 (de) * 1990-06-05 1991-12-12 Siemens Ag Verfahren zur bearbeitung eines benutzerprogramms auf einem parallelrechnersystem
CA2038264C (en) * 1990-06-26 1995-06-27 Richard James Eickemeyer In-memory preprocessor for a scalable compound instruction set machine processor
US5367678A (en) * 1990-12-06 1994-11-22 The Regents Of The University Of California Multiprocessor system having statically determining resource allocation schedule at compile time and the using of static schedule with processor signals to control the execution time dynamically
US5247696A (en) * 1991-01-17 1993-09-21 Cray Research, Inc. Method for compiling loops having recursive equations by detecting and correcting recurring data points before storing the result to memory
EP1338957A3 (en) * 1993-11-05 2003-10-29 Intergraph Corporation Software scheduled superscalar computer architecture

Also Published As

Publication number Publication date
EP0662226A1 (de) 1995-07-12
WO1994007197A1 (de) 1994-03-31
US5671431A (en) 1997-09-23
EP0662226B1 (de) 1996-02-07
DE59301610D1 (de) 1996-03-21

Similar Documents

Publication Publication Date Title
EP0775342B1 (en) Computer process resource modelling method and apparatus
JP4709933B2 (ja) プログラムコード変換方法
EP0171631B1 (en) A method for performing global common subexpression elimination and code motion in an optimizing compiler
Pearce A lightweight formalism for reference lifetimes and borrowing in Rust
JP2637914B2 (ja) テスト・プログラム・ジェネレータ及びテスト・プログラムを生成する方法
US5317743A (en) System for compiling iterated loops based on the possibility of parallel execution
CN102193810B (zh) 模块间内联候选标识
US6072952A (en) Method and apparatus for coalescing variables
US7725883B1 (en) Program interpreter
US6298479B1 (en) Method and system for compiling and linking source files
EP1618470B1 (en) Method and apparatus for recovering data values in dynamic runtime systems
US20040243982A1 (en) Data-flow method for optimizing exception-handling instructions in programs
EP0795821B1 (en) Optimization method using global analysis to remove redundant transfer instructions
CN118916886B (zh) 一种面向risc-v架构的二进制程序验证方法及系统
EP0433864B1 (en) Minimizing hardware pipeline breaks using software scheduling techniques during compilation
US20020032901A1 (en) Unitary data structure systems, methods, and computer program products, for global conflict determination
US8327342B2 (en) Method of reducing logging code in a computing system
Perényi et al. Stack-driven program generation of WebAssembly
JPH0748182B2 (ja) プログラム・エラー検出方法
JP3437932B2 (ja) 配列レンジ・チェックのためのコード生成方法及び装置、並びにバージョニング方法及び装置
US20060070049A1 (en) Java bytecode translation method and Java interpreter performing the same
US20260111198A1 (en) Inferring type definitions of user-defined types of variables in application program code
US10379885B2 (en) Enhanced local commoning
US20240329981A1 (en) Renaming global variables based on inferred types of variables in application program code
US5671431A (en) Method for processing user program on a parallel computer system by inserting a tag during compiling