JPH0256640A - 共通ブロックへのアクセス競合軽減方法 - Google Patents

共通ブロックへのアクセス競合軽減方法

Info

Publication number
JPH0256640A
JPH0256640A JP1066479A JP6647989A JPH0256640A JP H0256640 A JPH0256640 A JP H0256640A JP 1066479 A JP1066479 A JP 1066479A JP 6647989 A JP6647989 A JP 6647989A JP H0256640 A JPH0256640 A JP H0256640A
Authority
JP
Japan
Prior art keywords
common block
task
parallel
execution
common
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
JP1066479A
Other languages
English (en)
Inventor
Alan H Karp
アレン・ハーシ・カープ
Randolph G Scarborough
ランドロフ・グレゴリイ・スカーボロー
Alfred W Shannon
アルフレド・ウイリアム・シヤーナン
Jin-Fan Shaw
ジン―フアン・シヨー
Leslie J Toomey
レズリイ・ジョン・トーメイ
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JPH0256640A publication Critical patent/JPH0256640A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions

Landscapes

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

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 A、産業上の利用分野 本発明は分散計算に関し、さらに詳細には、FORTR
AN類似言語の拡張を使用して幾つかの同時レベルの・
並列処理を可能にすることに関するものである。
B、従来技術 B1.FORTRAN及び効率 T、W、ブラット(Pratt)  の「プログラミン
グ言語:設計及び実施(Programming La
nguages :Design and Imple
mentation) ハブレンチイス0ホール(Pr
entice Hall)社、1975年、pp。
237−241及び314−338は、コンパイルされ
た計算言語システムFORTRANの特徴を簡潔に要約
している。この点に関して、FORTRAN言語の設計
は1つの目標、すなわち、実行効率に的を絞ったもので
あることをブラットは指摘している。
B2.FORTRANの特徴 ブラットによれば、FORTRANプログラムは主プロ
グラムと幾つかのサブプログラムから成る。各プログラ
ム及びサブプログラムは別々にコンパイルされ、コンパ
イルされたプログラムがロ−ディング中に連係される。
重要なことであるが、各プログラムは、機械コード及び
定義されたデータ域を含む、厳密に静的に割り振られた
区域内にコンパイルされる。それぞれ別々の名前で識別
される、「共通ブロック」と呼ばれる共用データ域が定
義されることもある。
実行待記憶管理が行なわれないこともFORTRANの
特徴である。さらに、連係されロードされたプログラム
を構成する、別々にコンパイルされたサブプログラムは
、共通ブロックにアクセスし、パラメータを送り、非再
帰的プログラム呼出しを介して制御権を渡すことによっ
てのみ連絡を取る。実行待構造のほぼ全体がコンパイル
中間に決定される。簡単な変数及びアレイ要素の値のみ
が実行中に変更される。変数及びアレイは、局所または
入城参照環境のいずれかにあると宣言することができる
通常は、簡単な変数及びアレイは、それらが宣言され使
用されるサブプログラムに対して局所的である。局所参
照環境はコンパイル中にセットアツプされる。実行中に
、サブプログラムに入るごとに関連づけが活動化され、
サブプログラムから出るごとに非活動化される。したが
って、サブプログラムに再度入るとき、すべての局所変
数及びアレイは、それらが前に出た時に有していた値を
とる。
B3.共通ブロック及び共用記憶域 サブプログラム間で簡単な変数またはアレイが「共用」
される場合、それらが入城参照環境の一部であることを
明示的に宣言しなければならない。
この入城環境は共通ブロックに関してセットアツプされ
、各共通ブロックは他から区別するための識別子を有し
、さらに、多分、多数の変数及びアレイを含む。2つ以
上のサブプログラムが各々同じ共通ブロックに対する宣
言を含む場合は、宣言された共通ブロックはそれらすべ
てのサブプログラムにとってアクセス可能である。
共通ブロック宣言の効果は、入城参照環境が、それぞれ
名前または識別子を備えた別々のブロックに区分できる
ようになることである。しかし、各サブプログラムがす
べての入城環境にアクセスする必要はない。アクセスを
必要とする共通ブロックのみを宣言すればよい。
次に、共通ブロックの2つの態様について示す。
第1に、サブプログラムが共通ブロック内の変数または
アレイを参照するときは、多義性は許されない。実行環
境ではその共通ブロックの1つのインスタンスのみが定
義されている。第2に、そのために、共通ブロック内の
データに効率的にアクセスすることが可能になる。共通
ブロックを指すポインタ用の空間をプログラム中にコン
パイルすることができる。実際のアドレスは、プログラ
ムの連係及びローディング中にこの空間に挿入される。
コンパイルされた実行可能コード・シーケンスは、単に
この更新されたポインタを取り出すだけでよく、それだ
けで共通ブロックの実際の位置が得られる。
B4.実行時/実行環境における構成 アホ(八ho)等の「コンパイラ:原理、技法及びツー
ル(Compilers : Pr1nciples、
 Tech’n1ques+and Tools) J
 Nアデイソン0ウニズリ−(Addison−Wes
ley )出版社、1986年、pp。
44B−448,454−455及び474−477は
、コンパイルされた順次実行可能コードのだ実行時環境
について記述している。アホによれば、各実行時環境は
、各実行プログラム、及びサブプログラムの状態、なら
びに実行オブジェクト間のネスティング関係を定義する
構成を含む。
プログラムの各実行はプログラムの活動化と呼ばれる。
プログラムが再帰的である場合は、その活動化が幾つか
同時に有効であることがある。
(FORTRAN言語は再帰を可能としないが、それを
可能とする幾つかの実施例が存在する。)新しい活動化
でプログラムにとって既知の変数の新しいインスタンス
が作成されることがある。自動的な変数は各活動化で新
しいインスタンスを受は取る。
静的な変数はその既存の(1つの)インスタンスを保持
し、あるいは現在の活動化がその変数を参照する最初の
活動化である場合は、それらの最初の(かつ唯一の)イ
ンスタンスを得る。共通ブロック等の大域データはその
現在のインスタンスを保持し、あルイハ、ANSI  
F’0RTRAN77言語規格のもとでは、活動化ツリ
ー上で初めて参照される場合にそれらの最初のインスタ
ンスを得る。
B5.実行時活動化ツリー あるサブプログラムが別のサブプログラムを呼び出して
、それらを活動化させることができる。
任意の時点で、ツリーを使ってプログラムにおける活動
化の状態を表わすことができる。各ノードはサブプログ
ラムの活動化であり、先祖ノードの活動化が現在子孫ノ
ードを呼び出してその活動化を引き起こしている場合に
のみ、あるノードは別のメートの先祖ノードとなる。
プログラムの逐次実行では、−度に1つのことしか実行
できない。呼び出された子孫サブプログラムが完了して
からでないと、それを呼び出した先祖サブプログラムは
先に進んで、別の子孫サブプログラムを呼び出すことが
できない。したがうて、ツリー内の各先祖ノードは単一
の子孫ノードしか有することができない。経時的に観察
すると、ツリーは長くなることも短くなることもあり、
ツリー上のノードは異なるサブプログラムを表わすこと
ができるが、ツリー自体は常に直線的である。
B6.共通ブロック及び活動化ツIJ −大域データ、
特にFORTRAN共通ブロックの既存の処理は、活動
化されたサブプログラムのこのツリーと非常によく適合
する。ある大域データ項目のインスタンスは常に1つし
かなく、活動化されたサブプログラムのツリーには常に
1本の線しかない。データをツリーの上下で共用する必
要性は(大域データの目的はサブプログラム間でデータ
を共用することである)、大域データのこの単一インス
タンスによりこの単一線上で容易に満たされる。
B7.並列処理 複数のプロセッサを備えたコンピュータ・システムの出
現により、単一プログラムの計算で複数のプロセッサを
使用することが望ましくなった。
従来技術では、プログラムがたとえばマトリックス反転
またはマトリックス乗算用のサブプログラムを含む場合
、そのようなサブプログラムは、単一命令ストリーム、
単一データ・ストリーム(SISD)マシン、単一命令
ストリーム、複数データ・ストリーム(SIMD)マシ
ン、及び共用メモリ、複数プロセッサ(MIMD)構成
等その他の構成上で実行できるようになった。
ネストされたDoループ内の選択されたループを並列処
理が可能なものとして識別する方法の一例が、1987
年12月1日に発行されたスカボロー(Scarbor
ough )の米国特許第4710872号「再帰的内
部ループの存在下でSIMDマシン外部ループ上でベク
トル化し、実行するための方法(Method for
 Vectorizing and Executin
gon an 5IHD Machine 0uter
 Loops in thePresence of 
Recurrent Inner Loops) Jに
記載されている。
B8.逐次言語拡張として指定された並列処理R,H,
ベロット(Perrott )の「並列プログラミング
(Parallel Programming) J 
N アデイソン・ウニズリ−出版社、1987年、第1
0−11章、pl)、134−166は、アプリケーシ
ョンを表現するのは逐次プログラミング言語であり、か
つ並列処理が可能なプログラムの部分を確認することは
コンパイラの責任であることに注意を喚起した。
コンパイラはプログラムの働きを変更すべきではないの
で、プログラムの言語のデータ参照環境を受は入れ使用
しなければならない。並列計算でデータ共用のための新
しい定義は作成されず、並列モードで実行されるソフト
ウェアはデータ参照環境の既存の定義を実施しなければ
ならない。
並列実行が可能なアプリケーションの部分を識別する際
にコンパイラを支援または指示するため、コンピュータ
言語に対する拡張がときどき行なわれた。1987年1
月13日に発行されたグダニエッツ(Gdaniec)
等の米国特許第4636948号「高水準言語で書かれ
たアプリケ−シロン・プログラムの実行を制御するため
の方法(Methodfor  Controllin
g Execution  of  Applicat
ionPrograms Written in Hi
gh Level ProgramLanguage 
) Jを参照されたい。上記米国特許は、IBM FO
RTRAN多重タスク処理機能を使用したIBM309
0−200や3090−800E等の共用メモリ、多重
プロセッサ構成上で有用なFORTRAN拡張をカバー
している。さらに、ペロットは前掲書の第10章でクレ
イ1(Cray −1) F 0RTRAN翻訳プログ
ラムについて、また第11章でCDCサイバー(Cyb
er )FORTRANについて記述している。
B9.逐次言語に対する並列処理拡張の種類第1の言語
拡張タイプは「インライン」と呼ばれる。インライン拡
張は単一サブプログラム内に現われ、並列に実行するこ
とが可能なそのサブプログラムの構成要素を識別する。
並列構成要素内のステートメントは、依然として、局所
データ及び大域データの両方を含めて、そのサブプログ
ラムにとって既知の変数を参照し定義することができる
。実行プログラムのデータ参照環境に対する基本的な変
更はない。
第2の言語拡張タイプは「アウト・オブ・ライン」と呼
ばれる。アウト・オブ・ライン拡張は、新しいデータ環
境を作り出し、そのデータ環境で独立してサブプログラ
ム全体を実行する。新旧データ環境の結合の度合は種々
の従来技術の実施例で異なる。
B10.従来技術による拡張の限界 上記従来技術で並列処理のためにアウト・オブ・ライン
FORTRAN言語拡張を使用することには、単一レベ
ルの並列性しかサポートされないという限界がある。す
なわち、−度タスクを並列サブタスクに分割すると、サ
ブタスクはさらに小さな並列サブタスクに分割すること
はできない。このことは、ライブラリの開発及び使用を
制限する大きな制約である。アウト・オブ・ライン並列
処理を使用するために書かれたライブラリ・プログラム
は、並列して実行されているどのプログラムからも呼び
出すことができない。したがって、ライブラリの使用を
意図したプログラムでは、アウト・オブ・ライン並列実
行の使用を避けねばならない。
C0問題を解決するための手段 本発明の目的は、FORTRAN類似(FORTRAN
 −1i k e)言語システムからフンパイルされた
コード・シーケンスで共通ブロックに同時にアクセスす
るタスク間の競合を軽減し、複数レベルの並列実行での
共通ブロックの使用を容易にし、上記共通ブロックの専
用(プライベート)コピーを記憶する際に使用されるメ
モリを減少させるための方法を考案することである。
上記目的は、タスクに対する共通ブロックの結合を実行
タスクの動的ネスティング構造内にあるようにスコープ
する(限定する)ことによって、競合を避けることがで
きるという思いがけない発見に基づいて達成される。す
なわち、共通ブロック自体が、動的範囲制限をもった多
層動的オブジェクトとされる。
本発明の方法のステップは、詳しくいうと、(a)最初
のサブタスク呼出し時に、サブタスク記述中の上記共通
ブロックを指すポインタの記録を含めて、少なくとも1
つの共通ブロックを、上位のタスクによって指定される
ようにサブタスクに動的に結合し、(b)呼出し上位タ
スクにとって既知の共通ブロックのコピーの位置を指す
サブタスク内のポインタを更新することから成る。
D、実施例 好ましい実施例の説明は以下の説明を含む。
(1)並列して行なわれる作業の動的指定を可能にする
ためのFORTRAN言語に対する拡張。
(2)プログラムの並列領域間での共通ブロックの共用
または非共用を可能にするための共通ブロック・アドレ
スの動的結合。
(3)インライン(ループ本位またはケース本位)並列
実行とアウト・オブ・ライン(サブルーチン本位)並列
実行の統合。
(4) プロセッサを専用化する必要なく多重プロセッ
サ上で実行するため、並列プログラムで動的に行なわれ
る並列作業を要求するステートメントの照会。
Dl、並列実行のための言語拡張の属性並列実行のため
に拡張されたFORTRAN言語は通常、主プログラム
またはタスクがサブタスクの開始、呼出し、終了を行な
うことを可能にする言語を含む。タスクが開始され、終
了されることは比較的まれであると予想される。しかし
、−度開始されると、タスクは繰り返して呼び出される
。呼出しは、呼出しタスクが続いて明示的にサブタスク
の完了を待つことが必要な形を取ることができる。ある
いは、呼出しタスクによる明示的待機を伴わずにサブタ
スクが実行を完了できる形を取ることもできる。
FORTRANプログラムは一般に従属タスクの作成、
操作、及び最後に削除を伴う。呼出しタスクと呼び出さ
れたタスクの間で共用されるデータを除き、かつ2つの
タスクにより共同して操作されるファイルを除き、1つ
のタスクの実行は別のタスクから独立し、かつ別のタス
クの実行に影響を及ぼすことができない。
共用されるデータの指定は、暗示的でも明示的でもよい
。指定は静的で宣言的でも、動的で実行可能でもよい。
本発明は共用ブロックを共用するための明示的、動的、
実行可能な指定を提供する。
そのように指定され、かつ並列タスクが作業を割り当て
られる時点で明示的に指定されたデータのみが複数のタ
スクで操作できる。このため、並列プログラムを分割す
るための便利で安全な機構がもたらされる。一方の側で
実行される内部処理を他方の側が知る必要はなく、他の
プログラムが使用できるように並列プログラムをカプセ
ル化するための機構がもたらされる。
D2.言語拡張 FORTRANの並列実行用の言語は、インライン言語
拡張またはアウト・オブ・ライン拡張のいずれかとして
分類することができる。インライン言語はサブプログラ
ム内のステートメント本位であり、サブプログラムの部
分が共同して並列に実行できるようにする。一方、アウ
ト・オブ・ライン言語はサブプログラム本位であり、呼
び出されたサブプログラム及びそれらが呼び出すことが
できる任意のサブプログラムを独立して並列に実行でき
るようにする。
D3.インライン言語拡張 問題の拡張ニハ、PARALLEL  LOOP及びP
ARALLEL  CASESが含まれる。
主ステートメントのサポートを容易にするために必要な
場合は、他の拡張についても説明する。これらの拡張は
、幾つかの従来技術の記述に出ているDo−ACRO8
SまたはDo−ALL拡張に類似している。
次に第1図を参照すると、PARALLELLOOPス
テートメントの一例が示されている。
PARALLEL  LOOPステートメントは、ステ
ートメント100を含むステートメント全体に渡るルー
プの繰返しがすべて並列に実行されるように指示する。
r 1ndex J、r 1initハr iterm
J及びriincrJの値は周知のDOループ定義値で
ある。
PRIVATEステートメントは、ループの実行に関係
する各プロセッサで幾つかのスカラーが操作され、維持
されることを指定するので、主ステートメントのサポー
トを容易にする。そのような局所変数または専用変数が
必要となるのは、各プロセッサがそれ自体の状態を維持
しなければなら・ない場合である。
DOF I R8Tステートメントは任意選択である。
このステートメントは、ループの繰返しの実行を開始す
る前に、プロセッサによって実行されるステートメント
・グループを区切るために存在する。一般には、プロセ
ッサは、DOFIR8Tを使って、関連ステートメント
でそれ自体の状態を初期設定する。
DOFINALステートメントも同様に任意選択である
。このステートメントは、実行のために利用できるルー
プの繰返しがもう残っていないときに、プロセッサによ
って実行されるステートメント・グループを区切るため
に存在する。一般には、プロセッサはDOFINALを
使って、累積されたプロセッサ専用変数を周囲のサブプ
ログラムの永久変数に変換する。
DOFIR8T及びDOFINALステートメントはど
ちらも、ロックされたステートメント内で一度に1台の
プロセッサしか実行しないことを保証するため、LOC
K指定を付加することができる。こうすると、プロセッ
サ専用でない情報が確実に更新される。
最後に、DOEVERYステートメントはDOループの
通常の本体を含むステートメントを区切る。これらのス
テートメントは、ループの各繰返しごとに、ループの実
行に関係する任意の1台のプロセッサによって実行され
る。
第1図では、可変SUMは、ループを実行する各プロセ
ッサ専用である。この例では、各プロセッサはその和を
0に初期設定する。すべてのプロセッサは次にループの
繰返しを求めて競合する。プロセッサがループを実行す
るとき、実行中にその専用の和を加算する。最後に、各
プロセッサはロックの制御下で、その専用部分和を大域
変数TOTALに加える。
次に第2図を参照すると、PARALLELCASES
ステートメントの一例が示されている。
これはインライン言語拡張の第2の要素である。
PARALLEL  CASESステートメントはコー
ド・ブロックの並列実行を許可する。この場合も、PR
IVATEステートメントを使って各関連プロセッサが
局所変数を維持できるようにすることができる。
各ケースは独立して実行することができる。しかし、ケ
ースは、先行する他のケースの完了後までその実行を任
意に延期することができる。第2図に例示されたケース
・リストは、ステートメント・グループの任意の非周期
的グラフがどのように対応するケース・ステートメント
に変換されることが可能かを示す。各ケース・ステート
メントは、それが依存する他のケース・ステートメント
のリストを含む。ケースは、すべての依存関係が溝たさ
れたとき実行される。
コンパイラは、経過実行時間が最小になるように設定さ
れた順序で、PARALLEL  CASESステート
メント内のケースを翻訳する。コンパイラは、それを行
なうため、まずWA I T I NG−FOR−CA
SES文節の連鎖によって指定される最長の実行経路と
、各ケースを実行するのに必要な時間を識別する。コン
パイルされたコードは、実行されるとき、最長の時間を
必要とするものが最初に開始される順序で、経路に実行
を開始させる。このようにして、経路を動的に実行する
のに必要な時間が最小になる。プロセッサが使用可能に
なるや否や、より短い他の経路が実行を開始する。
再び第2図を参照すると、各ケースは、直線コード、ネ
ストされたループ、ネストされたケース等のFORTR
ANステートメントを含むものと仮定する。図のコード
断片、すなわちケース1.2.3.8.7及び9は直ち
に実行を開始する。ケース4は、ケース1及び2が完了
した後で初めて実行を開始する。同様にケース5は、ケ
ース1及び3が完了した後で初めて実行を開始する。ケ
ース8はケース5及び7の完了を待たなければならない
次に第3図を参照すると、通常のFORTRAN  D
oループが示されている。コンパイラに自動並列化が指
示されるこの状況では、コンパイラは、従属関係解析を
用いて、ネストされた1組のループのうちのどのループ
がPARALLELLOOPステートメントまたはPA
RALLELCASESステートメントへの変換に適し
ているかを確認する。従来技術は、DOループが、並列
化されたループに変換できることを教示しているが、並
列化されたケースも同様に可能な変換であることは教示
していない。
次に第4図ないし第6図を参照すると、第3図のDOル
ープのPARALLEL  LOOPまたはPARAL
LEL  CASESlまたは両方への別の変換が示さ
れている。すなわち、第4図は、PARALLEL  
LOOPに変換されたDoループを例示し、第5図は、
PARALLEL  CASESに変換されたDoルー
プを例示し、第6図は、各々がPARALLEL  L
OOPである一群のケース・ステートメントを例示する
減少を実現するため、ソース・コードではなくオブジェ
クト・コードへの直接変換が行なわれることに留意され
たい。第4図ないし第6図のソース・コード変換は単に
同系構文の例示にすぎない。
自動ベクトル化は自動並列化と共に実行できることに留
意されたい。単一ループを並列化しかつベクトル化する
ことが可能であり、その場合、複数のプロセッサがそれ
ぞれ同じループからのベクトル部分を実行する。あるい
は、ネストされた1組のループの外部ループを並列化し
、内部ループをベクトル化することもできる。その場合
、外部ループの実行には複数のプロセッサが寄与できる
が、ベクトル化された内部ループは並列外部ループの特
定の繰返しの間、単一プロセッサ上で完全に実行される
。さらに、ベクトル・ループでも並列ループでもないそ
の他のループを、並列ループ及びベクトル・ループのこ
のネスティング内に散在させることもできる。これらの
どの状況においても、使用可能なすべてのプロセッサが
単一の並列プログラムの計算に寄与するので、それらの
プロセッサのベクトル実行能力が活用される。
D4.アウト・オブ・ライン言語拡張 アウト・オブ・ラインFORTRAN言語拡張は、タス
クがサブタスクの開始、スケジューリング、指名、待機
、終了を行なわせる。アウト・オブ・ライン拡張は、そ
の現在のデータ環境内でのサブプログラム内のステート
メントの実行よりもむしろ、別々のデータ環境でのサブ
プログラム全体の実行本位である。もちろん、アウト・
オブ・ライン・タスクはインライン構成を含むことがで
きる。
次に第7図を参照すると、アウト・オブ・ライン言語の
使用の実例が示されている。このプログラムは始めに○
RIGINATEステートメントを使ってタスク・グル
ープを開始する。このステートメントの各実行ごとに、
新しいデータ環境をもつ新しいタスクが作成されるが、
タスクに作業が割り当てられることはない。各実行ごと
にそのタスクに対する識別子も返されるが、この識別子
は、この例ではアレイIDTASKに記憶される。プロ
グラムは引き続き、DISPATCHステートメントを
実行して、これらのタスクに作業を割り当てる。D I
 5PATCHxテートメントは、並列して実行しよう
と意図した各作業要素ごとに1回実行される。その効果
は、使用可能などのタスクにも作業項目を割り当てるこ
とであり、必要ならば、タスクが以前に割り当てられた
作業を完了するまで待つ。現在割り当てられている作業
を完了した最初のタスクに、次の作業項目が割り当てら
れる。
D I 5PATCHステートメントには、別のデータ
環境で呼び出されるサブプログラムの名前が含まれてい
る。続いて、WAIT  FORALLTASKSステ
ートメントを使って、割り当てられた作業がすべて完了
したことを確認する。最後に、開始されたデータ環境が
TERMINATEステートメントで終了され、再使用
のため記憶域が解放される。
したがって、タスクに作業を割り当てるにはタスクを開
始しなければならない。開始は独立したデータ環境を作
り出すだけであり、この比較的高価なハウスキーピング
の実行は1回だけにして、はるかに効率的な機構を使っ
て作業をデータ環境に割り当てるのが好都合である。デ
ータ環境に作業を割り当てるアウト・オブ・ラインFO
RTRAN拡張は、その環境内でどのようなサブルーチ
ンが呼び出されるかを指定し、以下のものを含む。
DISPATCHTASK 1task、 CALL;
ING 5ubx (argl。
arg2 、  ・・・) SCHEDULE TASK 1task、 CΔLL
IHG 5ubx (argl。
arg、2+  ・・・) タスク内のどのサブルーチンも呼び出すことができる。
各5CHEDULEステートメントは、対応するWA 
I Tステートメントを続いて実行することを必要とす
る。WA I Tステートメントの特定の形であるrW
AIT  FORTASKitaskJは、個々の特定
タスクの同期を可能にする。−殻間な形であるrWAI
T  FORALL  TASKSJは、すべてのタス
クの同期を単純化する。5CHEDULEステートメン
トは、サブタスクの呼出しプログラムがその完了を明示
的に待つことを必要とし、かつこの完了までサブタスク
が呼出しプログラムに結合されたままであることを必要
とするが、これと対照的に、DISPATCHステート
メントは、サブタスクが自動的に完了することが可能で
あり、したがって、対応する明示的WAITステートメ
ントが実行されることを必要としない(WAIT  F
ORALL  TASKSは依然として可能である)。
これらのアウト・オブ・ライン言語構成を用いると、ど
のようなFORTRANルーチンでもサブタスクを使用
することができる。したがって、FORTRANルーチ
ンは並列実行モードをとることができ、依然としてやは
り並列モードで実行・可能な他のルーチンを呼び出すこ
とができる。このことから、メンバーの各々が並列に実
行されるルーチンのライブラリを形成することができる
D5.動的結合 タスク間での共通ブロックの共用が動的状態にされるこ
とが、本発明の一実施態様である。このことは、5HA
RING文節及びCoPYING文節をアウト・オブ・
ライン言語構成5CHEDULEまたはDISPATC
Hに付加することにより構文的に実現される。
5HARING (commonL common2.
 …)COPYING (commonL commo
n2. m)COPYIHGI (commonL c
ommon2+ ・・・)COPYINGO(co++
+n+onl、 common2. ・・・)SHAR
INGは、リストされた共通ブロックを、呼び出された
タスクの現在の5CHEDULEまたはD I 5PA
TCHの間で共用するように指定する。重要なことは、
共通ブロックの同じコピーが両方のタスクによってアク
セスされることである。C0PYINGは、スケジュー
リングまたはタスク指名前に呼出しプログラムの共通ブ
ロック・コピー中のデータが、呼び出されたプログラム
の共通ブロック・コピーに複写され、スケジューリング
または指名されたタスクがその実行を完了した後に、呼
び出された側のコピーが呼出し側のコピーに複写される
ように指定する。各々の側が、複写された共通ブロック
のそれ自体の専用コピーをメモリ内の別々の位置に有す
ることは自明である。共通ブロックの共用及び複写は次
のように示すことができる。
5CHEDULE ANY TASK 1task。
5HARING (parama、 paramb)。
C0PYIHGI (valuea)。
CALLING 5ubz この断片は、2つの共通ブロックrparamaJ及び
rparambJを呼出しタスクと呼び出されるタスク
の間で共用するように指定し、さらに、1つの共通ブロ
ック、すなわちrvalueaJを呼出しタスクから呼
び出されたタスクに複写するように指定する。これらの
活動は5CHEDULEステートメントの実行と同期す
る。
呼び出されたタスクは、タスクがそれ自体のサブタスク
をスケジューリングまたは指名するとき、共通ブロック
がそれらのサブタスクと共に共用される5CHEDUL
EステートメントまたはDISPATCHステートメン
トを含むことができる。
同様に、呼び出されたタスクは、その1つまたは複数の
サブタスクに、または1つまたは複数のサブタスクから
共通ブロックを複写する、5CHEDULEステートメ
ントまたはDISPATCHステートメントを含むこと
ができる。どちらの場合でも、呼び出されたタスクによ
って操作される共通ブロックは、その中で共用にされる
共通ブロックでも、またはその中で共用にされない、す
なわちそれ専用の共通ブロックでもよい。
共通ブロック・アドレスは実行中に動的に結合されるこ
とに留意されたい。各サブタスクがスケジューリングま
たは指名されるとき、サブタスク内の共通ブロックを指
すポインタが実行中に動的に結合される。各サブタスク
がスケジューリングまたは指名されるとき、サブタスク
内の共通ブロックを指すポインタは、サブタスク内の共
通ブロックの局所コピーを指すように、あるいは共通ブ
ロックが共用されているとき、呼出しタスクにとって既
知の共通ブロックのコピーを指すように、必要に応じて
更新される。後者の場合、共通ブロック・コピーは呼出
しタスク専用のこともあり、あるいはそれを呼び出した
タスクによって呼出しタスクと共用されることもある。
以上のことから、タスクがサブタスク内で並列実行を呼
び出す各時点で、タスク自体と関連サブタスクの間での
データの共用をタスクが完全に制御できるようになる。
通常のサブルーチン呼出しがその呼出しの持続期間中だ
けアーギュメント・リストを結合するという状況に類似
して、本発明の方法の一実施態様としてのこの動的結合
は、タスクのスケジューリングまたは指名の持続期間中
だけ共通ブロックの連絡を結合する。同様に、異なるサ
ブルーチンが異なるアーギュメントで呼び出すことがで
き、または同じサブルーチンが異なる時点に異なるアー
ギュメントで呼び出すことができるのとちょうど同様に
、また、ちょうど各アーギュメントが、多分、他のすべ
てのものと異なる目的で設計されているのと同様に、異
なるスケジューリングまたは指名を異なる共用リストま
たは複写リストで実行することが可能である。
この機構により、呼出しタスクがそのサブタスクと連絡
するために使用する専用共通ブロックを、それらのサブ
タスクの任意のまたはすべてのものと共用することが可
能である。そのため、サブタスクの作業を制御する際に
この機構は有用である。
しかし、このように呼出しタスクが使用する共通ブロッ
クは、そのタスク専用のままにすることが可能なので、
呼出しタスクがそのサブタスクの作業を調整するときに
、他の独立タスクの動作が呼出しタスクを妨害すること
はない。実際にそれ自体が同様なサブタスク処理を実行
する独立したタスクが他に存在し、各タスクがその専用
共通ブロック・コピーを使ってそれ自体のサブタスクと
のそれ自体の連絡を容易にすることが可能である。
したがって、共通ブロックのインスタンスとサブタスク
の活動化の間の関連づけは動的に行なわれる。従来技術
で行なわれていた、共通ブロックの定義は完全に大域的
であるかまたは完全に専用的でなければならないという
仮定は誤りであることが判明した。したがって、並列実
行のネスティングが可能になり、各実行レベルが共通ブ
ロックを介して独立してそのサブレベルとそれぞれ連絡
することができる。
D6.並列実行、及びインライン・コードとアウト・オ
ブ・ライン・コードの統合の実施態様 FORTRANの上記拡張を用いると、通常なら逐次的
または直線的であるはずのコードで並列処理の指定が可
能になる。以下の諸節では、共用メモリ、多重プロセッ
サ構成でのオブジェクト・コード構成の処理の様々な実
施態様について考察する。
第1に、並列実行の新しい時点を識別する各並列言語構
成は、並列作業項目(PWI)と呼ばれるエンティティ
の動的作成をもたらす。PWIはレジスタ・セットに結
合され、並列作業の発生時点を識別する情報、並列実行
のための目標命令ストリームのアドレス、及びその他の
制御情報を含む。
第2に、この並列作業の実行で使用されるプロセッサの
数は変動することが可能である。プロセッサが1つの並
列作業を終了し、したがって、別の並列作業を開始する
用意ができたとき、プロセッサはPWIの待ち行列の最
上部のPWIを取り上げてそれを実行する。新しいPW
Iはコード・ストリームのインライン部分でも、アウト
・オブ・ライン部分でもよい。このコード・ストリーム
部分はさらに並列作業を作成し、その結果、PWIの待
ち行列にさらに要素が追加される。PWIの実行が完了
した時点で、PWIは削除される。
この言語拡張構成の1つの結果は、無限のまたは任意の
大量の並列作業を作成する能力である。
オペレーティング・システムがこのことを検出すると、
そのような並列作業に対する応答が、オペレーティング
・システム内での並列実行のための候補を表わすために
使用される従来の資源の作成である場合、オペレーティ
ング・システムをあふれさせる可能性があるといえる。
IBMオペレーティング・システムにおけるそのような
確立された機構の例は、MVSオペレーティング・シス
テム用のタスク制御ブロック(TCB)またはVMオペ
レーティング・システム用の仮想計算機内の仮想プロセ
ッサである。並列度を固定し、このあぶれの発生を防止
するため、望ましい並列実行の度合を指定するパラメー
タがプログラム開始時に処理される。オペレーティング
・システムは、その度合がシステム容量よりも小さくな
るようにこの指定を調整することができる。オペレーテ
ィング・システムはその後この程度にTCBまたは仮想
プロセッサを作成することができる。
これらのTCBまたは仮想プロセッサ上で実行されるよ
うに割り当てられるプログラムは、並列作業項目の待ち
行列を調べて待ち行列の1番上の項目を実行するプログ
ラムである。したがって、物理的に試みられた並列実行
の度合が、PWIの待ち行列を処理するために作成され
るTCBまたは仮想プロセッサの数によって制御される
。プログラム中で論理的に可能な並列実行の度合はPW
Iのこの待ち行列によって表わされる。限界では、1台
のプロセッサが各PWIを処理することができる。明ら
かなように特定のプログラムのためにPWIを実行する
TCBまたは仮想プロセッサは、使用可能な実プロセツ
サ上での実行のため、システム内の他の作業と競合する
。したがって、システム内の他の作業が減少するに従っ
て、この並列プログラムに割り当てられた特定のTCB
または仮想プロセッサを実行するためにより多くの実プ
ロセツサが使用可能になり、並列プログラムが受ける並
列実行の度合を高めることができる。
プロセッサに対して作業をスケジューリングする態様は
従来技術でよく理解されているが、ここで重要なことは
、すべてのインライン実行及びアウト・オブ・ライン実
行、ならびにプログラム内の多数並列性レベルにわたる
実行を、この単一の作業待ち行列上で統合できることで
ある。データ環境間の競合は、環境間でのデータの共用
をこれらのデータ環境に動的に関係する実行構造に合致
するように範囲を限定することによって制御される。実
行構造はPWIの作成及び削除と待ち行列からのそれら
の実行によって表わされる。したがって、並列サブタス
クの論理構造とサブタスク間でのデータ共用の論理構造
は、どちらもPWIの作成及び削除と待ち行列からのそ
れらの実行によって制御される。作業の物理的並列実行
は、使用可能な任意のプロセッサが待ち行列からこれら
のPWIを選択することによって制御される。
D7.共通ブロックに同時にアクセスするタスク間の競
合を減少させる説明例 第8図及び第9図は、本発明の方法を教示するための一
例である。この例は、共通ブロックの動的結合によって
どのように共通ブロック間の競合が減少し、並列実行が
増大するかを示している。
共通ブロックの必要記憶容量が動的結合によってどのよ
うにして減少できるかをも示している。
第8図及び第9図は、主プログラムと2つのサブプログ
ラムE IGEN及び5OLVEを示す。
この説明例にとって必要な部分のみが示されている。主
プログラムの実行は、3つの主要部分に分かれている。
(1)変化しない若干の初期設定データを計算する。
(2)次に、異なるN組の値の各々について1組の値を
読み取り、サブルーチンEIGENを呼び出してその1
組の値に固有の若干の結果を計算する。
(3)最後に、すべての計算が実行された後、プログラ
ムの出力を表わす若干の計算値を報告する。
サブルーチンE IGENは同様に3つの部分に分かれ
る。
(1)その呼出しの対象であるマトリックスの若干の関
数を計算する。
(2)次にマトリックスの各行についてサブルーチン5
OLVEを1回呼び出して、その行について若干の追加
関数を計算する。
(3)最後に、その計算の出力を表わす若干の結果要約
を出力アレイに記入する。
サブルーチン5QLVEは、この例では、1行のデータ
についての関数を計算するだけである。
これらのルーチンは、第7図に示した方法と同様な方法
を使って並列化された。主プログラムは、多数の独立し
た入力値セットについてE I GENを並列して呼び
出そうとするとき、適当な数のサブタスクを開始する。
この例では、その数は5であり、いずれにしてもこれは
パラメータである。
これらのサブタスクは、並列して実行されるように、独
立して非同期的に指名される。主プログラムが、その最
終出力を準備することができるように、すべての並列実
行が完了していることを確認する必要があるときは、待
機ステートメントを実行して、全サブタスクが完了する
まで待たせる。
全く同様にして、サブルーチンE I GENは、その
マトリックスの行を評価するために5OLVEを呼び出
そうとするとき、適当な数(この例では3であるが、い
ずれにしてもパラメータである)のサブタスクを開始す
る。それらの行を実行するため、サブタスクが繰り返し
指名される。最後に、E I GENがその最終出力を
記入する前に5QLVEに対するすべての呼出しが完了
することを保証するため、待機が実行される。
共通ブロックのすべてがプログラムに対してよりM  
VS  FORTRAN動的共通ブロックトして宣言さ
れることに留意されたい。すなわち、共通ブロックのた
めの記憶域が必要とされるサブルーチンが開始されるま
で、これらの共通ブロックの各々について記憶域の物理
的割振りが延期される。したがって、たとえば、主プロ
グラムが実行を開始するときだけ、その宣言された3つ
の共通ブC’ ツクINIT、DATA及びEVALが
割り振られる。
上記のことを前置きとして、次に、プログラム実行がど
のように展開し、実行中に共通ブロックがどのように動
的結合されるかについて考察する。
始めに、主プログラムを含むモジュールがオペレーティ
ング・システムによりロードされ、プログラムの実行が
開始される。主プログラムが開始されると、プロローグ
がライブラリ・ルーチンを呼び出して、共通ブロックI
NIT1DATA及びEVALを主タスク内で割り振ら
せる。主プログラム内のこれらの共通ブロックの各々を
指すポインタが、割り振られた実際の記憶位置を指すよ
うに更新される。これらの各共通ブロックはこの時点で
は、主タスク内の専用共通ブロックである。
Doループ10はアレイH1T及びPを計算して、共通
ブロックINITに対して新たに割り振られた記憶域に
入れる。これらのアレイは、実行中に動的に計算される
が、それにもかかわらず、図では、EIGEN及び5O
LVEに対するすべての呼出しに対して不変である。デ
ータが計算されて、主タスクが所有し現在は主タスクの
専用となっている共通ブロックINITに入れられる。
次に、D○ループ20が5つのサブタスクを開始する。
この時点では作業はサブタスクに割り当てられず、また
、サブタスク内の共通ブロックが動的共通ブロックであ
ると宣言され、かつ記憶域の割振りを必要とするルーチ
ンがサブタスク内で実行されていないので、共通ブロッ
クに対して記憶域は割り振られない。個々のサブタスク
のための個々のデータ環境内の共通ブロックを指すポイ
ンタは更新されないで、0を指したままである。
次に、Doループ30が実行され、計算が実行される独
立した値セットの各々について1回の反復を実行する。
このループは、主プログラム専用共通ブロックDATA
内のアレイX及びY内に1組の値を読み込むことから始
まる。ループは次に他のマトリックスAVALを計算し
て、この専用共通ブロックに入れる。この時点で、アレ
イX1Y1及びAVALはサブルーチンE I GEN
による以後の計算を受ける用意ができている。
主プログラムは次にサブルーチンE I GENt−並
列して呼び出そうとする。主プログラムは、その専用共
通ブロックDATAが次の1組の値を計算する用意がで
きた状態にするため、X1Y及びAVALに対するこの
1組の値をE I GENに転送しようとする。主プロ
グラムはさらに、あらかじめ計算されて共通ブロックI
NITに入れられていた、初期設定された不変データの
すべてに、E I GENを実行する並列サブタスクが
アクセスできるようにしようとする。最後に、主プログ
ラムは、並列サブタスクが共通ブロックEVALの既存
の主プログラム・コピーにアクセスできるようにしよう
とする。なぜならば、主プログラムは、E I GEN
の実行によって生じる結果をこの場所で見つけることを
期待するからである。
これらのステップはすべて図示のDISPATCHステ
ートメントによって実現される。
DISPATCHANY TASK ITASK。
5HARING (IHIT、EVAL)。
*    C0PYINGI(DATA)。
CALLING EIGEN(=K) このDISPATCHはまず、呼出しプログラム(主プ
ログラム)にとって既知の共通ブロックINIT及びE
VALを、呼び出されたサブタスク(このデータ・セッ
トについてE I GENを実行するサブタスク)と共
用するように指定する。
この共用動作には、これら2つの共通ブロックを指すサ
ブタスク内のポインタが呼出しタスク内の共通ブロック
の位置を指すようにさせることが必要である。
サブタスク内の共通ブロックが静的な共通ブロックとし
て宣言されていた場合は、連係編集プログラム及びプロ
グラム・ローダが再配置を実行するときにそれらの中で
使用される通常の機構によってプログラムがメモリにロ
ードされた後、サブタスク内の全ポインタの位置は既知
となるはずである。この場合、ポインタはサブタスク内
の共通ブロックの静的専用コピーを指すことになる。ま
たこの場合、ポインタは、呼出しタスク(この例では、
主プログラムのプロローグが実行されたときに動的共通
ブロックに対して割り振られた記憶域)にとって既知の
共通ブロックのコピーを指すように調節されることにな
る。ただし、この場合は、たとえば図示のプログラム中
ではサブタスク内のこれら共通ブロックの静的専用コピ
ーが決して参照されないとしても、これらのコピーに対
して記憶域が割り振られているはずであることに留意さ
れたい。
しかし、実際には、共通ブロックはサブタスクで動的な
ものとして宣言される。この場合、共用動作には、指定
された共通ブロックが現在共用されていることの記録が
行なわれることだけが必要である。続いて、サブルーチ
ンE IGENのプロローグがこれらの動的共通ブロッ
クを割り振ろうと試みるとき、割振りの試みは拒否され
る。共通ブロックに対して記憶域を割り振り、EIGE
N内のポインタを割り振られた記憶域を指すように更新
する代りに、ライブラリ・ルーチンは単に、主プログラ
ムのために作成され、その現在のタスク指名のためにE
 I GEN内で共用にされる共通ブロックの専用コピ
ーを指すように、EIGEN内のポインタを変更するだ
けである。共通ブロックの専用コピーは割り振られてい
ない。
しかし、静的として指定されても動的と・して指定され
ても、サブルーチンE IGENは、共通ブロックの主
プログラム・コピーを指すように更新されたE I G
EN内のポインタを介して共用される共通ブロックにア
クセスする。
図示のDI 5PATCHステートメントは次に、共通
ブロックDATAを、呼出しプログラム(主プログラム
)から、呼び出されたサブタスク(このデータ・セット
についてEIGENを実行するサブタスク)に複写する
ように指定する。それには、共通ブロックの専用コピー
がサブタスク内に存在することが必要である。共通ブロ
ックが静的である場合は、コピーが既に存在する。共通
ブロックが動的でかつそれを割り振ることを求めた以前
の要求の結果として既に割り振られてはいない場合は、
サブタスク用の共通ブロックのコピーが複写の準備のた
め割り振られる。サブタスク内のポインタが共通ブロッ
クの専用コピーを指すように更新される。次にデータが
2つのタスク間で複写される。
最後に、このタスク指名用の各共通ブロックの正しいコ
ピーにアドレスするようにポインタが更新された後、サ
ブタスクは入口点でE IGENに入り、非同期的に実
行できるようになる。コンピュータ・システムがプログ
ラムの実行のため使用可能な2台以上のプロセッサを有
する場合は、サブタスクの真の並列実行が開始できる。
図示の例では、1つのアーギュメント、スなわち主プロ
グラムによって評価されるN組のデータのうちの割り当
てられた1組のデータのインデックスKがE I GE
Hに渡される。E I GENはこのインデックスを使
って、その計算結果を、共用された共通ブロックEVA
L内のN要素ベクトルEVEC1及びNXN要素マトリ
ックスEMATの対応する位置に入れる。主プログラム
は実行を継続し、多分、EIGENでの使用前にKを更
新するので、Kを含むワードの位置ではなく、このイン
デックスにの値がアーギュメントとしてEIGENに渡
されることが必要である。アドレスではなくて値を渡す
というこの要件の例は、構文゛=に″である。
DOループ30の6回目の繰返しでは、5つのタスクし
か開始されなかったため、DISPATCHを実行すべ
きタスクがただちに使用可能ではない可能性がある。こ
の場合、主プログラムは、指名されたサブタスクが完了
するまで待つ。完了した時点で、主プログラムは再開し
、続行する。
Doループ30の後で、ステートメント40で、すべて
のサブタスクが完了したことを確認するためにWAIT
  FORALL TASKSが実行される。最後に、
ステートメント50で、サブタスクによって計算されて
、アレイEVEC及びEMAT (どちらもタスク指名
ステートメントによってサブタスク内で共用にされる共
通ブロックEVAL内にある)に入れられるデータが書
かれる。
この例では、主プログラムは、EIGENの5分割並列
実行でその作業を最もよく実行することができると判定
した。主プログラムは2つの共通ブロックをサブタスク
内で共用にした。主プログラムは、各サブタスクに専用
の第3の共通ブロックにデータを複写させた。
次に、サブルーチンE I GENでの処理について考
察する。上述のように、論理の流れは主プログラムでの
それとほぼ同様である。したがって、その詳細について
は説明しないが、1つの相違点に留意されたい。各サブ
タスクE I GENは、それが使用する値を含む共通
ブロックDATAの独立した専用コピーを用いて動作す
る。これらのサブタスクは、他のサブタスクを使用する
ことにより、その計算を最もよく実行することができる
と判断した。各サブタスクはその専用共通ブロックDA
TA内のデータをそれ自体の他のサブタスクと共用する
必要がある。しかし、各サブタスクは、このデータが他
のサブタスクによる変更を受けないことを知っていなけ
ればならない。
したがって、共通ブロックDATAはサブルーチンE 
I GEN専用でなければならないが、各サブルーチン
EIGENは、5OLvEを実行するそれ自体のサブタ
スクとDATAを共用することができなければならない
。このことは、本発明のもとてE I GEN内の図示
のDISPATCHステートメントによって実現される
DISPATCHAt(Y TASK ITASK。
:   5HARING (INIT、EVAL、DA
TA)。
CALLII(G 5OLVE(=に、=J)このステ
ートメントは、EIGENにとって既知の3つの共通ブ
ロックをさらに、タスク指名されたサブタスク内で共用
にするように指定する。
このE IGENのサブタスクの1つが選択される。
この選択されたサブタスク内のポインタは、EIGEH
にとって既知の共通ブロックのコピーを指すように更新
される。共通ブロックのうち2つ、すなわちINIT及
びEVALについては、これらのコピーは、主プログラ
ムによりE I GEN内で共用にされた共通ブロック
である。第3の共通ブロック、すなわち、DATAにつ
いては、そのコピーは、EIGENにとって既知の専用
コピーである。この更新の論理は、動的であれ静的であ
れ、EIGENがタスク指名されたとき上記で説明した
論理と同じである。
これらのタスク指名後に、EIGENを実行するすべて
のサブタスクについて5QLVEを実行するサブタスク
のすべてが、主プログラムのために割り振られた共通ブ
ロックINIT及びEVALから取り出し、かつそれら
に記憶することができること、及びこれら2つの共通ブ
ロックのコピーが1つだけ存在することが明らかなはず
である。
同様に、共通ブロックDATAのコピーが6つ、すなわ
ち、主プログラム内に1つとEIGENを実行する5つ
のサブタスクの各々に1つずつ存在することも明らかな
はずである。最後に、各5OLVEサブタスクは、それ
を指名したEIGENサブタスクが所有するDATAの
コピーにアクセスできることも明らかなはずである。
要するに、本発明によれば、各E IGENは専用デー
タを付与されて、その専用データを並列に実行し、かつ
そのサブタスクと共用することを決定することができる
。これは、データに対する固定された大域を断定、また
は固定された専用指定では不可能であった。本発明によ
り、EIGENは、並列実行を利用することができ、か
つ並列領域ならびに非並列領域から呼び出されることが
できるライブラリの1要素になることができる。
従来技術によれば、共通ブロックが完全に大域的または
完全に専用的であることが可能な場合、2つの可能性が
認められる。両方共、従来技術における動的結合の欠如
によって起こる競合の特質を示す。一方、共通ブロック
DATAは大域的として処理することが可能であった。
この場合、EICEHの1回の実行の動作をEIGEN
の他のすべての実行に対してインターロックしなければ
ならないことになる。言い換えると、この場合は、EI
GENのコピーが一度に1つしか実行できず、主プログ
ラム内でプログラミングされた並列性が実現できなくな
る。主プログラムは直列にされ、E IGEN内でのみ
並列性が保持される。その結果単一レベルの並列実行が
もたらされる。
第2の可能性は、共通ブロックDATAを完全に専用的
にすることである。すなわち、E工GENサブタスクは
その共通ブロックをその5OLVEサブタスクと共用で
きない。EIGENサブタスクは、共通ブロックDAT
Aの要素をアーギュメントとして送り、より長いパラメ
ータ・リス十で5QLVEを呼び出すことを選ぶことが
できる。
しかし、実際には、これはプログラマにとって非常な負
担である。共通ブロックは宣言された数百の変数及びア
レイを含むことがある。この種のリストを書き、プログ
ラムを維持するときそれらの同期を保つことは、診断及
び維持が非常に難しいプログラムを作成することである
。実際、共通ブロックの1つの目的は、異なるデータ要
素群を集めて1つの名前のついたエンティティとし、そ
れらが全体として扱えるようにすることである。その個
々の専用要素はサブタスクに対するアーギュメントとし
て共用できるが、完全なエンティティとして専用共通ブ
ロックがサブタスクと共用することはできないと主張す
る・のは、本発明がこの問題を解決すると強く主張する
ことになる。
上記の例では、VS  FORTRANの動的共通割振
り機構と本発明の動的共通結合機構を組み合わせると、
並列実行及び共通共用の存在下で共通ブロックのために
割り振られる記憶域が節約されることがわかった。具体
的には、サブタスクが動的共通ブロックとして指定され
た共通ブロックを有し、上位タスクがその共通ブロック
をサブタスク内で共用にするとき、たとえそのサブタス
クが共通ブロックの要素を取り出し記憶するとしても、
共通ブロック用の記憶域をサブタスク内で割り振る必要
はない。上位タスクのために割り振られた共通ブロック
(または、上位タスク内で一時的に共用にされた共通ブ
ロックのコピー)を指すようにサブタスク内のポインタ
を更新させることにより、サブタスク内で共用にされた
共通ブロックのコピーに対する取出し及び記憶が直接行
なわれる。
上記の例では、わかりやすいように、各EIGENサブ
タスクがそれ自体の1組の5QLVEサブタスクを開始
し、指名するものとして示した。
これは厳密に必要なことではない。そのようなサブタス
クのプールを主プログラムによって作成しておくことも
できる。その場合、各E IGENはプールから使用可
能な5OLVEサブタスクを選択することになる。E 
IGENは、本発明のもとでは、必要なデータをサブタ
スクに伝えるために必要とされる共通ブロックをその選
択されたサブタスク内で共用にすることができる。した
がって、専用のサブタスク・グループを割り振る必要は
ない。このことも記憶域の節約をもたらす。
第8図及び第9図の説明例は、共通ブロックをどのよう
に並列タスク処理システムの動的実行構造に整合するよ
うに動的に結合できるかを示す。
この例は、この機構により可能となるプログラミングの
1つの特定の例を示したものにすぎない。
計算が多層の並列処理で実行されるように設計されてい
るとき、この機構の必要性はますます明らかになる。
D8.実施態様 FORTRANコンパイラでは、拡張言語ステートメン
トを認識し処理することが必要である。コンパイラは、
新しい言語ステートメントを解析し、トークン化し、中
間言語に変換し、多分、最適化し、最後に実行可能コー
ド・シーケンスに変換できるように変更しなければなら
ない。この処理の多くは従来技術で充分にわかっている
新しいアウト・オブ・ライン言語ステートメントは、F
ORTRANライブラリに追加された新しい機能に変換
し、かつそうした新しい機能に関する呼出しとして処理
することができる。これらの変換の幾つかは簡単であり
、たとえば、WAIT  FORA、LL  TASK
Slt、全タスクニ対する待機を実行するように設計さ
れたライブラリ内のルーチンに関する呼出しに容易に変
換可能である。他のものはもっと複雑である。5CHE
DULEステートメントは、5HARING1C0PY
ING、C0PYINGI及びC0PYINGoなどの
(ただし、それだけに限定されない)その任意選択文節
、ならびにその強制文節CALLINGを含むが、非常
に複雑なアーギュメント・リストを備えたライブラリ・
ルーチンに対する単一呼出し、またはそれぞれステート
メントの1つの構成要素と関連する処理を実行し、かつ
簡単なアーギュメント・リストを備えた異なるライブラ
リ・ルーチンに対する一連の呼出しのいずれかに変換す
ることができる。
たとえば、5HARINGを実現するためのルーチンは
、ソース・プログラムの5HARING文節で指定され
た共通ブロックのリストを備えることになる。”・・・
、5HARING (A、BB、CCC)、・・・″等
の文節は、”CALL PTSHAR(A、BB、CC
C)”に変換できる。
コンパイラの側からそのような変換を行なうと、新しい
言語拡張の処理が簡単になる。
アウト・オブ・ライン・プログラミング拡張は、幾つか
の理由で、一連のサブルーチン呼出しではなく新しい言
語ステートメントで具体化することが好ましい。
第1の理由は、そのすべてのオプションを含めてタスク
指名等の処理の内部的実行を記述するのに必要なアーギ
ュメント・リストの全体が、非常に複雑で、非常に変動
しやすいことである。プログラマは、プログラミングさ
れる並列アルゴリズムにではなく、それを内部的にサポ
ートするために必要な細部に関係するオペランドの数が
多いことに当惑させられることになる。
第2に、スケジュール等の処理を単一ステートメントで
記述するとき、コンパイラはステートメント全体を調べ
、通常なら検出が難しいエラーを診断することができる
。通常なら、エラー検出には、多分関連のないステート
メントが散在する多数のステートメントの全体にわたっ
て独立したサブルーチン呼出しを相関させることが必要
となる。
第3に、共通ブロックの文字名等の項目は、アーギュメ
ントとして渡される場合、特別な区切り文字を必要とし
、プログラマの負担を増大させ、さらにプログラマの意
図を不明確にする。言語に組み込んだとき、そのような
区切り文字は必要でない。5HARING (A、BB
、CCC)はGALL  PTSHAR(“A“、’B
B’、’CCC’)よりも読み書きが容易であり、かつ
頭で評価し易い。
第4に、コンパイラはプログラマが発見または維持する
ことが困難な情報を使用でき、それをライブラリに渡す
ことが可能である。−例は、任意のアレイ及びスカラー
を含む共通ブロックのバイトの全長であり、アレイの寸
法決定がパラメータによって供給されるか、または含ま
れたファイルによってコンパイル中に供給されるときに
は一層そうである。
第5に、プログラマが異なる場所で異なる数のアーギュ
メントを用いてサブルーチンを呼び出すことは、FOR
TRANでは違法である。プログラマが、たとえば共用
すべき共通ブロックをリストするために呼出しを書くこ
とを強制された場合、呼出しは常に同数のアーギュメン
トを持たねばならず、このことは、異なる場所で異なる
共用をリストする必要がある場合はまったく役に立たな
い。
コンパイラ及びライブラリは内部的にはそのような規制
によって拘束されない。
インライン言語拡張は一層大きな負担をコンパイラに課
する。コンパイラは、たとえば新しいPARALLEL
  LOOP構造を認識し、その3ツノ部分(DOFI
R8T、DOEVERY及びDOF I NAL)の各
々に存在するステートメントを内部的に記録しなければ
ならない。コンパイラは新しいコードを挿入し、既存の
コードを記録して、以下のことを実現する実行構造をも
たらさなければならない。
繰返しの数を初期設定する; ループ上で有利に使用できるプロセッサの数を計算する
; そのような各プロセッサについて; 並列な作業項目を得てそれを初期設定し、(指定されて
いる場合はロックのもとて)DOF IR8T部分を実
行する; すべての繰返しが得られるまで、 次の繰返しくまたは繰返し群)を得、その繰返しくまた
は繰返し群)についてDOEVERY部分を実行する; (指定されている場合はロックのもとで)DOFINA
L部分を実行し、並列作業項目を解放する; すべてのプロセッサが完了するまで待つ。
簡単なりOループの場合よりもはるかに多くの論理が存
在することは明らかである。しかし、この構造の各部分
は通常の割当てステートメント、条件付き分岐ステート
メント、ライブラリ・ルーチン呼出し、及びその他の同
様な機構の変形によって内部的に表わすことができるこ
とも明らかなはずである。DOF IR8T及びDOF
INALのためのロッキング機構は、たとえば、そのセ
クションの始めにライブラリ・ロック・ロッキング・ル
ーチンに対する呼出しを挿入し、そのセクションの終り
にライブラリ・ロック解放ルーチンに対する呼出しを挿
入することにより、変換することができる。能率及び便
利さによってそのような変換の方法を決定する。
アウト・オブ・ライン言語の場合のサブルーチン呼出し
シーケンスに対する自然言語の利点に関する考察は、イ
ンライン言語にもあてはまり、多分さらに大きな効果が
ある。
PARALLEL  LOOPをサホートテキルように
既存の内部処理を変更できることにとっての主な例外は
、実行すべき次の繰返しくまたは繰返し群)を得る論理
である。この数は、ループを実行する全プロセッサにと
って大域的である。繰返し数のロード、追加及び記憶を
実行して、2台以上のプロセッサで同時に実行する場合
に、重複したインデックスが得る簡単なシーケンスでは
なく、比較−スワップ等の命令を使用して各インデック
ス値を1度だけ得る命令シーケンスをコンパイルする必
要がある。
PARALLEL LOOP構成が存在すルト、PAR
ALLEL  CASES構成を構成することは簡単で
ある。たとえば、下記の構成は、PARALLEL  
CASES CASE  1 (ケース1のためのコード) CASE 2 (ケース2のためのコード) CASE 3. WAITIHG FORCASES(
1)(ケース3のためのコード) CASE 4 (ケース4のためのコード) CASE 5.%JAITING FORCASES 
(2,3)(ケース5のためのコード) END CASES 下記の構成と同等であることがわかるはずである。
PARALLEL LOOP 9 I=1.5GOTO
(1,2,3,4,5)、 I1 (ケース1のための
コード) CALL  CASE  IS  DONE  (1)
OTO9 2(ケース2のためのコード) CALL CASE IS DONE (2)OTO9 3CALL IS CASE DONE (1)(ケー
ス3のためのコード) CALL  CASE  IS  DOHE  (3)
OTO9 4(ケース4のためのコード) OTO9 5CALL IS CASE DONE (2,3)(
ケースSのためのコード) 1;OTO9 9C0NTI)(UE ここで、呼出しは、他のケースが多分それを待つことが
できるときにケースが実行されることを書きとめ、かつ
、特定のケースが実行される前に実行されなければなら
ないケースを待つための、ライブラリ・ルーチンに対す
る呼出しである。ループ中の番号は説明のためのものに
すぎず、ケース・ステートメント中で使用される番号は
内部化され、ユーザ・ステートメント番号と衝突しない
。したがって、PARALLEL  CASESステー
トメントPARALLEL  LOOPステートメント
と同じ実行構造に変換できる。しかし、ケース番号(重
複なし)及びケース待機(デッドロックなし)の一貫性
を保証するため、さらに検査が必要である。
最後に、自動並列化は、ループがどこで並列に実行され
るかを確かめるため依存論理を使用する。
前述のように、この理論は現在、従来技術でかなりよく
理解されている。並列変換したいループを、プログラマ
が書いた並列ループについて示された形にすることがで
きる。
以下のこれらの変換のすべては、コンパイルされたコー
ドから呼び出されるライブラリ・ルーチンである。以下
に、インライン言語の場合の例を示す。
(a) PDFORK:ループ上で有利に使用できるプ
ロセッサの数を計算し;プロセッサが使用 可能になったとき、それに対する並 列作業項目を得て、それらの項目を 初期設定し;それらのループ実行P WIごとに、PDINITに対する 呼出しで始まるコンパイルされたルー プ実行コードに戻り; PDFORK を呼び出したコードごとに、PDJ OINに対する呼出しで始まるコン パイルされたループ完了コードに戻 る。
(b) PDINIT:ループを実行するためPWIを
初期設定し;プロセッサ専用変数を指す ようにポインタを更新し;必要なベ クトル保管域を得る。
(c) PDTERM:ループを実行するためPWIを
解放し;得られたベクトル保管域を解放 し;PWIが完了したことを親ノー ドに書きとめる。
(d) PDJOIH:ループのために割り振られたす
べて77)PWIが完了するまで待つ。
(e) PDLOCK:ループと関連するロックをロッ
クする(DOFIR8T及びDOFIN ALについて)。
(f) PDFREE:ループと関連したロックを解放
する(DOFIR3T及びDOFINA Lについて)。
(g) PCPOST:特定のケースが完了したことを
マークする。
(h) PCWAIT:ケース・リストが完了するまで
待つ。
前述のように、アウト・オブ・ライン言語の場合は、サ
ポート・ライブラリ・ルーチンは簡単でも複雑でもよい
。以下に、ステートメントをサポートして呼び出すこと
ができるルーチンの例を示す。
”DISPATCII A)(Y TASK ITAS
K、 5HARING (A、 BB。
CCC)、 CALLING X (Y、 Z)”:(
a) PTTAKE:使用可能なタスクを見つけ、必要
なら1つのタスクが完了するまで待ち; それを呼出しタスクが所有するもの としてマークし;その名前を変数I TASK中でプログラマに返す。
(b) PTSHAR:リストされた共通ブロックを記
述するレコードを呼出しタスク及び呼び 出されたタスク内で見つけ、呼び出 されたタスク内で呼出しタスクに対 する動的結合を行なうため、リスト された共通ブロックをマークする。
(c) PTEXEC:呼び出されたタスク内の共通ブ
ロックを調べて、それらが正しく動的結 合されていることを確かめ;この呼 出しで共用されない共通ブロックを、 それらの専用位置を指すように再配 置する; この呼出しで共用される共通ブロッ クを、呼出しタスク内の共通ブロッ クの位置を指すように再配置し;指 定された複写を実行する; 呼出しタスク内で呼び出されたサブ ルーチンを見つけ;アーギュメント・ リストのコピーを作成し;呼び出さ れたサブルーチンにおける呼び出さ れたタスクを呼び出す。
タスクが完了する前にそのサブタスクのすべてが完了し
ていることを確かめ、サブタスクがスケジューリングま
たは指名されたとき指定されたコピー・バックを実行し
、サブタスクを呼び出し完了することの一部と見なされ
る同様の機能を実行スルため、追加のルーチンを使用す
る。
E0発明の効果 本発明によれば、FORTRAN類似言語システムから
コンパイルされたコード・シーケンスで共通ブロックに
同時にアクセスするタスク間の競合が減る。
【図面の簡単な説明】
第1図は、インラインPARALLEL  LOOPス
テートメントと呼ばれるFORTRAN言語拡張の使用
を示す説明図、 第2図は、インラインPARALLEL  CASES
及び関連ステートメントと呼ばれる別のFORTRAN
言語拡張の使用を示す説明図、第3図は、自動並列化に
適した通常のFORTRAN Doループの使用を示す
説明図、第4図ないし第6図は、それぞれ第3図のDO
ループのインラインPARALLEL  LOOPlP
ARALLEL  CASESl及び混合されたLOO
P及びCASEへの変換を示す説明図、第7図は、アウ
ト・オブ・ライン並列言語の機能の幾つかを示す説明図
、 第8図及び第9図は、動的結合によって並列実行環境で
共通ブロック間の競合がどのように減少するかを示す説
明図である。 TOTAL =  0 100   C0NT工NUj CASE  2 、、、statements、、。 CASE  3 出願人  インターナショナル・ビジネス・マシーンズ
・コーポレーション 代理人  弁理士  頓  宮  孝  −(外1名) CASE6 CASE  9 END CASES Fig、 2 100  C0NT工NUE Fig、 3 100  C0NT工NUE P入RALLEL  CASES 300  WAIT  FORALL  TASKSF
ig、 7 PARALLEL CASES Fig、 3のDOループ壇並列ケー刈二吏撓しt、例
Fig、 5 ND Fig、 8 Q ○

Claims (1)

  1. 【特許請求の範囲】 タスクのアクティベーションがネスト可能である場合に
    、FORTRAN類似言語システムからコンパイルされ
    たコード・シーケンスで共通ブロックに同時にアクセス
    するタスク間の競合を軽減し、上記共通ブロックのプラ
    イベート・コピーを記憶する際に使用されるメモリ容量
    を減少させるための方法であって、以下のステップを含
    むことを特徴とする方法。 (a)共通ブロックをタスクに対して動的に結合する。 (b)結合を、タスクの動的ネスティングの範囲内にス
    コープする。
JP1066479A 1988-05-20 1989-03-20 共通ブロックへのアクセス競合軽減方法 Pending JPH0256640A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US07/197,060 US5093916A (en) 1988-05-20 1988-05-20 System for inserting constructs into compiled code, defining scoping of common blocks and dynamically binding common blocks to tasks
US197060 1998-11-20

Publications (1)

Publication Number Publication Date
JPH0256640A true JPH0256640A (ja) 1990-02-26

Family

ID=22727869

Family Applications (1)

Application Number Title Priority Date Filing Date
JP1066479A Pending JPH0256640A (ja) 1988-05-20 1989-03-20 共通ブロックへのアクセス競合軽減方法

Country Status (2)

Country Link
US (1) US5093916A (ja)
JP (1) JPH0256640A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5364969A (en) * 1992-09-09 1994-11-15 Shiu-Etsu Chemical Co., Ltd. Method for the stabilization of a sex pheromone compound

Families Citing this family (57)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA1319757C (en) * 1988-07-29 1993-06-29 Digital Equipment Corporation Echelon method for execution of nested loops in multiple processor computers
JP3039953B2 (ja) * 1989-04-28 2000-05-08 株式会社日立製作所 並列化装置
US5479614A (en) * 1989-09-14 1995-12-26 Fujitsu Limited Object sensor processing method and processor
JPH03111971A (ja) * 1989-09-27 1991-05-13 Toshiba Corp ベクトル化診断方式
CA2010068C (en) * 1990-02-14 1993-10-26 Steven Murray Hoxey Partitioning case statements for optimal execution performance
US5247679A (en) * 1990-02-20 1993-09-21 Prime Computer, Inc. Method for sequentially registering executable program formats with unresolved pointers by assigning linkage state and invocation state thereof
US5625797A (en) * 1990-08-10 1997-04-29 Vlsi Technology, Inc. Automatic optimization of a compiled memory structure based on user selected criteria
US5297291A (en) * 1991-03-07 1994-03-22 Digital Equipment Corporation System for linking program units by binding symbol vector index in the symbol table into calling image to obtain current value of the target image
US6493739B1 (en) 1993-08-24 2002-12-10 Echelon Corporation Task scheduling in an event driven environment
WO1992016905A1 (en) * 1991-03-18 1992-10-01 Echelon Corporation Programming language structures for use in a network for communicating, sensing and controlling information
WO1992016895A1 (en) 1991-03-18 1992-10-01 Echelon Corporation Networked variables
IL98248A0 (en) * 1991-05-23 1992-06-21 Ibm Israel Instruction scheduler for a computer
US5327561A (en) * 1991-09-20 1994-07-05 International Business Machines Corporation System and method for solving monotone information propagation problems
JPH05257709A (ja) * 1992-03-16 1993-10-08 Hitachi Ltd 並列化判別方法およびそれを用いた並列化支援方法
US5410703A (en) * 1992-07-01 1995-04-25 Telefonaktiebolaget L M Ericsson System for changing software during computer operation
US5339430A (en) * 1992-07-01 1994-08-16 Telefonaktiebolaget L M Ericsson System for dynamic run-time binding of software modules in a computer system
JP2856663B2 (ja) * 1993-01-15 1999-02-10 インターナショナル・ビジネス・マシーンズ・コーポレイション コンパイル・コードに可視境界を定義する最適化方法および装置
US5548761A (en) * 1993-03-09 1996-08-20 International Business Machines Corporation Compiler for target machine independent optimization of data movement, ownership transfer and device control
CA2123924A1 (en) * 1993-06-02 1994-12-03 Charles Douglas Blewett Specifying contexts in callback style programming
US5500881A (en) * 1993-07-12 1996-03-19 Digital Equipment Corporation Language scoping for modular, flexible, concise, configuration descriptions
DE69434845T2 (de) * 1993-07-22 2007-05-16 Koninklijke Philips Electronics N.V. Multimedia-System zur interaktiven Darstellung von Benutzerinformation und Massenspeicher zum Gebrauch mit einem solchem System
JPH0744508A (ja) * 1993-08-03 1995-02-14 Hitachi Ltd プログラム分割方法
US5530907A (en) * 1993-08-23 1996-06-25 Tcsi Corporation Modular networked image processing system and method therefor
US5632033A (en) * 1994-01-18 1997-05-20 Sybase, Inc. Variable resolution method and arrangement
US5471526A (en) * 1994-02-28 1995-11-28 Telefonaktiebolaget L M Ericsson (Publ.) Tracing with keys and locks on a telecommunication network
US5450313A (en) * 1994-03-24 1995-09-12 Xerox Corporation Generating local addresses and communication sets for data-parallel programs
US5500852A (en) * 1994-08-31 1996-03-19 Echelon Corporation Method and apparatus for network variable aliasing
US6438621B1 (en) 1994-11-14 2002-08-20 Microsoft Corporation In-memory modification of computer programs
US5734904A (en) * 1994-11-14 1998-03-31 Microsoft Corporation Method and system for calling one of a set of routines designed for direct invocation by programs of a second type when invoked by a program of the first type
US6487580B1 (en) * 1995-09-25 2002-11-26 International Business Machines Corporation Method and system for managing concurrently executable computer processes
US6332168B1 (en) 1995-09-28 2001-12-18 International Business Machines Corporation Method of, system for, and computer program product for providing a run time subsystem for run time libraries
US5826087A (en) * 1995-10-02 1998-10-20 Lohmann; William C. Method and apparatus for cross calling programs of different lexical scoping methodology
US5812852A (en) * 1996-11-14 1998-09-22 Kuck & Associates, Inc. Software implemented method for thread-privatizing user-specified global storage objects in parallel computer programs via program transformation
US6023582A (en) * 1996-12-23 2000-02-08 Z-World, Inc. Function code chaining method
US5930795A (en) * 1997-01-21 1999-07-27 International Business Machines Corporation Supporting dynamic tables in SQL query compilers
US6041181A (en) * 1997-07-23 2000-03-21 International Business Machines Corporation Method of, system for, and computer program product for providing quick fusion in WHERE constructs
US6189137B1 (en) * 1997-11-21 2001-02-13 International Business Machines Corporation Data processing system and method for simulating “include” files in javascript
US6530075B1 (en) * 1998-12-03 2003-03-04 International Business Machines Corporation JIT/compiler Java language extensions to enable field performance and serviceability
US6766514B1 (en) 1999-10-19 2004-07-20 General Electric Co. Compiler having real-time tuning, I/O scaling and process test capability
US20010042138A1 (en) * 1999-12-23 2001-11-15 Reinhard Buendgen Method and system for parallel and procedural computing
US6708331B1 (en) * 2000-05-03 2004-03-16 Leon Schwartz Method for automatic parallelization of software
JP3933380B2 (ja) * 2000-10-05 2007-06-20 富士通株式会社 コンパイラ
KR100806274B1 (ko) * 2005-12-06 2008-02-22 한국전자통신연구원 멀티 쓰레디드 프로세서 기반의 병렬 시스템을 위한 적응형실행 방법
DE102006033863A1 (de) * 2006-07-21 2008-01-24 Siemens Ag Verschaltungsschnittstelle für flexibles Online/Offline-Deployment einer n-schichtigen Softwareapplikation
US8108845B2 (en) * 2007-02-14 2012-01-31 The Mathworks, Inc. Parallel programming computing system to dynamically allocate program portions
US7962906B2 (en) * 2007-03-15 2011-06-14 International Business Machines Corporation Compiler method for employing multiple autonomous synergistic processors to simultaneously operate on longer vectors of data
US8434076B2 (en) * 2007-12-12 2013-04-30 Oracle International Corporation Efficient compilation and execution of imperative-query languages
US20100169618A1 (en) * 2008-12-30 2010-07-01 Microsoft Corporation Identifying concurrency control from a sequential proof
KR20120058455A (ko) * 2009-04-28 2012-06-07 인터내셔널 비지네스 머신즈 코포레이션 멀티 스레드 상에서 동작하는 프로그램의 프로그램 코드를 록 충돌이 적은 프로그램 코드로 변환하기 위한 방법, 및 그 컴퓨터 프로그램 및 컴퓨터 시스템
US8479185B2 (en) * 2010-12-09 2013-07-02 Oracle International Corporation Method and system for utilizing parallelism across loops
US9225793B2 (en) 2011-01-28 2015-12-29 Cisco Technology, Inc. Aggregating sensor data
US9171079B2 (en) * 2011-01-28 2015-10-27 Cisco Technology, Inc. Searching sensor data
US9275093B2 (en) 2011-01-28 2016-03-01 Cisco Technology, Inc. Indexing sensor data
US9727377B2 (en) * 2011-07-14 2017-08-08 Siemens Aktiengesellschaft Reducing the scan cycle time of control applications through multi-core execution of user programs
EP2731008B1 (en) * 2012-11-12 2020-03-18 Fujitsu Limited Resource contention in multiple cores
US20150220872A1 (en) * 2014-02-03 2015-08-06 Cavium, Inc. Method and an apparatus for work packet queuing, scheduling, and ordering with conflict queuing
US10795682B2 (en) * 2016-12-28 2020-10-06 Intel Corporation Generating vector based selection control statements

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62163148A (ja) * 1986-01-14 1987-07-18 Fujitsu Ltd 共通領域参照制御方式

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4156910A (en) * 1974-02-28 1979-05-29 Burroughs Corporation Nested data structures in a data driven digital data processor
US3972026A (en) * 1974-09-23 1976-07-27 Hewlett-Packard Company Linked list encoding method and control apparatus for refreshing a cathode ray tube display
DE2459476B2 (de) * 1974-12-16 1977-01-20 Gesellschaft für Mathematik und Datenverarbeitung mbH, 5300 Bonn Schaltungsanordnung fuer nichtzyklische datenpermutationen
US4307446A (en) * 1979-05-02 1981-12-22 Burroughs Corporation Digital communication networks employing speed independent switches
US4344134A (en) * 1980-06-30 1982-08-10 Burroughs Corporation Partitionable parallel processor
US4390945A (en) * 1980-08-25 1983-06-28 Burroughs Corporation Self-managing variable field storage station employing a cursor for handling nested data structures
US4447875A (en) * 1981-07-07 1984-05-08 Burroughs Corporation Reduction processor for executing programs stored as treelike graphs employing variable-free applicative language codes

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62163148A (ja) * 1986-01-14 1987-07-18 Fujitsu Ltd 共通領域参照制御方式

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5364969A (en) * 1992-09-09 1994-11-15 Shiu-Etsu Chemical Co., Ltd. Method for the stabilization of a sex pheromone compound

Also Published As

Publication number Publication date
US5093916A (en) 1992-03-03

Similar Documents

Publication Publication Date Title
JPH0256640A (ja) 共通ブロックへのアクセス競合軽減方法
US5548761A (en) Compiler for target machine independent optimization of data movement, ownership transfer and device control
US6029207A (en) Apparatus and method for dynamic linking of computer software components
US5303357A (en) Loop optimization system
US8082544B2 (en) Managing parameter access in a task managing system
US6708331B1 (en) Method for automatic parallelization of software
Larus C**: A large-grain, object-oriented, data-parallel programming language
US8484175B2 (en) Memory transaction grouping
Hendren et al. Compiling C for the EARTH multithreaded architecture
JPH06266683A (ja) 並列処理装置
US7181730B2 (en) Methods and apparatus for indirect VLIW memory allocation
EA012912B1 (ru) Управление исполнением задач
JPH0638234B2 (ja) 変換されたプログラムコードのソース命令不可分性を保持するためのシステムおよび方法
JPH05143332A (ja) 命令スケジユーラを備えたコンピユータ・システム及び入力命令シーケンスを再スケジユールする方法
JPH10161884A (ja) パイプラインコンピュータのための改善されたコードオプティマイザ
JP2014146355A (ja) トランザクションを用いるシーケンシャルフレームワークの並行化
US20040261055A1 (en) Predictively processing tasks for building software
JP6427053B2 (ja) 並列化コンパイル方法、及び並列化コンパイラ
Guzzi et al. Cedar Fortran and other vector and parallel Fortran dialects
Guzzi et al. Cedar Fortran and other vector and parallel Fortran dialects
US7111288B2 (en) Method and system for minimizing the cycle time when compiling a program in a processing system
Zehendner A module-based assembly language with parallel processing constructs and its implementation in the ASTOR architecture
JPH03135630A (ja) 命令スケジューリング方式
Criado Ledesma Design and implementation of role-shifting threads in the LLVM runtime
Dechering et al. Semantics and implementation of a generalized forall statement for parallel languages