JP5479942B2 - 並列化方法、システム、及びプログラム - Google Patents

並列化方法、システム、及びプログラム Download PDF

Info

Publication number
JP5479942B2
JP5479942B2 JP2010035691A JP2010035691A JP5479942B2 JP 5479942 B2 JP5479942 B2 JP 5479942B2 JP 2010035691 A JP2010035691 A JP 2010035691A JP 2010035691 A JP2010035691 A JP 2010035691A JP 5479942 B2 JP5479942 B2 JP 5479942B2
Authority
JP
Japan
Prior art keywords
block
strand
blocks
internal state
strands
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.)
Expired - Fee Related
Application number
JP2010035691A
Other languages
English (en)
Other versions
JP2011170732A (ja
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.)
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
Priority to JP2010035691A priority Critical patent/JP5479942B2/ja
Priority to US13/031,666 priority patent/US8959498B2/en
Publication of JP2011170732A publication Critical patent/JP2011170732A/ja
Application granted granted Critical
Publication of JP5479942B2 publication Critical patent/JP5479942B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • G06F8/456Parallelism detection

Landscapes

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

Description

この発明は、シミュレーション・システムにおいて、プログラムの実行を並列化により高速化する技法に関する。
近年、科学技術計算、シミュレーションなどの分野で、複数のプロセッサをもつ、いわゆるマルチプロセッサ・システムが使用されている。そのようなシステムでは、アプリケーション・プログラムは、複数のプロセスを生成して、個別のプロセッサに、プロセスを割り当てる。それらのプロセッサは、例えば、共有のメモリ空間を利用して互いに通信しながら、並列的に処理を進める。
最近になって特に盛んに開発されるようになってきたシミュレーションの分野として、ロボット、自動車、飛行機などのメトカトロニクスのプラントのシミュレーション用ソフトウェアがある。電子部品とソフトウェア技術の発展の恩恵により、ロボット、自動車、飛行機などでは、神経のように張り巡らされたワイヤ結線や無線LANなどを利用して、大部分の制御が電子的に行われる。
それらは、本来的には機械的装置であるのに、大量の制御ソフトウェアをも内蔵している。そのため、製品の開発に当たっては、制御プログラムの開発とそのテストに、長い時間と、膨大な費用と、多数の人員を費やす必要が出てきた。
このようなテストにために従来行われている技法として、HILS(Hardware In the Loop Simulation)がある。特に、自動車全体の電子制御ユニット(ECU)をテストする環境は、フルビークルHILSと呼ばれる。フルビークルHILSにおいては、実験室内で、本物のECUが、エンジン、トランスミッション機構などをエミュレーションする専用のハードウェア装置に接続され、所定のシナリオに従って、テストが行われる。ECUからの出力は、監視用のコンピュータに入力され、さらにはディスプレイに表示されて、テスト担当者がディスプレイを眺めながら、異常動作がないかどうか、チェックする。
しかし、HILSは、専用のハードウェア装置を使い、それと本物のECUの間を物理的に配線しなくてはならないので、準備が大変である。また、別のECUに取り替えてのテストも、物理的に接続し直さなくてはならないので、手間がかかる。さらに、本物のECUを用いたテストであるため、テストに実時間を要する。従って、多くのシナリオをテストすると、膨大な時間がかかる。また、HILSのエミュレーション用のハードウェア装置は、一般に、非常に高価である。
そこで近年、高価なエミュレーション用ハードウェア装置を使うことなく、ソフトウェアで構成する手法が提案されている。この手法は、SILS(Software In the Loop Simulation)と呼ばれ、ECUに搭載されるマイクロコンピュータ、入出力回路、制御のシナリオ、エンジンやトランスミッションなどのプラントを全て、ソフトウェア・シミュレータで構成する技法である。これによれば、ECUのハードウェアが存在しなくても、テストを実行可能である。
このようなSILSの構築を支援するシステムとして例えば、MathWorks社から入手可能なシミュレーション・モデリング・システムである、MATLAB(R)/Simulink(R)がある。MATLAB(R)/Simulink(R)を使用すると、図1に示すように、画面上にグラフィカル・インターフェースによって、機能ブロックを配置し、矢印のようにその処理の流れを指定することによって、シミュレーション・プログラムを作成することができる。これらのブロック線図は、シミュレーションの1タイムステップ分の処理を表しており、これが所定回繰り返されることにより、シミュレーション対象となるシステムの時系列における振る舞いを得ることができる。
こうして、MATLAB(R)/Simulink(R)上で、機能ブロックなどのブロック線図が作成されると、Real-Time Workshop(R)の機能により、等価な機能のC言語など既知のコンピュータ言語のソース・コードに変換することができる。このC言語のソース・コードをコンパイルすることにより、別のコンピュータ・システムで、SILSとして、シミュレーションを実行することができる。
図1は、典型的なMATLAB(R)/Simulink(R)の機能ブロックのループを模式的に示す図である。機能ブロックは大別して、内部状態をもつブロックと、内部状態をもたないブロックに分かれる。図1では、斜線をつけて示したブロックA、Bが内部状態をもつブロックであり、斜線をつけていないブロックa、b、cが、内部状態をもたないブロックである。
内部状態をもたないブロックでは、図2(a)に示すように、入力データから直ちに出力データが計算されて出力される。
一方、内部状態をもつブロックでは、図2(b)に示すように、前回の入力データに、ある所定の演算を施した値が内部データ202として保持され、出力データは、内部データ202をもちいて計算される。よって、今回の入力データは、今回の出力データの計算には使われず、次回の出力データの計算のために、今回の出力データの計算の完了後、内部データ202として保持される。
図1で示すブロック線図の構成の処理を、説明する。ここで、ブロックAの出力をf1、ブロックaの出力をf2、ブロックBの出力をf3、ブロックbの出力をf4、ブロックcの出力をf5とする。f1はブロックaに入力され、f2はブロックBに入力され、f3はブロックbに入力され、f4はブロックcに入力され、f5はブロックAに入力される。但し、ブロックAとブロックBは、内部状態をもつブロックなので、上述のように、各々、f1及びf3を計算するために、直接入力f5、f2を使うことはない。以上のことを擬似コードで書くと、以下のとおりである。
while (ts < EOS) {
// 出力
f1 = Aout(sA)
f2 = a(f1)
f3 = Bout(sB)
f4 = b(f3)
f5 = c(f4)
// 状態の更新
sA = Ain(f5)
sB = Bin(f2)
// 時間の更新
ts++
}
上記擬似コードは、時間tsが、EOS(シミュレーションの終わり)に達するまで、whileループを繰り返すことを示す。このコードで、Aout()は、ブロックAが内部状態に基づき出力を計算する関数、Ain()は、ブロックAが入力に基づき内部状態変数を計算する関数、a()は、ブロックaが入力に基づき、出力を計算する関数、等である。
この擬似コードから見て取れるように、ブロックAは、出力を計算するのに、その内部状態を使い、ブロックaは、ブロックAの出力を使う。ここには、ブロックB、b、cの出力は使われていない。
一方、ブロックB、b、cも、ブロックA、aの出力を使用していない。このことは、A、aと、B、b、cをそれぞれ並列に実行できることを示唆する。図3に示すように、システムは、好適には異なるプロセッサまたはコアにそれぞれ、A、aとB、b、cの処理を割り当てて並列に実行した後、ブロックaの出力をブロックBに入力し、ブロックcの出力をブロックAに入力して次の並列実行に進む。すなわち、内部状態を持つブロックを終点とするフローを消去したときに、分断される各部分が1イテレーションに限り並列に実行可能となる。
ただし、単に内部状態を持つブロックを終点とするフローを消去しただけでは、十分にモデルを分割できないケース、すなわち並列化できないケースが多い。例えば、図13のケースでは、結果的に全てのブロックが接続された状態で残り、まったく並列化できない。これは、複数のシグナルを統合する内部状態を持たないブロックが存在する場合に各部が分断されなくなるために発生する現象だが、多くのモデルにおいてこの傾向が強い。そのため、上記のような単純な方法だけでは高い並列性は期待できない。
特開2003−91422号公報は、多重ループ構造を有する非並列化ソースコードを複数のプロセッサが実行可能な並列化ソースコードに自動的に変換する方法に関し、n(nは2以上の整数)重にネストされたループを含む非並列のソースコードから、m(mは2以上の整数)個のプロセッサで並列実行可能な並列化ソースコードを自動的に生成する多重反復処理超並列化ソースコード自動生成プログラムP。非並列化ソースコードSCのn重ループそれぞれの初期値式を、m個のプロセッサに与えた、各プロセッサを一意に識別する0から始まるm個の連続した整数iak(k=0、・・・、m−1)、およびループj(j=1、・・・、n)毎に定められた増分値δjを用いて表される初期値式Sjに書き換え、書き換えた初期値式Sjおよび増分値δjを用いることにより、前記n重ループ構造部分を、前記m個のプロセッサで分担処理できる構造に変換する機能をCPUに実現させることを開示する。
特開2007−511835号公報は、ネットワークプロセッサをDステージプロセッサパイプラインに構成し、シーケンシャルネットワークアプリケーションプログラムを複数のDパイプラインステージに変換し、DパイプラインステージをDステージプロセッサパイプライン内でパラレルに実行することを開示する。このとき例えば、シーケンシャルアプリケーションプログラムの変換は、シーケンシャルネットワークプログラムをフローネットワークモデルとしてモデリングし、複数の予備のパイプラインステージへとフローネットワークモデルから選択することによって実行される。
しかし、これらの従来技術は、ループをまたがって依存関係(loop carried dependence)を持つ機能ブロック間の、1イテレーション内での並列性を高める技法については、何も示唆しない。
そこで、本願発明者らは、特願2009−251044号明細書において、機能ブロック間の、1イテレーション内での並列性を高める技法を提供した。尚、特願2009−251044号明細書では、並列に実行される個々の機能ブロックの集合は、ストランドと呼ばれており、本明細書でも、その用語を同じ意味で使用する。
特開2003−91422号公報 特開2007−511835号公報 特願2009−251044号明細書
特願2009−251044号明細書に記述されている技法によって、並列性を高めることが可能となったが、そこに記述されているアルゴリズムは、結果のストランドのサイズに必ずしも配慮しないので、ストランドの計算時間に偏りが生じることがあった。すると、最も計算時間がかかるストランドが、全体の並列処理の時間を支配することにより、処理の高速化の妨げになった。
従って、本発明の目的は、形成されたストランド間で機能ブロックを移動させることにより、ストランドの計算時間の偏りを緩和するための技法を提供することにある。
本発明は、上記目的を解決するためになされたものであり、概略的には、以下のような処理からなる。これら一連の処理のステップは、アルゴリズムに従い、コンピュータによって自動的に実行される。
最初のステップは、機能ブロックを、ストランドに分けることである。そうやって得られたストランドの集まりを、ストランド集合と呼ぶことにする。この場合のストランドの形成方法は、各ストランドにおいて、入力から出力までのパスの間に、内部状態をもつブロックを含まないパスが存在しないような形成方法である必要がある。これは、各ストランドが1イテレーション内で並列に動作できるために必要な条件であり、以後ストランド条件と呼ぶことにする。好適には、特願2009−251044号明細書で述べたようなストランドの形成方法が採用されるが、本発明は、それには限定されない。
次のステップは、ストランド集合から、計算時間が最大のストランドを見つけることである。ストランドの計算時間は、各ストランドに含まれるブロックの計算時間から見積もることができる。
次のステップは、計算時間が最大のストランドにおいて、移動可能なブロックを見つけることである。移動可能なブロックは、入力方向に移動可能なブロックと、出力方向に移動可能なブロックとがある。入力方向に移動可能なブロックは、当該のストランド以外のストランド内に親をもつブロックから選ばれる。出力方向に移動可能なブロックは、当該のストランド以外のストランド内に子をもつブロックから選ばれる。尚、ここで親子関係とは、ブロック同士が矢印で結ばれているときに、矢印の始点側を親ブロック、矢印の終点側を子ブロックと呼ぶような関係である。
次のステップでは、移動可能なブロックを、その性質に従って、入力方向または出力方向のストランドに移動した結果の当該ストランドの計算時間を求め、元のストランドとの計算時間を減り方が最大となる、ストランド間のブロックの移動を行う。
こうして、計算時間が最大のストランドを見つけるステップに戻る。このようなステップのループを継続していくと、移動可能なブロックを移動しても、当該のブロックの計算時間が減らなくなる状態に到達する。この状態になると、処理は終了となる。
このようにして、機能ブロックのストランドが得られると、各々のストランドは、対応するCなどのソースコードに変換され、さらにコンパイルされて実行のため、個別のコアまたはプロセッサに割り当てられる。
この発明によれば、入力から出力までのパスの間に、内部状態をもつブロックを含まないパスが存在しないようにストランドを形成した場合に、その後の処理で可能な限り、ストランド間の計算時間のバランスを達成することにより、並列実行のボトルネックを減らし、処理を高速化するという効果が得られる。
内部状態をもつ機能ブロックと、内部状態をもたない機能ブロックからなるループのブロック線図の例を示す図である。 内部状態をもつ機能ブロックと、内部状態をもたない機能ブロックの仕組みをそれぞれ示す図である。 ブロック線図の並列化の例を示す図である。 本発明を実施するためのハードウェアのブロック図である。 本発明を実施するための機能ブロック図である。 本発明の処理全体の概要フローチャートを示す図である。 入力側ブロックと、出力側ブロックの例を示す図である。 ストランド集合を作成する処理のフローチャートを示す図である。 定義ブロック集合を見出す処理のフローチャートを示す図である。 使用ブロック集合を見出す処理のフローチャートを示す図である。 個々のストランドを形成する処理のフローチャートを示す図である。 ストランド形成処理のルールを示す図である。 ブロック線図のグラフにつき、定義ブロック集合と使用ブロック集合を見出す例を示す図である。 見出された定義ブロック集合と使用ブロック集合に基づき、ストランドを形成する処理の結果を示す図である。 入力側ブロックにおける移動候補ブロックを見出す処理のフローチャートを示す図である。 出力側ブロックにおける移動候補ブロックを見出す処理のフローチャートを示す図である。 移動候補ブロックの例を示す図である。 移動候補ブロックの集合を見出す処理のフローチャートを示す図である。 ストランドを分離させる処理の例を示す図である。 ブロックを隣接ストランドに移動させる処理のフローチャートを示す図である。 ブロックを隣接ストランドに移動させる処理の例を示す図である。
以下、図面を参照して、本発明の一実施例の構成及び処理を説明する。以下の記述では、特に断わらない限り、図面に亘って、同一の要素は同一の符号で参照されるものとする。なお、ここで説明する構成と処理は、一実施例として説明するものであり、本発明の技術的範囲をこの実施例に限定して解釈する意図はないことを理解されたい。
先ず、図4を参照して、本発明を実施するために使用されるコンピュータのハードウェアについて説明する。図4において、ホスト・バス402には、複数のCPU1 404a、CPU2 404b、CPU3 404c、・・・CPUn 404nが接続されている。ホスト・バス402にはさらに、CPU1 404a、CPU2 404b、CPU3 404c、・・・CPUn 404nの演算処理のためのメイン・メモリ406が接続されている。
一方、I/Oバス408には、キーボード410、マウス412、ディスプレイ414及びハードティスク・ドライブ416が接続されている。I/Oバス408は、I/Oブリッジ418を介して、ホスト・バス402に接続されている。キーボード410及びマウス412は、オペレータが、コマンドを打ち込んだり、メニューをクリックするなどして、操作するために使用される。ディスプレイ414は、必要に応じて、後述する本発明に係るプログラムをGUIで操作するためのメニューを表示するために使用される。
この目的のために使用される好適なコンピュータ・システムのハードウェアとして、IBM(R)System Xがある。その際、CPU1 404a、CPU2 404b、CPU3 404c、・・・CPUn 404nは、例えば、インテル(R)Xeon(R)であり、オペレーティング・システムは、Windows(商標)Server 2003である。オペレーティング・システムは、ハードティスク・ドライブ416に格納され、コンピュータ・システムの起動時に、ハードティスク・ドライブ416からメイン・メモリ406に読み込まれる。
本発明を実施するためには、マルチプロセッサ・システムを用いることが必要である。ここでマルチプロセッサ・システムとは、一般に、独立に演算処理し得るプロセッサ機能のコアを複数もつプロセッサを用いるシステムを意図しており、従って、マルチコア・シングルプロセッサ・システム、シングルコア・マルチプロセッサ・システム、及びマルチコア・マルチプロセッサ・システムのどれかでよいことを理解されたい。
なお、本発明を実施するために使用可能なコンピュータ・システムのハードウェアは、IBM(R)System Xに限定されず、本発明のシミュレーション・プログラムを走らせることができるものであれば、任意のコンピュータ・システムを使用することができる。オペレーティング・システムも、Windows(R)に限定されず、Linux(R)、Mac OS(R)など、任意のオペレーティング・システムを使用することができる。さらに、シミュレーション・プログラムを高速で動作させるために、POWER(商標)6ベースで、オペレーティング・システムがAIX(商標)のIBM(R)System Pなどのコンピュータ・システムを使用してもよい。
ハードティスク・ドライブ416にはさらに、MATLAB(R)/Simulink(R)、Cコンパイラまたは、C++コンパイラ、後述する本発明に係る解析、ストランド作成のためのモジュール、CPU割り当て用コード生成モジュールなどが格納されており、オペレータのキーボードやマウス操作に応答して、メイン・メモリ406にロードされて実行される。
尚、使用可能なシミュレーション・モデリング・ツールは、MATLAB(R)/Simulink(R)に限定されず、オープンソースのScilab/Scicosなど任意のシミュレーション・モデリング・ツールを使用することが可能である。
あるいは、場合によっては、シミュレーション・モデリング・ツールを使わず、直接、C、C++などでシミュレーション・システムのソース・コードを書くことも可能であり、その場合にも、個々の機能が、互いに依存関係にある個別の機能ブロックとして記述できるなら、本発明は適用可能である。
図5は、本発明の実施例に係る機能ブロック図である。各々のブロックは、基本的に、ハードティスク・ドライブ416に格納されているモジュールに対応する。
図5において、シミュレーション・モデリング・ツール502は、MATLAB(R)/Simulink(R)、Scilab/Scicosなどの既存の任意のモデリング・ツールを使用することができる。シミュレーション・モデリング・ツール502は、基本的には、オペレータが、ディスプレイ414上でGUI的に機能ブロックを配置し、数式など必要な属性を記述し、必要に応じて、機能ブロック間を関連付けてブロック線図を記述することを可能ならしめるような機能をもつ。シミュレーション・モデリング・ツール502はさらに、記述されたブロック線図に等価な機能を記述するCのソースコードを出力する機能をもつ。C以外にも、C++、FORTRANなどを使用することができる。特に、MDLファイルは、Simulink(R)独自のフォーマットであり、機能ブロック間の依存関係を記述するために、MDLファイルを生成することができる。
なお、シミュレーション・モデリング・ツールは、別のパーソナル・コンピュータに導入して、そこで生成されたソース・コードを、ネットワークなどを経由して、ハードティスク・ドライブ416にダウンロードするようにすることもできる。
こうして出力されたソース・コード504は、ハードティスク・ドライブ416に保存される。なお、ソース・コード504以外に、機能ブロック間の依存関係を記述するためのMDLファイルを保存してもよい。
解析モジュール506は、ソースコード504を入力して構文解析し、ブロックのつながりを、グラフ表現に変換する。グラフ表現のデータは、好適には、ハードディスク・ドライブ416に格納される。なお、コンピュータ上のグラフ表現のデータ構造は周知であるので、ここでは説明を省略する。
ストランド作成モジュール508は、解析モジュール506によって作成されたグラフ表現508を読み取って、内部状態をもたない機能ブロックの各々に関連して、内部状態を有する定義ブロック(definer)と、内部状態を有する使用ブロック(user)を決定し、その情報に基づき、ストランドの集合を作成する。ストランド作成モジュール508のより詳しい処理は、後述する。
ストランド・バランシング・モジュール510は、ストランド作成モジュール508によって作成されたストランドの集合に関して、ストランドの計算時間の偏りを緩和させる処理を行う。ストランド・バランシング・モジュール510の処理については、図6のフローチャートなどを参照して、後で詳細に説明する。
コード生成モジュール512は、ストランド・バランシング・モジュール510が生成したストランドの情報に基づき、コンパイラ514がコンパイルするためのソースコードを生成する。コンパイラ514が想定するプログラミング言語としては、好適にはC、C++、C#、Java(商標)などのマルチコア、またはマルチプロセッサに対応したプログラミングが可能な任意のプログラミング言語を使用することができ、コード生成モジュール512はそれに対応して、ストランド毎に、ソースコードを生成することになる。
コンパイラ514が生成した実行可能バイナリ・コード(図示しない)は、好適にはストランド毎に、異なるコアまたはプロセッサに割り当てられて、オペレーティング・システムの作用により、実行環境516で実行される。
次に、図6以下のフローチャートを参照して、特にストランド・バランシング・モジュール510の処理について説明する。図6において、ステップ602では、ブロック線図のグラフ表現において、ストランド作成モジュール508が、ストランド集合Skを作成する処理を行う。すなわち、Skは、k番目に作成されたストランド集合であり、kは最初は0で、図6の処理のループを廻す毎にkを1ずつ増分する。
ここで、ストランド集合Skを作成するアルゴリズムは、各ストランドの入力から出力までのパス中に、内部状態をもつブロック(以下、SBとも書く)を含まないパスが存在しないようにグラフを分割する(ストランド条件を満たす)アルゴリズムである。ストランド集合Skを作成するための好適なアルゴリズムは、これには限定しないが、特願2009−251044号明細書で述べられているアルゴリズムであり、本明細書でも、図8以下を参照して説明する。
ここで、後の説明のために、入力側ブロックと、出力側ブロックを定義しておく。
先ず、内部状態をもたないブロック(以下、SLBとも書く)は、必ず、所属するストランド内のSBの入力側か出力側に属する。
入力側に属するとは、同一ストランド内で、子供を辿っていくと、SBにぶつかるSLBをさす。
出力側に属するとは、同一ストランド内で、親を辿っていくと、SBにぶつかるSLBをさす。
尚、ブロックの親子関係とは、(親)→(子)のように、ブロック間の矢印の出所のブロックを親、矢印の行き先のブロックを子、とするものである。このような入力側ブロックと、出力側ブロックの例を、図7に示す。
但し、ループ構造中のSLBは、どちらにも所属可能であるが、それは、ストランド作成モジュール508のアルゴリズムによって一意的に決められる。
ステップ604では、ストランド・バランシング・モジュール510が、Skから最大ストランドsk maxを見つける。ここで「最大」とは、そのストランドに含まれているブロックの計算量の見積もりの合計が、ストランド集合中で最大であることを意味する。各ブロックの処理は、多くのものが常に一定の実行時間を持つので、事前に計測する、あるいは、含まれる演算の種類(四則演算や論理演算など)とその数から適当な重みを設定するなどして、合計の実行時間を見積もり可能である。
次にステップ606では、ストランド・バランシング・モジュール510は、最大ストランドsk maxから、移動するブロックの候補集合{B1,B2,...,Bn}を選出する。この処理は、図15と図16のフローチャートを参照して、後で詳細に説明する。
次にステップ608では、ストランド・バランシング・モジュール510は、
各候補Bi (i = 1,,n)を隣接ブロックに移動させた後にできる最大ストランドを、sk+1 max(i)とする。なお、図7を参照すると理解できるように、各候補Bi (i = 1,,n)は、隣接ストランド中のブロックとの接続関係で、どの隣接ストランドに移動するかが決定される。
次にステップ610では、ストランド・バランシング・モジュール510は、
|sk max| − |sk+1 max(i)|を最大にするようなiを見つけ、そのiをjとおく。なお、|s|のような記法は、sの計算時間を意味する。
次にステップ612では、ストランド・バランシング・モジュール510は、
|sk max| − |sk+1 max(j)| > 0かどうか、判断する。
|sk max| − |sk+1 max(j)| > 0であるということは、より最適なブロックの移動の余地があるということを意味するので、ストランド・バランシング・モジュール510は、ステップ614に進んで、Bj中の全ブロックを隣接ストランドに移動する処理を行う。ステップ614では更に、kを1だけ増分し、新たにできるストランド集合がSkとされる。
次に処理は、ステップ604に戻って、再び最大ストランドが見つけられる。
ステップ612に戻って、|sk max| − |sk+1 max(j)| > 0でないと判断されると、より最適なブロックの移動の余地は最早ないことを意味するので、ストランド・バランシング・モジュール510は、処理を終了する。
次に、図6のステップ602における、ストランド作成モジュール508による、ストランド集合作成機能を、図8以下を参照して説明する。ここで、定義ブロック(definer block)と、使用ブロック(user block)の定義を与えておく。
すなわち、ある内部状態をもたない機能ブロックの出力が、ある内部状態をもつ機能ブロックAによって、直接・間接を問わず、他の内部状態を持つブロックを経由せずに使用されるとき、機能ブロックAは、その内部状態をもたない機能ブロックの使用ブロックと呼び、内部状態を持たない機能ブロックの使用ブロック集合の要素となる。
また、ある内部状態をもつ機能ブロックAの出力が、直接・間接を問わず、他の内部状態を持つブロックを経由せずに、ある内部状態をもたない機能ブロックの入力として計算に使用されるとき、機能ブロックAは、その内部状態をもたない機能ブロックの定義ブロックと呼び、定義ブロック集合の要素となる。
図8において、ストランド作成モジュール508は、ステップ802で、ブロック線図のグラフ表現において、定義ブロックを見つける処理を行う。この処理は、後で図9のフローチャートを参照して、より詳細に説明する。
次に、ストランド作成モジュール508は、ステップ804で、ブロック線図のグラフ表現において、定義ブロックを見つける処理を行う。この処理は、後で図10のフローチャートを参照して、より詳細に説明する。
図9は、ノード(機能ブロック)nに関して、定義ブロックを見つける、FindDefiners(n)の処理を示すフローチャートである。図9において、ステップ902では、ノードnに対して、空のノード集合Dnが用意される。
ステップ904では、ノードnの未処理の親ノードのうちの1つをnparentとする。
ステップ906では、ノードnparentが内部状態をもつブロックかどうかが判断され、もしそうなら、ステップ908で、Dnにnparentが加えられる。
ステップ906で、ノードnparentが内部状態をもたないブロックであると判断したなら、ステップ910で、FindDefiners(nparent)が再帰的に呼び出され、返されるノード集合の全要素がDnに加えられる。
次に、ステップ908とステップ910のどちらからも、ステップ912に進み、そこで、ノードnの全ての親ノードに対して処理が行われたかどうか判断され、そうでなければ、ステップ904に戻る。
ステップ912で、ノードnの全ての親ノードに対して処理が行われたと判断されると、ステップ914で、Dnを返して、FindDefiners(n)の処理を終わる。
図8のステップ802では、ストランド作成モジュール508が、ブロック線図のグラフの全てのノードを順次訪問して、ノードnが内部状態をもたないブロックである場合に、図9のFindDefiners(n)を適用し、返されたDnを、ノードnの定義ブロック集合として得る。また、ノードnが内部状態を持つブロックである場合には、ノードn自身を自身の空のブロック集合Dnに入れ、定義ブロック集合とする。各ノードnに対して得られた定義ブロック集合Dnおよびそれらの対応関係を、好適にはメイン・メモリ406に保存する。
図10は、ノード(機能ブロック)nに関して、使用ブロックを見つける、FindUsers(n)の処理を示すフローチャートである。図10において、ステップ1002では、ノードnに対して、空のノード集合Unが用意される。
ステップ1004では、ノードnの未処理の子ノードをnchildとする。
ステップ1006では、ノードnchildが内部状態をもつブロックかどうかが判断され、もしそうなら、ステップ1008で、Unにnchildが加えられる。
ステップ1006で、ノードnchildが内部状態をもたないブロックであると判断したなら、ステップ1010で、FindUsers(nchild)が再帰的に呼び出され、返されるノード集合の全要素がUnに加えられる。
次に、ステップ1008とステップ1010のどちらからも、ステップ1012に進み、そこで、ノードnの全ての子ノードに対して処理が行われたかどうか判断され、そうでなければ、ステップ1004に戻る。
ステップ1012で、ノードnの全ての子ノードに対して処理が行われたと判断されると、ステップ1014で、Unを返して、FindUsers(n)の処理を終わる。
図8のステップ804では、ストランド作成モジュール508が、ブロック線図のグラフの全てのノードを順次訪問して、ノードnが内部状態をもたないブロックである場合に、図10のFindDeUsers(n)を適用し、返されたUnを使用ブロック集合としてノードnに関連付けて、Unの内容とそれに対するリンクの情報を、好適にはメイン・メモリ406に保存する。また、ノードnが内部状態を持つブロックである場合には、ノードn自身を自身の空のブロック集合Unに入れ、使用ブロック集合とする。各ノードnに対して得られた使用ブロック集合Dnおよびそれらの対応関係を、好適にはメイン・メモリ406に保存する。
次に、図11のフローチャートを参照して、ストランド作成処理について説明する。この処理は、図8のステップ806に対応する。なお、図11のフローチャートの処理を実行する時点でステップ802と804の処理で、ブロックnには既に、定義ブロック集合Dnと使用ブロック集合Unが関連付けられていることを理解されたい。
図11において、ステップ1002では、ストランド作成モジュール508が、ブロック線図のグラフ表現の次のノードnを訪問する。このときノードの訪問順序は特に問わず、最初のステップでは、任意のノードnが選択される。
次にステップ1004に進み、そこで、DnとUnの情報を用いるルールに従い、ストランド形成処理を行う。
図12に、そのルールまたは条件を示す。図示されているようにこれは、Unの要素の数である使用ブロック数と、Dnの要素の数である定義ブロック数に依存して、下記のような処理を行うものである。
(1) 使用ブロック数 = 0で、定義ブロック数 = 0:
この場合は、その機能ブロックは、隣接する、使用ブロック数 = 0、定義ブロック数 = 0となるブロックと同じストランドに割り当てられる。
(2) 使用ブロック数 = 0で、定義ブロック数 = 1:
この場合は、その機能ブロックは、隣接する使用ブロック数 = 0となるブロックと同じストランドに割り当てられる。
(3) 使用ブロック数 = 0で、定義ブロック数 > 1:
この場合は、その機能ブロックは、隣接する使用ブロック数 = 0となるブロックと同じストランドに割り当てられる。
(4) 使用ブロック数 = 1で、定義ブロック数 = 0:
この場合は、その機能ブロックは、隣接する定義ブロック数 = 0となるブロックと同じストランドに割り当てられる。
(5) 使用ブロック数 = 1で、定義ブロック数 = 1:
この場合は、その機能ブロックは、定義ブロックと同じストランドに割り当てられる。ただし、
後で負荷バランスのために、割当てし直すことがある。
(6) 使用ブロック数 = 1で、定義ブロック数 > 1:
この場合は、その機能ブロックは、使用ブロックと同じストランドに割り当てられる。
(7) 使用ブロック数 > 1で、定義ブロック数 = 0:
この場合は、その機能ブロックは、隣接する定義ブロック数=0となるブロックと同じストランドに割り当てられる。
(8) 使用ブロック数 > 1で、定義ブロック数 = 1:
この場合は、その機能ブロックは、定義ブロックと同じストランドに割り当てられる。
(9) 使用ブロック数 > 1で、定義ブロック数 > 1:
この場合は、その機能ブロックは、重複して、使用ブロック集合の各使用ブロックのストランドに割り当てられる。
このような複数の条件は、実際は、例えば:
if ( 定義ブロック数 == 0 && 使用ブロック数 == 0 ) {
処理;
} else if ( 定義ブロック数 == 1 && 使用ブロック数 == 0 ) {
処理;
}
・・・
のようなステートメントで記述することができる。
ステップ1104で上記のストランド割当てを行うと、ステップ1106では、ストランド作成モジュール508は、すべてのノードを訪問したかどうかを判断し、もしそうなら処理を終了し、そうでないなら、ステップ1102に戻る。
このようにして作成された複数のストランドは、ストランド・バランシング・モジュール510で、計算時間に関してサイズをバランシングされた後、各々コンパイラ514でコンパイルされて、実行環境516で、好適には、個々のCPU1〜CPUnに割り当てられて並列実行される。
図13は、あるブロック線図にステップ802とステップ804を適用した結果を示す図である。図1で、影線付きでA、B、C、Dなどと書かれているのが内部状態をもつブロックであり、白抜きのブロックが内部状態をもたないブロックである。
ステップ802とステップ804を適用した結果、各々の内部状態をもつブロックには、定義ブロック集合/使用ブロック集合として、0個以上の内部状態をもつブロックの関連性が計算される。
次に、ステップ806、すなわち図11のフローチャートの処理を、図13のブロック線図のグラフに適用することで、図14に示すようなストランド1402、1404、1406、1408、1410及び1412が形成される。特に、定義/使用ブロック集合 = A,D/A,B及び、定義/使用ブロック集合 = A,B/C,Bのように、定義ブロック集合と使用ブロック集合に各々複数のブロックが存在する場合は、複数のストランドによって共有されることに留意されたい。例えば、ブロック1414が、ストランド1404と、ストランド1406によって共有され、ブロック1416が、ストランド1408と、ストランド1410によって共有される、等である。
次に、図15及び図16のフローチャートを参照して、図6のステップ606で示す、移動するブロックの選出処理を説明する。なお、図15及び図16の処理は、最大ストランド内の各SLBをbとし、全てのSLBに対して実行される。
図15において、ストランド・バランシング・モジュール510は、ステップ1502で、ブロックbが、sk max以外のストランドに親をもつかどうか判断する。そうでなければ、処理は直ちに終了する。
ステップ1502での判断が肯定的であると、ステップ1504に進み、そこでストランド・バランシング・モジュール510は、ブロックbが、sk max中の入力側のブロックを親にもつかどうか判断し、もしそうなら、処理は直ちに終了する。
ステップ1504での判断が否定的であると、ストランド・バランシング・モジュール510は、ステップ1504で、ブロックbを入力方向の移動候補とする。
次に、図16において、ストランド・バランシング・モジュール510は、ステップ1602で、ブロックbが、sk max以外のストランドに属するブロックを子にもつかどうか判断する。そうでなければ、処理は直ちに終了する。
ステップ1602での判断が肯定的であると、ステップ1604に進み、そこでストランド・バランシング・モジュール510は、ブロックbが、sk max中の出力側ブロックを子にもつかどうか判断する。もしそうなら、処理は直ちに終了する。
ステップ1604での判断が否定的であると、ステップ1606に進み、そこでストランド・バランシング・モジュール510は、ブロックbが、sk max中の入力側ブロックを子にもつかどうか判断する。もしそうなら、ステップ1608に進み、ストランド・バランシング・モジュール510は、ブロックbに対する移動候補ブロック集合Bを計算し、出力方向への移動候補とする。このステップは、後で図18のフローチャートを参照して、より詳細に説明する。ステップ1608の後は処理を終了する。
ステップ1606に戻って、ステップ1606での判断が否定的なら、ストランド・バランシング・モジュール510は、ブロックbが、ステップ1610で、sk max中のSBを子にもつかどうか判断し、もしそうなら、処理はステップ1608に進む。
ステップ1610での判断が否定的であるなら、処理はステップ1612に進み、そこで、ストランド・バランシング・モジュール510は、bを出力方向への移動候補として、処理を完了する。
ストランド・バランシング・モジュール510は、移動候補のブロックを決定するために、最大ストランド内の各SLBに対して、図15のフローチャートの処理と、図16のフローチャートの処理を実行する。
図17は、このようにして決定された、最大トスランドにおける、入力方向への移動候補と、出力方向への移動候補のブロックを示す図である。
図18は、図16のステップ1608をさらに詳述するフローチャートである。図18において、ステップ1802では、ストランド・バランシング・モジュール510は、親を辿っていったときに他のSBを経由せずに見つかる同一ストランド内のSBの組が、bと同一となる全てのSLBを、同一ストランド内でSBを経由せずにbに先行するSLBの中から探し、それらのブロックの集合をBとする。
図19(1)の場合、aとbが移動候補に該当し、B={a,b}となる。これに、ストランド・バランシング・モジュール510が図6のステップ614を適用して、a,bを出力方向に移動すると、図19(2)のように、ストランドが分離する。
同じストランド内で、入力側ブロックを子に持つ出力側ブロックは、それのみを出力方向へ移動させても、結局自分にも当該ブロックが返ってきてしまうので、基本的にはストランドを小さくすることはできない。
しかし、そのブロック、あるいはそのブロックに先行するいくつかの出力側SLBを同時に出力方向へ移動すれば、最大ストランドがいくつかに分裂して小さくなる可能性がある。
ステップ608の操作は、B中の各ブロックに対してSのコピー上で試行し(ただし、ステップ608中のjをiと読み変える)、出来上がったストランドの集合の中で、最も計算量を要するストランドをsk+1 max(i)とする。
図20は、図6のステップ614の処理をより詳細に説明するフローチャートである。図20の処理は、B中のブロックbに対して、実行されるものである。図20において、ステップ2002では、ストランド・バランシング・モジュール510は、bが入力方向への移動候補かどうか判断する。
もしそうなら、処理は、ステップ2004に進み、ストランド・バランシング・モジュール510は、bに直接入力を与える全てのストランドを一つに統合し、現在のbを全てのストランドから削除し、統合されてできた新しいストランドにbを所属させる処理を行う。
もしそうでなく、bが入力方向への移動候補でないなら、ステップ2006に進み、ストランド・バランシング・モジュール510は、bが直接出力を与える全てのストランドにbをコピーし、sk maxからbを削除する処理を行う。ここで、ステップ2004の処理は、bに直接入力を与えるストランドが二つ以上存在する場合にも、ストランド条件を崩さないための処理である。また、ステップ2006の処理は、bの出力を受けるストランドが二つ以上存在する場合に、ストランド条件を崩さず、かつブロックの移動後に出来上がるストランドの計算時間の大きさを、可能な限り小さく保つための処理である。
ステップ2006は、図21の例における矢印2102の方向の処理に対応し、ステップ2004は、図21の例における矢印2104の方向の処理に対応する。
このようにして計算時間に関してバランシングされたストランドは、CPUに割り付けられて実行されることとなる。各ストランドを一つのCPUに割り付けて全てを並列に(ただし、シミュレーションの各イテレーション毎に同期処理を要する)実行しても良いが、好適には、CPU間の通信コストや利用可能なCPU数などを鑑み、いくつかのストランドからなるストランド集合を複数作成し、各ストランド集合を個別のCPUに割り当てるなどする。
このとき、上記で共有されたブロックを含むストランドが、別のCPUに割り当てられた場合、その共有されたブロックに対応する処理は、各々のCPUで実行される(つまり処理が異なる複数のCPU上で重複して実行される)ことになる。
また、上記のように、複数のストランドまとめてストランド集合として一つのCPUに割り当てて実行した場合、ストランド集合内の各ストランドの実行順序は任意でよく、他のストランド集合に所属するストランドから入力が必要なストランドをなるべく後に、他のストランド集合に所属するストランドに出力を与えるストランドをなるべく早く実行することで、ストランド集合(つまりCPU)をまたがってやり取りされるデータの準備ができてから、それが実際に必要となるまでの時間的間隔を拡大し、その間にシミュレーションの処理の裏で通信(例えばソフトウェアプリフェッチなど)を行い、プロセッサ間の通信遅延を隠蔽することもできる。
以上、この発明を特定の実施例に基づき説明してきたが、この発明は、この特定の実施例に限定されず、当業者が自明に思いつく様々な変形、置換などの構成、技法適用可能であることを理解されたい。例えば、特定のプロセッサのアーキテクチャ、オペレーティング・システムなどに限定されない。
また、上記実施例は、MATLAB(R)/Simulink(R)を例にとって説明したが、これに限らず、任意のモデリング・ツールに適用可能であることを理解されたい。
402 ホスト・バス
404a、404b、・・・404n CPU
406 メイン・メモリ
408 バス
410 キーボード
412 マウス
414 ディスプレイ
416 ハードティスク・ドライブ
502 シミュレーション・モデリング・ツール
504 ソース・コード
506 解析モジュール
504 ソースコード
508 ストランド作成モジュール
512 コード生成モジュール
514 コンパイラ
516 実行環境
1402〜1410 ストランド

Claims (20)

  1. コンピュータの処理により、内部状態をもつブロックと、内部状態をもたないブロックを連結して構成されたコードを並列化する方法であって、
    前記ブロックをノードとし、前記ブロックの間の接続をリンクとするグラフ表現を作成して、前記コンピュータのメモリに格納するステップと、
    前記グラフ表現を辿ることによって、記ブロックを複数のストランドに分けるステップであって、該各ストランドの入力から出力までのパス中に、内部状態をもつブロックを含まないパスが存在しないようにストランドに分けるステップと、
    前記ストランドのうち、最大の計算時間をもつものを選択するステップと、
    前記選択された最大の計算時間をもつストランドにおいて、内部状態をもたないブロックにつき、内部状態をもつブロックに対する親子関係に基づき、移動可能なブロックを特定するステップと、
    前記移動可能なブロックを隣接ストランドに移動させた場合の最大の計算時間をもつストランドが、元の最大の計算時間をもつストランドよりも計算時間が減少することに基づき、前記移動可能なブロックを隣接ストランドに実際に移動させるステップを有する、
    並列化方法。
  2. 前記移動可能なブロックを特定するステップが、同一ストランドで子ブロックを辿っていくと内部状態をもつブロックにぶつかる入力側ブロックと、同一ストランドで親ブロックを辿っていくと内部状態をもつブロックにぶつかる出力側ブロックから前記移動可能なブロックを特定し、前記入力側ブロックから特定されたブロックは、入力側にあるストランドに移動され、前記出力側ブロックから特定されたブロックは、出力側にあるストランドに移動される、請求項1に記載の並列化方法。
  3. 前記移動可能なブロックが入力側ブロックである場合、当該ブロックに直接入力を与える全てのストランドを一つに統合し、当該ブロックを全てのストランドから削除し、統合されてできた新しいストランドに当該ブロックを所属させる処理を行う、請求項2に記載の並列化方法。
  4. 前記移動可能なブロックが出力側ブロックである場合、当該ブロック直接出力を与える全てのストランドに当該ブロックをコピーし、上記最大の計算時間をもつストランドから当該ブロック削除する処理を行う、請求項2に記載の並列化方法。
  5. 前記ストランドに分けるステップが、
    前記グラフ表現上で前記ノードを順次訪問し、前記ノードが内部状態をもたないロックであることに応答して、該内部状態をもたないロックから内部状態をもつロックへの入力を検出して該内部状態をもつロックを使用ブロック集合として前記メモリに記憶し、内部状態をもつロックから該内部状態をもたないロックへの入力を検出して該内部状態をもつロックを定義ブロック集合として前記メモリに記憶するステップと、
    前記ロックに関連して記憶された前記使用ブロック集合の情報及び前記定義ブロック集合の情報に基づき、ロックのストランドを形成するステップを有する、
    請求項1に記載の並列化方法。
  6. 前記ストランドを形成するステップでは、下記の条件に従い前記ストランドが形成される、請求項5に記載の並列化方法。
    (1) 使用ブロック数 = 0で、定義ブロック数 = 0:
    この場合は、そのロックは、隣接する、使用ブロック数 = 0、定義ブロック数 =0となるブロックと同じストランドに割り当てられる。
    (2) 使用ブロック数 = 0で、定義ブロック数 = 1:
    この場合は、そのロックは、隣接する使用ブロック数 = 0となるブロックと同じストランドに割り当てられる。
    (3) 使用ブロック数 = 0で、定義ブロック数 > 1:
    この場合は、そのロックは、隣接する使用ブロック数 = 0となるブロックと同じストランドに割り当てられる。
    (4) 使用ブロック数 = 1で、定義ブロック数 = 0:
    この場合は、そのロックは、隣接する定義ブロック数 = 0となるブロックと同じストランドに割り当てられる。
    (5) 使用ブロック数 = 1で、定義ブロック数 = 1:
    この場合は、そのロックは、定義ブロックと同じストランドに割り当てられる。
    (6) 使用ブロック数 = 1で、定義ブロック数 > 1:
    この場合は、そのロックは、使用ブロックと同じストランドに割り当てられる。
    (7) 使用ブロック数 > 1で、定義ブロック数 = 0:
    この場合は、そのロックは、隣接する定義ブロック数=0となるブロックと同じストランドに割り当てられる。
    (8) 使用ブロック数 > 1で、定義ブロック数 = 1:
    この場合は、そのロックは、定義ブロックと同じストランドに割り当てられる。
    (9) 使用ブロック数 > 1で、定義ブロック数 > 1:
    この場合は、そのロックは、重複して、使用ブロック集合の各使用ブロックのストランドに割り当てられる。
  7. マルチコアまたはマルチプロセッサの環境において、請求項1に記載の方法にさらに、前記ストランドを個別にコンパイルして実行可能コードを生成するステップと、前記生成された実行可能コードを、個別に前記コアまたはプロセッサに割り当てて実行させるステップを有する、並列化されたコードの実行方法。
  8. コンピュータの処理により、内部状態をもつブロックと、内部状態をもたないブロックを連結して構成されたコードを並列化するプログラムであって、
    前記コンピュータをして、
    前記ブロックをノードとし、前記ブロックの間の接続をリンクとするグラフ表現を作成して、前記コンピュータのメモリに格納するステップと、
    前記グラフ表現を辿ることによって、記ブロックを複数のストランドに分けるステップであって、該各ストランドの入力から出力までのパス中に、内部状態をもつブロックを含まないパスが存在しないようにストランドに分けるステップと、
    前記ストランドのうち、最大の計算時間をもつものを選択するステップと、
    前記選択された最大の計算時間をもつストランドにおいて、内部状態をもたないブロックにつき、内部状態をもつブロックに対する親子関係に基づき、移動可能なブロックを特定するステップと、
    前記移動可能なブロックを隣接ストランドに移動させた場合の最大の計算時間をもつストランドが、元の最大の計算時間をもつストランドよりも計算時間が減少することに基づき、前記移動可能なブロックを隣接ストランドに実際に移動させるステップを実行させる、
    並列化プログラム。
  9. 前記移動可能なブロックを特定するステップが、同一ストランドで子ブロックを辿っていくと内部状態をもつブロックにぶつかる入力側ブロックと、同一ストランドで親ブロックを辿っていくと内部状態をもつブロックにぶつかる出力側ブロックから前記移動可能なブロックを特定し、前記入力側ブロックから特定されたブロックは、入力側にあるストランドに移動され、前記出力側ブロックから特定されたブロックは、出力側にあるストランドに移動される、請求項8に記載の並列化プログラム。
  10. 前記移動可能なブロックが入力側ブロックである場合、当該ブロックに直接入力を与える全てのストランドを一つに統合し、当該ブロックを全てのストランドから削除し、統合されてできた新しいストランドに当該ブロックを所属させる処理を行う、請求項9に記載の並列化プログラム。
  11. 前記移動可能なブロックが出力側ブロックである場合、当該ブロック直接出力を与える全てのストランドに当該ブロックをコピーし、上記最大の計算時間をもつストランドから当該ブロック削除する処理を行う、請求項9に記載の並列化プログラム。
  12. 前記ストランドに分けるステップが、前記グラフ表現上で前記ノードを順次訪問し、前記ノードが内部状態をもたないロックであることに応答して、該内部状態をもたないロックから内部状態をもつロックへの入力を検出して該内部状態をもつロックを使用ブロック集合として前記メモリに記憶し、内部状態をもつロックから該内部状態をもたないロックへの入力を検出して該内部状態をもつロックを定義ブロック集合として前記メモリに記憶するステップと、
    前記ロックに関連して記憶された前記使用ブロック集合の情報及び前記定義ブロック集合の情報に基づき、ロックのストランドを形成するステップを有する、
    請求項8に記載の並列化プログラム。
  13. 前記ストランドを形成するステップでは、下記の条件に従い前記ストランドが形成される、請求項12に記載の並列化プログラム。
    (1) 使用ブロック数 = 0で、定義ブロック数 = 0:
    この場合は、そのロックは、隣接する、使用ブロック数 = 0、定義ブロック数 =0となるブロックと同じストランドに割り当てられる。
    (2) 使用ブロック数 = 0で、定義ブロック数 = 1:
    この場合は、そのロックは、隣接する使用ブロック数 = 0となるブロックと同じストランドに割り当てられる。
    (3) 使用ブロック数 = 0で、定義ブロック数 > 1:
    この場合は、そのロックは、隣接する使用ブロック数 = 0となるブロックと同じストランドに割り当てられる。
    (4) 使用ブロック数 = 1で、定義ブロック数 = 0:
    この場合は、そのロックは、隣接する定義ブロック数 = 0となるブロックと同じストランドに割り当てられる。
    (5) 使用ブロック数 = 1で、定義ブロック数 = 1:
    この場合は、そのロックは、定義ブロックと同じストランドに割り当てられる。
    (6) 使用ブロック数 = 1で、定義ブロック数 > 1:
    この場合は、そのロックは、使用ブロックと同じストランドに割り当てられる。
    (7) 使用ブロック数 > 1で、定義ブロック数 = 0:
    この場合は、そのロックは、隣接する定義ブロック数=0となるブロックと同じストランドに割り当てられる。
    (8) 使用ブロック数 > 1で、定義ブロック数 = 1:
    この場合は、そのロックは、定義ブロックと同じストランドに割り当てられる。
    (9) 使用ブロック数 > 1で、定義ブロック数 > 1:
    この場合は、そのロックは、重複して、使用ブロック集合の各使用ブロックのストランドに割り当てられる。
  14. コンピュータの処理により、内部状態をもつブロックと、内部状態をもたないブロックを連結して構成されたコードを並列化するシステムであって、
    メモリと、
    前記ブロックをノードとし、前記ブロックの間の接続をリンクとするグラフ表現を作成して、前記メモリに格納する手段と、
    前記グラフ表現を辿ることによって、記ブロックを複数のストランドに分けるステップであって、該各ストランドの入力から出力までのパス中に、内部状態をもつブロックを含まないパスが存在しないようにストランドに分ける手段と、
    前記ストランドのうち、最大の計算時間をもつものを選択する手段と、
    前記選択された最大の計算時間をもつストランドにおいて、内部状態をもたないブロックにつき、内部状態をもつブロックに対する親子関係に基づき、移動可能なブロックを特定するステップと、
    前記移動可能なブロックを隣接ストランドに移動させた場合の最大の計算時間をもつストランドが、元の最大の計算時間をもつストランドよりも計算時間が減少することに基づき、前記移動可能なブロックを隣接ストランドに実際に移動させる手段を有する、
    並列化システム。
  15. 前記移動可能なブロックを特定する手段が、同一ストランドで子ブロックを辿っていくと内部状態をもつブロックにぶつかる入力側ブロックと、同一ストランドで親ブロックを辿っていくと内部状態をもつブロックにぶつかる出力側ブロックから前記移動可能なブロックを特定し、前記入力側ブロックから特定されたブロックは、入力側にあるストランドに移動され、前記出力側ブロックから特定されたブロックは、出力側にあるストランドに移動される、請求項14に記載の並列化システム。
  16. 前記移動可能なブロックが入力側ブロックである場合、当該ブロックに直接入力を与える全てのストランドを一つに統合し、当該ブロックを全てのストランドから削除し、統合されてできた新しいストランドに当該ブロックを所属させる処理を行う、請求項15に記載の並列化システム。
  17. 前記移動可能なブロックが出力側ブロックである場合、当該ブロック直接出力を与える全てのストランドに当該ブロックをコピーし、上記最大の計算時間をもつストランドから当該ブロック削除する処理を行う、請求項15に記載の並列化システム。
  18. 前記ストランドに分ける手段が、
    前記グラフ表現上で前記ノードを順次訪問し、前記ノードが内部状態をもたないロックであることに応答して、該内部状態をもたないロックから内部状態をもつロックへの入力を検出して該内部状態をもつロックを使用ブロック集合として前記メモリに記憶し、内部状態をもつロックから該内部状態をもたないロックへの入力を検出して該内部状態をもつロックを定義ブロック集合として前記メモリに記憶する手段と、
    前記ロックに関連して記憶された前記使用ブロック集合の情報及び前記定義ブロック集合の情報に基づき、ロックのストランドを形成する手段を有する、
    請求項14に記載の並列化システム。
  19. 前記ストランドを形成するステップでは、下記の条件に従い前記ストランドが形成される、請求項18に記載の並列化システム。
    (1) 使用ブロック数 = 0で、定義ブロック数 = 0:
    この場合は、そのロックは、隣接する、使用ブロック数 = 0、定義ブロック数 =0となるブロックと同じストランドに割り当てられる。
    (2) 使用ブロック数 = 0で、定義ブロック数 = 1:
    この場合は、そのロックは、隣接する使用ブロック数 = 0となるブロックと同じストランドに割り当てられる。
    (3) 使用ブロック数 = 0で、定義ブロック数 > 1:
    この場合は、そのロックは、隣接する使用ブロック数 = 0となるブロックと同じ
    ストランドに割り当てられる。
    (4) 使用ブロック数 = 1で、定義ブロック数 = 0:
    この場合は、そのロックは、隣接する定義ブロック数 = 0となるブロックと同じストランドに割り当てられる。
    (5) 使用ブロック数 = 1で、定義ブロック数 = 1:
    この場合は、そのロックは、定義ブロックと同じストランドに割り当てられる。
    (6) 使用ブロック数 = 1で、定義ブロック数 > 1:
    この場合は、そのロックは、使用ブロックと同じストランドに割り当てられる。
    (7) 使用ブロック数 > 1で、定義ブロック数 = 0:
    この場合は、そのロックは、隣接する定義ブロック数=0となるブロックと同じストランドに割り当てられる。
    (8) 使用ブロック数 > 1で、定義ブロック数 = 1:
    この場合は、そのロックは、定義ブロックと同じストランドに割り当てられる。
    (9) 使用ブロック数 > 1で、定義ブロック数 > 1:
    この場合は、そのロックは、重複して、使用ブロック集合の各使用ブロックのストランドに割り当てられる。
  20. マルチコアまたはマルチプロセッサの環境において、請求項14に記載のシステムにさらに、前記ストランドを個別にコンパイルして実行可能コードを生成する手段と、前記生成された実行可能コードを、個別に前記コアまたはプロセッサに割り当てて実行させる手段を有する、並列化されたコードの実行システム。
JP2010035691A 2010-02-22 2010-02-22 並列化方法、システム、及びプログラム Expired - Fee Related JP5479942B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2010035691A JP5479942B2 (ja) 2010-02-22 2010-02-22 並列化方法、システム、及びプログラム
US13/031,666 US8959498B2 (en) 2010-02-22 2011-02-22 Parallelization method, system and program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010035691A JP5479942B2 (ja) 2010-02-22 2010-02-22 並列化方法、システム、及びプログラム

Publications (2)

Publication Number Publication Date
JP2011170732A JP2011170732A (ja) 2011-09-01
JP5479942B2 true JP5479942B2 (ja) 2014-04-23

Family

ID=44477552

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010035691A Expired - Fee Related JP5479942B2 (ja) 2010-02-22 2010-02-22 並列化方法、システム、及びプログラム

Country Status (2)

Country Link
US (1) US8959498B2 (ja)
JP (1) JP5479942B2 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7793276B2 (en) * 2003-11-14 2010-09-07 Intel Corporation Apparatus and method for automatically parallelizing network applications through pipelining transformation
JP5204300B2 (ja) * 2009-04-28 2013-06-05 インターナショナル・ビジネス・マシーンズ・コーポレーション マルチスレッド上で動作するプログラムのプログラム・コードをロック衝突が少ないプログラム・コードに変換するための方法、並びにそのコンピュータ・プログラム及びコンピュータ・システム
US8661424B2 (en) * 2010-09-02 2014-02-25 Honeywell International Inc. Auto-generation of concurrent code for multi-core applications
JP6004818B2 (ja) * 2012-08-07 2016-10-12 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 並列化方法、システム、及びプログラム
KR102182198B1 (ko) * 2015-08-11 2020-11-24 아브 이니티오 테크놀로지 엘엘시 데이터 처리 그래프 컴파일
US11176698B2 (en) * 2016-03-30 2021-11-16 Nec Corporation Analysis apparatus, analysis method, and storage medium
US11308595B1 (en) * 2020-03-19 2022-04-19 Descartes Labs, Inc. Thermal anomaly detection and classification
US20230108560A1 (en) * 2021-10-04 2023-04-06 Changfeng C Wang Methods and Systems for Representation, Composition and Execution of Artificial Intelligence Centric Applications

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09167144A (ja) * 1995-12-19 1997-06-24 Hitachi Eng Co Ltd プログラム作成方法およびプログラム作成システム
JP3658061B2 (ja) * 1995-12-20 2005-06-08 株式会社日立製作所 Faシステムの制御装置と方法、制御プログラム生成方法
JP2001092647A (ja) * 1999-09-27 2001-04-06 Hitachi Ltd プロセス定義情報からフロー制御プログラムへの変換方法
US6609216B1 (en) * 2000-06-16 2003-08-19 International Business Machines Corporation Method for measuring performance of code sequences in a production system
JP3673809B2 (ja) 2001-09-18 2005-07-20 独立行政法人 宇宙航空研究開発機構 多重反復処理超並列化ソースコード自動生成プログラム、自動生成装置および自動生成方法
US7793276B2 (en) 2003-11-14 2010-09-07 Intel Corporation Apparatus and method for automatically parallelizing network applications through pipelining transformation
JP2009251044A (ja) 2008-04-01 2009-10-29 Kawai Musical Instr Mfg Co Ltd 電子楽器および音量制御方法

Also Published As

Publication number Publication date
US20110209129A1 (en) 2011-08-25
US8959498B2 (en) 2015-02-17
JP2011170732A (ja) 2011-09-01

Similar Documents

Publication Publication Date Title
JP4886838B2 (ja) 並列化方法、システム、及びプログラム
JP4629768B2 (ja) 並列化処理方法、システム、及びプログラム
JP4931978B2 (ja) 並列化処理方法、システム、及びプログラム
JP5479942B2 (ja) 並列化方法、システム、及びプログラム
JP5209059B2 (ja) ソース・コード処理方法、システム、及びプログラム
JP6021342B2 (ja) 並列化方法、システム、及びプログラム
US8234637B2 (en) Non-blocking semantics for modeling systems
JP4988789B2 (ja) シミュレーション・システム、方法及びプログラム
Aronsson Automatic parallelization of equation-based simulation programs
Bakhtin et al. DVM-approach to the automation of the development of parallel programs for clusters
Bruce et al. Enabling reproducible and agile full-system simulation
JP6004818B2 (ja) 並列化方法、システム、及びプログラム
Ramaswamy et al. Scalable behavioral emulation of extreme-scale systems using structural simulation toolkit
Krämer et al. Executing cyclic scientific workflows in the cloud
Chen et al. Slapo: A schedule language for progressive optimization of large deep learning model training
JPH05101141A (ja) 高位合成装置
JP7521597B2 (ja) オフロードサーバ、オフロード制御方法およびオフロードプログラム
JP5775386B2 (ja) 並列化方法、システム、及びプログラム
Armstrong et al. ExM: High level dataflow programming for extreme-scale systems
Catthoor et al. Run-Time Exploitation of Application Dynamism for Energy-Efficient Exascale Computing
Schrammel et al. Generating test case chains for reactive systems
US10241764B2 (en) Automatically transform pass-by-value semantics into pass-by-reference implementation
JP7385536B2 (ja) ソフトウェア開発支援装置及びソフトウェア開発支援方法
JPH06231203A (ja) シミュレーションモデルのためのコンパイルメカニズム
Ivutin et al. Low-level Code Auto-tuning for State-of-the-art Multicore Architectures

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120906

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130927

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131001

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131225

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140128

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140213

R150 Certificate of patent or registration of utility model

Ref document number: 5479942

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees