首页 / 专利库 / 企业组织 / 流程图 / Execution method of control flow program, development method of data flow program, data processing system, program execution method and device and control instruction of data processing system, computer-readable recording medium, development method and conversion method of computer-loadable program

Execution method of control flow program, development method of data flow program, data processing system, program execution method and device and control instruction of data processing system, computer-readable recording medium, development method and conversion method of computer-loadable program

阅读:884发布:2021-09-18

专利汇可以提供Execution method of control flow program, development method of data flow program, data processing system, program execution method and device and control instruction of data processing system, computer-readable recording medium, development method and conversion method of computer-loadable program专利检索,专利查询,专利分析的服务。并且PROBLEM TO BE SOLVED: To easily convert a control flow program into a data flow technique by selecting an execution block corresponding to a designated part of the control flow program in accordance with the stored dependency and the allocation division dependency.
SOLUTION: If a thread exists according to a specific program code (910), it is decided whether the thread has blocks in a queue (920). If the thread has blocks, a block corresponding to a designated part of a control flow program is selected out of the queue in accordance with the stored dependency and the allocation division dependency (930). When the dependency of all blocks are satisfied (940), the thread executes the program code that is associated with the relevant block by means of an allocated processor (960). Thus, the control flow program is easily converted into a data flow technique.
COPYRIGHT: (C)2000,JPO,下面是Execution method of control flow program, development method of data flow program, data processing system, program execution method and device and control instruction of data processing system, computer-readable recording medium, development method and conversion method of computer-loadable program专利的具体信息内容。

【特許請求の範囲】
  • 【請求項1】 複数ブロックへ分割された領域であって当該複数ブロックの各々が関数に関連付けられる数値集合から構成されている当該各領域を定義する命令を受信する領域定義命令受信工程と、 実行時に前記関数に基づいて前記ブロックを構成する数値を変換する制御フロープログラムの指定部分に対応するステートを有する各ブロックからなるブロック集合を定義する命令を受信するブロック集合定義命令受信工程と、 前記ブロックがどのようにして並列処理されるかを決定する分割グループへ前記ブロック集合を割り当てる命令を受信する割当命令受信工程と、 ブロック集合のうち2個のブロックの関係を示す全ての依存性であって当該関係を有するブロックのうち第1ブロックに関連付けられる制御フロープログラム該当部分を第2ブロックに関連付けられる制御フロープログラム該当部分よりも先に実行することを要求する全ての依存性を記憶する依存性記憶工程と、 記憶済依存性と割当分割依存性とに基づいて制御フロープログラムの指定部分に対応する実行ブロックを選択する実行ブロック選択工程とを備えたことを特徴とするマルチプロセッサコンピュータシステムにおけるデータフローモデルに基づく制御フロープログラム実行方法。
  • 【請求項2】 更に、ユーザに、前記メモリ領域のブロックの数値にアクセスする制御フロープログラムコードの生成を許可するコードを配信するコード配信工程を備えたことを特徴とする請求項1に記載の制御フロープログラム実行方法。
  • 【請求項3】 前記コード配信工程は、 前記ブロックを割り当てた分割グループに基づいて前記配信コードがブロックの数値にアクセスするか否かを決定するアクセス決定工程を備えたことを特徴とする請求項2に記載の制御フロープログラム実行方法。
  • 【請求項4】 前記分割グループは、前記ブロックがどのようにして前記ブロックの実行処理順序を表す有向非循環グラフのノードに追加されるかを決定することにより、前記ブロックがどのようにして並列処理されるのかを決定する並列処理決定工程を備えたことを特徴とする請求項1に記載の制御フロープログラム実行方法。
  • 【請求項5】 前記依存性記憶工程は、 第2ブロック集合が、第1ブロック集合に関連付けられる制御フロープログラム該当部分の実行結果に依存するかどうかを決定する依存決定工程を備えたことを特徴とする請求項1に記載の制御フロープログラム実行方法。
  • 【請求項6】 前記依存性記憶工程は、 第2ブロック集合に依存する第1ブロック集合の呈示標識を受信する第1ブロック呈示標識受信工程と、 前記第1ブロック集合が依存する前記第2ブロック集合を表す単一親ブロックの呈示標識を受信する単一親ブロック呈示標識受信工程と、 呈示された単一親ブロックに基づいて前記第2ブロック集合に残っているブロックを決定する残留ブロック決定工程とを備えたことを特徴とする請求項1に記載の制御フロープログラム実行方法。
  • 【請求項7】 前記第2ブロック集合の前記残留ブロックは、前記単一親ブロックに隣接していることを特徴とする請求項6に記載の制御フロープログラム実行方法。
  • 【請求項8】 少なくとも1つのスクリーンディスプレイを表示する表示工程と、 ユーザに対して許可を行う許可工程とを備え、当該許可は、 領域を指定し、当該領域を複数ブロックであって各ブロックが関数に関連付けられる数値集合を定義する複数ブロックへ分割する指定分割手順と、実行時に前記関数に基づいて前記ブロックを構成する数値を変換するデータフロープログラムの指定部分に対応するステートを有する各ブロックからなるブロック集合を定義するブロック集合定義手順と、 前記ブロックがどのようにして並列処理されるかを決定する分割グループへ前記ブロック集合を割り当てるブロック集合割当手順と、 2個のブロック集合の関係を示す全ての依存性を割り当てる依存性割当手順に対してなされることを特徴とするコンピュータ実装可能なデータフロープログラムの開発方法。
  • 【請求項9】 データフロープログラム開発用ユーザインタフェースを表示する開発ツールを備えたデータプロセッシングシステムにおいて、 前記ユーザインタフェースは、 領域を定義して当該領域を複数ブロックへ分割する命令を受信するように構成された第1図表であって、前記複数ブロックの各ブロックが関数に関連付けられた数値集合を定義する第1図表と、 実行時に前記関数に基づいて前記ブロックを構成する数値を変換するデータフロープログラムの指定部分に対応するステートを有する各ブロックからなるブロック集合を定義する命令を受信するように構成された第2図表と、 前記ブロックがどのように並列処理されるかを決定する分割グループへ前記ブロックを割り当てる情報を受信するように構成された第3図表と、 2個のブロック集合の関係を示す全ての依存性に対応する情報を受信するように構成された第4図表とを備えたことを特徴とするデータプロセッシングシステム。
  • 【請求項10】 前記ユーザインタフェースは、 2個のブロック集合の依存関係が当該関係を有する2個のブロック集合のうち一方に関連付けられるデータフロープログラム該当部分を他方のブロック集合に関連付けられるデータフロープログラム該当部分よりも先に実行することを要求するものであることを特徴とする請求項9に記載のデータプロセッシングシステム。
  • 【請求項11】 複数ブロックへ分割された領域であって当該複数ブロックの各々が関数に関連付けられる数値集合から構成されている当該各領域を定義する命令を受信する領域定義命令受信工程と、 実行時に前記関数に基づいて前記ブロックを構成する数値を変換する制御フロープログラムの指定部分に対応するステートを有する各ブロックからなるブロック集合を定義する命令を受信するブロック集合定義命令受信工程と、 前記ブロックがどのようにして並列処理されるかを決定する分割グループへ前記ブロック集合を割り当てる命令を受信する割当命令受信工程と、 ブロック集合のうち2個のブロックの関係を示す全ての依存性であって当該関係を有するブロックのうち第1ブロックに関連付けられる制御フロープログラム該当部分を第2ブロックに関連付けられる制御フロープログラム該当部分よりも先に実行することを要求する全ての依存性を記憶する依存性記憶工程と、 記憶済依存性と割当分割依存性とに基づいて制御フロープログラムの指定部分に対応する実行ブロックを選択する実行ブロック選択工程とを備えたことを特徴とするマルチプロセッサコンピュータシステムにおけるプログラム実行方法。
  • 【請求項12】 複数ブロックへ分割された領域であって当該複数ブロックの各々が関数に関連付けられる数値集合から構成されている当該各領域を定義する命令を受信する領域定義命令受信手段と、 実行時に前記関数に基づいて前記ブロックを構成する数値を変換する制御フロープログラムの指定部分に対応するステートを有する各ブロックからなるブロック集合を定義する命令を受信するブロック集合定義命令受信手段と、 前記ブロックがどのようにして並列処理されるかを決定する分割グループへ前記ブロック集合を割り当てる命令を受信する割当命令受信手段と、 ブロック集合のうち2個のブロックの関係を示す全ての依存性であって当該関係を有するブロックのうち第1ブロックに関連付けられる制御フロープログラム該当部分を第2ブロックに関連付けられる制御フロープログラム該当部分よりも先に実行することを要求する全ての依存性を記憶する依存性記憶手段と、 記憶済依存性と割当分割依存性とに基づいて制御フロープログラムの指定部分に対応する実行ブロックを選択する実行ブロック選択手段とを備えたことを特徴とするプログラム実行装置。
  • 【請求項13】 複数ブロックへ分割された領域であって当該複数ブロックの各々が関数に関連付けられる数値集合から構成されている当該各領域を定義する命令を受信する領域定義命令受信手順と、 実行時に前記関数に基づいて前記ブロックを構成する数値を変換する制御フロープログラムの指定部分に対応するステートを有する各ブロックからなるブロック集合を定義する命令を受信するブロック集合定義命令受信手順と、 前記ブロックがどのようにして並列処理されるかを決定する分割グループへ前記ブロック集合を割り当てる命令を受信する割当命令受信手順と、 ブロック集合のうち2個のブロックの関係を示す全ての依存性であって当該関係を有するブロックのうち第1ブロックに関連付けられる制御フロープログラム該当部分を第2ブロックに関連付けられる制御フロープログラム該当部分よりも先に実行することを要求する全ての依存性を記憶する依存性記憶手順と、 記憶済依存性と割当分割依存性とに基づいて制御フロープログラムの指定部分に対応する実行ブロックを選択する実行ブロック選択手順とからなる方法を実行するデータプロセッシングシステムの制御命令を記憶したコンピュータ読取可能な記録媒体。
  • 【請求項14】 更に、ユーザに、前記メモリ領域のブロックの数値にアクセスする制御フロープログラムコードの生成を許可するコードを配信するコード配信手順を備えたことを特徴とする請求項13に記載のコンピュータ読取可能な記録媒体。
  • 【請求項15】 前記コード配信手順は、 前記ブロックを割り当てた分割グループに基づいて前記配信コードがブロックの数値にアクセスするか否かを決定するアクセス決定手順を備えたことを特徴とする請求項14に記載のコンピュータ読取可能な記録媒体。
  • 【請求項16】 前記分割グループは、前記ブロックがどのようにして前記ブロックの実行処理順序を表す有向非循環グラフのノードに追加されるかを決定することにより、前記ブロックがどのようにして並列処理されるのかを決定する並列処理決定手順を備えたことを特徴とする請求項13に記載のコンピュータ読取可能な記録媒体。
  • 【請求項17】 前記依存性記憶手順は、 第2ブロック集合が、第1ブロック集合に関連付けられる制御フロープログラム該当部分の実行結果に依存するかどうかを決定する依存決定手順を備えたことを特徴とする請求項13に記載のコンピュータ読取可能な記録媒体。
  • 【請求項18】 前記依存性記憶手順は、 第2ブロック集合に依存する第1ブロック集合の呈示標識を受信する第1ブロック呈示標識受信手順と、 前記第1ブロック集合が依存する前記第2ブロック集合を表す単一親ブロックの呈示標識を受信する単一親ブロック呈示標識受信手順と、 呈示された単一親ブロックに基づいて前記第2ブロック集合に残っているブロックを決定する残留ブロック決定手順とを備えたことを特徴とする請求項13に記載のコンピュータ読取可能な記録媒体。
  • 【請求項19】 前記第2ブロック集合の前記残留ブロックは、前記単一親ブロックに隣接していることを特徴とする請求項18に記載のコンピュータ読取可能な記録媒体。
  • 【請求項20】 メモリを備え、当該メモリが、 第1プログラムと、 第2プログラムを開発するための開発ツールと、 前記開発ツールを走行させる少なくとも1つのプロセッサとを備え、 前記開発ツールが、 (i) 複数ブロックへ分割された領域であって前記複数ブロックの各ブロックが関数に関連付けられた数値集合から構成されるとともに、実行時に前記関数に基づいて前記ブロックを構成する数値を変換する第1プログラムの指定部分に対応するステートを有する前記領域と、(ii)
    2個のブロック集合の関係を示す全ての依存性であって当該関係を有するブロックのうち第1ブロックに関連付けられる第1プログラム該当部分を第2ブロックに関連付けられる第2プログラム該当部分よりも先に実行することを要求する全ての依存性と、(iii) 前記ブロックがどのように並列処理されるのかを決定する分割グループとを備えたことを特徴とするデータプロセッシングシステム。
  • 【請求項21】 関数に関連付けられた数値集合から構成される各ブロックからなる複数ブロックへ分割された領域を定義する分割領域定義手順と、 実行時に前記関数に基づいて前記ブロックを構成する数値を変換する前記プログラムの指定部分に対応するステートを有する各ブロックからなるブロック集合を定義するブロック集合定義手順と、 前記ブロックがどのように並列処理されるかを決定する分割グループへ前記ブロック集合を割り当てるブロック集合割当手順と、 2個のブロック集合の関係を示す全ての依存性であって当該関係を有するブロックのうち第1ブロックに関連付けられるプログラム該当部分を第2ブロックに関連付けられるプログラム該当部分よりも先に実行することを要求する全ての依存性を記憶する依存性記憶手順とを備えたことを特徴とするコンピュータ実装可能なプログラムの開発方法。
  • 【請求項22】 関数に関連付けられた数値集合から構成される各ブロックからなる複数ブロックへ分割された領域を定義する分割領域定義手順と、 実行時に前記関数に基づいて前記ブロックを構成する数値を変換する前記制御フロープログラムの指定部分に対応するステートを有する各ブロックからなるブロック集合を定義するブロック集合定義手順と、 前記ブロックがどのように並列処理されるかを決定する分割グループへ前記ブロック集合を割り当てるブロック集合割当手順と、 2個のブロック集合の関係を示す全ての依存性であって当該関係を有するブロックのうち第1ブロックに関連付けられる制御フロープログラム該当部分を第2ブロックに関連付けられる制御フロープログラム該当部分よりも先に実行することを要求する全ての依存性を記憶する依存性記憶手順とを備えたことを特徴とするマルチプロセッサコンピュータシステム実行用の制御フロープログラムをデータフロープログラムへ変換するコンピュータ実装可能なプログラムの変換方法。
  • 说明书全文

    【発明の詳細な説明】

    【0001】

    【発明の属する技術分野】本発明は、マルチプロセッサコンピュータシステムに関し、更に詳しくは、マルチプロセッサコンピュータシステムを用いるコンピュータプログラムのデータ駆動型処理に関する。

    【0002】

    【従来の技術】マルチプロセッサコンピュータシステムは、コンピュータプログラムの種々の命令を実行するために使用される2以上のプロセッサを含む。 特別な命令セットは、他のプロセッサが関連のない命令セットを実行する間に、単一のプロセッサによって実行するようにしてもよい。

    【0003】マルチプロセッサシステムのような高速コンピュータシステムは、科学研究遂行の新しい方法の急速な進歩を刺激した。 理論科学や実験科学の広範囲な古典的な枝葉はコンピュータを使用する科学によって結び付けられた。 コンピュータを使用する科学者は、理論的に信頼性を高めるには複雑すぎる現象や、研究室で再現するには危険過ぎる或いは費用がかかる現象をスーパーコンピュータにより、シミュレートする。 コンピュータを使用する科学の成功は、近年、スーパーコンピュータ資源の必要性を急速に高めた。

    【0004】この間中、並列コンピュータとも呼ばれるマルチプロセッサコンピュータシステムは、研究室の実験装置から進化して、コンピュータを使用するとともに問題解決のためコンピュータ資源の最高のものを必要とする科学者の日常の道具になった。 幾つかの要因が、この進化を刺激した。 それは、光の速度や熱消費効率がシングルプロセッサの速度に物理的な限界を強要したことだけでない。 最新のシングルプロセッサコンピュータの費用はその能よりも急速に増大していることもその要因である。 そして、必要とされる計算能力が新規に購入することなく既存の資源から見出されるとすれば、価格対性能比は、より望ましくなる。 これにより、並列コンピュータとしてワークステーションネットワークを用いることにより、元々ちょっとした雑用のために購入されていたワークステーションネットワークが、「SCA
    N」(夜中のスーパーコンピュータの略語)として使われる機会が増加した。 この計画は、大変うまくいくことが証明され、個人のワークステーションの費用効果が急速に増大したので、ワークステーションのネットワークが、比較的高速なスーパーコンピュータで実行していた並列ジョブ専用に、購入されるようになってきた。 このように、ピーク性能と価格対性能比の両方を考慮すると、大規模なコンピュータ計算が並列処理へ向けて移行することを後押ししている。 これらの進歩があるにも関わらず、並列コンピュータは広範囲で採用されるには至っていない。

    【0005】並列コンピュータ計算の採用と経済性及び性能上の利益についての最大の障害となっているのは、
    ソフトウェアが適当ではないという問題である。 コンピュータを利用する重要な科学問題のためのパラレルアルゴリズムを実行するプログラムを開発する者は、現在のソフトウェア環境が、非常に性能が高く、利用可能で費用効果が高いハードウェアを円滑に利用するに至っておらず、むしろその障害となっていることに気付くであろう。 何故なら、コンピュータプログラマーは、一般に、
    マルチプロセッサコンピュータシステムによって実行されるプログラムを含むプログラムの開発時には、「制御フロー」モデルに従うからである。 このモデルによれば、コンピュータは、プログラムカウンタによって制御されて、プログラムの命令を順々に実行する(即ち、第1の命令から最後の命令までを直列に実行する。)。 この手法は、プログラム開発過程を単純化するが、本質的に処理が遅い。

    【0006】例えば、プログラムカウンタが、プログラムにおいて他の命令或いは命令セットの結果を必要とする特定の命令に至ると、その特定の命令は、結果に「依存」すると言われ、プロセッサはその結果が利用できるまで命令を実行することができない。 更に、制御フローモデルの下で開発されたプログラムを、並列処理コンピュータにおいて実行すると、これらの依存性のために、
    結果的に資源を無駄に使用することになる。 例えば、制御フロープログラムの1セットの命令を実行する第1のプロセッサは、第1のプロセッサがそのセットの命令を実行するために結果が必要とされる他のセットの命令に関して、第2のプロセッサが実行を完了するまで、待機しなければならないかもしれない。 この待機時間は、2
    個のプロセッサからなる構成の少なくとも1つのコンピュータがそのプログラムが実行されている間中ずっと、
    稼動しないという点でコンピュータ資源の許容しがたい無駄遣いであると言うことができる。

    【0007】プログラムにおける効果的な並列処理の適用のために、科学者は制御フローモデルの代わりに「データフロー」モデルを使用することを示唆している。 このデータフローモデルの基本的な概念は、必要とされるオペランドが利用可能になるときは必ず命令を実行可能であることである。 従って、データ駆動型のコンピュータ計算において、プログラムカウンタは必要ではない。
    命令開始は、データの利用可能性に依存するが、プログラムにおける命令の物理的な位置には依存しない。 言い換えれば、プログラムにおける命令は、順序づけられていない。 実行は、単純にデータ依存性の制約に従う。

    【0008】データ駆動型のコンピュータ計算のプログラムは、データフローグラフで表現される。 数1で表される計算のデータフローグラフの例は図1に表示される。

    【0009】

    【数1】

    例えば、xが5で、yが3であるときには、結果zは1


    6である。 図示されたように、zは合計とxとyの結果に依存する。 前記データフローグラフは、そのノードが演算子に相当し、弧がデータ進行のポインタの役目を果たす有向非循環グラフ(「DAG」)である。 そのグラフは、順序制約(即ち、データ依存性に関する制約)を明らかにする。

    【0010】例えば、一般的なコンピュータでは、(i)
    プログラムがよりよい資源利用及びコードの最適化をもたらすためにプログラムがコンパイルされるとき、(ii)
    より高速のシステムスループットのために、協働する算術論理演算動作を明らかにするための実行時に、プログラム解析が度々なされる。 例えば、表1に示す命令シーケンスを仮定する。

    【0011】

    【表1】

    【0012】直列計算システム(例えば、単一プロセッサシステム)で前記命令を実行するときは、表2に示す5個の計算用シーケンスが結果の完全性を担保するのに許容される。

    【0013】

    【表2】

    【0014】例えば、第1の命令は始めに実行しなければならないが、第2或いは第3の命令は2番目に実行することができる。 何故なら、第1の命令の結果は、第2
    及び第3の命令で必要とされるが、第2或いは第3の命令は他の命令の結果を必要としないからである。 夫々のシーケンスの残りは、オペランド(又は入力)が利用可能になるまで命令を実行しないという単純なルールに従う。

    【0015】2個のプロセッサを含むマルチプロセッサコンピュータシステムでは、前記6の演算を4個(6個ではない)のステップで実行することが可能である。 それは、第1のプロセッサによる計算ステップ1、次に両方のプロセッサで同時に行う計算ステップ2及び3、次に両方のプロセッサで同時に行う計算ステップ4及び5、そして、最後にどちらかのプロセッサで行う計算ステップ6である。 これによれば、実行時間が減少するため単一プロセッサによる手法に対して明らかな改善がなされることになる。

    【0016】並列処理の手段としてデータフローを用いると、このようにシステムの処理を最大限に並列処理化することができる。 しかしながら、ほとんどのソースコードは、全てのタイプの問題を効率的に並列処理をすることが難しくて相応しくない制御フォームの形態をなす。

    【0017】ゆえに、開発者がもっと容易にデータフロープログラムを開発することができるように、そして、
    既存の制御フロープログラムをマルチプロセッサコンピュータシステムで実行するためのデータフロープログラムに容易に変換することができるようにすることが求められている。 また、種々の要求仕様を入力することにより、マルチプロセッサコンピュータシステムでのデータフロープログラムの動作を最適化する技術も求められている。

    【0018】本発明は、開発者が容易にデータフロープログラムを開発することができ、既存の制御フロープログラムをマルチプロセッサコンピュータシステムで実行するためのデータフロープログラムに容易に変換することができる制御フロープログラムの実行方法、データフロープログラムの開発方法、データプロセッシングシステム、プログラム実行方法、プログラム実行装置、データプロセッシングシステムの制御命令を記憶したコンピュータ読取可能な記録媒体、コンピュータ実装可能なプログラムの開発方法、コンピュータ実装可能なプログラムの変換方法を提供することを目的とする。 また、種々の要求仕様を入力することにより、マルチプロセッサコンピュータシステムでのデータフロープログラムの動作を最適化可能な制御フロープログラムの実行方法、データフロープログラムの開発方法、データプロセッシングシステム、プログラム実行方法、プログラム実行装置、
    データプロセッシングシステムの制御命令を記憶したコンピュータ読取可能な記録媒体、コンピュータ実装可能なプログラムの開発方法、コンピュータ実装可能なプログラムの変換方法を提供することを目的とする。

    【0019】

    【課題を解決するための手段】本発明に係る方法、システム及び製品は、開発者が容易に制御フロープログラムをデータフロー手法に変換でき、データフローモデルを用いて新しいプログラムを開発可能とすることによって、既存システムの欠点を克服したものである。 本発明の要旨は、実施形態に係るシステム及び製品により明らかであるが、プログラム開発工程がメモリ領域を定義しそれを複数ブロックに分割する工程を備え、その各ブロックが関数に関連付けられた数値集合を定義していることにある。 ブロック集合が定義されると、集合の各ブロックは、プログラムの指定部分に対応するステートを備え、そのプログラムは、実行時に前記関数に基づいてブロックを構成する数値を変換する。 更に、ブロック間の依存性がユーザによって指定される。 各依存性は、2個のブロック間の関係を示すとともに、2個のブロックのうちの1個に関連付けられたプログラム部分が他ブロックに関連付けられたプログラム部分より先に実行されることを要求する。

    【0020】本発明の他の要旨によれば、実施形態に係る方法、システム及び製品は、マルチプロセッサコンピュータシステムでデータフロープログラムを実行する。
    プログラムの実行工程は、プログラムの関数に関連付けられた数値集合からなるブロックを識別するキューにおける情報の選択工程と、被選択ブロックに関連付けられたプログラム部分の実行が他ブロックに関連付けられたプログラム部分の実行結果に依存するか否かの決定工程とを含む。 次に、被選択ブロックに関連付けられたプログラム部分が実行されるが、その実行は、その被選択ブロックに関連付けられたプログラム部分の実行が他ブロックに関連付けられたプログラム部分の実行結果に依存しないと決定されたときになされる。 この選択と決定は、被選択ブロックに関連付けられたプログラム部分の実行が他ブロックに関連付けられたプログラム部分の実行結果に依存すると決定される場合に繰り返される。

    【0021】更に、本発明の他の要旨によれば、実施形態に係る方法、システム及び製品により、ユーザは、種々の項目指定を入力することによってプログラム開発プロセスを最適化することができる。 このプログラム開発プロセスは、メモリ領域を定義する工程と、それをブロックに分割する工程と、そのメモリ領域のブロックの要素アスペクトを定義する工程とを備える。 コードを用いることにより、ユーザは、そのブロックのアクセスする制御フロープログラムコードを記述することができる。
    更に、ユーザによるブロック間の依存性の項目指定を容易にするために、ブロック集合間の依存性を効率的に生成する方法が提案されている。 加えて、その方法により、ユーザは、必要な場合に、処理用にブロックをグループ化することができ、種々の並列処理スキームを用いることができる。

    【0022】

    【発明の実施の形態】以下、添付図面を参照して、本発明に係る実施の形態を詳細に説明する。 尚、図面及び説明において同一又は略同一の部材を参照する場合には、
    できる限り同一の参照符号を用いている。

    【0023】導入 本発明に係る方法、システム及び製品は、開発者が、制御フロープログラムをデータフロープログラムに変換することを可能にし、データフローモデルによる新規プログラムを開発することを可能にする。 このような方法、
    システム及び製品は、データフロープログラムを設計及び開発するためにコンピュータ対人間インタフェースを含む開発ツールを利用することもできる。

    【0024】本発明の原理に従って開発されたデータフロープログラムは、データフローモデルを用いるマルチプロセッサコンピュータシステム上で実行される。 前記インタフェースは、プログラム実行に使用されるものと異なるデータ処理システム上で操作されるようにしてもよい。 或いは、前記インタフェースは、プログラム実行のためのシステム上で操作されるようにしてもよい。

    【0025】本発明によるデータフローモデルの特徴の1つは、オペレーションがメモリ領域のブロックで並列に実行される点である。 ブロックは、数列や行列又は他の情報等のデータ集合からなる。 複数のブロックは、全体としてメモリ領域を構成する。

    【0026】データフロープログラム開発ツールは、インタフェースを提供し、このインタフェースにより、開発者は、システムに関連付けられるデータが含まれるメモリ領域を定義することができる。 ここで、用語「システム」は、ビルの構造解析やパイプの流体流量等の物理的・数学的・コンピュータ演算上の問題に関連する。 通常、このような複雑なシステムは、多くの方程式を解くために膨大な処理を必要とし、1つの集合の方程式の結果は、他の集合の方程式の結果に依存する。 例えば、パイプを流れる流体は、パイプの内側の摩擦によって速度を落とされる。 その摩擦は、パイプ内側に接する流体のスピードに直接影響し(第1集合の方程式によって定義される)、内側に接しないパイプ内の他の流体に間接的に影響する(同じ方程式によって定義されるが、ことによると、第1集合の方程式の結果に依存する)。 このように、パイプ内側による摩擦のパイプ内の流体に対する影響は、パイプ内における位置によって異なる。

    【0027】領域を定義した後、開発者は、該領域をブロックに分割し、各ブロックについて、該領域の該ブロックと他ブロックとの間の依存性に加え、該ブロックの数値について実行するプログラムコードを指定する。 同一のプログラムコードを有するブロックは、同じ「ステート」を共有すると言われる。 それらは、一般に、結果に関して相互に依存しないので、並列に実行される。 前記流体フローの例においては、パイプの内側に接して流れる流体に関連付けられたブロックは、同じステートを共有し(従って、実行用の同じプログラムコードを有する)、しかし、このステート(及びコード)は、内側に接しないが少なくとも該流体に接している流体のステート(及びコード)とは異なる。 パイプの中心へ移動するにつれて、パイプ内の流体に関連付けられる各ブロックのステート(及びコード)は、同様にして、依存性を反映して変化する。

    【0028】依存性は、依存するブロックの夫々と依存されるブロックとの間のリンクにより表わされる。 前記システムにおいて第1のブロックが正しく動作するために、前記第1のブロックが前記第2のブロックの結果を必要とするときには、ブロックは、他のブロックに依存する。 この関係は、有向非循環グラフにより図表を用いて見られるようにしてもよい。 ブロック単位で決定されるプログラムコードとデータは、前記グラフの各ノードに関連付けられる。

    【0029】ブロックは、マルチプロセッサコンピュータシステムでの処理のためにキューに入れられる。 実際には、ブロック自身は、キューに入れられない。 むしろ、ポインタのような各ブロックを識別する情報が、キューに置かれる。 ブロックは、特定の方法でキューに入れられるか又はキューとして構成され、データフロープログラムを実行するスレッドは、データフロープログラムを実行中の所定の時点で、対応するプログラムコードの実行のための適当なブロックを選択することができる。 ある実装形態によれば、ブロックは、各ブロックに関連付けられた依存性情報に従いキューに入れられる。

    【0030】開発者は、ブロックを処理するために利用可能なスレッドの数を指定することもできる。 各スレッドは、ブロックに関連付けられたプログラムコードを実行するために、プログラムカウンタと一時メモリを必要に応じて管理する。 例えば、開発者は、1つのプロセッサに対して1のスレッドを指定することができる。 他の構成も、本発明の原理に従って、可能である。

    【0031】各スレッドは、順番に、キューからブロックを選択し、そのブロックについて開発者が指定したプログラムコードを実行する。 キューにブロックが有る限り、前記スレッドは、有効な場合には、それらを選択し、該当するプログラムコードを実行する。 更に、キューに入れられたブロックは、各ブロックの依存性情報を反映する方法で実行用として選択される。 有効スレッドが、キューに入れられたブロックを実行用として選択すると、そのスレッドはブロックの依存性情報(即ち、他ブロックへのリンク)を先ず検査して、もし、被選択ブロックが依存するブロックの実行が完了すると、スレッドは、被選択ブロックのプログラムコードの実行を進行することができる。 さもなければ、被選択ブロックのプログラムコードの実行を開始するまでスレッドは待ち状態に入る。 代わりに、スレッドは、適当ならば優先度に基づいて、キューの次の有効ブロックを選択し、それが依存するブロックに関するステートを決定するために該当するブロックを検査する(即ち、被選択ブロックのプログラムコードが安全に実行することができるように、
    それが依存する全てのブロックの実行を完了させる)。
    このプロセスは、スレッドがキューの全てのブロックに関連付けられたプログラムコードの実行を完了するまで継続される。

    【0032】加えて、ユーザには、開発プロセスの間、
    プログラムに付加的な仕様を追加する方法が与えられる。 これらの特定項目により、メモリ領域におけるブロック内の要素の属性を指定でき、複数のブロック集合の間の依存性を効率的に指定することができる。 更に、システムは、「マクロ」と称されるコードを配信し、これにより、ユーザは、ブロックの要素にアクセスする制御フロープログラムコードを記述することができる。 加えて、ユーザは、ブロックがどのように並列処理されるかを決定する分散グループにブロック集合を割り当てることができる。

    【0033】次の記載は、データフロープログラムの設計及び開発及びそれに続く実行段階の局面についての詳細を含む。 領域とブロックとを用いるデータフロープログラムの定義工程 設計と開発プロセスの始めには、開発者は、メモリ領域を指定し、その領域を複数のブロックに分割する。 これは開発ツールのインタフェースを用いて図表を用いて行われる。 図2は、4x4の行列に配置された16のブロックを含むメモリ領域100の一例を示しており、各ブロックは、行番号と列番号とで識別される。 例えば、メモリ領域100の左上のブロックは、第1行の第1列に設置されていることを示すラベル(1,1)を付され、領域100の右下角のブロックは右下角に設置されていることを示すラベル(4,4)を付される。 残りの14ブロックの全ては、同様のラベル付けの約束に従いラベルを付される。 説明されるように、各ブロックは、
    データ集合からなり、このデータ集合は、数値又は情報の行列又は配列であり、プログラムコードに従って処理される。

    【0034】メモリ領域を定義し、これをブロックへ分割した後に、開発者は、各ブロックのステートを指定する。 説明されるように、ブロックのステートは、開発者がそのブロックに割り当てたプログラムコードに対応しており、開発者は、指定されたプログラムコードを用いてマルチプロセッサコンピュータシステムにブロックデータを処理させるつもりであることを意味する。 前記インタフェースは、プログラムコードをブロックに付与するためのウィンドウ又は他の手段を、開発者に提供する。 開発ツールは、そのコードをそのブロックに関連付ける。

    【0035】例示した領域100において、ラベル(1,1)、(2,1)、(3,1)及び(4,1)のブロックグループ100aは、同じステートを共有し、
    ラベル(1,2)、(1,3)及び(1,4)のブロックグループ100bは、同じステートを共有し、ラベル(2,2)、(2,3)、(2,4)、(3,2)、
    (3,3)、(3,4)、(4,2)、(4,3)及び(4,4)のブロックグループ100cは、同じステートを共有する。 図2において、3つの異なるステートは、各グループのブロックに、異なる陰影(又は塗りつぶし)を施すことによって表される。

    【0036】領域100及びそのブロックはサイズが統一されているように示されるが、実際には、メモリ領域及びブロックは異なる形状及びサイズを有する。 例えば、メモリ領域100は4x4の行列の16のブロックからなり、図では示されていないが、各ブロックは8x
    8の行列を有するようにしてもよい。 種々の、メモリ領域は、4x3のブロックの行列からなるようにしてもよく、各ブロックは3x2のデータの行列からなるようにしてもよい。

    【0037】次に、開発者は、ブロック間の依存関係を指定する。 更に、依存関係とは、1つのブロックがプログラム実行中に他ブロックの結果又は最終的なステートに依存する関係として定義される。 換言すれば、1つのブロックは他の依存するブロックが処理される前に処理されなければならない。 図3A及び図3Bは、図2の領域100を使用する依存関係が複数ある例を示す。 図3
    Aに示すように、(1,2)、(1,3)及び(1,
    4)のラベルを付されたブロックの夫々は、(1,
    1)、(2,1)、(3,1)及び(4,1)のラベルを付されたブロックに依存する。 これは、(1,1)、
    (2,1)、(3,1)及び(4,1)のラベルを付されたブロックの全ては、(1,2)、(1,3)及び(1,4)のラベルを付されたブロックよりも先に処理されなければならないことを意味する。

    【0038】同様に、図3Bは(1,2)、(1,3)
    及び(1,4)のラベルを付された各ブロックと、
    (2,2)、(2,3)、(2,4)、(3,2)、
    (3,3)、(3,4)、(4,2)、(4,3)及び(4,4)のラベルを付されたブロックとの間の依存関係を示す。 図示の如く、ラベル(1,2)のブロックは同じ列のラベル(2,2)、(3,2)、(4,2)のブロックよりも前に処理されなければならず、ラベル(1,3)のブロックは、同じ列のラベル(2,3)、
    (3,3)、(4,3)のブロックよりも前に処理されなければならず、ラベル(1,4)のブロックは、同じ列のラベル(2,4)、(3,4)、(4,4)のブロックよりも前に処理されなければならない。 図は、単純に依存構成の一例を示し、開発者は他の構成を選んでもよい。

    【0039】依存関係を示す図表を完成させるときに、
    ユーザインタフェースを用いて視覚的に見ることができ、完成することができれば便利である。 図4は、図3
    A及び図3Bにおける依存関係を図示する有向非循環グラフである。 図4において示す有向非循環グラフは、第1のステートを共有するブロックの全ての出力は、第2
    のステートを共有するブロックの夫々の処理に必要とされることを視覚的に示す。 次に、第2のステートを共有するブロックの夫々は、第3のステートを共有する3つのブロックからなる3つのグループの夫々よりも前に処理されなければならない。 本発明の原理(後述する)に従って処理するのに、このようなグラフを使用してブロックを順序付ければよい。

    【0040】データフロープログラムツール コンピュータアーキテクチュア 図5は、本発明に係る方法の実施、及び本発明に係るシステムの実装に好適なデータ処理システム500の典型例を示す。 データ処理システム500は、ローカルエリアネットワーク、ワイドエリアネットワーク又はインターネット等のネットワーク570に接続されたコンピュータシステム510を含む。

    【0041】コンピュータシステム510は、主メモリ520、副記憶装置530、中央処理装置(CPU)5
    40、入力装置550及び画像表示装置560を含む。
    主メモリ520は、データフロープログラム開発ツール522及びプログラム524を保持する。 データフロープログラム開発ツール522は、制御フロープログラムコードを使用するプログラムを含むデータフロープログラムの設計及び開発用のインタフェースを提供する。 表示装置560を用いて前記ツールを使用すると、開発者は、図2の領域100のようなメモリ領域を設計でき、
    且つ、その領域を対応するステートを有するブロックに分けることができる。 更に、前記ツールによって、開発者は、マルチプロセッサコンピュータシステムを用いて各ブロックを処理するためにプログラムコードを記述することができる(図7参照)。

    【0042】プログラム524は、例えばツール522
    を用いて、本発明に従って設計されたデータフロープログラムを示す。 プログラム524は、メモリ領域、その領域のブロック、各ブロックに関連付けられたプログラムコード及びブロック間の依存関係を特定する情報からなる。

    【0043】実施の形態の一例として、メモリ520に格納された形態が挙げられるが、当業者にとっては、本発明に従うシステム及び方法の全て或いは一部が、副記憶装置のような他のコンピュータ可読媒体に格納され、
    そこから読み出されてもよいことは自明である。 例えば、ハードディスク、フロッピー(登録商標)ディスク、そしてCD−ROM、或いはインターネットのようなネットワークから受信される搬送波或いは、他の形式のROM又はRAMが前記副記憶装置に該当する。 また、データ処理システム500の特定の構成要素が示されるが、当業者にとっては、本発明に従う方法及びシステムに適合するデータ処理システムが、付加的な又は異なる構成要素を含んでもよいことは自明である。

    【0044】工程 図6は、データフローモデルを用いるプログラムを記述するために開発者によって実行されるプロセス600のフローチャートである。 このプロセスは、本発明に係る方法でツール522によって実行してもよい。 ツール5
    22は、ユーザインタフェース及び関係する機能を備えており、ソフトウェア開発者がデータフローモデルを用いるプログラムを記述するための環境を提供する。

    【0045】開発者が、ツール522の実行を開始すると、それは、開発者がデータフロープログラムを記述するために必要な種々の図表を表示する。 ツールは、先ず、開発者がメモリ領域を定義するために用いる図表を表示する(ステップ610)。 ツール522を用いて、
    開発者は領域をブロックに分割する(ステップ62
    0)。

    【0046】処理される領域にブロックが有る限り(ステップ630)、開発者はブロックを選択し(ステップ640)、被選択ブロックの最終のステートに影響する他ブロック(言い換えれば、被選択ブロックが依存するブロック)を識別し(ステップ650)、そして、各ブロックのプログラムコード、例えば既存の制御フロープログラムの部分、を指定する(ステップ660)。 このプロセスには、この既存の制御フロープログラムをデータフロー構成を用いてマルチプロセッサコンピュータシステムで動作させるために変換する工程が含まれるが、
    当業者にとっては、マルチプロセッサコンピュータシステム上で実行するための新しいデータフロープログラムを開発するために、前記ツール522を用いてもよいことは自明である。

    【0047】すべてのブロックが処理された(ステップ640〜660)後で、開発者はブロック間を画像上で相互に結びつけることによりブロック間の依存関係を確立し(ステップ670)、ツール522は、リンクに対応するデータを生成及び格納するために前記視覚的情報を使用する。 前記ブロックは、マルチプロセッサコンピュータシステムで処理するために論理的にキューに入れられる(ステップ680)。 ツール522は、処理に適した順番でブロックをキューに入れるために前記依存/
    リンク情報を利用する。 例えば、特定のブロックが依存するどのブロックも、そのキューにおいてその特定のブロックよりも前に設置される。 図2〜図4の例に関しては、ブロックは図7に示した態様でキューに入れられる。 具体的には、第1のステートを共有するブロック、
    即ち、(1,1)、(2,1)、(3,1)及び(4,
    1)は、第2のステートを有するブロック、即ち、
    (1,2)、(1,3)、及び(1,4)よりも前に入れられ、第3のステートを共有するブロック、即ち、
    (2,2)、(2,3)、(2,4)、(3,2)、
    (3,3)、(3,4)、(4,2)、(4,3)及び(4,4)が、その後に続く。

    【0048】マルチプロセッサプログラムの実行 説明されるように、本発明によれば、データフロープログラムがマルチプロセッサコンピュータシステムで実行される。 このようなマルチプロセッサコンピュータシステムの構成は多く有るが、図8にその一例を示す。 例えば、タイトに結合される構成では、複数のプロセッサが全て同一の物理的な箱に設置される。 他のルーズに結合される構成では、システムはネットワーク上の複数のコンピュータにより構成され、各コンピュータは個別のプロセッサを有する。

    【0049】マルチプロセッサコンピュータシステム 図8に示されるように、マルチプロセッサコンピュータシステム810は、ネットワークインタフェース820
    に接続される。 そのインタフェースにより、開発者は、
    開発ツール環境(図5参照)からデータフロープログラムを移動することができるが、これは、マルチプロセッサコンピュータシステム810で実行させるためである。 代わりに、本発明の原理に従うデータフロープログラム開発プロセスは、プログラムの実行にも使用されるシステム810上で実行されるようにしてもよい。 この代替手法によれば、プログラムを開発用システムから別に設けたプログラム実行用システムへ移動させる必要がない。

    【0050】マルチプロセッサコンピュータ810は1
    つの共有メモリ830と複数のプロセッサ840a、8
    40b、・・・840nからなる。 本発明に従って開発されたデータフロープログラムの実行に関しては、プロセッサの個数及び型が特に限定されるわけではない。 例えば、複数のプロセッサを有する構成のHPCサーバが使用されてもよい。 HPCサーバは、サンマイクロシステムズ(株)の製品である。 プロセスは、各プロセッサ上で独立して作動し、メモリ830を共有する。 ここでいうプロセスは、ツール522を用いて開発されたデータフロープログラムのブロックに関連付けられたプログラムコードの実行を制御するスレッドであってもよい。

    【0051】プロセス 本発明に係るデータフロープログラムの動作を、図9のプロセス900を参照して説明する。 複数のスレッドが、データフロープログラムの種々の構成要素を処理するために使用される。 尚、スレッドの個数は重要ではなく、開発者がスレッドの個数を決定してもよい。 例えば、プロセッサ1個当たり1つのスレッドとしてもよい。 また、システムが利用可能なプロセッサの個数及びデータフロープログラムの解析に基づいてスレッドの個数を決定するようにしてもよい。

    【0052】特定のプログラムコードに従ってブロックを処理するためにスレッドが利用可能であれば(ステップ910)、スレッドはキューにブロックが有るか否かを決定する(ステップ920)。 ブロックがある場合には、利用可能なスレッドは処理のためのキューからブロックを選択する(ステップ930)。 通常、ブロックは、キューにおける配置順序に基づいてキューから選択される。 一方、被選択ブロックが未だ実行されていない他ブロックに関するプログラムコードの実行に依存するとスレッドが決定したときには(ステップ940)、スレッドは、その被選択ブロックを飛ばす(ステップ95
    0)。 一方、全てのブロック依存性が満足されると(ステップ940)、スレッドは、割り当てられたプロセッサを使用して、そのブロックに関連付けられたプログラムコードを実行する(ステップ960)。 データフロープログラムを処理するスレッドが、処理待ちキューにおける全てのブロックをキューから出すと、この工程は終了する(ステップ920)。

    【0053】プロセス900に従いデータフロープログラムの実行を図示する目的で、図10A〜図10Cは図7のキューの一部を図示する。 該一部は、処理のためにキューに入れられた領域100の始めの5つのブロックを含む。 図10Aに示すように、各スレッドは、プロセッサの一つを用いて、被選択ブロックを処理する。 この例では、4個のスレッドと4個のプロセッサが有る。 スレッドが処理を完了すると、該スレッドはキューにおいて次に利用可能なブロックを実行する。 例えば、図10
    Bに示すように1つのスレッドがラベル(1,1)のブロックのプログラム実行を完了すると、ラベル(1、
    2)のブロックを実行する。 しかしながら、ラベル(1,2)のブロックは、未だ実行される予定の他のブロック即ちブロック(2,1)、(3,1)及び(4,
    1)の最終ステートに依存する。 図10Cに示すように、これらのブロック全てに関してプログラムコードの実行が完了されれば、スレッドはブロック(1,2)の処理を継続することができる。 計算資源を休止させること及び効率的に使用しないことを回避するために、スレッドは、キューの処理ブロックを飛ばして、キューの各ブロックに関連付けられた依存関係に従ってキューの他ブロックの処理を継続するものであってもよい。 また、
    図10は4個のスレッドと4個のプロセッサを示しているが、特定のシステム構成に応じてスレッド又はプロセッサの個数は、それよりも少なくても多くてもよい。

    【0054】ユーザによる仕様の最適化 以下の説明は、ユーザがデータフロープログラムを最適化するために提供可能な付加的仕様の詳細を含んだものである。 ツールを用いたメモリ領域仕様 ある実装形態によれば、メモリ領域は、ツール522を用いて以下の制御フロー変数を与えることによって、ユーザが指定することができる。 名前:特定の名前 種類:メモリ領域が問題に対する入力か、出力か、入出力か、又はその問題の解を求める間にのみ使用されるテンポラリスペースかの決定 型 :メモリ領域の要素の制御フローデータ型に対応した型、すなわち、整数か、実数か等 次元:スカラー量は0、ベクトルは1、行列は2である。 より高い次元を用いることもできる。 サイズ:メモリ領域の各次元の大きさ グリッド:メモリ領域内のブロックの各次元の大きさ 先頭次元:最初の行列の次元の大きさ(メモリ領域が行列よりも大きい場合には、その大きさを保持)

    【0055】プログラムコード用のマクロ ブロック上でオペレーションを実行する制御フロープログラムコードについて、ブロック要素へアクセスし、これを操作することができるようにすることも、利用価値がある。 マクロが提供されるが、これによって、ユーザは、制御フローフォーマットを用いてプログラムコードを記述することができる。 また、有向非循環グラフの各ノードのブロック上でオペレーションが実行されることになる。 メモリ領域内の指定要素とブロック属性とに対しアクセスするために、マクロがプログラムコード内で用いられる。 引数としてメモリ領域内のブロックを取得すると、マクロは、例えば、ブロックの行又は列の番号、又は、メモリ領域の行又は列の番号を返すことができる。 以下の表3は、種々のマクロの典型例をリストアップしたものである。 ユーザは、プログラムコードにマクロを挿入することができ、マクロは、メモリ領域のブロックに作用することになる。

    【0056】

    【表3】

    【0057】図11は、10x10に配置された要素を有するブロックを備えたメモリ領域1100の典型例を示す。 ブロック1102を備えたメモリ領域1100が図示のように配置されると仮定すれば、表4に示したように、以下のマクロがブロック1102について数値を求める。

    【0058】

    【表4】

    【0059】再帰的プログラムコードを使用することができるが、この再帰的プログラムコードにおいては、より小さな領域が繰り返して割り当てられることに留意すべきである。 この場合には、ベースケースに到達しその領域がプロセスを繰り返すのに充分なサイズでなくなったときに再帰プロセスが停止する。 特定のプログラムコードは、再帰的プロセスに関連付けることができ、そのプロセスは、そのベースケースに対してのみ実行される。 以下の再帰的マクロは、表5に示した各レベルを求める。

    【0060】

    【表5】

    【0061】加えて、プログラムコードは、副有向非循環グラフとして設計することができる、その副有向非循環グラフは、当該プログラムコードのノードが副有向非循環グラフによって置き換えられることを意味する。 これにより、有向非循環グラフの階層構造を構築することができる。

    【0062】依存性 前述したように、ブロック間の依存性が特定され、その依存性が他ブロックの前に実行を必要とするブロックを指定すると、これらの依存性は順番に実行順序を表す有向非循環グラフ内のノード間の接続を決定する。 しばしば、メモリ領域のいくつかのブロックは同一のメモリ領域のいくつかの他ブロックに依存する。 あるステートにあるブロックセット間の依存性を簡単に指定できるようにするために、ツール522は、ユーザに複数ブロック間の依存性を素早く指定できるように付加機能を提供する。

    【0063】図12Aは、本発明の一実施形態におけるユーザインタフェースを用いるブロックセット1204
    (又はステート)の親ブロック1204を示す。 この実施形態においては、親ブロック1202は、指定されるべき親ブロックセットのスタート箇所である左上コーナーを表している。 次に、ユーザは、この親ブロック12
    02上の依存性が行及び列が固定なのか自由なのかを指定する。 図12B〜図12Dは、典型的な依存ブロックセット1204が与えられる種々の指定の組合せを示す。 ユーザが固定の依存性を指定した場合には、依存ブロックセット1204内の全ブロックは、前記親ブロック1202(図12A)の処理に依存することになる。
    行に関して自由な場合には、依存ブロックセット120
    4の行の位置が変化するに従って、依存ブロックが変化する(左上ブロックから)(図12B)。 同様にして、
    依存性が列に関して自由な場合には、依存ブロックセット1204の列の位置が変化するに従って、依存ブロックが変化する(左上ブロックから)(図12C)。 依存性が行及び列に関して自由な場合には、依存ブロックセットの位置が変化するに従って、依存ブロックが変化する(図12D)。 依存性を指定するこの方法によれば、
    ツール522により、ユーザは、より簡単にマルチブロック依存性を指定することができる。

    【0064】分散 ツール522により、ユーザは、「分散」をメモリ領域内のブロックセットに割り当てることができ、これらの分散は、ブロックを有向非循環グラフのノードに割り当てる方法を制御するものである。 これらの分散は、場合に応じて種々のブロックを単一ノードにグループ化するのに用いられ、その結果、種々の並列処理スキームを解を求めるのに使用することが可能になる。 例えば、3x
    3の配列演算の結果は、3x3の配列であると仮定すれば、ユーザは、9個のノード上で処理するために9個のスレッドを必要とすることになり、各値が配列演算の結果となる。 しかしながら、ユーザは、3個のノードを処理するのに3個のスレッドを必要とすることもでき、この場合、各値が配列の各列の結果となる。 後者の場合には、ノードは、処理すべきより多くのブロックを保持することになるが、スレッドはよりすくなくて済むことになる。 分散状態の変化によりユーザは、並列処理スキームの選択を場合に応じて行うことが可能となる。

    【0065】分散を指定するためには、ユーザは、ブロックセットを識別するメモリ領域の長方形エリアを選択する。 ノードへのブロック割当を決定するのに加えて、
    分散は、更に、どのブロックマクロがオペレーションを行うかを制御する。 分散には、2個の主要なカテゴリ、
    すなわち、第1と第2のカテゴリがある。 第1分散と第2分散との間の違いは、マクロが第1分散上のブロックに対してのみオペレーションを行うことができることにある。 それらは、第2分散内のブロック上でオペレーションを行うことはない。 加えて、各メモリ領域は、ただ1つの第1分散を備えることができ、この分散により、
    問題を解くのに有向非循環グラフにいくつのノードがあるのかが決定される。

    【0066】第2分散においては、処理中に、該分散内のブロックがノードへ追加されるとすれば、該分散内の他ブロックもまた、その同じノードへ追加されることになる。 これにより、依存性の特定がより容易になる。

    【0067】分散はまた、種々のカテゴリのいずれか、
    即ち、第1の単一、第2の「複数の行」、第2の「複数の列」、第2の「全て」、及び「複数」(第1又は第2
    のいずれか)に該当する。

    【0068】第1の単一分散は、有向非循環グラフがいくつ生成されたかを制御する。 第1の単一分散がメモリ領域に存在する場合には、1つの有向非循環グラフのノードがその分散内の各ブロック用に生成されることになる。 第1の単一分散にある各ブロックは、それ自身のノードに入ることになるが、与えられた第1の単一分散の2個のブロックが同一のノードを共有することはない。
    問題を解くために第1の単一分散より多い複数の分散がある場合、即ち、2個又はより多くのメモリ領域の各々がある場合には、それらは、同一の大きさと形態とを備えていなければならない。 その理由は、各々が各有向非循環グラフへ入る1個のブロックを備えることになるからである。

    【0069】全ての他のタイプの分散について、該分散中のどのブロックが第1の単一分散ブロックについたノードに追加されるのかを決定するために、該分散は、視覚的に第1の単一分散上で表される。 第1の単一分散ブロック上のブロックは、その下に第1の単一分散ブロックを保持するノードに追加される。 後述するように、第2分散に対しては、そのブロックに関連付けられた他ブロックもまた、同一のノードに追加される。

    【0070】排他的な第2分散の3個のタイプは、ブロック上でオペレーションを実行するプログラムコード内のマクロによってアクセスされる可能性のないブロックを備える。 これらの分散は、第2の複数の行、第2の複数の列、及び第2の全ての分散である。 第2の複数行の分散内のブロックがノードに追加されると、そのブロックの行内の全ブロックもまた、そのノードに追加される。 第2の複数の列の分散は、全ての列が行のかわりに追加された場合を除いて、同様なものとなる。 第2の全分散においては、その分散のブロックがノードに追加されたときに、その分散の各ブロックがそのノードへ追加される。

    【0071】複数の分散が第1又は第2のものとなることができ、その分散のブロックは、第1であればマクロによってアクセスすることができる。 第1の単一分散が複数の分散よりも大きい場合には、複数の分散は、繰り返して、第1の分散の各セクションにまたがって存在し、これは、全部をカバーするまでなされる。 各反復においては、複数の分散のどのブロックでも単一の第1の分散のブロック上に存在し、そのブロックは、その下の単一の第1分散のブロックを保持する同一のノードへ入り込むことになる。

    【0072】分散はまた、置換属性を備えることができる。 このことは、関連付けられた属性がオーバレイプロセスが適用される前に置き換えられることを示している。 これは、第1の単一分散に適用することはできず、
    また、「全て」の分散に有効であるわけではない。

    【0073】図13は、行列演算問題で使用されるメモリ領域の典型例を示したものである。 同図に示したように、3個の二次元メモリ領域A,B,Cを含む行列演算の問題を考えてみよう。 各メモリ領域は、あるサイズの行と列を備え、メモリ領域が図13に示したような正方形ブロックに分割されると仮定する。 A*B=Cというオペレーションは、種々の異なるスキームを用いて並列に実行することができる。 まず、Cの各ブロックが種々のスレッドによって記述されたスキームを考える。 Cのブロックは、Aの対応する行にあるブロックとBの対応する列にあるブロックとを掛け合わせることにより構成される。 この例によれば、ダッシュがついたラインがユーザにより生成された分散を表している。

    【0074】図13に示した3x3の場合には、Cが第1の単一の分散を有しているため、その分散内のブロックと有向非循環グラフのノードとの間の一対一対応となり、9個のノードが有向非循環グラフで生成され、各々がCの各ブロックとなる。 第2のAの演算行の分散とB
    の演算列の分散とは、各ノードへ適当なAの行とBの列とを追加する。 例えば、C(1,1)のブロックがノードへ追加されると、A(1,1)及びB(1,1)のブロックもまた追加される。 A(1,1)ブロックが第2
    の演算行であるため、その列の全ブロックもまた同一のノードへ追加される等である。

    【0075】生成された結果のノードを表6に示す。 表6によれば、順番に並んだペアが各追加ブロックの行と列とを特定し、ハイフン(「−」)は、複数のブロックが分散から追加された場合における行と列との範囲を特定している。

    【0076】

    【表6】

    【0077】第1番目になる場合には、各ノードにおけるCブロックに関する情報は、マクロの利用を通じたコードから取得できる。 しかしながら、A及びBブロックは、それらの分散が第2番目であるため、マクロによってアクセスすることはできない。

    【0078】図14は、同一の配列演算問題を解くために生成された第1番目のA及びBの分散を示したものである。 A,B及びCの同一のブロックは、各ノードに関連付けられるが、マクロでアクセス可能なA及びBの第1のブロックが存在している。 このインプリメンテーションによれば、以下の9個のノードとなる。

    【0079】

    【表7】

    【0080】各ノード上で実行するプログラムコードは、FORTRANの関数であるMATRIX_MUL
    TIPLYによって表すことができ、引数として、3個の行列A,B及びC各々のロケーション,行番号及び列番号をとるものである。

    【0081】

    【表8】

    【0082】図15は、各スレッドがCのブロックの列を処理する他の可能な行列演算スキームを表したものである。 これは、図15に示した分散によって行うことが可能である。 この場合においては、3個のノードのみが生成されているが、これは、第1の単一分散に3個のブロックがあるからである。 演算列の分散が第1の単一の分散にまたがるときは、第1の単一の分散ブロック上の各ブロックは、演算列分散の同一列の他ブロックに沿って、第1の分散ブロックとして同一のノードに追加される。 この例によれば、Bの第2の演算列の分散について、B(2,1)は、C(1,1)にかぶさっており、
    C(1,1)を保持するノードに追加される。 その理由は、それが演算列の分散であり、B(2,1)と同一列にあるブロックB(2,2)もまた同一のノードに追加されるからである。 また、Aからのブロックがノードに追加されると、Aからの全ブロックは、その第2の全分散に応じてそのノードに追加される。

    【0083】

    【表9】

    【0084】このスキームの利用は、プログラムコードが次のように書き換えられることを要求するものである。

    【0085】

    【表10】

    【0086】図16は、AがBの置き換えと演算されてCを構成する他の一例を示したものである。 置換属性の利用により、従前の例からのスキームを若干修正して使用することができる。

    【0087】結び このように、本発明に係る方法、システム及び製品は、
    開発者が容易にデータフロープログラムを開発すること、及び、データフローモデルに従って既存の制御フロープログラムを変換することを可能にする。 開発者がメモリー領域を定義すること及びそれらを対応するステート(夫々が制御フロープログラムの特定の命令に関連付けられる)を有するブロックに分割することを許容することにより、インタフェースは、マルチプロセッサ環境で実行するためのデータフロープログラムの開発を容易にする。 プログラムの構成要素は、制御フロープログラミング方法を利用しているが、そのプログラムは全体としてデータフロー型の手法を用いて設計される。 その上、各ブロックは、データの集合を含んでおり、各ブロックに関連付けられたプログラムコードが必ずしもスカラー又は単一のデータ項目を処理するわけではないことを意味する。 これにより、本手法は、大量のデータ処理を必要とするデータ集約型プログラミングシステムであって、構成要素がマルチプロセッサコンピュータシステムで容易に並列処理されることが可能であるシステムに対してより有用なものになる。

    【0088】また、本発明に係る方法は、コンピュータプログラム言語にかかわらずマルチプロセッサシステムで実行される全てのプログラムに適用することができる。 例えば、フォートラン77はマルチプロセッサコンピュータシステムで実行されるプログラムを開発するために一般的に使用されるプログラム言語である。

    【0089】上記の本発明の実施形態の説明は、図解及び解説の目的で示されている。 それは、本発明の全ての態様を網羅しているわけではなく、本発明を開示された詳細な形態だけに限定するものでもない。 上記の教示に照らして修正及び変更が可能であり、本発明を実施することにより修正及び変更がもたらされてもよい。 例えば、上記の実施形態は、ソフトウェアを含んでいるが、
    本発明はハードウェアとソフトウェアとの組み合わせとして実施されてもよく、ハードウェア単独で実施されてもよい。 本発明はオブジェクト指向と非オブジェクト指向の両方のプログラミングシステムを用いて実施されてもよい。 本発明の範囲は、クレームとそれらに均等なものによって定義される。

    【図面の簡単な説明】

    【図1】特定式の演算用のデータフローグラフの一例を示した図である。

    【図2】本発明に係る方法で定義されたメモリ領域の一例を示したブロック図である。

    【図3A】図2に示したメモリ領域のブロック間の依存関係の一例を示したブロック図である。

    【図3B】図2に示したメモリ領域のブロック間の依存関係の一例を示したブロック図である。

    【図4】図3A及び図3Bに対応する依存関係を示した有向非循環グラフの一例を示した図である。

    【図5】本発明がインプリメントされる典型的なデータ処理システムのブロック図である。

    【図6】本発明に係るデータフロープログラム開発ツールによって実行されるオペレーションのフローチャートである。

    【図7】本発明によるデータフロープログラムの実行順序に対応したキューの一例を示した図である。

    【図8】本発明に係る方法及びシステムを実施するのに好適な典型的なマルチプロセッサコンピュータシステムのブロック図である。

    【図9】本発明によるデータフロープログラムの実行時に遂行されるオペレーションのフローチャートである。

    【図10A】本発明に係るデータフロープログラムの実行サイクルを説明するためのブロック図である。

    【図10B】本発明に係るデータフロープログラムの実行サイクルを説明するためのブロック図である。

    【図10C】本発明に係るデータフロープログラムの実行サイクルを説明するためのブロック図である。

    【図11】本発明に係る要素を含むブロックを含むメモリ領域の典型例を示した図である。

    【図12】本発明に係るブロック集合間の依存性の生成を説明するための図である。

    【図13】本発明に係る分散グループに割り当てられたブロックを有する3つのメモリ領域の典型例を示した図である。

    【図14】本発明に係る分散グループに割り当てられたブロックを有する3つのメモリ領域の典型例を示した図である。

    【図15】本発明に係る分散グループに割り当てられたブロックを有する3つのメモリ領域の典型例を示した図である。

    【図16】本発明に係る分散グループに割り当てられたブロックを有する3つのメモリ領域の典型例を示した図である。

    【符号の説明】

    500 データ処理システム 510 コンピュータシステム 520 主メモリ 530 副記憶装置 540 中央処理装置 550 入力装置 560 画像表示装置 570 ネットワーク

    ───────────────────────────────────────────────────── フロントページの続き (54)【発明の名称】 制御フロープログラムの実行方法、データフロープログラムの開発方法、データプロセッシング システム、プログラム実行方法、プログラム実行装置、データプロセッシングシステムの制御命 令を記憶したコンピュータ読取可能な記録媒体、コンピュータ実装可能なプログラムの開発方 法、コンピュータ実装可能なプログラムの変換方法

    高效检索全球专利

    专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

    我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

    申请试用

    分析报告

    专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

    申请试用

    QQ群二维码
    意见反馈