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

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

Info

Publication number
JP6004818B2
JP6004818B2 JP2012174491A JP2012174491A JP6004818B2 JP 6004818 B2 JP6004818 B2 JP 6004818B2 JP 2012174491 A JP2012174491 A JP 2012174491A JP 2012174491 A JP2012174491 A JP 2012174491A JP 6004818 B2 JP6004818 B2 JP 6004818B2
Authority
JP
Japan
Prior art keywords
segment
block
blocks
segments
initial segment
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
JP2012174491A
Other languages
English (en)
Other versions
JP2014035548A (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 JP2012174491A priority Critical patent/JP6004818B2/ja
Priority to US13/952,077 priority patent/US9311273B2/en
Priority to US13/972,226 priority patent/US9218317B2/en
Publication of JP2014035548A publication Critical patent/JP2014035548A/ja
Application granted granted Critical
Publication of JP6004818B2 publication Critical patent/JP6004818B2/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
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/11Complex mathematical operations for solving equations, e.g. nonlinear equations, general mathematical optimization problems
    • G06F17/12Simultaneous equations, e.g. systems of linear equations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/11Complex mathematical operations for solving equations, e.g. nonlinear equations, general mathematical optimization problems
    • G06F17/13Differential equations
    • 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

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として、シミュレーションを実行することができる。
マルチプロセッサあるいはマルチコアをもつコンピュータ・システムが普及してくるにつれて、ブロック線図で記述されたプログラムをセグメントと呼ばれるグループに分け、その各々を異なるプロセッサまたはコアに割り当てて並列実行させ、以って高速実行を図る技術が提供されるようになってきた。
特開平4−211858号公報は、分割したデータフローグラフを複数のプロセッサで実行する際、プロセッサ間を流れるパケット数が少なくなるようにデータフローグラフの各ノードを割付けることで、プロセッサ間通信による処理実行時間への影響を軽減させることを開示する。
特開平8−44577号公報は、それぞれに割り当てられたタスクを行う複数のプロセッサと、該複数のプロセッサに対応する複数のメモリと、を備えたマルチプロセッサシステムにおいて、該複数のメモリ3にデータを分割するデータ分割方法が、該タスクと、該タスクにアクセスされる変数とを対応づけるステップと、該変数に該タスクがアクセスするときのアクセスの種別を決定するステップと、該変数に該タスクがアクセスするときのアクセスコストを決定するステップと、アクセスコストが最大であるタスクを行うプロセッサに対応するメモリに、該変数を割り当てるステップを有する、マルチプロセッサシステムのデータ分割方法を開示する。
特開2011−96107号公報は、ブロック線図において、内部状態をもたない機能ブロックの出力が、内部状態をもつ機能ブロックAによって使用されるとき、機能ブロックAは、その内部状態をもたない機能ブロックの使用ブロックと呼び、内部状態をもつ機能ブロックAの出力が、内部状態をもたない機能ブロックの入力として計算に使用されるとき、機能ブロックAは、その内部状態をもたない機能ブロックの定義ブロックと呼び、各機能ブロックをノードとして訪問することにより、内部状態をもつ機能ブロックと、内部状態をもたない機能ブロックとの接続関係に基づき、機能ブロック毎に、使用ブロック集合/定義ブロック集合の数を求め、その数に基づき、ストランドを割り当て、これにより、ブロック線図を、ストランドに分けて処理を並列化することを開示する。
一方、ブロック線図によって記述されるモデルは、これを数値的に解く技法の観点では、エクスプリシットな連立常微分方程式の状態空間形式での表現(ordinary differential equations / state space form = ODE/SSF)と見立てることもできる。その観点では、笠原 博徳、藤井 稔久、本多 弘樹、成田 誠之助、"スタティック・マルチプロセッサ・スケジューリング・アルゴリズムを用いた常微分方程式求解の並列処理"情報処理学会論文誌 28(10), 1060-1070, 1987-10-15は、エクスプリシットな常微分方程式求解のための並列処理手法に関し、タスク生成、タスクのプロセッサ上への最適スケジューリング、スケジューリング結果を用いたマシンコードの生成などからなり、様々な粒度に対応可能な常微分方程式求解の並列処理技法を開示する。
これらの従来技術では、ブロック線図で記述された処理を十分に並列化することができなかった。そこで、本出願人の発明者らは先に、特願2012−26145号明細書において、モデルを記述するブロック線図を構成する機能ブロックのうちの、内部状態をもつブロックおよび出力を持たないブロックに着目し、内部状態をもつブロックおよび出力を持たないブロックからグラフを依存関係の逆方向に辿り、各内部状態をもつブロックおよび出力を持たないブロックへの入力の算出に必要なブロックの集合からなるセグメントを抽出し、この際、セグメント間で、ブロックの重複を許し、次に、各セグメントを、重複を減らすようにマージし、セグメント数を並列実行の数まで減らす発明を提案した。
特願2012−26145号明細書に記述されている技法は、複数の方程式が連立するODE/SSF x' = f(x,t) (xは状態変数のベクトルを表し、x'はその各要素の微係数を要素とするベクトルであり、fはxの要素数と同じ数の式を表す)における各右辺の計算に該当するブロックの集合をセグメントと呼び、セグメント間の並列性を抽出することにより処理の高速化を達成できたが、最大の計算時間を要するセグメントが最終的な計算時間を決定することになり、適用するモデルによっては効果が限定的になることがあった。
特開平4−211858号公報 特開平8−44577号公報 特開2011−96107号公報 特願2012−26145号明細書
笠原 博徳、藤井 稔久、本多 弘樹、成田 誠之助、"スタティック・マルチプロセッサ・スケジューリング・アルゴリズムを用いた常微分方程式求解の並列処理" 情報処理学会論文誌 28(10), 1060-1070, 1987-10-15
従って、この発明の目的は、分割されたセグメント内部の並列性をさらに抽出して、上記従来技術のボトルネックを解消して、更なる処理の高速化を達成することにある。
本発明に従うシステムは先ず、モデルが本質的に表現している常微分方程式の状態空間形式ODE/SSFの性質を利用して、1ステップ内で通信の発生しない並列実行単位を抽出する。
このために、本発明に従うシステムは、モデルを記述するブロック線図を構成するブロックのうちの、内部状態をもつブロックおよび出力を持たないブロックに着目し、内部状態をもつブロックへの入力を計算するブロック及び出力を持たないブロックからグラフを依存関係の逆方向に辿り、各内部状態をもつブロックへの入力および出力を持たないブロックの計算に必要なブロックの集合からなるセグメントを抽出する。この際、セグメント間で、ブロックの重複を許すものとする。
そこで抽出されたセグメントを更に細かい、他と独立に実行可能な、重複を許すセグメントに分割したいのだが、セグメントはどのように分割しても、当該セグメント内の別の部分との依存関係が残り、互いに独立な部分に分割することはできない。そこで、本発明に従うシステムは、当該セグメント内の一部のブロック(ノード)を一時的に除去したセグメントを互いに独立な部分に分割する。そのために、当該セグメント内の並列性に基づいて一時的に除去するノードの集合を特定する。
そして、本発明に従うシステムは、一部のノードを除去したことで子ノードのなくなったノードから上流に辿ることで、他と独立に実行できるセグメントを抽出し、これらのセグメントを上流のセグメント、一時的に除去されたノードの集合を下流のセグメントとして2つに分ける。
次に、本発明に従うシステムは、上流のセグメント同士、下流のセグメント同士を、セグメント間でのブロックの重複を減らすようにマージし、セグメント数を並列実行の数まで減らす。このとき、同じブロックを多くもつセグメント同士をマージすることで、セグメント間の重複が減る。尚ここで、並列実行の数とは典型的には、利用可能なコアまたはプロセッサの数である。
次に、本発明に従うシステムは、結果として得られたセグメントの各々をコンパイルし、得られた実行可能コードを各コアまたはプロセッサに割り当てて並列実行させる。
以上のように、この発明によれば、ブロック線図などのグラフ形式で記述されたプログラムを、バランスよく1ステップ内で通信が必要ない形でセグメント化し、さらにセグメントを再分割して並列性を抽出することで、複数のプロセッサに割り当てて並列実行させることにより、実行速度を向上することができるという効果が得られる。
本発明を実施するためのハードウェアのブロック図である。 本発明を実施するための機能構成のブロック図である。 本発明の入力となるブロック線図を説明するための図である。 本発明の処理がセグメントを抽出するために利用する概念を説明するための図である。 本発明処理の概要を説明するための図である。 セグメント抽出処理のフローチャートを示す図である。 セグメント抽出処理で呼び出されるサブルーチンの処理のフローチャートを示す図である。 セグメント再分割処理のフローチャートを示す図である。 上流・下流のセグメントをそれぞれ重複を減らすようにマージして、それぞれ並列実行の数まで減らして、CPUに割り当てる処理のフローチャートを示す図である。 セグメントのマージ処理で呼ばれるmergeのフローチャートを示す図である。 setbinpack1及びsetbinpack2で呼ばれるsetbinpackのフローチャートを示す図である。 mergeで呼ばれるsetbinpack1のフローチャートを示す図である。 mergeで呼ばれるsetbinpack2のフローチャートを示す図である。 コンピュータにより、逐次処理により、常微分方程式を解く処理を説明する図である。 コンピュータにより、並列化して、常微分方程式を解く処理を説明する図である。
以下、図面を参照して、本発明の一実施例の構成及び処理を説明する。以下の記述では、特に断わらない限り、図面に亘って、同一の要素は同一の符号で参照されるものとする。なお、ここで説明する構成と処理は、一実施例として説明するものであり、本発明の技術的範囲をこの実施例に限定して解釈する意図はないことを理解されたい。
先ず、図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にはさらに、図2に関連して後述するシミュレーション・モデリング・ツール202であるMATLAB(R)/Simulink(R)、メイン・ルーチン206、セグメント抽出ルーチン208、セグメント再分割ルーチン212、マージ処理ルーチン216、コード変換ルーチン220、Cコンパイラまたは、C++コンパイラ224、などが格納されており、オペレータのキーボード110やマウス112などの操作に応答して、メイン・メモリ106にロードされて実行される。これらのツールやルーチンに関しては、図2に関連して後述する。メイン・ルーチン206、セグメント抽出ルーチン208、セグメント再分割ルーチン212、マージ処理ルーチン216等は、Java(R)、C、C++、C#などの既存のコンピュータ・プログラミングのコードとして書かれ、所定のコンパイラでコンパイルすることにより作成することができる。
尚、使用可能なシミュレーション・モデリング・ツール202は、MATLAB(R)/Simulink(R)に限定されず、オープンソースのScilab/Scicosなど任意のシミュレーション・モデリング・ツールを使用することが可能である。
あるいは、場合によっては、シミュレーション・モデリング・ツールを使わず、直接、C、C++などでシミュレーション・システムのソース・コードを書くことも可能であり、その場合にも、個々の機能が、互いに依存関係にある個別の機能ブロックとして記述できるなら、本発明は適用可能である。
図2は、本発明の実施例に係る処理要素のブロック図である。図2において、オペレータがシミュレーション・モデリング・ツール202を操作することによって作成されたブロック線図のコード204は、ハードティスク・ドライブ116に保存される。ブロック線図のコード204は例えば、図3に示すように、機能をもつブロックをノードとし、ブロック間の依存関係をリンクとするグラフ形式で記述される。依存関係は、好適には、XMLなどの形式で記述される。
メイン・ルーチン206は、オペレータのキーボード110やマウス112などの操作を受け付けて、セグメント抽出ルーチン208、セグメント再分割ルーチン212、マージ処理ルーチン216、コード変換ルーチン220、コンパイラ224などを適宜呼び出し、全体の処理を統合する機能をもつ。
セグメント抽出ルーチン208は、ブロック線図のコード204において、内部状態をもつブロックおよび出力を持たないブロックに着目して、ブロック線図の機能ブロック群を、ブロックの重複を許容しつつ複数のセグメントに分割し、ファイル210としてハードティスク・ドライブ116に書き出す機能をもつ。セグメント抽出ルーチン208の処理については、図6及び図7のフローチャートを参照して、後で詳細に説明する。
セグメント再分割ルーチン212は、ファイル210からセグメントを読み取り、当該セグメント内の並列性に基づいて一時的に除去するノードの集合を特定する機能を有する。セグメント再分割ルーチン212はさらに、一部のノードを除去したことで子ノードのなくなったノードから上流に辿ることで、他と独立に実行できるセグメントを抽出し、これらのセグメントを上流のセグメント、無視されたノードの集合を下流のセグメントとして2つに分けて、分割されたセグメントをファイル214としてハードティスク・ドライブ116に書き出す。なお、セグメント再分割ルーチン212によって再分割されたセグメントと区別するために、セグメント抽出ルーチン208によって抽出されたセグメントを適宜、初期セグメントと呼び、セグメント再分割ルーチン212によって再分割されたセグメントを前記種別に応じて上流セグメントまたは下流セグメントと呼ぶ。セグメント再分割ルーチン212の処理については、図8のフローチャートを参照して、後で詳細に説明する。
マージ処理ルーチン216は、ブロックの重複を減らしつつ、上流セグメントおよび下流セグメントをそれぞれマージしたセグメントを生成してファイル218としてハードティスク・ドライブ116に書き出す機能をもつ。マージ処理ルーチン216の処理については、図9乃至図13のフローチャートを参照して、後で詳細に説明する。
コード変換ルーチン220は、ブロック線図で記述されたコードを例えばC言語のソースコードに変換する機能をもつ。セグメント毎に変換されたソースコード222は、好適にはハードティスク・ドライブ116にに書き出される。コード変換ルーチン220として、これには限定されないが、好適には、MathWorks社から入手可能なRealtime Workshopを使用することができる。
コンパイラ224は、セグメント毎にソースコード218をコンパイルして、実行可能コード222を生成して、好適にはハードティスク・ドライブ116に書き出す。コンパイラ224としては、CPU1、CPU2・・・CPUnに適合するコードを生成する任意のコンパイラを使用することができる。
実行環境226は、セグメント毎の実行可能コード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の出力である。
因みに、Simulink(R)において、NDFを持つ可能性があるブロックの例として、これには限定されないが、次のものがある。
Integrator: 積分計算のブロック
DiscreteFilter:無限インパルス応答(IIR)フィルタと有限インパルス応答(FIR)フィルタを実現するブロック
TransferFunction:伝達関数を表すブロック(NDFはdx/dtに該当)
S-function: ユーザが機能を自由に定義できるブロック
RateTransition : サンプルタイムが変化することを表すブロック
このように表現されたブロック線図は、好適には図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の右の式においては、右辺の式はすべて互いに独立に、すなわち並列に計算することが可能である。特願2012−26145号明細書に記述されている技法はこの性質をブロック線図の計算の並列化に応用するものであり、基本的にはブロック線図から抽出されたODE/SSFの各右辺に相当する部分を並列に実行して高速化を達成する。本発明では更にこれら各右辺の内部に存在する並列性も活用して更なる高速化を達成する。
図5はブロック線図から上記概念に基づいて並列実行の単位であるセグメントを抽出する手順を説明するための図である。
図5(a)は、後の説明の便宜のため、NDF入力を取り除いたブロック線図のグラフ構造を示しており、通常NDF入力を取り除くとグラフ構造はDirected Acyclic Graph (DAG)となる。このグラフ構造が本発明の処理の入力となる。
ここで、セグメント抽出ルーチン208の処理により、子ノードを持たないブロック(すなわち、図5(a)においては502、504、506に相当し、以後シンクブロックと呼ぶ)からグラフを依存関係の逆方向に、すなわちリンクの矢印の逆方向に辿り、各シンクブロックの計算に必要なブロックの集合からなる(他のセグメントとの重複を許す)セグメントを抽出する。この処理の詳細は、図6及び図7のフローチャートを参照してより詳細に説明する。
このようなセグメント化の結果、図5(b)に示すように、ブロック502に対応するセグメント508、ブロック504に対応するセグメント510、ブロック506に対応するセグメント512などが得られる。図5(b)からは、例えばセグメント508とセグメント510の間でいくつかのブロックが重複していることが見て取れる。このような重複の存在により、各セグメントは他のセグメントとは独立して、すなわち並列に計算が可能となる。ただし、ブロック数が4000程度の実践的なブロック線図では、この段階におけるセグメント数は400〜1000程度と非常に多くなる傾向があり、通常のハードウェアではこのままではプロセッサに個別にセグメントを割り当てて並列実行させることはできない。また仮にここで洗い出されたセグメントの数に比べてかなり少ないプロセッサで各々のセグメントを適宜(つまり任意のセグメントをプロセッサ数分並列に実行し、一つのセグメントを処理し終わったプロセッサが次のセグメントを処理するという形で)並列に実行したとしても、重複が多すぎて、全てのブロックを直列に処理するよりも処理時間が増大してしまう場合もある。そのため、特願2012−26145号明細書に記述されている技法では、セグメント間の重複を減らすように(究極的には各セグメントに含まれるブロックの計算に要する時間の最大値が小さくなるように)セグメントの数が利用可能なコアまたはプロセッサの数以下になるまでセグメントをマージして、マージ後のセグメントを個々のプロセッサに割り付けて並列に実行する。しかし、この方法では初期セグメントの内部の並列性は活用されず、最も処理時間を要する初期セグメントが全体のボトルネックとなり、効果が限定的となることがあった。
そこで、セグメント抽出ルーチン208の処理により抽出した初期セグメントを、セグメント再分割ルーチン212によって、初期セグメント内部の並列性に基づき、互いに独立に実行可能なより細かいブロックの集合(セグメント)に分割することで上記のボトルネックを解消する。ただし、初期セグメントはどのように分割しても初期セグメント内の別の部分との依存関係が残り、完全に互いに独立な部分に分割することはできない。そこで、初期セグメント内の一部のブロックを一時的に除去し、残ったブロックの集合から独立部分を取り出すことを考える。図5(c)に示すように、初期セグメント508からブロックの集合514を、初期セグメント510からブロックの集合516を一時的に除去すると、いくつかのブロックが新たにシンクブロックとなる。これらのブロックから依存関係を逆方向に辿ることで、新たにできた各々のシンクブロックの計算に必要なブロックの集合からなるセグメントを抽出する。これらセグメントは互いに一部重複を許すことで互いに独立に、すなわち並列に実行することができる。図5(d)におけるセグメント518および520は初期セグメント508からブロックの集合514を一時的に除去することでできたシンクブロックから辿られたセグメントを示している。
ここで新たに抽出されたセグメント及び、再分割されなかった(すなわちその内部からブロックが除去されなかった)初期セグメントを上流セグメント、個々の初期セグメントにおいて一時的に除去されたブロックの集合を下流セグメントと呼ぶことにする。上流セグメント同士、下流セグメント同士はそれぞれ互いに独立、すなわち並列に実行可能なため、各々セグメント間の重複を減らすように(究極的には各セグメントに含まれるブロックの計算に要する時間の最大値が小さくなるように)セグメントの数が利用可能なコアまたはプロセッサの数以下になるまでマージして、マージ後のセグメントを個々のプロセッサに割り付ける。図5(e)はこの様子を示している。この処理の詳細は、図8のフローチャートを参照してより詳細に説明する。
図5(e)の段階で各々のプロセッサに割り当てられたセグメントが、コード変換ルーチン216によってソースコードに変換され、コンパイラ220によって実行可能コードに変換され、実行環境224によって、個別のコアまたはプロセッサに割り当てられて実行される。
次に、図6以下のフローチャートを参照してセグメント抽出ルーチン208の処理を説明する前に、以下で使用する記号の定義を与えておく。
グラフG := (V,E) ここで、Vはノード(ブロック)の集合で、Eはエッジ(リンク)の集合である。
P(v) := {u ∈ V:(u,v) ∈ E} (ノード v の親ノードの集合)
C(v) := {u ∈ V:(v,u) ∈ E} (ノード v の子ノードの集合)
|W| := 集合Wの要素の数
path(u,w) := {u,v1,v2,...,vn-1,vn,w ∈ V:
(u,v1),(v1,v2),...,(vn-1,vn),(vn,w) ∈ E}
Figure 0006004818

T(v) := A(v) ∪ {v}
R(v,s) := (D(v) ∪ {v}) ∩ s where s ⊆ V
||v|| := ノードv ∈ Vの計算時間
Figure 0006004818

rは、0 < r < 1を満たす実数である。
図6及び図7は、セグメント抽出ルーチン208の処理のフローチャートを示す図である。
図6のステップ602において、セグメント抽出ルーチン208は、Sini := segments(V)を呼び出してSiniに初期セグメントの集合を得、Siniに含まれる各初期セグメントをファイル210としてハードディスク・ドライブ116に書き出して処理を終わる。ここでVは全ノードの集合である。
図7は、図6で呼び出されるサブルーチンsegments(W)の処理のフローチャートを示す図である。
サブルーチンsegments(W)は、ステップ702で、S:= Φとして空のセグメント集合を準備し、Wから子ノードを持たないノードを集め、これらノードの集合をL'とする。すなわち L' は以下のように定義される。
L' := {v ∈ W: |C(v)| = 0}
ステップ704では、サブルーチンsegments(W)は、L'が空集合かどうか判断し、もしそうでないなら、ステップ706で、一つのノードv ∈ L'を選択し、ステップ708で、選択されたノードvとその祖先ノードの集合であるT(v)を抽出し、これをSの要素として加える。ここでSはノードの集合の集合であり、Sの要素はノードの集合(セグメント)であることに注意されたい。その後ステップ710で、L' := L' - {v}としてL'からvを除去してステップ704で再びL'が空集合かどうか判断する。このような繰り返しで、ついにL'が空集合になると、segments(W)は処理結果としてSを出力して処理を終了し、呼び出し元に戻る。
図8は、セグメント再分割ルーチン212において、初期セグメントを再分割して、より細かな上流セグメントと下流セグメントに分ける処理のフローチャートを示す図である。
図8において、ステップ802では、セグメント再分割ルーチン212は、ファイル210から、初期セグメントの集合を、Siniに読み込み、その最大の計算時間をaとする。すなわち、aは以下のように定義される。
Figure 0006004818

また、初期セグメント内の並列性に基づいて初期セグメントを再分割するための各種変数の初期値を下記のとおりセットする。
V' := V (全ノードの集合)
r := 事前に定義される実数 0 < r < 1
X := Φ (空の基点ノード集合)
次にステップ804で、セグメント再分割ルーチン212は、V’ = Φかどうか判断し、そうでなければステップ806でV’からノードvを選択する。
次にステップ808で、セグメント再分割ルーチン212は、ノードvのgain g(v)を以下のように計算する。
Figure 0006004818

このgainの値は、ノードvから依存関係の逆方向に辿って得られるセグメントの計算時間と、vの親ノードから依存関係の逆方向に辿って得られるセグメントの最大計算時間の差であり、この値が大きいほどノードvによって一つのセグメントになってしまうことにより失われる並列性が大きい、逆に言えばvを取り除いて得られる並列性が大きいことを意味する。
次にステップ810で、セグメント再分割ルーチン212は、g(v)>a・rであるかどうか判断し、もしそうならステップ812で、X:=X ∪ {v}としてノードvを基点ノード集合Xに加え、ステップ814でV’: = V’- {v}としてV’からノードvを削除してステップ804に戻る。もしステップ810で、g(v) > a・rでないと判断したなら、直ちにステップ814でV’: = V’- {v}としてV’からノードvを削除してステップ804に戻り、そこでV’= Φであると判断したなら、ステップ816に進み初期セグメント集合のコピーS'iniをS'ini := Siniとして用意し、各セグメントから一時的に除去するノードの集合を格納するための空の集合Sdownおよび再分割されたセグメントを格納する集合Supをそれぞれ用意する。
Sdown := Φ
Sup := Φ
次にセグメント再分割ルーチン212は、ステップ818でS'ini = Φかどうか判断し、そうでないなら、ステップ820でS'iniから初期セグメントsを選択し、ステップ822で、このsの中で、前記選別された基点ノードx (∈ X)およびその子孫ノードからなるノードの集合を一時的に除去するノードの集合として抽出し、これをSdownに記録する。この処理は以下のように記述することができる。
Figure 0006004818

その後、ステップ824において、sからR'を除去したノードの集合W'を用意し、ステップ826において前記segments(W')を呼び出すことで、W'から上流セグメントを抽出し、Sup := Sup ∪ segments(W')として得られたセグメントを全てSupに加える。ちなみに、sがX中のノードを含まない(すなわちX ∩ s = Φである)場合には、sがそのままSupの要素として追加されることになる。
この後、ステップ828でS'ini = S'ini - {s} として S'iniから初期セグメントsを削除し、ステップ818に戻る。
この繰り返しにより全ての初期セグメントに対して上記処理が完了するとS'ini は空集合となる。ステップ818でS'ini = Φと判断すると、セグメント再分割ルーチン212は、上流セグメントの集合Supおよび下流セグメントの集合Sdownをファイル214としてハードディスク・ドライブ116に書き出して処理を終わる。
次に、図9乃至図13のフローチャートを参照して、マージ処理ルーチン216の処理を説明する。図9は、マージ処理ルーチン216のメイン処理のフローチャートを示す図であり、図10は、メイン処理で呼び出されるmerge処理のフローチャートを示す図であり、図12は、merge処理で呼び出されるsetbinpack1処理のフローチャートを示す図であり、図13は、merge処理で呼び出されるsetbinpack2処理のフローチャートを示す図であり、図11は、setbinpack1とsetbinpack2で呼び出されるsetbinpack処理のフローチャートを示す図である。
図9のステップ902において、マージ処理ルーチン216は、ファイル214から、上流セグメントの集合をSupに、下流セグメントの集合をSdownに読み込み、図10のmergeルーチンを呼び出して、下記のように、S'up、S'down、Sfinalをセットする。
S'up = merge(p,Sup,V)
S'down = merge(p,Sdown,V)
Sfinal = Φ
ここで、pは並列数であり、Vは全ノードの集合である。後述のように、mergeルーチンは第二引数に与えられたセグメント集合に含まれるセグメントをp個以下のセグメントにマージし、その結果を返す。
ステップ904において、マージ処理ルーチン216は、S'up = Φかどうか判断し、そうならステップ906でsup := Φとセットし、そうでないなら、ステップ908で、最大セグメントsupを取り出す。すなわち、取り出されたsupは次の条件を満たす。
sup ∈ S'up, ||sup|| ≧ ||-t||, ∀t ∈ S'up
ステップ906またはステップ908の後、マージ処理ルーチン216はステップ910でS'down = Φかどうか判断し、もしそうならステップ914でsdown := Φとセットし、そうでないなら、ステップ912で、下記の式の処理により、supとの通信コストと自身の処理時間の和が最大となるセグメントsdownを、S'downから選択する。
Figure 0006004818

但しここで、||(u,v)||は、(u,v)の通信コストであり、
Figure 0006004818

である。
ステップ912またはステップ914の後は、マージ処理ルーチン216は、ステップ916で、supがΦ且つ、sdownがΦであるかどうか判断し、もしそうなら、各要素が個別のCPUに割り当てられる最終的なセグメントであるセグメントの集合Sfinalをファイル218としてハードディスク・ドライブ116に書き出して処理を終了する。
ステップ916で、supと、sdownの少なくともどちらか一方がΦでないと判断すると、マージ処理ルーチン216は、ステップ918で、
sf := sup ∪ sdownとしてsupとsdownの和集合sfを新たに作り、Sfinal := Sfinal ∪ {sf}として、Sfinalにsfを加える。
次にマージ処理ルーチン216は、ステップ920で、S'down := S'down - {sdown}として、S'downからセグメントsdownを削除し、ステップ1222で、S'up := S'up - {sup}として、S'upからセグメントsupを削除してステップ904に戻る。
次に、図9の902において使用されているmergeの処理について説明する。このmerge処理は、複数のセグメントをマージすることでセグメントの数を所定の数にまで減じる処理である。このとき、マージ後の各セグメントに必要な計算時間がなるべくバランスする(つまり最大計算時間が最小化する)ように、マージするセグメントの組み合わせを決定し、その組み合わせに従って与えられたセグメントをマージする。ここではセグメントの組み合わせを決定するために、Bin Packing問題を繰り返し解く。Bin Packing問題とは、与えられたアイテムを全て詰め込むのに必要となる箱の最小数を算出する問題である。各アイテムはサイズを持ち、各箱には容量が与えられていて、箱に詰め込まれるアイテムのサイズの合計は箱の容量以下でなければならない。ここでは与えられる各セグメントをアイテム、セグメントの計算時間をアイテムのサイズ、各セグメント(に含まれるブロック)を実行するプロセッサ(またはプロセッサコア)を箱と見立て、箱に適当な容量を設定したときに必要となる箱の数、すなわちプロセッサの数をBin Packing問題の解法(ここではFirst Fit Decreasing と呼ばれる既知の解法)を用いて繰り返し算出し、必要な箱の数が並列数以下となる最小の箱の容量を探索する。得られた箱の容量においてBin Packing問題を解いて、一つの箱に入った全てのセグメントを一つにマージする。ただし、通常のBin Packing問題においては、一つの箱に詰め込まれたアイテムのサイズの合計が箱の容量以下であることが要求されるが、各セグメントは重複したブロックを含んでいるため、ここではセグメントの計算時間の合計ではなく、一つの箱に含まれるセグメントの和集合(このとき、セグメントはブロックの集合であるので、この和集合はブロックの集合すなわち再度セグメントとなる)の計算時間が箱の容量以下であることを制約条件とする。このような制約条件を持つ特殊なBin Packing問題をここではSet Bin Packing問題と呼ぶことにする。
図10のフローチャートを参照して、merge処理の具体的詳細について説明する。以下では、ブロックの計算時間は整数で与えられるものとし、アイテムサイズおよび箱の容量も整数で与えられるものとする。ただし、これにより一般性を失うことはない。mergeは、p(並列数)、S(セグメントの集合)、V(全ノードの集合)という3つの引数をとる。
mergeは、ステップ1002で、下記のようにして箱の容量の上限(vup)、下限(vlow)およびそれに対応する必要な箱の数nup,nlowをそれぞれ以下のように設定する。
Figure 0006004818

このsetbinpack1の処理の詳細は、図11及び図12のフローチャートを参照して後で説明するが、setbinpack1は箱の容量が第一引数に与えられる値であったときに、第二引数で与えられたセグメントを全て詰め込むのに必要ななるべく少ない箱の数を返すものである。
次にmergeは、ステップ1004で、下記の式により、全てのセグメントを詰め込むのに必要となる箱の数がpとなる箱の容量(vnext)を予測する。
a := (nup - nlow)/(vup - vlow)
b := nlow - a・vlow
vnext := (p - b)/a
次にmergeは、ステップ1020で、nlow > p且つ(vup - vlow) > 1かどうか判断し、もしそうならステップ1006に進み、そうでないなら、ステップ1022でnlow ≦ pか判断する。
ステップ1022での判断が肯定的ならステップ1024でvup := vlowとしてからステップ1026に進み、そうでないなら直接、ステップ1026に進む。
ステップ1026に来た段階で、全てのセグメントをp個以下の箱で納められるような最小の箱の容量(vup)が得られているので、vupを箱の容量としてset bin packing問題を解いてマージするセグメントの組を決定し、実際にマージを行う。この処理はS' := setbinpack2(vup,S)として図13に示す処理を呼び出すことで実行される。
この結果、マージされたセグメント集合S'が得られる。
ステップ1020に戻って、そこでの判断が肯定的であると、mergeは、ステップ1006で、set bin packing手法を用い、箱の容量がvnextであるときに、全てのセグメント(∈ S)を収めるのに必要な、なるべく小さな箱の数(n)を下記の式で示す処理により、計算する。
n := setbinpack1(vnext,S)
次にmergeは、ステップ1008で、n ≦ pかどうか判断し、もしそうなら、ステップ1010で、vup := vnext, nup := nとして箱の容量の上限及びそれに対応する箱の数を更新し、そうでないなら、ステップ1012で、vlow := vnext, nlow = nで箱の容量の下限及びそれに対応する箱の数を更新する。
次にmergeは、ステップ1014で、nup = pかどうか判断し、もしそうなら、ステップ1016で、vnext := (vlow + vup)/2として、セグメントをp個の箱に詰め込むために必要ななるべく小さな箱の容量(vnext)を二分探索で予測し、そうでないなら、ステップ1018で、下記の式により、セグメントをp個の箱に収めるのに必要ななるべく小さな箱の容量(vnext)を予測する。
a := (nup - nlow)/(vup - vlow)
b := nlow - a・vlow
vnext := (p - b)/a
次にmergeは、ステップ1020での判断に戻る。
次に、図11のフローチャートを参照して、setbinpackの処理を説明する。この処理は Bin Packing 問題の一般的な解法であるFirst Fit Decreasing手法をアイテムが集合であるケースに拡張したアルゴリズムである。setbinpackは、v(箱の容量)と、S(セグメントの集合)を引数とする。
図11において、ステップ1102で、setbinpackは、S' := S, B := Φ(箱の集合)としてSのコピーおよび空の箱の集合を用意する。ここで、一つの箱は一つのセグメントに対応することに注意されたい。
setbinpackは、ステップ1104で、S' = Φかどうか判断し、そうでないなら、ステップ1106で、S'から計算時間最大となるセグメントsを取り出す。すなわち、sは以下の条件を満たす。
s ∈ S', ||s|| ≧ ||t||, ∀t∈ S'
そしてステップ1108から1110、1114、1116の一連の処理で、最初にsが入る箱の番号i を 1から順に探す。そのためステップ1108ではまずi:= 1として iに1をセットする。
setbinpackは、ステップ1110で、i ≦ |B|かどうか判断し、そうでないなら、、sが入りきる箱が見つからなかったと判断し、ステップ1112で、bi := s, B := B ∪ {bi}として、s自身を新たに箱としてBに追加する。ステップ1120に進み、そこで、S' := S' - {s}としてS'からセグメントsを削除し、ステップ1104での判断に戻る。
ステップ1110に戻って、i ≦ |B|であると判断したなら、setbinpackは、sが入る最初の箱の探索を続ける。ステップ1114で、||bi ∪ s|| ≦ v (bi ∈ B)かどうか、すなわち、s を i 番目の箱 biに入れたとき、箱の容量vをオーバーしないかを判断し、そうでない(オーバーする)ならステップ1116でiを1増やして、ステップ1110に戻る。
ステップ1114で、setbinpackが||bi ∪ s|| ≦ v,(bi ∈ B)である、すなわちsをi番目の箱bi に容量をオーバーさせずに入れることができると判断すると、ステップ1118で、bi := bi ∪ sとしてs(の全ての要素)をbiに入れる。そしてステップ1120でS' := S' - {s}としてS'からセグメントsを削除し、ステップ1104での判断に戻る。
見て取れるように、ステップ1106からステップ1120を経由してステップ1104に戻るうちに、ステップ1120でSから順次セグメントsが削除されるので、どこかの段階でステップ1104においてS' = Φとなって、処理が終了し、Sの要素を容量vの箱に詰めるのに必要な箱の数n、Sのセグメントを容量vの箱につめた結果得られたマージされたセグメントの集合Bが返される。
図12は、setbinpack1(v,S)を示す図である。ステップ1202で示すように、setbinpack1(v,S)は、setbinpack(v,S)を呼び出して、nを返す。
図13は、setbinpack2(v,S)を示す図である。ステップ1302で示すように、setbinpack2(v,S)は、setbinpack(v,S)を呼び出して、Bを返す。
図9に戻って、このフローチャートで示す処理によって出力されたSfinalは、図2におけるマージされたセグメント218として書かれ、マージされたセグメント218はコード変換モジュール220によって、Cなどのプログラミング言語のソースコード222に変換され、コンパイラ224によって実行可能コード226に変換され、実行環境228で、複数のCPUに割り当てられて並列実行される。
次に図14に、コンピュータによる、一般的なODE/SSFの数値的な求解処理を模式的に示す。すなわち、ODE/SSFが下記のとおりだとする。
x1' = f1(x(t),t)
x2' = f2(x(t),t)
...
xn' = fn(x(t),t)
すると、特に並列化がなされていない場合、図14のブロック1402で、f1,f2,...,fnの計算が逐次処理される。
また、ブロック1402の後処理として、好適にはルンゲ・クッタ法などによって、x'(ti)という微分項をx(ti+1)にする積分を含む状態更新処理2204が必要となる。
図15は、図14に示すf1,f2,...,fnの逐次計算をセグメントに分解し、この場合、4つのコアまたはプロセッサで並列化するように割り当てた場合の処理を模式的に示す。すなわち、図15では、f1,f2,...,fnの逐次計算に対応するブロック線図のグラフが、本発明の処理に従い、4つのセグメントとして分割してブロック1502、ブロック1504、ブロック1506、ブロック1508で並列に実行される。ただ、図23の処理においても、x'(ti)という微分項をx(ti+1)にする積分を含む状態更新処理1510は同様に必要となる。状態更新処理1510の実行は、fの計算の完了した後なので最早ブロック1502、ブロック1504、ブロック1506、ブロック1508を並列計算したどのCPUもビジーでなく、よって任意のCPUで計算することができる。
以上、この発明を特定の実施例に基づき説明してきたが、この発明は、この特定の実施例に限定されず、当業者が自明に思いつく様々な変形、置換などの構成、技法適用可能であることを理解されたい。例えば、特定のプロセッサのアーキテクチャ、オペレーティング・システムなどに限定されない。
また、上記実施例は、MATLAB(R)/Simulink(R)を例にとって説明したが、これに限らず、任意のモデリング・ツールに適用可能であることを理解されたい。
102 ホスト・バス
104a、104b、・・・104n CPU
106 メイン・メモリ
116 ハードティスク・ドライブ
202 シミュレーション・モデリング・ツール
204 ブロック線図のコード
208 セグメント抽出ルーチン
212 セグメント再分割ルーチン
216 マージ処理ルーチン
220 コード変換ルーチン
224 コンパイラ
228 実行環境

Claims (18)

  1. 複数のプロセッサをもつコンピュータの処理により、ブロックがノードであり、依存関係がリンクであるグラフ状のモデルで表現される、複数の常微分方程式で記述される、連立方程式を解く方法であって、単一の常微分方程式を表現するグラフを、グラフの分割アルゴリズムを用いて複数のプロセッサをもつコンピュータの処理により解く方法において、
    前記モデルにおける内部状態をもつブロックおよび出力を持たないブロックから出発して、前記依存関係を逆に辿ることにより、前記内部状態をもつブロックおよび出力を持たないブロック毎に、互いに重複を含んでいてもよい、他と独立に実行可能な前記ブロックの集合を初期セグメントsとして抽出するステップと、
    抽出された前記初期セグメントsにおいて、該初期セグメントs内部の並列性に基づいて前記初期セグメントsの中の一部のブロックの集合を選択するステップと、
    前記初期セグメントsにおいて、前記選択されたブロックの集合を処理対象から外すことで、子ブロックをもたなくなったブロックから出発して、前記依存関係を逆に辿ることにより、前記子ブロックをもたなくなったブロック毎に、互いに重複を含んでいてもよい、他と独立に実行可能な前記ブロックの集合であるセグメントを抽出するステップと、
    前記抽出されたセグメント及び、前記初期セグメントsの中でその内部のブロックが処理対象から外されなかったものを上流セグメントとし、前記選択され処理対象から外されたブロックの集合を下流セグメントとし、上流セグメント同士、下流セグメント同士を、重複を減らすようにマージし、前記上流セグメントおよび下流セグメントが所定並列実行数以下になるようにするマージ・ステップと、
    前記マージされた結果のセグメントの各々をコンパイルして実行可能コードに変換するステップと、
    前記セグメント毎の実行可能コードを、前記複数のプロセッサに個別に割り当てて並列に実行させるステップを有する、
    方法。
  2. 前記初期セグメントsとして抽出するステップが、内部状態をもつブロックへの入力など、1タイムステップ内ではないものとしてよい依存関係を介した親ブロックは含まないようにして、親ブロックを辿りつつ、ブロックをセグメントに追加するステップを有する、請求項1に記載の方法。
  3. 前記初期セグメントsの中の一部のブロックの集合を選択するステップが、
    ノードのgainが所定の値より大きいことで前記ブロックの集合を選択するステップを有する、
    請求項1に記載の方法。
  4. 前記マージするステップが、bin packing問題を繰り返し解くステップを含む、請求項1に記載の方法。
  5. 前記内部状態をもつブロックが、積分計算のブロック、またはユーザー定義のブロックである、請求項1に記載の方法。
  6. 前記複数のプロセッサをもつコンピュータが、マルチコアのプロセッサを含む、請求項1に記載の方法。
  7. 複数のプロセッサをもつコンピュータの処理により、ブロックがノードであり、依存関係がリンクであるグラフ状のモデルで表現される、複数の常微分方程式で記述される、連立方程式を解くプログラムであって、単一の常微分方程式を表現するグラフを、グラフの分割アルゴリズムを用いて複数のプロセッサをもつコンピュータの処理により解くプログラムにおいて、
    前記コンピュータに、
    前記モデルにおける内部状態をもつブロックおよび出力を持たないブロックから出発して、前記依存関係を逆に辿ることにより、前記内部状態をもつブロックおよび出力を持たないブロック毎に、互いに重複を含んでいてもよい、他と独立に実行可能な前記ブロックの集合を初期セグメントsとして抽出するステップと、
    抽出された前記初期セグメントsにおいて、該初期セグメントs内部の並列性に基づいて前記初期セグメントsの中の一部のブロックの集合を選択するステップと、
    前記初期セグメントsにおいて、前記選択されたブロックの集合を処理対象から外すこ
    とで、子ブロックをもたなくなったブロックから出発して、前記依存関係を逆に辿ることにより、前記子ブロックをもたなくなったブロック毎に、互いに重複を含んでいてもよい、他と独立に実行可能な前記ブロックの集合であるセグメントを抽出するステップと、
    前記抽出されたセグメント及び、前記初期セグメントsの中でその内部のブロックが処理対象から外されなかったものを上流セグメントとし、前記選択され処理対象から外されたブロックの集合を下流セグメントとし、上流セグメント同士、下流セグメント同士を、重複を減らすようにマージし、前記上流セグメントおよび下流セグメントが所定並列実行数以下になるようにするマージ・ステップと、
    前記マージされた結果のセグメントの各々をコンパイルして実行可能コードに変換するステップと、
    前記セグメント毎の実行可能コードを、前記複数のプロセッサに個別に割り当てて並列に実行させるステップを実行させる、
    プログラム。
  8. 前記初期セグメントsとして抽出するステップが、内部状態をもつブロックへの入力など、1タイムステップ内ではないものとしてよい依存関係を介した親ブロックは含まないようにして、親ブロックを辿りつつ、ブロックをセグメントに追加するステップを有する、請求項7に記載のプログラム。
  9. 前記初期セグメントsの中の一部のブロックの集合を選択するステップが、
    ノードのgainが所定の値より大きいことで、前記ブロックの集合を選択するステップを有する、
    請求項7に記載のプログラム。
  10. 前記マージするステップが、bin packing問題を繰り返し解くステップを含む、請求項7に記載のプログラム。
  11. 前記内部状態をもつブロックが、積分計算のブロック、またはユーザー定義のブロックである、請求項7に記載のプログラム。
  12. 前記複数のプロセッサをもつコンピュータが、マルチコアのプロセッサを含む、請求項7に記載のプログラム。
  13. 複数のプロセッサをもつコンピュータの処理により、ブロックがノードであり、依存関係がリンクであるグラフ状のモデルで表現される、複数の常微分方程式で記述される、連立方程式を解くシステムであって、単一の常微分方程式を表現するグラフを、グラフの分割アルゴリズムを用いて複数のプロセッサをもつコンピュータの処理により解くシステムにおいて、
    記憶手段と、
    前記記憶手段に保存された、前記モデルのファイルと、
    前記モデルにおける内部状態をもつブロックおよび出力を持たないブロックから出発して、前記依存関係を逆に辿ることにより、前記内部状態をもつブロックおよび出力を持たないブロック毎に、互いに重複を含んでいてもよい、他と独立に実行可能な前記ブロックの集合を初期セグメントsとして抽出する手段と、
    抽出された前記初期セグメントsにおいて、該初期セグメントs内部の並列性に基づいて前記初期セグメントsの中の一部のブロックの集合を選択する手段と、
    前記初期セグメントsにおいて、前記選択されたブロックの集合を処理対象から外すことで、子ブロックをもたなくなったブロックから出発して、前記依存関係を逆に辿ることにより、前記子ブロックをもたなくなったブロック毎に、互いに重複を含んでいてもよい、他と独立に実行可能な前記ブロックの集合であるセグメントを抽出する手段と、
    前記抽出されたセグメント及び、前記初期セグメントsの中でその内部のブロックが処理対象から外されなかったものを上流セグメントとし、前記選択され処理対象から外されたブロックの集合を下流セグメントとし、上流セグメント同士、下流セグメント同士を、重複を減らすようにマージし、前記上流セグメントおよび下流セグメントが所定並列実行数以下になるようにするマージ手段と、
    前記マージされた結果のセグメントの各々をコンパイルして実行可能コードに変換する手段と、
    前記セグメント毎の実行可能コードを、前記複数のプロセッサに個別に割り当てて並列に実行させる手段を有する、
    システム。
  14. 前記初期セグメントsとして抽出する手段が、内部状態をもつブロックへの入力など、1タイムステップ内ではないものとしてよい依存関係を介した親ブロックは含まないようにして、親ブロックを辿りつつ、ブロックをセグメントに追加する手段を有する、請求項13に記載のシステム。
  15. 前記初期セグメントsの中の一部のブロックの集合を選択する手段が、ノードのgainが所定の値より大きいことで、前記ブロックの集合を選択する手段を有する、請求項13に記載のシステム。
  16. 前記マージ手段が、bin packing問題を繰り返し解く手段を有する、請求項13に記載のシステム。
  17. 前記内部状態をもつブロックが、積分計算のブロック、またはユーザー定義のブロックである、請求項13に記載のシステム。
  18. 前記複数のプロセッサをもつコンピュータが、マルチコアのプロセッサを含む、請求項13に記載のシステム。
JP2012174491A 2012-08-07 2012-08-07 並列化方法、システム、及びプログラム Expired - Fee Related JP6004818B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2012174491A JP6004818B2 (ja) 2012-08-07 2012-08-07 並列化方法、システム、及びプログラム
US13/952,077 US9311273B2 (en) 2012-08-07 2013-07-26 Parallelization method, system, and program
US13/972,226 US9218317B2 (en) 2012-08-07 2013-08-21 Parallelization method, system, and program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012174491A JP6004818B2 (ja) 2012-08-07 2012-08-07 並列化方法、システム、及びプログラム

Publications (2)

Publication Number Publication Date
JP2014035548A JP2014035548A (ja) 2014-02-24
JP6004818B2 true JP6004818B2 (ja) 2016-10-12

Family

ID=50066995

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012174491A Expired - Fee Related JP6004818B2 (ja) 2012-08-07 2012-08-07 並列化方法、システム、及びプログラム

Country Status (2)

Country Link
US (2) US9311273B2 (ja)
JP (1) JP6004818B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9594854B1 (en) * 2012-10-15 2017-03-14 The Mathworks, Inc. Using abstract nodes to test the behavior of a dynamic system
US9335981B2 (en) * 2013-10-18 2016-05-10 Nec Corporation Source-to-source transformations for graph processing on many-core platforms
WO2018092237A1 (ja) * 2016-11-17 2018-05-24 三菱電機株式会社 プログラムコード生成装置、プログラムコード生成方法及びプログラムコード生成プログラム
CN117093502B (zh) * 2023-10-13 2024-01-30 支付宝(杭州)信息技术有限公司 程序代码的并行性检测方法和装置

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6165336A (ja) * 1984-09-07 1986-04-03 Hitachi Ltd 高速演算方式
JPH04211858A (ja) 1990-04-02 1992-08-03 Mitsubishi Electric Corp データフローグラフ分割装置及び分割方法
JPH0844577A (ja) 1994-07-26 1996-02-16 Sumisho Electron Kk データ分割方法及びマルチプロセッサシステム
US7409656B1 (en) * 2005-09-12 2008-08-05 Cadence Design Systems, Inc. Method and system for parallelizing computing operations
US7870556B2 (en) * 2006-05-16 2011-01-11 Ab Initio Technology Llc Managing computing resources in graph-based computations
US20080120266A1 (en) * 2006-11-22 2008-05-22 Jean-Paul Theis Software method for solving systems of linear equations having integer variables
US8516029B1 (en) * 2008-06-12 2013-08-20 Carnegie Mellon University Methods and apparatuses for solving graph Laplacians
JP4886838B2 (ja) 2009-10-30 2012-02-29 インターナショナル・ビジネス・マシーンズ・コーポレーション 並列化方法、システム、及びプログラム
JP5479942B2 (ja) * 2010-02-22 2014-04-23 インターナショナル・ビジネス・マシーンズ・コーポレーション 並列化方法、システム、及びプログラム
JP5692739B2 (ja) * 2010-03-11 2015-04-01 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 常微分方程式を解くための方法、プログラム及びシステム
JP6021342B2 (ja) 2012-02-09 2016-11-09 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 並列化方法、システム、及びプログラム

Also Published As

Publication number Publication date
US9311273B2 (en) 2016-04-12
US20140047421A1 (en) 2014-02-13
US9218317B2 (en) 2015-12-22
US20140046992A1 (en) 2014-02-13
JP2014035548A (ja) 2014-02-24

Similar Documents

Publication Publication Date Title
JP4931978B2 (ja) 並列化処理方法、システム、及びプログラム
JP5209059B2 (ja) ソース・コード処理方法、システム、及びプログラム
JP4886838B2 (ja) 並列化方法、システム、及びプログラム
Ozik et al. From desktop to large-scale model exploration with Swift/T
JP6021342B2 (ja) 並列化方法、システム、及びプログラム
Benelallam et al. Distributed Model-to-model Transformation with ATL on MapReduce
JP2010134614A (ja) 並列化処理方法、システム、及びプログラム
JP5479942B2 (ja) 並列化方法、システム、及びプログラム
US20090007064A1 (en) Size vector sharing in code generated for variable-sized signals
JP6004818B2 (ja) 並列化方法、システム、及びプログラム
Bakhtin et al. DVM-approach to the automation of the development of parallel programs for clusters
US9280382B1 (en) Parallel processing of multidimensional arrays
Cunha et al. Parallel Program development for cluster computing: methodology, tools and integrated environments
US9135065B1 (en) Parallel processing of multidimensional arrays
US11593540B1 (en) Systems and methods for performing concurrency analysis in simulation environments
Genin et al. System design, optimization and intelligent code generation for standard digital signal processors
Stavåker Contributions to parallel simulation of equation-based models on graphics processing units
Tripakis Compositional model-based system design and other foundations for mastering change
Alefragis et al. Mapping and scheduling hard real time applications on multicore systems-the argo approach
Doroshenko et al. Automated design of parallel programs for heterogeneous platforms using algebra-algorithmic tools
Ivutin et al. Low-level Code Auto-tuning for State-of-the-art Multicore Architectures
Glanon et al. Estimating latency for synchronous dataflow graphs using periodic schedules
Gebremedhin Automatic and explicit parallelization approaches for mathematical simulation models
Alzahrani et al. Data Aware Simulation of Complex Systems on GPUs
Van Dang et al. Algebraic Semantics of Register Transfer Level in Synthesis of Stream Calculus-Based Computing Big Data in Livestream

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20141224

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160122

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160209

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160415

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160906

R150 Certificate of patent or registration of utility model

Ref document number: 6004818

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees