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

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

Info

Publication number
JP2010134614A
JP2010134614A JP2008308660A JP2008308660A JP2010134614A JP 2010134614 A JP2010134614 A JP 2010134614A JP 2008308660 A JP2008308660 A JP 2008308660A JP 2008308660 A JP2008308660 A JP 2008308660A JP 2010134614 A JP2010134614 A JP 2010134614A
Authority
JP
Japan
Prior art keywords
cluster
processing
code
clusters
blocks
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
JP2008308660A
Other languages
English (en)
Other versions
JP4629768B2 (ja
Inventor
Arquimedes Canedo
アルキメデス・カネド
Takero Yoshizawa
武朗 吉澤
Hideaki Komatsu
秀昭 小松
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 JP2008308660A priority Critical patent/JP4629768B2/ja
Priority to US12/629,114 priority patent/US8438553B2/en
Publication of JP2010134614A publication Critical patent/JP2010134614A/ja
Application granted granted Critical
Publication of JP4629768B2 publication Critical patent/JP4629768B2/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/456Parallelism detection

Landscapes

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

Abstract

【課題】マルチプロセッサ環境で、個々のプロセッサに処理をアサインするためのクラスタ生成の際に、繰り返し実行される処理の高速化を図る。
【解決手段】フルビークル・シミュレーション・システムなどの場合、強連結成分によってクラスタを形成すると、1つのクラスタ中にブロックが、所定の個数以上あるとか、1つのクラスタの期待される処理時間が、所定の閾値を超えるなどの肥大クラスタであると同定されたクラスタに対しては、展開(unrolling)処理が適用され、肥大クラスタの処理を複数個コピーして、それを個別のプロセッサに割当てる。これにより、複数のプロセッサ上でパイプライン的に処理が進み、処理を高速化できるが、繰り返し実行される肥大クラスタのある一回の処理結果が、それ以前の処理結果に依存することがある場合には、実行に必要な入力などの値は、ある予測に基づき生成し、肥大クラスタを投機的に実行する。
【選択図】図5

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の構築を支援するシステムとして例えば、CYBERNET SYSTEMS CO.,LTD.から入手可能なシミュレーション・モデリング・システムである、MATLAB(R)/Simulink(R)がある。MATLAB(R)/Simulink(R)を使用すると、図1に示すように、画面上にグラフィカル・インターフェースによって、機能ブロックA,B,...,Mを配置し、矢印のようにその処理の流れを指定することによって、シミュレーション・プログラムを作成することができる。
こうして、MATLAB(R)/Simulink(R)上で、機能ブロックA,B,...,Mなどのブロック線図が作成されると、Real-Time Workshop(R)の機能により、等価な機能のC言語のソース・コードに変換することができる。このC言語のソース・コードをコンパイルすることにより、別のコンピュータ・システムで、SILSとして、シミュレーションを実行することができる。
特に、別のコンピュータ・システムが、マルチプロセッサ・システムである場合、可能な限り、処理を分割して、個別のプロセッサに、別々のプロセスを割り当てて並列処理する方が、処理速度の向上に有利である。
そこで、図2に示すように、機能ブロックA,B,...,Mを、クラスタ202、204、206、208及び210のように複数のクラスタに分け、それぞれを個別のCPUにアサインする技法が従来より実施されている。このようなクラスタリングのために、例えば、コンパイラの技術で知られている強連結成分の検出などの技法が用いられる。クラスタリングする主要な目的は、同一クラスタ内の機能ブロックの通信コスト削減である。
ところが、図2に示すように、各機能ブロック間には依存関係が存在し、これらの依存関係を破るような並列化はできないため、処理の並列化に制約があった。
特開平9−97243号公報は、マルチプロセッサシステムにおいて並列タスクで構成されたプログラムのターンアラウンドタイムを短縮することを課題とするものであり、開示されているシステムにおいて、並列タスクで構成されるプログラムのソースプログラムをコンパイラがコンパイルして目的プログラムを生成し、コンパイラは、並列タスクの各タスク間で行われるタスク間通信のデータ量を保持するタスク間通信量テーブルを生成する。タスクスケジューラは、タスク間通信量テーブルとマルチプロセッサシステムの全プロセッサの組における単位データ当たりのデータ通信時間を定義するプロセッサ通信コストテーブルとからタスク間通信の通信時間が最短となるプロセッサを並列タスクのタスクに割り当てる旨決定し、プロセッサ管理テーブルに登録する。
特開平9−167144号公報は、複数種類の演算手順、および、プロセッサ間での通信処理に対応する、複数種類の通信手順を記述した、並列処理を行なうための並列プログラムを変更する方法であって、現在使用している通信手順にしたがって行なわれている通信処理の通信量を増加したと仮定すると、前記並列処理の開始から終了までの時間が短くなる場合、並列プログラム内での通信手順の並べ替えを行ない、2以上の通信手順を合体するように、記述内容を変更する、プログラム作成方法を開示する。
特開2007−048052号公報は、並列処理を最適化するコンパイラに関するものであって、コンパイラは、対象プログラムを実行するプロセッサ・コアの個数である実行コア数を記録している。コンパイラは、まず、対象プログラムの中から単一のプロセッサ・コアで連続して実行すべき実行パスの候補である支配的パスを検出する。次に、実行コア数以下の数の支配的パスを選択することによりマルチコア・プロセッサにおいて並列にまたは連続して実行すべきタスクのクラスタを生成する。次に、生成されたクラスタ毎に、実行コア数以下の1つまたは複数の自然数の各々について、当該クラスタを当該自然数に等しい個数のプロセッサ・コアで実行した場合の実行時間を算出する。そして、算出された実行時間に基づいて各クラスタの実行のために割り当てるべきプロセッサ・コアの個数を選択する。
特開平9−97243号公報 特開平9−167144号公報 特開2007−048052号公報
しかし、上記従来の技術は、依然として、機能ブロック間の依存関係による処理の並列化の制約に対する解決策を与えるものではない。本発明者は、特に、繰り返し実行される処理が処理のボトルネックであり、そこを並列化することが処理の高速化に貢献する程度が大きいと考えた。
従って、本発明の目的は、マルチプロセッサ環境で、個々のプロセッサに処理をアサインするためのクラスタ生成の際に、繰り返し実行される処理の高速化を図るための技法を提供することにある。
本発明の他の目的は、典型的にはブロック線図であらわされるような、複数のブロックとそれを接続するフローの辺からなるグラフ構造をもち、それらが繰り返し実行される処理プログラムのクラスタリング及び並列化実行に適合する技法を提供することにある。
本発明の更に他の目的は、マルチプロセッサ環境で、自動車のフルビークル・シミュレーション・システムに適合する、並列処理高速化技法を提供することにある。
上記目的は、本発明に従い、クラスタの展開(unrolling)技法を適用することによって達成される。すなわち、本発明において、本発明に係る処理プログラムが、ソースコードの解析により強連結成分を見出すことによって、複数の処理ブロックからなるプログラムをクラスタリングする。それに伴って、プロセッサ間の通信量が低減するように、クラスタが適宜併合される。
好適な実施例では、このクラスタリング・ステップの前に、平坦化(flattening)という処理が行われる。すなわち、Simulink(R)などのシミュレーション・システムにおいて、1つのブロックの中に、サブシステムと呼ばれる別のブロックが存在することがある。サブシステムはそれ自体の入力ポートと出力ポートをもつので、平坦化処理では、サブシステムから入力ポートと出力ポートを除去して、サブシステムの内部のロジックを外と直接繋ぐという処理が行われる。
このとき、強連結成分によってクラスタを形成すると、特にフルビークル・シミュレーション・システムなどの場合、肥大クラスタが形成される。ここでの肥大クラスタの定義は、1つのクラスタ中にブロックが、所定の個数以上あるとか、1つのクラスタの期待される処理時間が、所定の閾値を超えるなどである。
本発明によれば、このように肥大クラスタであると同定されたクラスタに対して、展開(unrolling)処理が適用される。ここでいう展開処理とは、肥大クラスタの処理を複数個コピーして、それを個別のプロセッサに割当てることである。このような処理によって、複数のプロセッサ上でパイプライン的に処理が進むので、処理を高速化することができる。但し、繰り返し実行される肥大クラスタのある一回の処理結果は、同クラスタのそれ以前の処理結果に依存することがあり、よって肥大クラスタをパイプライン的に実行できないことがある。このような場合、肥大クラスタの実行に必要な入力などの値は、ある予測に基づき生成し、肥大クラスタを投機的に実行することでこれに対処する。また、パイプライン化すると、プロセッサ間の通信コストがかかる。従って、あまりに多くのプロセッサを使ってパイプライン化すると却って処理が低下することがあるので、妥当なパイプラインの数を決める必要がある。この明細書においては、パイプラインの数を、展開因子(unrolling factor)と呼ぶことにする。
本発明の一実施例によれば、妥当な展開因子は、肥大クラスタの期待される処理時間と、パイプラインの部分の繰り返し回数と、ロールバック・コストと、パイプラインに処理をロードするコストと、展開因子と、投機成功率の関数である、パイプラインの期待される実行時間を最適化するように決定される。なお、このとき、パイプラインの部分の繰り返し回数に依存しない関数を用いることもできる。
こうして、クラスタと、クラスタのうちの肥大クラスタに対する展開因子が決定されると、個々のプロセッサに割り当たるべきソースコードが決定されるので、それらは必要に応じてコンパイルされ、実行可能コードとして、実行環境上で、個々のプロセッサに割り当てられて実行される。
この発明によれば、複数の処理ブロックの繰り返しによって実行されるフルビークル・シミュレーションなどのためのプログラムを処理をマルチプロセッサ向けに並列化する際に、形成された肥大クラスタに対してパイプライン処理によって処理を高速化できる、という効果が得られる。
以下、図面を参照して、本発明の一実施例の構成及び処理を説明する。以下の記述では、特に断わらない限り、図面に亘って、同一の要素は同一の符号で参照されるものとする。なお、ここで説明する構成と処理は、一実施例として説明するものであり、本発明の技術的範囲をこの実施例に限定して解釈する意図はないことを理解されたい。
次に、図3を参照して、本発明を実施するために使用されるコンピュータのハードウェアについて説明する。図5において、ホスト・バス302には、複数のCPU1 304a、CPU2 304b、CPU3 304c、・・・CPUn 304nが接続されている。ホスト・バス502にはさらに、CPU1 304a、CPU2 304b、CPU3 304c、・・・CPUn 304nの演算処理のためのメイン・メモリ306が接続されている。
一方、I/Oバス308には、キーボード310、マウス312、ディスプレイ314及びハードティスク・ドライブ316が接続されている。I/Oバス308は、I/Oブリッジ318を介して、ホスト・バス302に接続されている。キーボード310及びマウス312は、オペレータが、コマンドを打ち込んだり、メニューをクリックするなどして、操作するために使用される。ディスプレイ314は、必要に応じて、後述する本発明に係るプログラムをGUIで操作するためのメニューを表示するために使用される。
この目的のために使用される好適なコンピュータ・システムのハードウェアとして、IBM(R)System Xがある。その際、CPU1 304a、CPU2 304b、CPU3 304c、・・・CPUn 304nは、例えば、インテル(R)Xeon(R)であり、オペレーティング・システムは、Windows(商標)Server 2003である。オペレーティング・システムは、ハードティスク・ドライブ316に格納され、コンピュータ・システムの起動時に、ハードティスク・ドライブ316からメイン・メモリ306に読み込まれる。
本発明を実施するためには、マルチプロセッサ・システムを用いることが必要である。ここでマルチプロセッサ・システムとは、一般に、独立に演算処理し得るプロセッサ機能のコアを複数もつプロセッサを用いるシステムを意図しており、従って、マルチコア・シングルプロセッサ・システム、シングルコア・マルチプロセッサ・システム、及びマルチコア・マルチプロセッサ・システムのどれかでよいことを理解されたい。
なお、本発明を実施するために使用可能なコンピュータ・システムのハードウェアは、IBM(R)System Xに限定されず、本発明のシミュレーション・プログラムを走らせることができるものであれば、任意のコンピュータ・システムを使用することができる。オペレーティング・システムも、Windows(R)に限定されず、Linux(R)、Mac OS(R)など、任意のオペレーティング・システムを使用することができる。さらに、シミュレーション・プログラムを高速で動作させるために、POWER(商標)6ベースで、オペレーティング・システムがAIX(商標)のIBM(R)System Pなどのコンピュータ・システムを使用してもよい。
ハードティスク・ドライブ316にはさらに、MATLAB(R)/Simulink(R)、Cコンパイラまたは、C++コンパイラ、後述する本発明に係る解析、平坦化、クラスタリング、展開のためのモジュール、CPU割り当て用コード生成モジュール、処理ブロックの期待される実行時間を測定するためのモジュールなどが格納されており、オペレータのキーボードやマウス操作に応答して、メイン・メモリ306にロードされて実行される。
尚、使用可能なシミュレーション・モデリング・ツールは、MATLAB(R)/Simulink(R)に限定されず、オープンソースのScilab/Scicosなど任意のシミュレーション・モデリング・ツールを使用することが可能である。
あるいは、場合によっては、シミュレーション・モデリング・ツールを使わず、直接、C、C++などでシミュレーション・システムのソース・コードを書くことも可能であり、その場合にも、個々の機能が、互いに依存関係にある個別の機能ブロックとして記述できるなら、本発明は適用可能である。
図4は、本発明の実施例に係る機能ブロック図である。各々のブロックは、基本的に、ハードティスク・ドライブ316に格納されているモジュールに対応する。
図4において、シミュレーション・モデリング・ツール402は、MATLAB(R)/Simulink(R)、Scilab/Scicosなどの既存の任意のツールでよい。シミュレーション・モデリング・ツール402は、基本的には、オペレータが、ディスプレイ314上でGUI的に機能ブロックを配置し、数式など必要な属性を記述し、必要に応じて、機能ブロック間を関連付けてブロック線図を記述することを可能ならしめるような機能をもつ。シミュレーション・モデリング・ツール402はさらに、記述されたブロック線図に等価な機能を記述するCのソースコードを出力する機能をもつ。C以外にも、C++、FORTRANなどを使用することができる。特に、後述するMDLファイルは、Simulink(R)独自のフォーマットであり、機能ブロック間の依存関係を記述するためのものである。
なお、シミュレーション・モデリング・ツールは、別のパーソナル・コンピュータに導入して、そこで生成されたソース・コードを、ネットワークなどを経由して、ハードティスク・ドライブ316にダウンロードするようにすることもできる。
こうして出力されたソース・コード404は、ハードティスク・ドライブ316に保存される。ソース・コード404は、コンパイラ406でコンパイルされ、結果の実行可能プログラムは、テスト・モジュール408に渡される。
テスト・モジュール408は、実行テストを行う機能と、投機テストを行う機能を有する。実行テストでは、所定のシナリオにより、図1に示すような各ブロックの平均処理時間、プロセッサ間通信時間、及び投機成功確率が測定される。平均時間を測定するために、好適には同一のシナリオが、複数回実行される。その測定結果410は、後で使用するために、ハードティスク・ドライブ316に保存される。
投機テストでは、別の所定のシナリオにより、結果の実行可能プログラムを投機実行させる。そのシナリオを繰り返すことにより、投機準備の処理時間すなわち、投機が失敗してロールバックする場合に備えて、予測した入力値を保存したりする処理のための時間と、投機成否確認の処理時間すなわち、実際のデータが来たときにそれが予測していたデータと一致するかを確認する処理の時間と、ロールバック処理時間すなわち、投機が失敗した、つまり予測した入力と実際の値が異なっていたことが分かったときに、間違った入力に基づいて行われた処理を止めたり、データの消去などの後処理に要する時間が計測される。そのような値もまた、その測定結果410として、後で使用するために、ハードティスク・ドライブ316に保存される。
なお、投機成功確率は、実は実際に投機実行を行わなくても算出することができる。投機実行では、本来来るべき入力が来る前に処理が実行されるので、その入力を予測して処理が実行される。従って、投機が成功する確率は、入力に対する予測が的中する確率と等しくなる。その入力を予測するアルゴリズムが定まっていれば、実際に投機実行をしなくても(すなわち、予測した入力データに基づくブロックの処理を実行しなくとも)実際の入力データのみから、予測アルゴリズムの予測成功確率を算出することができる。すなわち、単に「実行テスト」において、各ブロックに対する入力を記録しておき、その入力データ系列から、入力予測アルゴリズムの予測成功率を算出することで、投機成功確率を求めることができる。一方、投機実行をしたとき、あるいは投機実行が失敗したときにどの程度の時間がかかるかは、実際に投機実行をしてみないと分からない。そのため、それらの情報を得るために投機テストが行なわれる。ただし、投機実行の実装が定まれば、投機準備や投機の成否確認、投機失敗時のロールバックに要する処理時間は、入力データ量に比例した処理時間となることが予想される。従って、「投機テスト」においては、全てのブロックを投機実行しなくてもよく、いくつかの、入力データ量の異なるブロックを投機実行してみることで、入力データ量と投機関連処理時間の関係が得られ、それに基づいて全てのケースのコストを算出することができる。
解析モジュール412は、ソースコード404を入力して構文解析し、ブロックのつながりを、同期グラフ表現414に変換する。同期グラフ表現414のデータは、好適には、ハードディスク316に格納される。
平坦化モジュール416は、同期グラフ表現414を読み取って、そこのブロック中に含まれているサブシステムを展開することにより、ブロックを平坦化し、同期グラフ表現414として書き戻す。平坦化処理については、図7のフローチャート及び、図8と図9を参照して後で説明する。
クラスタリング・モジュール418は、同期グラフ表現414を読み取って、強連結成分を見出すことによるクラスタリングと、その後の通信量削減処理のためのクラスタ併合処理によるクラスタ数減少処理を行う。クラスタリング・モジュール418は、必要に応じて、計測結果410に記録されている各ブロックの平均処理時間、プロセッサ間通信時間、投機成功確率、投機準備の処理時間、ロールバック処理時間などの値を使用して、クラスタ間の通信時間の計算などの処理を行う。クラスタリングの結果は、同期グラフ表現414に書き込まれる。
展開モジュール420は、同期グラフ表現414を読み取って、肥大クラスタに対して、展開(unrolling)、すなわち、処理を複数コピーして、パイプライン的に複数のプロセッサに割り当てるように同期グラフ表現414を変更する。展開モジュール420もまた、必要に応じて、計測結果410に記録されている値を参照する。
コード生成モジュール422は、同期グラフ表現414に基づき、各プロセッサに割り当てるためのソーコードを生成する。
コンパイラ424は、生成されたソースコードをコンパイルし、実行環境426上で、コンパイルされた実行可能コードを、各プロセッサCPU1 304a、CPU2 304b、CPU3 304c・・・に割当てる。
図5は、図4の機能ブロック図を、処理フローとして見た場合の図である。図5において、MDLファイル502は、図4では、ソースコード404に関連付けられて保存されている。
ステップ504では、解析モジュール412が、MDLファイル502を解析して、同期グラフ表現414を生成する。
ステップ506では、平坦化モジュール416が、同期グラフ表現414を読み取って、平坦化する。
ステップ508では、クラスタリング・モジュール418が、同期グラフ表現414を読み取って、クラスタリング処理を行う。クラスタリング・モジュール418の一部である判断ステップ510では、クラスタの通信量が削減可能かどうかが判断される。ここで、クラスタの通信量が削減可能であるとは、クラスタを別のクラスタに取り込むことによって、合弁したクラスタを形成し、以ってクラスタ同士の通信量を減らすことを意味する。
これ以上クラスタを合弁しても通信量が減らないなら、ステップ512に進み、そこで展開モジュール420によって、肥大クラスタの展開、すなわち処理をコピーし、コピーした処理をパイプラインとしてプロセッサにアサインする。この展開処理512は、ステップ514に示すように、変数Unroll_factorがNを超えない間、反復される。ここでNは、好適には、肥大クラスタの期待される処理時間と、パイプラインの部分の繰り返し回数と、ロールバック・コストと、パイプラインに処理をロードするコストと、投機成功率できまる数である。変数Unroll_factorがNと等しくなると、ステップ516では、コード生成モジュール422によって、プロセッサにアサインするためのコードが生成される。
図6は、図5の概要フローチャートにおける、解析処理504を詳細に示す図である。図6に示す処理は、解析モジュール412によって行われる。図6のMDLファイル602は、図5のMDLファイル502と同じものである。
ステップ604では、MDLファイル602から、ステートメントが読取られる。そして、ステップ606では、ステートメントがサブシステムかどうかが判断される。ここでいうサブシステムとは、図8のブロック804で示す、その内部にブロックを含むブロックを指す。
ブロックは、システムとも呼ばれるので、サブブロックはサブシステムとも呼ばれる。もしステートメントがサブシステムであると、ステップ608で、新しいシンボル・テーブル・レイヤが作成される。
ステートメントがサブシステムでないと、ステップ612で、ステートメントがブロックかどうかが判断される。ステートメントがブロックであると、ステップ614で、現在のシンボル・テーブル・レイヤ中に、新しいノードが作成される。
ステートメントがブロックでないと、ステップ616で、ステートメントが、ブロック間のリンクかどうかが判断される。ステートメントがブロック間のリンクであると、ステップ618で、始点ブロックが読取られ、また、終点ブロックが読取られる。そして、ステップ620で、現在のシンボル・テーブル・レイヤ中で、始点ブロックと終点ブロックが探される。
そして、ステップ622で、始点ブロックと終点ブロックが見つかったと判断されると、ステップ624で、同期グラフ表現414中で、エッジとノードが作成される。そして、処理は、ファイルの終わりに達したかどうかの判断ステップ626に行く。ステップ626で、ファイルの終わりに達したと判断されると、処理は、次の平坦化処理に進む。ファイルの終わりに達していないなら、処理は、ステップ604に戻る。
ステップ622に戻って、始点ブロックと終点ブロックが見つからなかったと判断されると、ステップ628でエラー終了する。この場合は、Simulink(R)を用いてMDLファイル602を作成し直すなどの作業が必要になる。
ステップ616に戻って、ステートメントがブロック間のリンクでないなら、処理は、ファイルの終わりに達したかどうかの判断ステップ626に行く。こうして、ファイルの終わりに達したと判断された段階で、階層的シンボル・テーブル610と、同期グラフ表現414が作成されている。
こうして処理は、図7のフローチャートで示す平坦化処理に進む。図7は、図5の概要フローチャートにおける、平坦化処理506を詳細に示す図である。図7に示す処理は、平坦化モジュール416によって行われる。
ステップ702では、以下、同期グラフ表現414の全てのノードについて順次処理を行うことが指定される。
ステップ704では、ノードがサブシステムかどうかが判断される。もしノードがサブシステムであるなら、ステップ706で、階層的シンボル・テーブルから、対応するレイヤLが取り出される。次にステップ708で、レイヤLから、全ての入力ポートと、それに続くブロックSが集められる。
ステップ710では、入力ポートが削除される。また、先行ノードからSへのエッジが作成される。この様子は、図9に例示されている。
ステップ712では、レイヤLから、全ての出力ポートと、その後続のブロックPが集められる。次のステップ714では、図9に示すように、出力ポートが削除され、ブロックPから、後続ノードにエッジが作成される。そして、ステップ716に行って、グラフの終わりかどうかが判断される。
ステップ716で、グラフの終わりと判断されると、次のクラスタリング処理に進む。
まだグラフの終わりでないと判断されると、処理は、ステップ702に戻り、グラフの次のノードの処理に移る。
ステップ704で、ノードがサブシステムでないと判断されると、ステップ718に行き、そこで、ノードが葉(leaf)かどうかが判断される。ここで葉とは、先行ノードのないノードを指す。もし葉なら、ステップ720で、ENTRY(入口)からノードへのエッジが作成されて、判断ステップ716に進む。
ステップ718で、ノードが葉でないと判断されると、ステップ722で、ノードが根(root)かどうかが判断される。ここで根とは、後続ノードのないノードを指す。ノードが根であると、ステップ724で、ノードからEXIT(出口)へのエッジが作成される。そして、処理は、判断ステップ716に進む。
ステップ716で、グラフの終わりに到達した段階で、平坦化された同期グラフ表現414が得られている。こうして、次のクラスタリング処理に進む。
図10は、図5の概要フローチャートにおける、クラスタリング処理508を詳細に示す図である。図10に示す処理は、クラスタリング・モジュール418によって行われる。
ステップ1002では、平坦化処理された同期グラフ表現414に対して、強連結成分の計算が行われる。ここで強連結であるとは、コントロール・フローを有向グラフとみたとき、グラフ上の任意の2点間に有向路が存在することをいう。なお、コントロール・フローにおいて強連結成分を見出す技法については、例えば、本出願人に係る特開平9−319722号公報、及び特開2004−272826号公報などを参照されたい。
ステップ1002で、強連結成分が見出されると、先ず、その見出された強連結成分に基づきクラスタリングが行われ、ステップ1004では、各強連結成分について、クラスタ依存グラフ1006中に、ノードが作成される。クラスタ依存グラフとは、クラスタを生成した後に、各クラスタを一つのノードだと見なしたノード間の依存関係を表すグラフ構造である。
ステップ1008では、肥大クラスタFが見出される。肥大クラスタとは、1つのクラスタ中にブロックが、所定の個数以上あること、1つのクラスタの期待される処理時間が、所定の閾値を超えるなどの条件で定義される。1つのクラスタの期待される処理時間は、図4に示す計測結果410に記録されている各ブロックの平均処理時間、プロセッサ間通信時間、投機成功確率、投機準備の処理時間、ロールバック処理時間などの値を使用して、計算することができる。なお、本発明者は、特に、自動車のような物理プラントのシミュレーション・システムのブロック線図は、システム全体が大きなループ構造を形成する特徴があり、本発明の手法でクラスタリングした際に、このような肥大クラスタがあらわれる傾向があることを見出した。
また一般に、これらループバックエッジは、システムの繰り返し実行の中で、次の繰り返し実行の入力となるため、肥大クラスタを展開してパイプライン的に実行するためには、ループバックエッジの部分を予測して投機実行する必要がある。一般の物理プラントのシミュレーションでは、そのような値が連続的な変化を示す傾向にあり、予測しやすいため、投機実行に適している、という特徴もあることに留意されたい。
さて、こうして肥大クラスタFが見出されると、その親Pが見出され、さらに、Fの子Kが見出される。その様子を図式的に示したのが、図11である。図11において、肥大クラスタFの親クラスタは、クラスタ9と、クラスタ10であり、肥大クラスタFの子クラスタは、クラスタ2、クラスタ3及びクラスタ5である。PとKの全ての要素が、スタックDにプッシュされる。D={P,K}である。
ステップ1010では、Dが空かどうかが判断される。Dが空なら、処理は次のクラスタ展開処理に進む。
Dが空でないなら、処理はステップ1012に進み、DからクラスタをポップしてそれをDiとし、Diの部分木をスタックEにプッシュする処理が行われる。ここで、図11の例を再度参照すると、クラスタ2の部分木として、クラスタ7、クラスタ0、クラスタ1が示されている。
ステップ1014では、スタックEが空かどうかが判断され、もし空なら、判断ステップ1010に戻る。
もしEが空でないなら、Eからクラスタをポップし、それがZと置かれる。次のステップ1018では、ZがDiに取り込まれているかどうかが判断され、もしそうでなければ、ステップ1020でZをDiに取込んでから、Zを取込み済みとマークしてステップ1014に戻り、そうでなければ直ちに、ステップ1014に戻る。要するに、ここでの処理は、あるクラスタが他のクラスタを取り込むことであるので、クラスタ同士を併合することでもある。ステップ1020の取込みまたは併合の結果は、クラスタ依存グラフ1006に反映される。
こうして結果的に、ステップ1010で、Dが空と判断されると、処理は次のクラスタ展開処理に進む。
図12は、強連結成分によるクラスタリングと、その後のクラスタ取込み処理の例を示すものである。先ず、ブロック線図であらわされる、あるプログラムに、強連結成分によるクラスタリングを施すと、図12(a)に示すようなクラスタの集まりとなる。これは、図10のステップ1002、1004及び1008の処理の結果である。クラスタの間の接続関係は、クラスタ依存グラフ1006に記述されている。なお、図12で、クラスタに振った番号は、クラスタにつけたIDである。
そこで、図10のステップ1010、1012、1014、1016、1018、及び1020の結果として、クラスタの取込みが行われ、図12(b)に示すように、クラスタの数が低減した、より簡易化されたグラフとなる。図12(b)では、図12(a)にあった番号のクラスタがいくつか消失していることが見て取れる。これは、消失したクラスタは実は、他のクラスタに取り込まれたのであることを理解されたい。
図13は、図5の概要フローチャートにおける、展開処理512及び514を詳細に示す図である。図13に示す処理は、展開モジュール420によって行われる。
ステップ1302では、パイプラインの数を決めるパラメータであるNが計算される。この計算のために、次のようなパイプラインに関するコストの式T(n)を想定する。
Figure 2010134614
ここで、tは、当該の肥大クラスタの処理時間、iは処理の繰り返し回数、cは、ロールバック・コストと、パイプラインに処理プログラムを埋めるためのコスト、nは展開因子(unrolling factor)、P(n)は、展開因子nの場合の投機成功率である。c及びP(n)は、図4の計測結果410の値から、計算することができる。なお、この式で、iに依存しないように、例えば、i = 1とおいた式を用いることもできる。
ステップ1302は、原則的に、コストの式T(n)が最小になるようなnとして、Nを決定する。原則的という意味は、利用可能なプロセッサの数が、T(n)を最小にするnよりも少ないことがあるからである。その場合は例えば、Nとして、利用可能なプロセッサの数が選ばれる。
なお、上記T(n)の式は一例であって、コストをあらわす他の適当な式を使うこともできる。例えば、事前の実行テストによって得た値に基づきブロットした関数でもよい。
ステップ1304では、肥大クラスタFが見出される。また、変数unrolling_factor = 0とセットされる。
ステップ1306では、unrolling_factorがNより小さいかどうかが判断され、もしそうなら、ステップ1308で、肥大クラスタF中の全ての要素(ノード)について、同期グラフ表現414とクラスタ依存グラフ1006中に、コピーが作成される。また、対応する依存エッジが作成される。
ステップ1310では、unrolling_factorが1だけ増分され、判断ステップ1306に戻る。こうして、unrolling_factorがNに等しくなった時点で、コード生成処理に進む。
図14は、クラスタの展開処理を示す図である。図14(a)は、図10のフローチャートで示すクラスタリング処理の結果、生成されたクラスタのグラフ表示である。
そこで、肥大クラスタに対して、図13のフローチャートで示す展開処理が適用されて、図14(b)に示すように、肥大クラスタが4つのコピーとして、パイプライン的に並列実行される。
図15は、肥大クラスタのパイプライン的な並列実行を説明するための模式図である。図15(a)は、肥大クラスタを、展開することなく普通に実行する図である。この場合、例えば、100Hzのクロックに相当する処理が行われると想定する。そこで、図15(b)では、肥大クラスタの4つのコピーが作成される。
こうして、図15(c)では、肥大クラスタが、4つのコピーによってパイプライン化され並列実行されるので、理論的には、図15(a)の場合の4倍の400Hzで実行可能となる。実際は、プロセッサ間の通信コスト、投機コストなどがあるので、コピーの数の倍率での速度向上にはならない。
図16は、ブロックA,(B,C,D,E),Fというブロックの処理をパイプライン化する様子を示す図である。ここで、(B,C,D,E)のところが、繰り返しのループになっている。そこで、本発明の技法によれば、外側のブロックAと、ブロックFは、それぞれ単一のCPU1とCPUN+1に割当てられ、(B,C,D,E)のところが、CPU2、CPU3・・・CPUNに、並列的に割当てられ、(B,C,D,E)のループは、図示されているように、CPU2、CPU3・・・CPUNによってパイプライン的に実行される。
この時、例えばBの2回目の実行(B2)には、Eの1回目の実行(E1)の結果が必要となるが、パイプライン化して実行することにより、B2の開始時点ではE1の結果が得られていない場合がある。このような場合、B2以降の処理を投機的に実行する。すなわち、E1の出力を予測して、E1の実際の出力を待たずにB2以降の処理を開始する。その後、実際にE1の処理結果が算出され出力を得た後、予測したE1の出力と実際のE1の出力を比較し、そのずれが許容できない場合は、B2以降の先行している処理を停止し、再度処理をやり直す。許容できる場合はそのまま処理を続けるなどする。
また、前述のように、自動車のような物理プラントのシミュレーション・システムのブロック線図は、システム全体が大きなループ構造を形成する特徴があり、本発明の手法でクラスタリングした際に現れる肥大クラスタには、このループエッジが、図16のブロックEからブロックBへのリンクのような形で現れることになる。したがって、通常投機実行が必要となる。本発明者は、特に、一般の物理プラントのシミュレーションでは、そのようなループエッジの値が連続的な変化を示す傾向にあり、予測しやすく、投機実行による高速化が期待できることも見出した。
図17は、図5の概要フローチャートにおける、コード生成処理を詳細に示す図である。図17に示す処理は、コード生成モジュール422によって行われる。
ステップ1702では、クラスタ依存グラフ1006の全てのクラスタCが順次取得される。
ステップ1704では、関数Gが生成される。この段階では、空の関数である。
ステップ1706では、クラスタCの全てのノードNが順次取得される。
ステップ1708では、同期グラフ表現414を参照することによって、ノードNのコードが生成される。
ステップ1710では、生成されたノードNのコードが、Gに集められる。次にステップ1712で、クラスタCでまだ取得されていないノードNがあるかどうかが判断され、もしそうなら、ステップ1706に戻って、次のノードNが取得される。
ステップ1712で、クラスタCでまだ取得されていないノードNが最早ないと判断されると、ステップ1714で、関数Gが書き出される。このとき書き出されるコードは、単一のCPUに割り当てられる。
ステップ1716では、まだ取得されていないクラスタCがあるかどうかが判断され、もしそうなら、ステップ1702に戻って、次のクラスタCが取得される。
ステップ1716で、全てのクラスタCについて処理が行われたと判断されると、結果的に、個々のCPUに割り当てるべきコード1718が生成されている。
生成されたコードは、コンパイラ424でコンパイルされて、実行環境426で、個々のCPUに割り当てて実行される。
以上、この発明を特定の実施例に基づき説明してきたが、この発明は、この特定の実施例に限定されず、当業者が自明に思いつく様々な変形、置換などの構成、技法適用可能であることを理解されたい。例えば、特定のプロセッサのアーキテクチャ、オペレーティング・システムなどに限定されない。
また、上記実施例は、主として、自動車のSILSのシミュレーション・システムにおける並列化に関連するものであったが、このような例には限定されず、航空機、ロボットその他の物理システムのシミュレーション・システムに広く適用可能であることを理解されたい。
シミュレーション・モデリング・ツールのブロック線図の例を示す図である。 ブロックのクラスタの例を示す図である。 本発明を実施するためのハードウェアのブロック図である。 本発明の一実施例の機能ブロック図である。 本発明の一実施例の処理の流れを示す図である。 解析処理のフローチャートを示す図である。 平坦化処理のフローチャートを示す図である。 平坦化処理を説明するための図である。 平坦化処理を説明するための図である。 クラスタリング処理のフローチャートを示す図である。 クラスタリング処理を説明するための図である。 クラスタを併合する処理の例を示す図である。 展開処理のフローチャートを示す図である。 展開処理の例を示す図である。 展開によりパイプライン的に実行される処理を説明するための図である。 展開によりパイプライン的に実行される処理を説明するための図である。 コード生成処理のフローチャートを示す図である。
符号の説明
404・・・ソースコード
406、424・・・コンパイラ
412・・・解析モジュール
418・・・クラスタリング・モジュール
420・・・展開モジュール

Claims (20)

  1. コンピュータの処理によって、マルチプロセッサ・システムで、個々のプロセッサに割当てて並列実行させるためのコードを生成する方法であって、
    相互に連結された複数のブロックからなる、プログラムのソースコードを入力するステップと、
    強連結成分を検出することによって、前記ブロックをクラスタリングするステップと、
    所定の閾値を超えるクラスタを見出して、該クラスタを少なくとも1つコピーし、該コピーしたクラスタと併せて並列化されたパイプラインを形成するように処理の流れを与えるクラスタ展開ステップとを有する、
    コード生成方法。
  2. 前記クラスタリングするステップは、プロセッサに割当れられた際の通信コストを低減するように、クラスタを併合するステップを有する、請求項1のコード生成方法。
  3. 前記所定の閾値は、前記クラスタ内のブロックの数である、請求項1のコード生成方法。
  4. 前記所定の閾値は、前記クラスタの期待される処理時間である、請求項1のコード生成方法。
  5. マルチプロセッサ・システムで、処理を個々のプロセッサに割当てて並列実行させるための方法であって、
    前記処理をあらわす、相互に連結された複数のブロックからなる、プログラムのソースコードを入力するステップと、
    強連結成分を検出することによって、前記ブロックをクラスタリングするステップと、
    所定の閾値を超えるクラスタを見出して、該クラスタを少なくとも1つコピーし、該コピーしたクラスタと併せて並列化されたパイプラインを形成するように処理の流れを与えるクラスタ展開ステップと、
    前記クラスタ毎のコードを生成するステップと、
    前記コードをコンパイルして、個別の実行可能コードを得るステップと、
    実行環境上で、前記各実行可能コードを個別のプロセッサに割当てて実行させるステップを有する、
    並列実行方法。
  6. 前記クラスタリングするステップは、プロセッサに割当れられた際の通信コストを低減するように、クラスタを併合するステップを有する、請求項5の並列実行方法。
  7. 前記所定の閾値は、前記クラスタ内のブロックの数である、請求項5の並列実行方法。
  8. 前記所定の閾値は、前記クラスタの期待される処理時間である、請求項5の並列実行方法。
  9. マルチプロセッサ・システムで、処理を個々のプロセッサに割当てて並列実行させるためのシステムであって、
    前記処理をあらわす、相互に連結された複数のブロックからなる、プログラムのソースコードを保存する記憶手段と、
    強連結成分を検出することによって、前記ブロックをクラスタリングする手段と、
    所定の閾値を超えるクラスタを見出して、該クラスタを少なくとも1つコピーし、該コピーしたクラスタと併せて並列化されたパイプラインを形成するように処理の流れを与えるクラスタ展開手段と、
    前記クラスタ毎のコードを生成する手段と、
    前記コードをコンパイルして実行可能コードを得るためのコンパイラと、
    実行環境上で、前記各実行可能コードを個別のプロセッサに割当てて実行させる手段を有する、
    並列実行システム。
  10. 前記クラスタリングする手段は、プロセッサに割当れられた際の通信コストを低減するように、クラスタを併合する手段を有する、請求項9の並列実行システム。
  11. 前記所定の閾値は、前記クラスタ内のブロックの数である、請求項9の並列実行システム。
  12. 前記所定の閾値は、前記クラスタの期待される処理時間である、請求項9の並列実行システム。
  13. コンピュータの処理によって、マルチプロセッサ・システムで、個々のプロセッサに割当てて並列実行させるためのコードを生成するプログラムであって、
    前記コンピュータをして、
    相互に連結された複数のブロックからなる、プログラムのソースコードを入力するステップと、
    強連結成分を検出することによって、前記ブロックをクラスタリングするステップと、
    所定の閾値を超えるクラスタを見出して、該クラスタを少なくとも1つコピーし、該コピーしたクラスタと併せて並列化されたパイプラインを形成するように処理の流れを与えるクラスタ展開ステップを実行させる、
    コード生成プログラム。
  14. 前記クラスタリングするステップは、プロセッサに割当れられた際の通信コストを低減するように、クラスタを併合するステップを有する、請求項13のコード生成プログラム。
  15. 前記所定の閾値は、前記クラスタ内のブロックの数である、請求項13のコード生成プログラム。
  16. 前記所定の閾値は、前記クラスタの期待される処理時間である、請求項13のコード生成プログラム。
  17. マルチプロセッサ・システムで、処理を個々のプロセッサに割当てて並列実行させるためのプログラムであって、
    前記マルチプロセッサ・システムをして、
    前記処理をあらわす、相互に連結された複数のブロックからなる、プログラムのソースコードを入力するステップと、
    強連結成分を検出することによって、前記ブロックをクラスタリングするステップと、
    所定の閾値を超えるクラスタを見出して、該クラスタを少なくとも1つコピーし、該コピーしたクラスタと併せて並列化されたパイプラインを形成するように処理の流れを与えるクラスタ展開ステップと、
    前記クラスタ毎のコードを生成するステップと、
    前記コードをコンパイルして、個別の実行可能コードを得るステップと、
    実行環境上で、前記各実行可能コードを個別のプロセッサに割当てて実行させるステップを実行させる、
    並列実行プログラム。
  18. 前記クラスタリングするステップは、プロセッサに割当れられた際の通信コストを低減するように、クラスタを併合するステップを有する、請求項17の並列実行プログラム。
  19. 前記所定の閾値は、前記クラスタ内のブロックの数である、請求項17の並列実行プログラム。
  20. 前記所定の閾値は、前記クラスタの期待される処理時間である、請求項17の並列実行プログラム。
JP2008308660A 2008-12-03 2008-12-03 並列化処理方法、システム、及びプログラム Active JP4629768B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2008308660A JP4629768B2 (ja) 2008-12-03 2008-12-03 並列化処理方法、システム、及びプログラム
US12/629,114 US8438553B2 (en) 2008-12-03 2009-12-02 Paralleling processing method, system and program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008308660A JP4629768B2 (ja) 2008-12-03 2008-12-03 並列化処理方法、システム、及びプログラム

Publications (2)

Publication Number Publication Date
JP2010134614A true JP2010134614A (ja) 2010-06-17
JP4629768B2 JP4629768B2 (ja) 2011-02-09

Family

ID=42223931

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008308660A Active JP4629768B2 (ja) 2008-12-03 2008-12-03 並列化処理方法、システム、及びプログラム

Country Status (2)

Country Link
US (1) US8438553B2 (ja)
JP (1) JP4629768B2 (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012044015A3 (en) * 2010-09-27 2012-06-21 Samsung Electronics Co., Ltd. Method and apparatus for dynamic resource allocation of processing units
JP2014010754A (ja) * 2012-07-02 2014-01-20 Denso Corp プログラム開発支援装置、及びプログラム開発支援ツール
KR20170042801A (ko) * 2014-09-02 2017-04-19 아브 이니티오 테크놀로지 엘엘시 사용자 상호작용을 통한 그래프 기반 프로그램에서 구성요소 서브세트의 시각적 명시
US11301445B2 (en) 2014-09-02 2022-04-12 Ab Initio Technology Llc Compiling graph-based program specifications
JP7360521B2 (ja) 2013-07-18 2023-10-12 持田製薬株式会社 ω3脂肪酸の自己乳化組成物

Families Citing this family (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2437170A4 (en) * 2009-05-25 2013-03-13 Panasonic Corp MULTIPROCESSOR SYSTEM, MULTIPROCESSOR CONTROL METHOD AND INTEGRATED MULTIPROCESSOR CIRCUIT
KR101613971B1 (ko) * 2009-12-30 2016-04-21 삼성전자주식회사 프로그램 코드의 변환 방법
US9147016B2 (en) * 2010-08-20 2015-09-29 International Business Machines Corporation Multi-ECU simulation by using 2-layer peripherals with look-ahead time
US8661424B2 (en) * 2010-09-02 2014-02-25 Honeywell International Inc. Auto-generation of concurrent code for multi-core applications
US9513966B2 (en) * 2011-02-17 2016-12-06 Siemens Aktiengesellschaft Parallel processing in human-machine interface applications
US20120246238A1 (en) * 2011-03-21 2012-09-27 International Business Machines Corporation Asynchronous messaging tags
JP5875681B2 (ja) * 2012-06-20 2016-03-02 株式会社日立製作所 制御ソフトウェアの設計支援装置
US9286047B1 (en) 2013-02-13 2016-03-15 Cisco Technology, Inc. Deployment and upgrade of network devices in a network environment
JP6018022B2 (ja) 2013-06-14 2016-11-02 株式会社デンソー 並列化コンパイル方法、並列化コンパイラ、並列化コンパイル装置、及び、車載装置
EP3082038A1 (en) * 2015-04-15 2016-10-19 Hybridserver Tec AG Method, device and system for creating a massively parallelized executable object
US10374904B2 (en) 2015-05-15 2019-08-06 Cisco Technology, Inc. Diagnostic network visualization
US9800497B2 (en) 2015-05-27 2017-10-24 Cisco Technology, Inc. Operations, administration and management (OAM) in overlay data center environments
US9967158B2 (en) 2015-06-05 2018-05-08 Cisco Technology, Inc. Interactive hierarchical network chord diagram for application dependency mapping
US10536357B2 (en) 2015-06-05 2020-01-14 Cisco Technology, Inc. Late data detection in data center
US10089099B2 (en) 2015-06-05 2018-10-02 Cisco Technology, Inc. Automatic software upgrade
US10033766B2 (en) 2015-06-05 2018-07-24 Cisco Technology, Inc. Policy-driven compliance
US10142353B2 (en) 2015-06-05 2018-11-27 Cisco Technology, Inc. System for monitoring and managing datacenters
US10931629B2 (en) 2016-05-27 2021-02-23 Cisco Technology, Inc. Techniques for managing software defined networking controller in-band communications in a data center network
US10171357B2 (en) 2016-05-27 2019-01-01 Cisco Technology, Inc. Techniques for managing software defined networking controller in-band communications in a data center network
US9898258B2 (en) * 2016-05-31 2018-02-20 International Business Machines Corporation Versioning of build environment information
US10289438B2 (en) 2016-06-16 2019-05-14 Cisco Technology, Inc. Techniques for coordination of application components deployed on distributed virtual machines
US10708183B2 (en) 2016-07-21 2020-07-07 Cisco Technology, Inc. System and method of providing segment routing as a service
US10972388B2 (en) 2016-11-22 2021-04-06 Cisco Technology, Inc. Federated microburst detection
US10708152B2 (en) 2017-03-23 2020-07-07 Cisco Technology, Inc. Predicting application and network performance
US10523512B2 (en) 2017-03-24 2019-12-31 Cisco Technology, Inc. Network agent for generating platform specific network policies
US10250446B2 (en) 2017-03-27 2019-04-02 Cisco Technology, Inc. Distributed policy store
US10594560B2 (en) 2017-03-27 2020-03-17 Cisco Technology, Inc. Intent driven network policy platform
US10764141B2 (en) 2017-03-27 2020-09-01 Cisco Technology, Inc. Network agent for reporting to a network policy system
US10873794B2 (en) 2017-03-28 2020-12-22 Cisco Technology, Inc. Flowlet resolution for application performance monitoring and management
US10680887B2 (en) 2017-07-21 2020-06-09 Cisco Technology, Inc. Remote device status audit and recovery
US10834210B1 (en) * 2017-08-03 2020-11-10 Amazon Technologies, Inc. Synchronizing a personal workspace across multiple computing systems in a coding environment
JP6930314B2 (ja) * 2017-09-08 2021-09-01 富士通株式会社 データ変換プログラム、データ変換方法、およびデータ変換装置
US10554501B2 (en) 2017-10-23 2020-02-04 Cisco Technology, Inc. Network migration assistant
US10523541B2 (en) 2017-10-25 2019-12-31 Cisco Technology, Inc. Federated network and application data analytics platform
US10594542B2 (en) 2017-10-27 2020-03-17 Cisco Technology, Inc. System and method for network root cause analysis
US11233821B2 (en) 2018-01-04 2022-01-25 Cisco Technology, Inc. Network intrusion counter-intelligence
US11765046B1 (en) 2018-01-11 2023-09-19 Cisco Technology, Inc. Endpoint cluster assignment and query generation
US10798015B2 (en) 2018-01-25 2020-10-06 Cisco Technology, Inc. Discovery of middleboxes using traffic flow stitching
US10574575B2 (en) 2018-01-25 2020-02-25 Cisco Technology, Inc. Network flow stitching using middle box flow stitching
US10917438B2 (en) 2018-01-25 2021-02-09 Cisco Technology, Inc. Secure publishing for policy updates
US10826803B2 (en) 2018-01-25 2020-11-03 Cisco Technology, Inc. Mechanism for facilitating efficient policy updates
US10999149B2 (en) 2018-01-25 2021-05-04 Cisco Technology, Inc. Automatic configuration discovery based on traffic flow data
US10873593B2 (en) 2018-01-25 2020-12-22 Cisco Technology, Inc. Mechanism for identifying differences between network snapshots
US11128700B2 (en) 2018-01-26 2021-09-21 Cisco Technology, Inc. Load balancing configuration based on traffic flow telemetry

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0380337A (ja) * 1989-04-28 1991-04-05 Hitachi Ltd 並列化装置
JPH0675786A (ja) * 1992-08-26 1994-03-18 Hitachi Ltd タスクスケジュリング方法
JP2002116916A (ja) * 2000-10-04 2002-04-19 Internatl Business Mach Corp <Ibm> プログラムの最適化方法及びこれを用いたコンパイラ
JP2007048052A (ja) * 2005-08-10 2007-02-22 Internatl Business Mach Corp <Ibm> コンパイラ、制御方法、およびコンパイラ・プログラム
JP2008515051A (ja) * 2004-09-28 2008-05-08 インテル コーポレイション 依存性チェーン処理のためのシステム、方法及び装置

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3080337B2 (ja) 1992-05-26 2000-08-28 昭和電線電纜株式会社 ブッシング用絶縁栓
JP3016359B2 (ja) 1995-07-21 2000-03-06 日本電気株式会社 マルチプロセッサシステムにおけるプロセッサ割り当て装置、プロセッサ割り当て方法、およびプロセッサ割り当てプログラムを記憶する媒体
JPH09167144A (ja) 1995-12-19 1997-06-24 Hitachi Eng Co Ltd プログラム作成方法およびプログラム作成システム
US6237077B1 (en) * 1997-10-13 2001-05-22 Idea Corporation Instruction template for efficient processing clustered branch instructions
CA2262277C (en) * 1999-02-22 2003-05-20 Sudarsan Tandri A system and method for optimizing program execution in a computer system
US6341371B1 (en) * 1999-02-23 2002-01-22 International Business Machines Corporation System and method for optimizing program execution in a computer system
US6748589B1 (en) * 1999-10-20 2004-06-08 Transmeta Corporation Method for increasing the speed of speculative execution
US6988266B2 (en) * 2001-05-08 2006-01-17 Sun Microsystems, Inc. Method of transforming variable loops into constant loops
US6948160B2 (en) * 2001-05-31 2005-09-20 Sun Microsystems, Inc. System and method for loop unrolling in a dynamic compiler
US7086047B1 (en) * 2002-12-04 2006-08-01 Xilinx, Inc. Determining hardware generated by high level language compilation through loop optimizations
US7263692B2 (en) * 2003-06-30 2007-08-28 Intel Corporation System and method for software-pipelining of loops with sparse matrix routines
TWI334990B (en) * 2006-12-28 2010-12-21 Ind Tech Res Inst Virtual cluster architecture and method
JP4957729B2 (ja) * 2007-01-25 2012-06-20 日本電気株式会社 プログラム並列化方法、プログラム並列化装置及びプログラム

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0380337A (ja) * 1989-04-28 1991-04-05 Hitachi Ltd 並列化装置
JPH0675786A (ja) * 1992-08-26 1994-03-18 Hitachi Ltd タスクスケジュリング方法
JP2002116916A (ja) * 2000-10-04 2002-04-19 Internatl Business Mach Corp <Ibm> プログラムの最適化方法及びこれを用いたコンパイラ
JP2008515051A (ja) * 2004-09-28 2008-05-08 インテル コーポレイション 依存性チェーン処理のためのシステム、方法及び装置
JP2007048052A (ja) * 2005-08-10 2007-02-22 Internatl Business Mach Corp <Ibm> コンパイラ、制御方法、およびコンパイラ・プログラム

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012044015A3 (en) * 2010-09-27 2012-06-21 Samsung Electronics Co., Ltd. Method and apparatus for dynamic resource allocation of processing units
US9311157B2 (en) 2010-09-27 2016-04-12 Samsung Electronics Co., Ltd Method and apparatus for dynamic resource allocation of processing units on a resource allocation plane having a time axis and a processing unit axis
JP2014010754A (ja) * 2012-07-02 2014-01-20 Denso Corp プログラム開発支援装置、及びプログラム開発支援ツール
JP7360521B2 (ja) 2013-07-18 2023-10-12 持田製薬株式会社 ω3脂肪酸の自己乳化組成物
KR20170042801A (ko) * 2014-09-02 2017-04-19 아브 이니티오 테크놀로지 엘엘시 사용자 상호작용을 통한 그래프 기반 프로그램에서 구성요소 서브세트의 시각적 명시
JP2017168119A (ja) * 2014-09-02 2017-09-21 アビニシオ テクノロジー エルエルシー ユーザインタラクションを通じたグラフに基づくプログラム内の構成要素のサブセットの視覚的な規定
KR102361154B1 (ko) 2014-09-02 2022-02-09 아브 이니티오 테크놀로지 엘엘시 사용자 상호작용을 통한 그래프 기반 프로그램에서 구성요소 서브세트의 시각적 명시
US11301445B2 (en) 2014-09-02 2022-04-12 Ab Initio Technology Llc Compiling graph-based program specifications

Also Published As

Publication number Publication date
US20100138810A1 (en) 2010-06-03
US8438553B2 (en) 2013-05-07
JP4629768B2 (ja) 2011-02-09

Similar Documents

Publication Publication Date Title
JP4629768B2 (ja) 並列化処理方法、システム、及びプログラム
JP5209059B2 (ja) ソース・コード処理方法、システム、及びプログラム
JP4931978B2 (ja) 並列化処理方法、システム、及びプログラム
EP3126971B1 (en) Program execution on heterogeneous platform
JP4886838B2 (ja) 並列化方法、システム、及びプログラム
JP4988789B2 (ja) シミュレーション・システム、方法及びプログラム
US9152389B2 (en) Trace generating unit, system, and program of the same
US9268536B2 (en) Behavior invariant optimization of maximum execution times for model simulation
JP6021342B2 (ja) 並列化方法、システム、及びプログラム
JP5479942B2 (ja) 並列化方法、システム、及びプログラム
JP6004818B2 (ja) 並列化方法、システム、及びプログラム
Welton et al. Exposing hidden performance opportunities in high performance GPU applications
JP2011186991A (ja) 常微分方程式を解くための方法、プログラム及びシステム
Malyshkin et al. Automated Debugging of Fragmented Programs in LuNA System
JP7385536B2 (ja) ソフトウェア開発支援装置及びソフトウェア開発支援方法
CN114153750B (zh) 代码检查方法及装置、代码编写方法、电子设备
JP7307011B2 (ja) モデル並列化装置および方法
JP4819442B2 (ja) コンパイル処理方法、コンパイル処理装置及びコンパイル処理プログラム
Hu et al. Optimal Kernel Orchestration for Tensor Programs with Korch
Miyajima et al. Courier: A toolchain for application acceleration on heterogeneous platforms

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100715

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100928

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101012

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

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

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

Free format text: PAYMENT UNTIL: 20131119

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4629768

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150