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

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

Info

Publication number
JP6021342B2
JP6021342B2 JP2012026145A JP2012026145A JP6021342B2 JP 6021342 B2 JP6021342 B2 JP 6021342B2 JP 2012026145 A JP2012026145 A JP 2012026145A JP 2012026145 A JP2012026145 A JP 2012026145A JP 6021342 B2 JP6021342 B2 JP 6021342B2
Authority
JP
Japan
Prior art keywords
block
segment
segments
internal state
processors
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.)
Active
Application number
JP2012026145A
Other languages
English (en)
Other versions
JP2013164657A (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 JP2012026145A priority Critical patent/JP6021342B2/ja
Priority to US13/761,258 priority patent/US8990767B2/en
Publication of JP2013164657A publication Critical patent/JP2013164657A/ja
Application granted granted Critical
Publication of JP6021342B2 publication Critical patent/JP6021342B2/ja
Active 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/30Creation or generation of source code
    • G06F8/35Creation or generation of source code model driven
    • 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/451Code distribution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Complex Calculations (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タイムステップ分の処理を表しており、これが所定回繰り返されることにより、シミュレーション対象となるシステムの時系列における振る舞いを得ることができる。
こうして、MATLAB(R)/Simulink(R)上で、機能ブロックなどのブロック線図が作成されると、例えばReal-Time Workshop(R)の機能により、等価な機能のC言語など既知のコンピュータ言語のソース・コードに変換することができる。このC言語のソース・コードをコンパイルすることにより、別のコンピュータ・システムで、SILSとして、シミュレーションを実行することができる。
マルチプロセッサあるいはマルチコアをもつコンピュータ・システムが普及してくるにつれて、ブロック線図で記述されたプログラムをセグメントと呼ばれるグループに分け、その各々を異なるプロセッサまたはコアに割り当てて並列実行させ、以って高速実行を図る技術が提供されるようになってきた。
特開2011−96107号公報は、ブロック線図において、内部状態をもたない機能ブロックの出力が、内部状態をもつ機能ブロックAによって使用されるとき、機能ブロックAは、その内部状態をもたない機能ブロックの使用ブロックと呼び、内部状態をもつ機能ブロックAの出力が、内部状態をもたない機能ブロックの入力として計算に使用されるとき、機能ブロックAは、その内部状態をもたない機能ブロックの定義ブロックと呼び、各機能ブロックをノードとして訪問することにより、内部状態をもつ機能ブロックと、内部状態をもたない機能ブロックとの接続関係に基づき、機能ブロック毎に、使用ブロック集合/定義ブロック集合の数を求め、その数に基づき、ストランドを割り当て、これにより、ブロック線図を、ストランドに分けて処理を並列化することを開示する。
一方、ブロック線図によって記述されるモデルは、これを数値的に解く技法の観点では、エクスプリシットな連立常微分方程式の状態空間形式での表現と見立てることもできる。その観点では、笠原 博徳、藤井 稔久、本多 弘樹、成田 誠之助、"スタティック・マルチプロセッサ・スケジューリング・アルゴリズムを用いた常微分方程式求解の並列処理" 情報処理学会論文誌 28(10), 1060-1070, 1987-10-15は、エクスプリシットな常微分方程式求解のための並列処理手法に関し、タスク生成、タスクのプロセッサ上への最適スケジューリング、スケジューリング結果を用いたマシンコードの生成などからなり、様々な粒度に対応可能な常微分方程式求解の並列処理技法を開示する。
特開2011−96107号公報
笠原 博徳、藤井 稔久、本多 弘樹、成田 誠之助、"スタティック・マルチプロセッサ・スケジューリング・アルゴリズムを用いた常微分方程式求解の並列処理" 情報処理学会論文誌 28(10), 1060-1070, 1987-10-15
上記従来技術の技法は、ブロック線図で記述されるモデルのコードを、マルチプロセッサあるいはマルチコア上で並列化するようにセグメント化を達成するが、結果として得られるコードのセグメントのバランスが十分でない、あるいは1タイムステップの処理の間にプロセッサ間で多数の通信が必要となるなどの要因から、結果として並列化による高速化の度合いが十分でないという問題があった。
従って、この発明の目的は、モデルのコードを、1タイムステップ内で通信を必要としない形でバランスよくセグメント化することで、マルチプロセッサあるいはマルチコア上で並列化した際に実行を高速化させることができる技法を提供することにある。
本発明は、上記課題を解決するためになされたものであって、モデルが本質的に表現している常微分方程式の状態空間形式(state space form = SSF)の性質を利用して、1ステップ内で通信の発生しない並列実行単位を抽出することによって上記目的を達成する。
このために、本発明のシステムは、モデルを記述するブロック線図を構成するブロックのうちの、内部状態をもつブロックおよび出力を持たないブロックに着目し、内部状態をもつブロックへの入力を計算するブロック及び出力を持たないブロックからグラフを依存関係の逆方向に辿り、各内部状態をもつブロックへの入力および出力を持たないブロックの計算に必要なブロックの集合からなるセグメントを抽出する。この際、セグメント間で、ブロックの重複を許すものとする。
次に、本発明のシステムは、各セグメントを、セグメント間でのブロックの重複を減らすようにマージし、セグメント数を並列実行の数まで減らす。このとき、同じブロックを多くもつセグメント同士をマージすることで、セグメント間の重複が減る。尚ここで、並列実行の数とは典型的には、利用可能なコアまたはプロセッサの数である。
次に、本発明のシステムは、結果として得られたセグメントの各々をコンパイルし、得られた実行可能コードを各コアまたはプロセッサに割り当てて並列実行させる。
以上のように、この発明によれば、ブロック線図などのグラフ形式で記述されたプログラムを、バランスよく1ステップ内で通信が必要ない形でセグメント化して複数のプロセッサに割り当てて並列実行させることにより、実行速度を向上することができるという効果が得られる。
本発明を実施するためのハードウェアのブロック図である。 本発明を実施するための機能構成のブロック図である。 本発明の入力となるブロック線図を説明するための図である。 本発明の処理がセグメントを抽出するために利用する概念を説明するための図である。 本発明処理の概要を説明するための図である。 セグメント抽出処理のフローチャートを示す図である。 セグメント抽出処理で呼び出されるサブルーチンの処理のフローチャートを示す図である。 セグメントのマージ処理のフローチャートを示す図である。 コンピュータにより、逐次処理により、常微分方程式を解く処理を説明する図である。 コンピュータにより、並列化して、常微分方程式を解く処理を説明する図である。
以下、図面を参照して、本発明の一実施例の構成及び処理を説明する。以下の記述では、特に断わらない限り、図面に亘って、同一の要素は同一の符号で参照されるものとする。なお、ここで説明する構成と処理は、一実施例として説明するものであり、本発明の技術的範囲をこの実施例に限定して解釈する意図はないことを理解されたい。
先ず、図1を参照して、本発明を実施するために使用されるコンピュータのハードウェアについて説明する。図1において、ホスト・バス102には、複数のCPU1 104a、CPU2 104b、CPU3 104c、・・・CPUn 104nが接続されている。ホスト・バス102にはさらに、CPU1 104a、CPU2 104b、CPU3 104c、・・・CPUn 104nの演算処理のためのメイン・メモリ106が接続されている。
一方、I/Oバス108には、キーボード110、マウス112、ディスプレイ114及びハードティスク・ドライブ116が接続されている。I/Oバス108は、I/Oブリッジ118を介して、ホスト・バス102に接続されている。キーボード110及びマウス112は、オペレータが、コマンドを打ち込んだり、メニューをクリックするなどして、操作するために使用される。ディスプレイ114は、必要に応じて、後述する本発明に係るプログラムをGUIで操作するためのメニューを表示するために使用される。
この目的のために使用される好適なコンピュータ・システムのハードウェアとして、IBM(R)System Xがある。その際、CPU1 104a、CPU2 104b、CPU3 104c、・・・CPUn 104nは、例えば、インテル(R)Xeon(R)であり、オペレーティング・システムは、Windows(商標)Server 2003である。オペレーティング・システムは、ハードティスク・ドライブ116に格納され、コンピュータ・システムの起動時に、ハードティスク・ドライブ116からメイン・メモリ106に読み込まれる。
本発明を実施するためには、マルチプロセッサ・システムを用いることが必要である。ここでマルチプロセッサ・システムとは、一般に、独立に演算処理し得るプロセッサ機能のコアを複数もつプロセッサを用いるシステムを意図しており、従って、マルチコア・シングルプロセッサ・システム、シングルコア・マルチプロセッサ・システム、及びマルチコア・マルチプロセッサ・システムのどれかでよいことを理解されたい。
マルチコア・プロセッサとしては、好適には、インテル(R)Core(商標)2 Quadなどの、インテル(R)Core(商標)シリーズのプロセッサなどを使用することができる。
なお、本発明を実施するために使用可能なコンピュータ・システムのハードウェアは、IBM(R)System Xに限定されず、本発明のシミュレーション・プログラムを走らせることができるものであれば、パーソナル・コンピュータを含む任意のコンピュータ・システムを使用することができる。オペレーティング・システムも、Windows(R)に限定されず、Linux(R)、Mac OS(R)など、任意のオペレーティング・システムを使用することができる。さらに、シミュレーション・プログラムを高速で動作させるために、POWER(商標)6ベースで、オペレーティング・システムがAIX(商標)のIBM(R)System Pなどのコンピュータ・システムを使用することもできる。
ハードティスク・ドライブ116にはさらに、シミュレーション・モデリング・ツール202であるMATLAB(R)/Simulink(R)、メイン・ルーチン206、セグメント抽出ルーチン208、マージ処理ルーチン212、コード変換ルーチン216、Cコンパイラまたは、C++コンパイラ220、などが格納されており、オペレータのキーボード110やマウス112などの操作に応答して、メイン・メモリ106にロードされて実行される。これらのツールやルーチンに関しては、図2に関連して後述する。メイン・ルーチン206、セグメント抽出ルーチン208、マージ処理ルーチン212等は、Java(R)、C、C++、C#などの既存のコンピュータ・プログラミングのコードとして書かれ、所定のコンパイラでコンパイルすることにより作成することができる。
尚、使用可能なシミュレーション・モデリング・ツール202は、MATLAB(R)/Simulink(R)に限定されず、オープンソースのScilab/Scicosなど任意のシミュレーション・モデリング・ツールを使用することが可能である。
あるいは、場合によっては、シミュレーション・モデリング・ツールを使わず、直接、C、C++などでシミュレーション・システムのソース・コードを書くことも可能であり、その場合にも、個々の機能が、互いに依存関係にある個別の機能ブロックとして記述できるなら、本発明は適用可能である。
図2は、本発明の実施例に係る処理要素のブロック図である。図2において、オペレータがシミュレーション・モデリング・ツール202を操作することによって作成されたブロック線図のコード204は、ハードティスク・ドライブ116に保存される。ブロック線図のコード204は例えば、図3(a)に示すように、機能をもつブロックをノードとし、依存関係のリンクとするグラフ形式で記述される。依存関係は、好適には、XMLなどの形式で記述される。
メイン・ルーチン206は、オペレータのキーボード110やマウス112などの操作を受け付けて、セグメント抽出ルーチン208、マージ処理ルーチン212、コード変換ルーチン216、コンパイラ220などを適宜呼び出し、全体の処理を統合する機能をもつ。
セグメント抽出ルーチン208は、ブロック線図のコード204において、内部状態をもつブロックおよび出力を持たないブロックに着目して、ブロック線図の機能ブロック群を、ブロックの重複を許容しつつ複数のセグメントに分割し、ファイル210としてハードティスク・ドライブ116に書き出す機能をもつ。セグメント抽出ルーチン208の処理については、図6及び図7のフローチャートを参照して、後で詳細に説明する。
マージ処理ルーチン212は、ブロックの重複を減らしつつ、セグメントをマージしたセグメントを生成してファイル214としてハードティスク・ドライブ116に書き出す機能をもつ。マージ処理ルーチン212の処理については、図8のフローチャートを参照して、後で詳細に説明する。
コード変換ルーチン216は、ブロック線図で記述されたコードを例えばC言語のソースコードに変換する機能をもつ。セグメント毎に変換されたソースコード218は、好適にはハードティスク・ドライブ116にに書き出される。コード変換ルーチン216として好適には、MathWorks社から入手可能なRealtime Workshopを使用することができる。
コンパイラ220は、セグメント毎にソースコード218をコンパイルして、実行可能コード222を生成して、好適にはハードティスク・ドライブ116に書き出す。コンパイラ220としては、CPU1、CPU2・・・CPUnに適合するコードを生成する任意のコンパイラを使用することができる。
実行環境224は、セグメント毎の実行可能コード222を、CPU1、CPU2、・・・、CPUnに個別に割り当てて並列実行させる機能をもつ。
図3は本発明の入力となるブロック線図の一例を示す。本発明が対象とするブロック線図は、シミュレーションの 1 タイムステップ分の処理を表しており、これが所定回繰り返されることによりシミュレーションの対象となるシステムの時系列における振る舞いを得ることができる。
より具体的には、以下の二つの処理が1タイムステップ分の処理となる(ソルバによってはこれを複数回繰り返したものが1タイムステップ分の処理となるが、基本的な処理手順は変わらず、本発明の適用を妨げるものではない)。
1)以下のルールに従ってすべてのブロックの出力を計算する。
a)内部状態を持つブロックは当該ブロックへの入力を必要とせず、自身が持つ内部状態からその出力を計算できるため、任意のタイミングで出力を計算してよい。図3におけるブロック302、ブロック304が内部状態を持つブロックであるとすると、これらのブロックから出力計算を開始することができる。
b)内部状態を持たないブロックは、自身への入力を元に出力を計算するため、入力が計算された後に当該ブロックの出力を計算する。図3におけるブロック302、ブロック304以外のブロックは、入力が計算された後、初めて出力を計算することができる。ただし、入力を持たないブロックの場合には、そのブロックから出力計算を開始することができる。
2)前記処理により、内部状態を持つブロックへの入力値(図3においてはブロック306およびブロック302の出力)が計算されているので、これを使って内部状態を次のタイムステップにおけるものに更新する。
ここで、内部状態を持つブロックへの入力は、1タイムステップ分のブロックの出力を計算する段階においては存在しないものとみなしてよく、これを non-direct feedthrough (NDF) 入力と呼ぶ。図3においてはブロック302および304の入力を指し、これはそれぞれブロック306の出力、ブロック302の出力である。
このように表現されたブロック線図は、好適には図4の右に示すような常微分方程式の State Space Form(ODE/SSF)を表現している。
左辺に状態変数を更新するために必要な変数 x'(一般には状態変数の時間微分だが、Simulink(R)などにおいては微係数以外にも左辺に相当する変数があり、ここではより一般化して状態変数を更新するために必要な変数と呼ぶことにする)、右辺に状態変数xを入力とする関数を持つ連立方程式となる。
このような常微分方程式を数値的に解く一般的な手順は、あるタイムステップにおいて与えられた状態変数から右辺をすべて評価して左辺の値を得、左辺の値を元に次のタイムステップの状態変数を計算するという、前述のブロック線図における計算処理そのものである。
図4はこのODE/SSFと、ブロック線図(の一部)の対応を示している。
内部状態をもつブロックをブロック402、ブロック404及びブロック406とする。
ここでブロック402に着目し、そこでの内部状態(すなわち State Space Form における状態変数)をxiとする。すると、その内部状態(状態変数)を更新するのに必要な変数 xi' はブロック402への入力に相当し、その値を計算するために必要なブロックの集合(三角形408に囲まれたブロック)が右辺 fiに相当する。
ここであるタイムステップにおけるxi'の値の計算には、他の状態変数の更新に必要な値 xj', xk' 、すなわちNDF入力は必要なく、xj',xk'を計算するブロックはこの集合に含まれないことに注意されたい。
ところで、図4の右の式においては、右辺の式はすべて互いに独立に、すなわち並列に計算することが可能である。本発明の手法はこの性質をブロック線図の計算の並列化に応用するものであり、基本的にはブロック線図から抽出されたODE/SSFの各右辺に相当する部分を並列に実行することで高速化を達成する。
図5はブロック線図から上記概念に基づいて並列に実行する単位(セグメント)を抽出する手順を説明するための図である。
図5(a)は、後の説明の便宜のため、内部状態をもつブロックが先頭に来るように並べ替え、また、各ブロックに、A〜Pの記号を振ったものである。この記号を用いると、図5(a)では、ブロックA、ブロックHが内部状態をもつブロックである。
ここで、セグメント抽出ルーチン208の処理により、NDF入力を計算するブロックおよび出力のないブロック(すなわち、図5(a)においては G, J, P)からグラフを依存関係の逆方向に、すなわちリンクの矢印の逆方向に辿り、各内部状態をもつブロックおよび各出力を持たないブロックへの入力の算出に必要なブロックの集合からなる(他のセグメントとの重複を許す)セグメントを抽出する。この処理の詳細は、図6及び図7のフローチャートを参照してより詳細に説明する。
このようなセグメント化の結果、図5(b)に示すように、x1'に対応するセグメント502、x2'に対応するセグメント504、出力を持たないブロック P に対応するセグメント506などが得られる。図5(b)からは、例えばブロックC,E,Fが、セグメント502とセグメント504の間で重複していることが見て取れる。このような重複の存在により、各セグメントは他のセグメントとは独立して、すなわち並列に計算が可能となる。ただし、重複が多すぎれば並列に計算ができても処理時間は短縮しない上、ブロック数が4000程度の実践的なブロック線図では、この段階におけるセグメント数は400〜1000程度と非常に多くなる傾向があり、通常のハードウェアではこのままではプロセッサに個別にセグメントを割り当てて並列実行させることはできない。
そこで図5(c)に示すように、マージ処理ルーチン212が、セグメント間の重複を減らすように(究極的には各セグメントに含まれるブロックの計算に要する時間の最大値が小さくなるように)セグメントの数が利用可能なコアまたはプロセッサの数以下になるまでセグメントをマージする。この結果、マージされたセグメント508、510・・・が得られる。見てとれるように、この段階でも多少、セグメント間で重複するブロックは存在しえるが、この重複によって1ステップ内での通信が不要となる。また、マージ処理によって初期のセグメントにあった大量の重複はなくなり、効率的な並列実行が可能となる。
図5(c)の段階の個々のセグメントが、コード変換ルーチン216によってソースコードに変換され、コンパイラ220によって実行可能コードに変換され、実行環境224によって、個別のコアまたはプロセッサに割り当てられて実行される。
図6及び図7は、セグメント抽出ルーチン208の処理のフローチャートを示す図である。
図6のステップ602において、セグメント抽出ルーチン208は、B := NDF入力へ出力を渡すブロック、すなわち内部状態をもつブロックに対する親ブロック(依存関係の矢印の上流にあるブロック)、または出力をもたないブロックの集合とする。また、ステップ602では、SにΦ、すなわち空集合がセットされる。
因みに、Simulink(R)において、NDFを持つ可能性があるブロックの例として、これには限定されないが、次のものがある。
Integrator : 積分計算のブロック
DiscreteFilter :無限インパルス応答(IIR)フィルタと有限インパルス応答(FIR)フィルタを実現するブロック
TransferFunction :伝達関数を表すブロック(NDFはdx/dtに該当)
S-function : ユーザが機能を自由に定義できるブロック
RateTransition : サンプルタイムが変化することを表すブロック
ステップ604において、セグメント抽出ルーチン208は、Bが空集合かどうか判断し、もしそうならステップ606で、S中の各要素を初期のセグメントとして出力、すなわちファイル210としてハードディスク・ドライブ116に書き出して処理を終わる。
ステップ604においてBが空集合でないと判断すると、ステップ606において、セグメント抽出ルーチン208は、Bの要素であるbを取り出す。
ステップ610において、セグメント抽出ルーチン208は、sに空集合をセットし、ancestors(b,s)を呼び出し、セグメントsを抽出する。ancestors(b,s)については、図5のフローチャートを参照して、後で説明する。
ステップ612において、セグメント抽出ルーチン208は、ancestors(b,s)によって抽出されたセグメントを、S := S ∪ {s}により記録する。
ステップ614において、セグメント抽出ルーチン208は、B := B - {b}により、Bからbを削除して、ステップ604での判断に戻る。
このように、最初にBが空でないとすると、ステップ604、608、610、612及び614のループを回るうちにBの要素が次第に減ってきて、ついに空になったとき、ステップ604からステップ606を経て処理が終わる。
図7は、図6で呼び出されるサブルーチンancestors(b,s)の処理のフローチャートを示す図である。
サブルーチンancestors(b,s)は、ステップ702で、s := s ∪ {b}により、sにbを加える。
ステップ704では、サブルーチンancestors(b,s)は、P := bの親ブロックの集合とする。但し、このとき、NDF入力を介した親は含まない。
ステップ706では、サブルーチンancestors(b,s)は、Pが空集合かどうか判断し、もしそうでないなら、ステップ708で、1つの親p ∈ Pを取り出す。
ステップ710では、サブルーチンancestors(b,s)は、ancestors(p,s)を再帰呼び出しする。そして、ステップ712でP := P - {p}によりPからpを除去してancestors(b,s)は、ステップ706で再び、Pが空集合かどうか判断する。このような繰り返しで、ついにPが空集合になると、処理は図6のステップ610に戻る。
図8は、マージ処理ルーチン212の処理のフローチャートを示す図である。図8のステップ802で、マージ処理ルーチン212は、S := セグメントの集合、p := プロセッサ数とする。セグメントの集合は、図2に示すように、セグメント抽出ルーチン208が書き出したファイル210から取得される。また、プロセッサ数は、利用可能なハードウェアに従い、予め定数としてセットしていてもよい。
ステップ804で、マージ処理ルーチン212は、S中の最も計算時間の小さいセグメントsを抽出する。すなわち、sは次の条件を満たす。||s|| <= ||s'||, s∈S, ∀s'∈S
ここで、||s||のような記法は、sが含むブロックの出力計算に必要な計算時間を示す。この計算時間は、あらかじめ各ブロックに要する計算時間を測定するか、仕様に基づき記録しておき、これを表引きして、セグメントが含むブロック毎に足すことによって得られる。
ステップ806で、マージ処理ルーチン212は、sとの和集合に含まれるブロックの計算時間が最小となるセグメントtを抽出する。すなわち、t は次の条件を満たす。||t ∪ s|| <= ||t' ∪ s||, t∈S-{s}, ∀t'∈S-{s}
なお、t ∪ sで示すような、Sの要素の間の和集合というとき、Sの要素自体がブロックの集合なので、ブロックを要素とみなして、集合演算を行うものと理解されたい。
ステップ808で、マージ処理ルーチン212は、S中の最も計算時間の大きいセグメントuを抽出する。すなわち、u は次の条件を満たす。||u|| >= ||u'||, u∈S, ∀u'∈S
ステップ810で、マージ処理ルーチン212は、|S| > pまたは||u|| >= ||t ∪ s||かどうかを判断する。ここで、|S|とは、Sの要素の数である。
|S| > pまたは||u|| >= ||t ∪ s||であるなら、マージ処理ルーチン212は、ステップ812でS := S - {s}でSからsを削除し、ステップ814でS := S - {t}でSからtを削除し、ステップ816でS := S ∪ {t∪s}によりSに、tとsの和集合からなる要素を追加して、ステップ804に戻る。
このような処理を続けると、ある段階でステップ810の判断が否定的、すなわち、|S| <= p且つ||u|| < ||t ∪ s||という条件が満たされる。これは、現在のセグメントの数がプロセッサの数以下であり、これ以上セグメントをマージせずともすべてのセグメントが並列に実行でき、且つ、計算時間が最小となるセグメント s をこれ以上別のセグメントとマージすると、計算時間の最大値が現状よりも大きくなり、並列実行のパフォーマンスの低下につながることを意味するため、ここでマージ処理を終了する。
この段階で、マージ処理ルーチン212は、ステップ818で、S中の各要素を、最終的なセグメント、すなわち、図2で示したマージされたセグメント214として出力して、処理を終わる。
次に図9に、コンピュータによる、一般的なODE/SSFの数値的な求解処理を模式的に示す。すなわち、ODE/SSFが下記のとおりだとする。
x1' = f1(x(t),t)
x2' = f2(x(t),t)
...
xn' = fn(x(t),t)
すると、特に並列化がなされていない場合、図9のブロック902で、f1,f2,...,fnの計算が逐次処理される。
また、ブロック902の後処理として、好適にはルンゲ・クッタ法などによって、x'(ti)という微分項をx(ti+1)にする積分を含む状態更新処理904が必要となる。
図10は、図9に示すf1,f2,...,fnの逐次計算をセグメントに分解し、この場合、4つのコアまたはプロセッサで並列化するように割り当てた場合の処理を模式的に示す。すなわち、図10では、f1,f2,...,fnの逐次計算に対応するブロック線図のグラフが、本発明の処理に従い、4つのセグメントとして分割してブロック1002、ブロック1004、ブロック1006、ブロック1008で並列に実行される。ただ、図10の処理においても、x'(ti)という微分項をx(ti+1)にする積分を含む状態更新処理1010は同様に必要となる。状態更新処理1010の実行は、fの計算の完了した後なので最早ブロック1002、ブロック1004、ブロック1006、ブロック1008を並列計算したどのCPUもビジーでなく、よって任意のCPUで計算することができる。
以上、この発明を特定の実施例に基づき説明してきたが、この発明は、この特定の実施例に限定されず、当業者が自明に思いつく様々な変形、置換などの構成、技法適用可能であることを理解されたい。例えば、特定のプロセッサのアーキテクチャ、オペレーティング・システムなどに限定されない。
また、上記実施例は、MATLAB(R)/Simulink(R)を例にとって説明したが、これに限らず、任意のモデリング・ツールに適用可能であることを理解されたい。
102 ホスト・バス
104a、104b、・・・104n CPU
106 メイン・メモリ
116 ハードティスク・ドライブ
202 シミュレーション・モデリング・ツール
204 ブロック線図のコード
208 セグメント抽出ルーチン
212 マージ処理ルーチン
216 コード変換ルーチン
220 コンパイラ
224 実行環境

Claims (15)

  1. 複数のプロセッサをもつコンピュータの処理により、ノードがブロックであり、依存関係がリンクであるグラフ状のモデルにおける複数の連立方程式で記述される、常微分方程式を解く方法であって、
    前記モデルにおける内部状態をもつブロックへの入力を計算するブロックおよび出力を持たないブロックから出発して、前記依存関係を逆に辿ることにより、前記内部状態をもつブロックへの入力を計算するブロックおよび出力を持たないブロック毎に該ブロックへの入力の計算に必要なブロックの集合からなるセグメントを、互いに重複を含むことを許しつつ、生成するステップと、
    前記セグメントを、重複を減らすようにマージするステップと、
    前記マージされた結果のセグメントの各々をコンパイルして実行可能コードに変換するステップと、
    前記セグメント毎の実行可能コードを、前記複数のプロセッサに個別に割り当てて並列に実行させるステップを有する、
    方法。
  2. 前記セグメントを生成するステップが、内部状態をもつブロックへの入力など、1タイムステップ内ではないものとしてよい依存関係を介した親ブロックは含まないようにして、親ブロックを辿りつつ、ブロックをセグメントに追加するステップを有する、
    請求項1に記載の方法。
  3. 前記セグメントを、重複を減らすようにマージするステップが、
    (a) 前記セグメントの集合において、最も計算時間の小さいセグメントsを抽出するステップと、
    (b) 前記セグメントsとの和集合に含まれるブロックの計算時間が最小となるセグメントtを抽出するステップと、
    (c) 前記セグメントの集合において、最も計算時間の大きいセグメントuを抽出するステップと、
    (d) 前記セグメントの集合の個数が前記プロセッサの数よりも大きいかまたは、前記セグメントuの計算時間が前記セグメントsと前記セグメントtの和集合の計算時間よりも大きいかどうかの判断を行うステップと、
    (e) 前記判断が肯定的であることに従い、前記セグメントの集合から前記セグメントsと前記セグメントtを除去して、前記セグメントsと前記セグメントtの和集合を追加し前記ステップ(a)から処理を繰り返すステップと、
    (f) 前記判断が否定的であることに従い、前記セグメントの集合を出力して前記マージするステップを含む、
    請求項1に記載の方法。
  4. 前記内部状態をもつブロックが、積分計算のブロック、またはユーザー定義のブロックである、請求項1に記載の方法。
  5. 前記複数のプロセッサをもつコンピュータが、マルチコアのプロセッサを含む、請求項1に記載の方法。
  6. 複数のプロセッサをもつコンピュータの処理により、ノードがブロックであり、依存関係がリンクであるグラフ状のモデルにおける複数の連立方程式で記述される、常微分方程式を解くプログラムであって、
    前記コンピュータに、
    前記モデルにおける内部状態をもつブロックへの入力を計算するブロックおよび出力を持たないブロックから出発して、前記依存関係を逆に辿ることにより、前記内部状態をもつブロックへの入力を計算するブロックおよび出力を持たないブロック毎に該ブロックへの入力の計算に必要なブロックの集合からなるセグメントを、互いに重複を含むことを許しつつ、生成するステップと、
    前記セグメントを、重複を減らすようにマージするステップと、
    前記マージされた結果のセグメントの各々をコンパイルして実行可能コードに変換するステップと、
    前記セグメント毎の実行可能コードを、前記複数のプロセッサに個別に割り当てて並列に実行させるステップを実行させる、
    プログラム。
  7. 前記セグメントを生成するステップが、内部状態をもつブロックへの入力など、1タイムステップ内ではないものとしてよい依存関係を介した親ブロックは含まないようにして、親ブロックを辿りつつ、ブロックをセグメントに追加するステップを有する、
    請求項6に記載のプログラム。
  8. 前記セグメントを、重複を減らすようにマージするステップが、
    (a) 前記セグメントの集合において、最も計算時間の小さいセグメントsを抽出するステップと、
    (b) 前記セグメントsとの和集合に含まれるブロックの計算時間が最小となるセグメントtを抽出するステップと、
    (c) 前記セグメントの集合において、最も計算時間の大きいセグメントuを抽出するステップと、
    (d) 前記セグメントの集合の個数が前記プロセッサの数よりも大きいかまたは、前記セ
    グメントuの計算時間が前記セグメントsと前記セグメントtの和集合の計算時間よりも大
    きいかどうかの判断を行うステップと、
    (e) 前記判断が肯定的であることに従い、前記セグメントの集合から前記セグメントsと前記セグメントtを除去して、前記セグメントsと前記セグメントtの和集合を追加し前記ステップ(a)から処理を繰り返すステップと、
    (f) 前記判断が否定的であることに従い、前記セグメントの集合を出力して前記マージするステップを含む、
    請求項6に記載のプログラム。
  9. 前記内部状態をもつブロックが、積分計算のブロック、またはユーザー定義のブロックである、請求項6に記載のプログラム。
  10. 前記複数のプロセッサをもつコンピュータが、マルチコアのプロセッサを含む、請求項6に記載のプログラム。
  11. 複数のプロセッサをもつコンピュータの処理により、ノードがブロックであり、依存関係がリンクであるグラフ状のモデルにおける複数の連立方程式で記述される、常微分方程式を解くシステムであって、
    前記モデルにおける内部状態をもつブロックへの入力を計算するブロックおよび出力を持たないブロックから出発して、前記依存関係を逆に辿ることにより、前記内部状態をもつブロックへの入力を計算するブロックおよび出力を持たないブロック毎に該ブロックへの入力の計算に必要なブロックの集合からなるセグメントを、互いに重複を含むことを許しつつ、生成する手段と、
    前記セグメントを、重複を減らすようにマージする手段と、
    前記マージされた結果のセグメントの各々をコンパイルして実行可能コードに変換する手段と、
    前記セグメント毎の実行可能コードを、前記複数のプロセッサに個別に割り当てて並列に実行させる手段を有する、
    システム。
  12. 前記セグメントを生成する手段が、内部状態をもつブロックへの入力など、1タイムステップ内ではないものとしてよい依存関係を介した親ブロックは含まないようにして、親ブロックを辿りつつ、ブロックをセグメントに追加する処理を実行する、
    請求項11に記載のシステム。
  13. 前記セグメントを、重複を減らすようにマージする手段が、
    (a) 前記セグメントの集合において、最も計算時間の小さいセグメントsを抽出する処理と、
    (b) 前記セグメントsとの和集合に含まれるブロックの計算時間が最小となるセグメントtを抽出する処理と、
    (c) 前記セグメントの集合において、最も計算時間の大きいセグメントuを抽出する処理と、
    (d) 前記セグメントの集合の個数が前記プロセッサの数よりも大きいかまたは、前記セ
    グメントuの計算時間が前記セグメントsと前記セグメントtの和集合の計算時間よりも大
    きいかどうかの判断を行う処理と、
    (e) 前記判断が肯定的であることに従い、前記セグメントの集合から前記セグメントsと前記セグメントtを除去して、前記セグメントsと前記セグメントtの和集合を追加し前記処理(a)から処理を繰り返す処理と、
    (f) 前記判断が否定的であることに従い、前記セグメントの集合を出力して前記マージする処理を実行する、
    請求項11に記載のシステム。
  14. 前記内部状態をもつブロックが、積分計算のブロック、またはユーザー定義のブロックである、請求項11に記載のシステム。
  15. 前記複数のプロセッサをもつコンピュータが、マルチコアのプロセッサを含む、請求項11に記載のシステム。
JP2012026145A 2012-02-09 2012-02-09 並列化方法、システム、及びプログラム Active JP6021342B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012026145A JP6021342B2 (ja) 2012-02-09 2012-02-09 並列化方法、システム、及びプログラム
US13/761,258 US8990767B2 (en) 2012-02-09 2013-02-07 Parallelization method, system and program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012026145A JP6021342B2 (ja) 2012-02-09 2012-02-09 並列化方法、システム、及びプログラム

Publications (2)

Publication Number Publication Date
JP2013164657A JP2013164657A (ja) 2013-08-22
JP6021342B2 true JP6021342B2 (ja) 2016-11-09

Family

ID=48946737

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012026145A Active JP6021342B2 (ja) 2012-02-09 2012-02-09 並列化方法、システム、及びプログラム

Country Status (2)

Country Link
US (1) US8990767B2 (ja)
JP (1) JP6021342B2 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9081925B1 (en) * 2012-02-16 2015-07-14 Xilinx, Inc. Estimating system performance using an integrated circuit
JP6004818B2 (ja) 2012-08-07 2016-10-12 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 並列化方法、システム、及びプログラム
US9529946B1 (en) 2012-11-13 2016-12-27 Xilinx, Inc. Performance estimation using configurable hardware emulation
EP2851815A1 (de) * 2013-09-18 2015-03-25 dSPACE digital signal processing and control engineering GmbH Testeinrichtung zum Echtzeittest eines virtuellen Steuergeräts
US9846587B1 (en) * 2014-05-15 2017-12-19 Xilinx, Inc. Performance analysis using configurable hardware emulation within an integrated circuit
US9608871B1 (en) 2014-05-16 2017-03-28 Xilinx, Inc. Intellectual property cores with traffic scenario data
SG11201701667WA (en) * 2014-09-02 2017-04-27 Ab Initio Technology Llc Visually specifying subsets of components in graph-based programs through user interactions
US10496619B2 (en) 2014-09-02 2019-12-03 Ab Initio Technology Llc Compiling graph-based program specifications

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5179702A (en) * 1989-12-29 1993-01-12 Supercomputer Systems Limited Partnership System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling
US7952583B2 (en) * 2000-06-19 2011-05-31 Mental Images Gmbh Quasi-monte carlo light transport simulation by efficient ray tracing
US20110238948A1 (en) * 2002-08-07 2011-09-29 Martin Vorbach Method and device for coupling a data processing unit and a data processing array
US7225173B2 (en) * 2002-09-09 2007-05-29 Carmel - Haifa University Economic Corporation Ltd. Apparatus and method for efficient adaptation of finite element meshes for numerical solutions of partial differential equations
JP2005018626A (ja) * 2003-06-27 2005-01-20 Ip Flex Kk 並列処理システムの生成方法
JP3901180B2 (ja) * 2004-06-30 2007-04-04 日本電気株式会社 プログラム並列化装置及びその方法並びにプログラム
US7512592B2 (en) * 2004-07-02 2009-03-31 Tarari, Inc. System and method of XML query processing
US7603546B2 (en) * 2004-09-28 2009-10-13 Intel Corporation System, method and apparatus for dependency chain processing
US7941791B2 (en) * 2007-04-13 2011-05-10 Perry Wang Programming environment for heterogeneous processor resource integration
US7912003B2 (en) * 2007-06-27 2011-03-22 Microsoft Corporation Multipath forwarding algorithms using network coding
US20090089029A1 (en) * 2007-09-28 2009-04-02 Rockwell Automation Technologies, Inc. Enhanced execution speed to improve simulation performance
US8214817B2 (en) * 2007-10-09 2012-07-03 International Business Machines Corporation Detecting change in program behavior for adaptive code optimization
US8225074B2 (en) * 2008-10-02 2012-07-17 Nec Laboratories America, Inc. Methods and systems for managing computations on a hybrid computing platform including a parallel accelerator
EP2996035A1 (en) * 2008-10-15 2016-03-16 Hyperion Core, Inc. Data processing device
KR101522444B1 (ko) * 2008-10-24 2015-05-21 인터내셔널 비지네스 머신즈 코포레이션 소스 코드 처리 방법, 시스템, 및 프로그램
US9715376B2 (en) * 2008-12-29 2017-07-25 Intel Corporation Energy/performance with optimal communication in dynamic parallelization of single threaded programs
US8321648B2 (en) * 2009-10-26 2012-11-27 Netapp, Inc Use of similarity hash to route data for improved deduplication in a storage server cluster
JP4886838B2 (ja) 2009-10-30 2012-02-29 インターナショナル・ビジネス・マシーンズ・コーポレーション 並列化方法、システム、及びプログラム
US8352422B2 (en) * 2010-03-30 2013-01-08 Commvault Systems, Inc. Data restore systems and methods in a replication environment
US8762964B2 (en) * 2010-12-17 2014-06-24 Cisco Technology, Inc. Optimizing symbol manipulation language-based executable applications for distributed execution

Also Published As

Publication number Publication date
US8990767B2 (en) 2015-03-24
JP2013164657A (ja) 2013-08-22
US20130212554A1 (en) 2013-08-15

Similar Documents

Publication Publication Date Title
JP6021342B2 (ja) 並列化方法、システム、及びプログラム
JP4931978B2 (ja) 並列化処理方法、システム、及びプログラム
JP4886838B2 (ja) 並列化方法、システム、及びプログラム
JP5209059B2 (ja) ソース・コード処理方法、システム、及びプログラム
JP4629768B2 (ja) 並列化処理方法、システム、及びプログラム
JP5479942B2 (ja) 並列化方法、システム、及びプログラム
US20130198713A1 (en) Code generation for control design
JP4988789B2 (ja) シミュレーション・システム、方法及びプログラム
JP5651251B2 (ja) シミュレーション実行方法、プログラム及びシステム
JP6004818B2 (ja) 並列化方法、システム、及びプログラム
US9396095B2 (en) Software verification
Bakhtin et al. DVM-approach to the automation of the development of parallel programs for clusters
CN115130407A (zh) 用于在处理器与fpga之间划分仿真模型的方法
JP5692739B2 (ja) 常微分方程式を解くための方法、プログラム及びシステム
JP5775386B2 (ja) 並列化方法、システム、及びプログラム
Ivutin et al. Low-level Code Auto-tuning for State-of-the-art Multicore Architectures
JP7385536B2 (ja) ソフトウェア開発支援装置及びソフトウェア開発支援方法
Suresh et al. Vehicle Motion Control on SIMD: Traditional and AI based models on the edge
Camelo Performance characterization of the alya fluid dynamics simulator
CN117313373A (zh) Emt仿真方法、装置、上位机及emt仿真系统
Juanpere Cañameras Characterization of applications in new architectures
Nishida Lis User Manual Version 1.3. 32

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140901

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151016

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151110

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160209

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160405

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160624

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: 20160913

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20161004

R150 Certificate of patent or registration of utility model

Ref document number: 6021342

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150