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

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

Info

Publication number
JP2011096107A
JP2011096107A JP2009251044A JP2009251044A JP2011096107A JP 2011096107 A JP2011096107 A JP 2011096107A JP 2009251044 A JP2009251044 A JP 2009251044A JP 2009251044 A JP2009251044 A JP 2009251044A JP 2011096107 A JP2011096107 A JP 2011096107A
Authority
JP
Japan
Prior art keywords
blocks
block
functional block
internal state
assigned
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.)
Granted
Application number
JP2009251044A
Other languages
English (en)
Other versions
JP4886838B2 (ja
Inventor
Takero Yoshizawa
武朗 吉澤
Hideaki Komatsu
秀昭 小松
Arquimedes Canedo
アルキメデス・カネド
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 JP2009251044A priority Critical patent/JP4886838B2/ja
Priority to US12/913,822 priority patent/US8677334B2/en
Publication of JP2011096107A publication Critical patent/JP2011096107A/ja
Application granted granted Critical
Publication of JP4886838B2 publication Critical patent/JP4886838B2/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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/26Functional testing
    • G06F11/261Functional testing by simulating additional hardware, e.g. fault simulation

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

【課題】ブロック線図などで表されるプログラムを並列化する。
【解決手段】ブロック線図において、内部状態をもたない機能ブロック1214、1216の出力が、内部状態をもつ機能ブロックAによって使用されるとき、機能ブロックAは、その内部状態をもたない機能ブロックの使用ブロックと呼ぶ。内部状態をもつ機能ブロックAの出力が、内部状態をもたない機能ブロックの入力として計算に使用されるとき、機能ブロックAは、その内部状態をもたない機能ブロックの定義ブロックと呼ぶ。各機能ブロックをノードとして訪問することにより、内部状態をもつ機能ブロックと、内部状態をもたない機能ブロックとの接続関係に基づき、機能ブロック毎に、使用ブロック集合/定義ブロック集合の数を求め、その数に基づき、ストランド1202〜1212を割り当てる。これにより、ブロック線図を、ストランドに分けて処理を並列化する。
【選択図】図12

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イテレーションに限り並列に実行可能となる。
ただし、単に内部状態を持つブロックを終点とするフローを消去しただけでは、十分にモデルを分割できないケース、すなわち並列化できないケースが多い。例えば、図11のケースでは、結果的に全てのブロックが接続された状態で残り、まったく並列化できない。これは、複数のシグナルを統合する内部状態を持たないブロックが存在する場合に各部が分断されなくなるために発生する現象だが、多くのモデルにおいてこの傾向が強い。そのため、上記のような単純な方法だけでは高い並列性は期待できない。
特開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イテレーション内での並列性を高める技法については、何も示唆しない。
特開2003−91422号公報 特開2007−511835号公報
本発明の目的は、MATLAB(R)/Simulink(R)などのモデリング・ツールで作成された機能ブロックからなるプログラムを並列化する場合の並列性を高めることにある。
本発明は、上記目的を達成するためになされたものであり、内部状態をもたない各機能ブロックに、定義ブロック集合(definer)と、使用ブロック集合(user)の属性を付与することを特徴とする。
ある内部状態をもたない機能ブロックの出力が、ある内部状態をもつ機能ブロックAに
よって、直接・間接を問わず、他の内部状態を持つブロックを経由せずに使用されるとき、機能ブロックAは、その内部状態をもたない機能ブロックの使用ブロックと呼び、内部状態を持たない機能ブロックの使用ブロック集合の要素となる。
また、ある内部状態をもつ機能ブロックAの出力が、直接・間接を問わず、他の内部状態を持つブロックを経由せずに、ある内部状態をもたない機能ブロックの入力として計算に使用されるとき、機能ブロックAは、その内部状態をもたない機能ブロックの定義ブロックと呼び、定義ブロック集合の要素となる。
このような定義の下で、本発明に係るシステムは、ブロック線図をグラフとして、深さ優先探索、あるいは幅優先探索などの周知のアルゴリズムにより順次、すべての機能ブロックに亘って機能ブロックを訪問することによって、個々の内部状態をもたない機能ブロックについて、その定義ブロックと、使用ブロックを列挙する。
こうして、すべての内部状態をもたない機能ブロックについて、その定義ブロック集合と、使用ブロック集合が列挙されると、本発明に係るシステムは、再びブロック線図をグラフとして、すべての機能ブロックに亘って機能ブロックを訪問しながら、個々の機能ブロックについて、次のような方針で機能ブロックの集まりを形成する。すなわち、この発明では、そのような機能ブロックの集まりを特に、ストランド(strand)と呼ぶことにする。下記のルールによって得られるストランドは、元々存在する処理の依存関係を崩すことなく、シミュレーションの1回のイテレーション内で並列に実行することができる。これは、内部状態を持つブロックへの入力は、次の内部状態更新時に初めて使用されるという性質から、ある一つの内部状態を持つブロックにしか、その計算結果が利用されないようなブロックの計算は、内部状態を持つブロックの内部状態更新ロジックの一部と見なすことで、内部状態を持つブロックへの入力フロー以外も、依存関係を崩すことなく切断可能にしたことによる。
さて、ストランド作成のルールについて、より詳細に説明すると、個々の機能ブロックについて、関連する使用ブロック集合の要素数(使用ブロック数)と、定義ブロック集合の要素数(定義ブロック数)に基づき、次の条件に従い、ストランドに振り分けられる。
(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:
この場合は、その機能ブロックは、重複して、使用ブロック集合の各使用ブロックのストランドに割り当てられる。
このようにして、機能ブロックのストランドが得られると、各々のストランドは、対応する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が生成したストランドの情報に基づき、コンパイラ512がコンパイルするためのソースコードを生成する。コンパイラ512が想定するプログラミング言語としては、C、C++、C#、Java(商標)などのマルチコア、またはマルチプロセッサに対応したプログラミングが可能な任意のプログラミング言語を使用することができ、コード生成モジュール510はそれに対応して、クラスタ毎に、ソースコードを生成することになる。
コンパイラ512が生成したクラスタ毎の実行可能バイナリ・コード(図示しない)は、好適にはストランド毎に、異なるコアまたはプロセッサに割り当てられて、オペレーティング・システムの作用により、実行環境514で実行される。
次に、図6以下のフローチャートを参照して、ストランド作成モジュール508の処理について説明する。図6において、ストランド作成モジュール508は、ステップ602で、ブロック線図のグラフ表現において、定義ブロックを見つける処理を行う。この処理は、後で図7のフローチャートを参照して、より詳細に説明する。
次に、ストランド作成モジュール508は、ステップ604で、ブロック線図のグラフ表現において、定義ブロックを見つける処理を行う。この処理は、後で図8のフローチャートを参照して、より詳細に説明する。
次に、ストランド作成モジュール508は、ステップ606で、ステップ602とステップ604で得られた情報をもとに、ストランドを作成する。この処理は、後で図9のフローチャートを参照して、より詳細に説明する。
図7は、ノード(機能ブロック)nに関して、定義ブロックを見つける、FindDefiners(n)の処理を示すフローチャートである。図7において、ステップ702では、ノードnに対して、空のノード集合Dnが用意される。
ステップ704では、ノードnの未処理の親ノードのうちの1つををnparentとする。
ステップ706では、ノードnparentが内部状態をもつブロックかどうかが判断され、もしそうなら、ステップ708で、Dnにnparentが加えられる。
ステップ706で、ノードnparentが内部状態をもたないブロックであると判断したなら、ステップ710で、FindDefiners(nparent)が再帰的に呼び出され、返されるノード集合の全要素がDnに加えられる。
次に、ステップ708とステップ710のどちらからも、ステップ712に進み、そこで、ノードnの全ての親ノードに対して処理が行われたかどうか判断され、そうでなければ、ステップ704に戻る。
ステップ712で、ノードnの全ての親ノードに対して処理が行われたと判断されると、ステップ714で、Dnを返して、FindDefiners(n)の処理を終わる。
図6のステップ602では、ストランド作成モジュール508が、ブロック線図のグラフの全てのノードを順次訪問して、ノードnが内部状態をもたないブロックである場合に、図7のFindDefiners(n)を適用し、返されたDnを、ノードnの定義ブロック集合として得る。また、ノードnが内部状態を持つブロックである場合には、ノードn自身を自身の空のブロック集合Dnに入れ、定義ブロック集合とする。各ノードnに対して得られた定義ブロック集合Dnおよびそれらの対応関係を、好適にはメイン・メモリ406に保存する。
図8は、ノード(機能ブロック)nに関して、使用ブロックを見つける、FindUsers(n)の処理を示すフローチャートである。図8において、ステップ802では、ノードnに対して、空のノード集合Unが用意される。
ステップ804では、ノードnの未処理の子ノードをnchildとする。
ステップ806では、ノードnchildが内部状態をもつブロックかどうかが判断され、もしそうなら、ステップ808で、Unにnchildが加えられる。
ステップ806で、ノードnchildが内部状態をもたないブロックであると判断したなら、ステップ710で、FindUsers(nchild)が再帰的に呼び出され、返されるノード集合の全要素がUnに加えられる。
次に、ステップ808とステップ810のどちらからも、ステップ812に進み、そこで、ノードnの全ての子ノードに対して処理が行われたかどうか判断され、そうでなければ、ステップ804に戻る。
ステップ812で、ノードnの全ての子ノードに対して処理が行われたと判断されると、ステップ814で、Unを返して、FindUsers(n)の処理を終わる。
図6のステップ604では、ストランド作成モジュール508が、ブロック線図のグラフの全てのノードを順次訪問して、ノードnが内部状態をもたないブロックである場合に、図8のFindDeUsers(n)を適用し、返されたUnを使用ブロック集合としてノードnに関連付けて、Unの内容とそれに対するリンクの情報を、好適にはメイン・メモリ406に保存する。また、ノードnが内部状態を持つブロックである場合には、ノードn自身を自身の空のブロック集合Unに入れ、使用ブロック集合とする。各ノードnに対して得られた使用ブロック集合Dnおよびそれらの対応関係を、好適にはメイン・メモリ406に保存する。
次に、図9のフローチャートを参照して、ストランド作成処理について説明する。この処理は、図6のステップ606に対応する。なお、図9のフローチャートの処理を実行する時点でステップ602と604の処理で、ブロックnには既に、定義ブロック集合Dnと使用ブロック集合Unが関連付けられていることを理解されたい。
図9において、ステップ902では、ストランド作成モジュール508が、ブロック線図のグラフ表現の次のノードnを訪問する。このときノードの訪問順序は特に問わず、最初のステップでは、任意のノードnが選択される。
次にステップ904に進み、そこで、DnとUnの情報を用いるルールに従い、ストランド形成処理を行う。
図10に、そのルールまたは条件を示す。図示されているようにこれは、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 ) {
処理;
}
・・・
のようなステートメントで記述することができる。
ステップ904で上記のストランド割当てを行うと、ステップ906では、ストランド作成モジュール508は、すべてのノードを訪問したかどうかを判断し、もしそうなら処理を終了し、そうでないなら、ステップ902に戻る。
このようにして作成された複数のストランドは、各々コンパイラ512でコンパイルされて、実行環境514で、好適には、個々のCPU1〜CPUnに割り当てられて並列実行される。
図11は、あるブロック線図にステップ602とステップ604を適用した結果を示す図である。図11で、影線付きでA、B、C、Dなどと書かれているのが内部状態をもつブロックであり、白抜きのブロックが内部状態をもたないブロックである。
ステップ602とステップ604を適用した結果、各々の内部状態をもつブロックには、定義ブロック集合/使用ブロック集合として、0個以上の内部状態をもつブロックの関連性が計算される。
次に、ステップ606、すなわち図9のフローチャートの処理を、図11のブロック線図のグラフに適用することで、図12に示すようなストランド1202、1204、1206、1208、1210及び1212が形成される。特に、定義/使用ブロック集合 = A,D/A,B及び、定義/使用ブロック集合 = A,B/C,Bのように、定義ブロック集合と使用ブロック集合に各々複数のブロックが存在する場合は、複数のストランドによって共有されることに留意されたい。例えば、ブロック1214が、ストランド1204と、ストランド1206によって共有され、ブロック1216が、ストランド1208と、ストランド1210によって共有される、等である。
ここで作成されたストランドは、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 ストランド作成モジュール
510 コード生成モジュール
512 コンパイラ
514 実行環境
1202〜1210 ストランド

Claims (12)

  1. コンピュータの処理により、内部状態をもつ機能ブロックと、内部状態をもたない機能ブロックを連結して構成されたコードを並列化する方法であって、
    前記機能ブロックをノードとし、前記機能ブロックの間の接続をリンクとするグラフ表現を作成して、前記コンピュータのメモリに格納するステップと、
    前記グラフ表現上で前記ノードを順次訪問し、前記ノードが内部状態をもたない機能ブロックであることに応答して、該内部状態をもたない機能ブロックから内部状態をもつ機能ブロックへの入力を検出して該内部状態をもつ機能ブロックを使用ブロック集合として前記メモリに記憶し、内部状態をもつ機能ブロックから該内部状態をもたない機能ブロックへの入力を検出して該内部状態をもつ機能ブロックを定義ブロック集合として前記メモリに記憶するステップと、
    前記機能ブロックに関連して記憶された前記使用ブロック集合の情報及び前記定義ブロック集合の情報に基づき、機能ブロックのストランドを形成するステップを有する、
    コードを並列化する方法。
  2. 前記グラフ表現上で前記ノードを順次訪問したときに、前記ノードが内部状態をもつ機能ブロックであることに応答して、前記ノードに関連して、前記ノード自身を、使用ブロック集合且つ定義ブロック集合として前記メモリに記憶するステップをさらに有する、請求項1に記載の方法。
  3. 前記ストランドを形成するステップでは、下記の条件に従い前記ストランドが形成される、請求項1に記載の方法。
    (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:
    この場合は、その機能ブロックは、重複して、使用ブロック集合の各使用ブロックのストランドに割り当てられる。
  4. マルチコアまたはマルチプロセッサの環境において、請求項1に記載の方法にさらに、前記ストランドを個別にコンパイルして実行可能コードを生成するステップと、前記生成された実行可能コードを、個別に前記コアまたはプロセッサに割り当てて実行させるステップを有する、並列化されたコードの実行方法。
  5. コンピュータの処理により、内部状態をもつ機能ブロックと、内部状態をもたない機能ブロックを連結して構成されたコードを並列化するプログラムであって、
    前記コンピュータをして、
    前記機能ブロックをノードとし、前記機能ブロックの間の接続をリンクとするグラフ表現を作成して、前記コンピュータのメモリに格納するステップと、
    前記グラフ表現上で前記ノードを順次訪問し、前記ノードが内部状態をもたない機能ブロックであることに応答して、該内部状態をもたない機能ブロックから内部状態をもつ機能ブロックへの入力を検出して該内部状態をもつ機能ブロックを使用ブロック集合として前記メモリに記憶し、内部状態をもつ機能ブロックから該内部状態をもたない機能ブロックへの入力を検出して該内部状態をもつ機能ブロックを定義ブロック集合として前記メモリに記憶するステップと、
    前記機能ブロックに関連して記憶された前記使用ブロック集合の情報及び前記定義ブロック集合の情報に基づき、機能ブロックのストランドを形成するステップを実行させる、
    コードを並列化するプログラム。
  6. 前記グラフ表現上で前記ノードを順次訪問したときに、前記ノードが内部状態をもつ機能ブロックであることに応答して、前記ノードに関連して、前記ノード自身を、使用ブロック集合且つ定義ブロック集合として前記メモリに記憶するステップをさらに有する、請求項5に記載のプログラム。
  7. 前記ストランドを形成するステップでは、下記の条件に従い前記ストランドが形成される、請求項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:
    この場合は、その機能ブロックは、重複して、使用ブロック集合の各使用ブロックのストランドに割り当てられる。
  8. マルチコアまたはマルチプロセッサの環境において、請求項5に記載のプログラムがさらに、前記ストランドを個別にコンパイルして実行可能コードを生成するステップと、前記生成された実行可能コードを、個別に前記コアまたはプロセッサに割り当てて実行させるステップを有する、プログラム。
  9. コンピュータの処理により、内部状態をもつ機能ブロックと、内部状態をもたない機能ブロックを連結して構成されたコードを並列化するシステムであって、
    前記コンピュータのメモリと、
    前記機能ブロックをノードとし、前記機能ブロックの間の接続をリンクとするグラフ表現を作成して、前記コンピュータのメモリに格納する手段と、
    前記グラフ表現上で前記ノードを順次訪問し、前記ノードが内部状態をもたない機能ブロックであることに応答して、該内部状態をもたない機能ブロックから内部状態をもつ機能ブロックへの入力を検出して該内部状態をもつ機能ブロックを使用ブロック集合として前記メモリに記憶し、内部状態をもつ機能ブロックから該内部状態をもたない機能ブロックへの入力を検出して該内部状態をもつ機能ブロックを定義ブロック集合として前記メモリに記憶する手段と、
    前記機能ブロックに関連して記憶された前記使用ブロック集合の情報及び前記定義ブロック集合の情報に基づき、機能ブロックのストランドを形成する手段を有する、
    コードを並列化するシステム。
  10. 前記グラフ表現上で前記ノードを順次訪問したときに、前記ノードが内部状態をもつ機能ブロックであることに応答して、前記ノードに関連して、前記ノード自身を、使用ブロック集合且つ定義ブロック集合として前記メモリに記憶する手段をさらに有する、請求項9に記載のシステム。
  11. 前記ストランドを形成する手段は、下記の条件に従い前記ストランドを形成する、請求項9に記載のシステム。
    (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:
    この場合は、その機能ブロックは、重複して、使用ブロック集合の各使用ブロックのストランドに割り当てられる。
  12. マルチコアまたはマルチプロセッサの環境において、請求項9に記載のシステムにさらに、前記ストランドを個別にコンパイルして実行可能コードを生成する手段と、前記生成された実行可能コードを、個別に前記コアまたはプロセッサに割り当てて実行させる手段を有する、並列化されたコードの実行システム。
JP2009251044A 2009-10-30 2009-10-30 並列化方法、システム、及びプログラム Expired - Fee Related JP4886838B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2009251044A JP4886838B2 (ja) 2009-10-30 2009-10-30 並列化方法、システム、及びプログラム
US12/913,822 US8677334B2 (en) 2009-10-30 2010-10-28 Parallelization method, system and program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009251044A JP4886838B2 (ja) 2009-10-30 2009-10-30 並列化方法、システム、及びプログラム

Publications (2)

Publication Number Publication Date
JP2011096107A true JP2011096107A (ja) 2011-05-12
JP4886838B2 JP4886838B2 (ja) 2012-02-29

Family

ID=43926681

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009251044A Expired - Fee Related JP4886838B2 (ja) 2009-10-30 2009-10-30 並列化方法、システム、及びプログラム

Country Status (2)

Country Link
US (1) US8677334B2 (ja)
JP (1) JP4886838B2 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013020580A (ja) * 2011-07-14 2013-01-31 Internatl Business Mach Corp <Ibm> 並列化方法、システム、及びプログラム
JP2013164657A (ja) * 2012-02-09 2013-08-22 Internatl Business Mach Corp <Ibm> 並列化方法、システム、及びプログラム
US9218317B2 (en) 2012-08-07 2015-12-22 International Business Machines Corporation Parallelization method, system, and program
JP2017062554A (ja) * 2015-09-24 2017-03-30 ルネサスエレクトロニクス株式会社 プログラム開発支援装置およびプログラム開発支援ソフトウェア

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9003383B2 (en) * 2011-09-15 2015-04-07 You Know Solutions, LLC Analytic engine to parallelize serial code
US9081925B1 (en) * 2012-02-16 2015-07-14 Xilinx, Inc. Estimating system performance using an integrated circuit
US9529946B1 (en) 2012-11-13 2016-12-27 Xilinx, Inc. Performance estimation using configurable hardware emulation
US9268597B2 (en) * 2014-04-01 2016-02-23 Google Inc. Incremental parallel processing of data
EP3301575B1 (en) * 2014-05-15 2019-07-24 The MathWorks, Inc. Using an element in a first model to call a portion of a second model
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

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04211858A (ja) * 1990-04-02 1992-08-03 Mitsubishi Electric Corp データフローグラフ分割装置及び分割方法
JPH0844577A (ja) * 1994-07-26 1996-02-16 Sumisho Electron Kk データ分割方法及びマルチプロセッサシステム
US20060070047A1 (en) * 2004-09-28 2006-03-30 Intel Corporation System, method and apparatus for dependency chain processing

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04211858A (ja) * 1990-04-02 1992-08-03 Mitsubishi Electric Corp データフローグラフ分割装置及び分割方法
JPH0844577A (ja) * 1994-07-26 1996-02-16 Sumisho Electron Kk データ分割方法及びマルチプロセッサシステム
US20060070047A1 (en) * 2004-09-28 2006-03-30 Intel Corporation System, method and apparatus for dependency chain processing

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013020580A (ja) * 2011-07-14 2013-01-31 Internatl Business Mach Corp <Ibm> 並列化方法、システム、及びプログラム
JP2013164657A (ja) * 2012-02-09 2013-08-22 Internatl Business Mach Corp <Ibm> 並列化方法、システム、及びプログラム
US9218317B2 (en) 2012-08-07 2015-12-22 International Business Machines Corporation Parallelization method, system, and program
US9311273B2 (en) 2012-08-07 2016-04-12 International Business Machines Corporation Parallelization method, system, and program
JP2017062554A (ja) * 2015-09-24 2017-03-30 ルネサスエレクトロニクス株式会社 プログラム開発支援装置およびプログラム開発支援ソフトウェア
US10310823B2 (en) 2015-09-24 2019-06-04 Renesas Electronics Corporation Program development support system and program development support software

Also Published As

Publication number Publication date
US8677334B2 (en) 2014-03-18
JP4886838B2 (ja) 2012-02-29
US20110107162A1 (en) 2011-05-05

Similar Documents

Publication Publication Date Title
JP4886838B2 (ja) 並列化方法、システム、及びプログラム
JP4931978B2 (ja) 並列化処理方法、システム、及びプログラム
JP4629768B2 (ja) 並列化処理方法、システム、及びプログラム
JP5209059B2 (ja) ソース・コード処理方法、システム、及びプログラム
JP6021342B2 (ja) 並列化方法、システム、及びプログラム
JP5479942B2 (ja) 並列化方法、システム、及びプログラム
US8234637B2 (en) Non-blocking semantics for modeling systems
JP4988789B2 (ja) シミュレーション・システム、方法及びプログラム
Bakhtin et al. DVM-approach to the automation of the development of parallel programs for clusters
JP6004818B2 (ja) 並列化方法、システム、及びプログラム
CN117034821B (zh) 用于芯片设计前端仿真验证的回归验证方法及介质
US8775147B1 (en) Algorithm and architecture for multi-argument associative operations that minimizes the number of components using a latency of the components
JP2011186991A (ja) 常微分方程式を解くための方法、プログラム及びシステム
US10241764B2 (en) Automatically transform pass-by-value semantics into pass-by-reference implementation
JP2013020580A (ja) 並列化方法、システム、及びプログラム
WO2006074576A1 (en) Method and apparatus for generating execution equivalence information
JP7385536B2 (ja) ソフトウェア開発支援装置及びソフトウェア開発支援方法
Ivutin et al. Low-level Code Auto-tuning for State-of-the-art Multicore Architectures
JPH06231203A (ja) シミュレーションモデルのためのコンパイルメカニズム
Gebremedhin Automatic and explicit parallelization approaches for mathematical simulation models
Dekker et al. Emulating MIMD Behavior on SIMD Machines
Juanpere Cañameras Characterization of applications in new architectures
Aouadj et al. Automated Code Optimization in the MLIR Compiler
Sedov Execution Analysis of ARPC Programs in the Environment of the Recursive Parallel Programming

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110926

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111004

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111102

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

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111209

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20141216

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4886838

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees