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

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

Info

Publication number
JP2011081539A
JP2011081539A JP2009232369A JP2009232369A JP2011081539A JP 2011081539 A JP2011081539 A JP 2011081539A JP 2009232369 A JP2009232369 A JP 2009232369A JP 2009232369 A JP2009232369 A JP 2009232369A JP 2011081539 A JP2011081539 A JP 2011081539A
Authority
JP
Japan
Prior art keywords
parallelized
cluster
graph
processors
parallelization
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
JP2009232369A
Other languages
English (en)
Other versions
JP4931978B2 (ja
Inventor
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 JP2009232369A priority Critical patent/JP4931978B2/ja
Priority to US12/898,851 priority patent/US20110083125A1/en
Publication of JP2011081539A publication Critical patent/JP2011081539A/ja
Application granted granted Critical
Publication of JP4931978B2 publication Critical patent/JP4931978B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/456Parallelism detection

Landscapes

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

Abstract

【課題】強連結成分の内部の並列性も活かして、高速な動作を可能とする並列化技法を提供する。
【解決手段】実行すべき処理を、複数の制御ブロックと、その制御ブロックをつなぐエッジで記述し、前記エッジのうち、予測性が高いエッジを選び、強連結クラスタを識別し、各強連結クラスタと、該強連結クラスタの間の孤立した非強連結クラスタのノード毎に、プロセッサ数と、そのコストと、対応クラスタをエントリとしてもつ並列化テーブル1102〜1116からなるグラフを作成してシリーズパラレルグラフに変換し、シリアルパス毎に、および、並列セクション毎にマージして、統合された並列化テーブルを形成する。その統合された並列化テーブルのプロセッサ数とコストの値に応じて、最良のエントリを選択し、そのエントリのクラスタに基づき、各プロセッサに割り当てるための実行可能コードを生成する。
【選択図】図11

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として、シミュレーションを実行することができる。
そこで、図2(a)に示すように、機能ブロックを、クラスタA、B、C及びDのように複数のクラスタに分け、それぞれを個別のCPUにアサインする技法が従来より実施されている。このようなクラスタリングのために、例えば、コンパイラの技術で知られている強連結成分の検出などの技法が用いられる。クラスタリングする主要な目的は、同一クラスタ内の機能ブロックの通信コスト削減である。図2(b)は、個々のクラスタA、B、C及びDをブロックで表現した図である。
ところで、マルチプロセッサシステムにおいて、複数のタスクまたはプロセスを、個々のプロセッサに割り当てることによって処理を並列化することに関する技術は、下記の文献に記載されている。
特開平9−97243号公報は、マルチプロセッサシステムにおいて並列タスクで構成されたプログラムのターンアラウンドタイムを短縮することを課題とするものであり、開示されているシステムにおいて、並列タスクで構成されるプログラムのソースプログラムをコンパイラがコンパイルして目的プログラムを生成し、コンパイラは、並列タスクの各タスク間で行われるタスク間通信のデータ量を保持するタスク間通信量テーブルを生成する。タスクスケジューラは、タスク間通信量テーブルとマルチプロセッサシステムの全プロセッサの組における単位データ当たりのデータ通信時間を定義するプロセッサ通信コストテーブルとからタスク間通信の通信時間が最短となるプロセッサを並列タスクのタスクに割り当てる旨決定し、プロセッサ管理テーブルに登録する。
特開平9−167144号公報は、複数種類の演算手順、および、プロセッサ間での通信処理に対応する、複数種類の通信手順を記述した、並列処理を行なうための並列プログラムを変更する方法であって、現在使用している通信手順にしたがって行なわれている通信処理の通信量を増加したと仮定すると、前記並列処理の開始から終了までの時間が短くなる場合、並列プログラム内での通信手順の並べ替えを行ない、2以上の通信手順を合体するように、記述内容を変更する、プログラム作成方法を開示する。
特開2007−048052号公報は、並列処理を最適化するコンパイラに関するものであって、コンパイラは、対象プログラムを実行するプロセッサ・コアの個数である実行コア数を記録している。コンパイラは、まず、対象プログラムの中から単一のプロセッサ・コアで連続して実行すべき実行パスの候補である支配的パスを検出する。次に、実行コア数以下の数の支配的パスを選択することによりマルチコア・プロセッサにおいて並列にまたは連続して実行すべきタスクのクラスタを生成する。次に、生成されたクラスタ毎に、実行コア数以下の1つまたは複数の自然数の各々について、当該クラスタを当該自然数に等しい個数のプロセッサ・コアで実行した場合の実行時間を算出する。そして、算出された実行時間に基づいて各クラスタの実行のために割り当てるべきプロセッサ・コアの個数を選択する。
しかし、これらの開示技術は、シミュレーションプログラムの実行のように、図2(b)に示すような有効グラフの処理が繰り返し実行される場合には、必ずしも効率的な並列化を達成しない。
一方、Neil Vachharajani, Ram Rangan, Easwaran Raman, Matthew J. Bridges, Guilherme Ottoni, David I. August, “Speculative Decoupled Software Pipelining”, In proceedings of the 16th International Conference on Parallel Architecture and Compilation Techniques, 2007に記述されている技術は、図2(b)に示すクラスタの並列化に適合する。すなわち、複数のクラスタをそれぞれ、個々のプロセッサに割当てることによって、図3に示すように、パイプライン実行することができる。
特開平9−97243号公報 特開平9−167144号公報 特開2007−048052号公報
Neil Vachharajani, Ram Rangan, Easwaran Raman, Matthew J. Bridges, Guilherme Ottoni, David I. August, "Speculative Decoupled Software Pipelining", In proceedings of the 16th International Conference on Parallel Architecture and Compilation Techniques, 2007
しかし、非特許文献1に示す技法では、強連結成分のクラスタのサイズが大きくなる傾向にあるシステムでは最適解が得にくいという問題がある。
これは、非特許文献1に示す技法では、強連結成分の内部にある並列性を活かすことができないためである。
従って、この発明の目的は、強連結成分のサイズが大きくなる傾向がある、シミュレーション・モデルにおいて、強連結成分の内部の並列性も活かして、高速な動作を可能とする並列化技法を提供することにある。
この発明の実施の前提として、マルチコアまたはマルチプロセッサの環境にあるものとする。このようなシステムにおいて、並列化するためのプログラムは、これには限定されないが、MATLAB(R)/Simulink(R)などのシミュレーション・モデリング・ツールで作成されているものとする。すなわち、プログラムは、処理の流れを示す有向のエッジで結ばれた制御ブロックで記述されている。
すると、本発明に従う最初のステップは、前記エッジのうち、予測性が高いエッジを選ぶことである。
次のステップでは、本発明に係る処理プログラムが、強連結クラスタを見出す。その後、ブロックを1つだけ含む、互いに隣接する強連結クラスタを、並列化を阻害しないように結合し、これを非強連結クラスタとする。
次のステップでは、本発明に係る処理プログラムが、形成された強連結クラスタと、非強連結クラスタの各々につき、並列化テーブルを作成する。
次のステップでは、本発明に係る処理プログラムが、強連結クラスタと非強連結クラスタをノードとしたグラフを、シリーズパラレルグラフに変換する。
次のステップでは、本発明に係る処理プログラムが、シリーズパラレルグラフの階層に基づき、並列化テーブルをマージする。
次のステップでは、本発明に係る処理プログラムが、得られた並列化テーブルから最善の構成を選び、この構成に基づき、実際にクラスタをコアまたはプロセッサに個々に割り当てる。
この発明によれば、強連結成分のサイズが大きくなる傾向があるシミュレーション・モデルにおいて、強連結成分の並列性も活かした並列化技法によって、動作の高速化が図られる。
ブロック線図の例を示す図である。 クラスタ化されたブロック線図の例を示す図である。 パイプライン化されたブロック線図の例を示す図である。 本発明を実施するためのハードウェアの例を示す図である。 機能ブロック図を示す図である。 全体の処理の概要フローチャートを示す図である。 ブロック線図の例を示す図である。 予測可能なエッジが除去されたブロック線図の例を示す図である。 クラスタ化されたブロック線図の例を示す図である。 並列化テーブルの例を示す図である。 クラスタと並列化テーブルの対応を示す図である。 並列化テーブルから生成されたグラフを示す図である。 並列化テーブルのマージ処理を示す図である。 マージされた並列化テーブルの例を示す図である。 SCC検出処理のフローチャートを示す図である。 SCCを統合する処理のフローチャートを示す図である。 Clear_path_and_assign()処理のフローチャートを示す図である。 クラスタ毎に並列化テーブルを計算する処理のフローチャートを示す図である。 クラスタ毎に並列化テーブルを計算する処理のフローチャートを示す図である。 並列化テーブルのグラフを構成する処理のフローチャートを示す図である。 並列化テーブルを統合する処理のフローチャートを示す図である。 get_series_parallel_nested_tree()処理のフローチャートを示す図である。 get_table()処理のフローチャートを示す図である。 series_merge()処理のフローチャートを示す図である。 parallel_merge()処理のフローチャートを示す図である。 merge_clusters_in_shared()処理のフローチャートを示す図である。 統合された並列化テーブルから最良の構成を選択する処理のフローチャートを示す図である。
以下、図面を参照して、本発明の一実施例の構成及び処理を説明する。以下の記述では、特に断わらない限り、図面に亘って、同一の要素は同一の符号で参照されるものとする。なお、ここで説明する構成と処理は、一実施例として説明するものであり、本発明の技術的範囲をこの実施例に限定して解釈する意図はないことを理解されたい。
先ず、図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)独自のフォーマットであり、機能ブロック間の依存関係を記述するためのものである。
なお、シミュレーション・モデリング・ツールは、別のパーソナル・コンピュータに導入して、そこで生成されたソース・コードを、ネットワークなどを経由して、ハードティスク・ドライブ416にダウンロードするようにすることもできる。
こうして出力されたソース・コード504は、ハードティスク・ドライブ416に保存される。
解析モジュール506は、ソースコード504を入力して構文解析し、ブロックのつながりを、グラフ表現508に変換する。グラフ表現508のデータは、好適には、ハードディスク・ドライブ416に格納される。
クラスタリング・モジュール510は、グラフ表現508を読み取って、強連結成分(SCC)を見出すことによるクラスタリングを行う。強連結とは、ある有向グラフにおいて、任意の二点間に有向路が存在することである。そして、強連結成分とは、与えられたグラフの部分グラフであって、それ自体では強連結で、それ以上頂点を追加すると強連結でなくなるような部分グラフのことである。
並列化テーブル処理モジュール514は、クラスタリング・モジュール510によってクラスタリングされたクラスタに基づき、後で詳細に説明する処理によって、並列化テーブル516を作成する機能をもつ。
作成された並列化テーブル516は、好適にはメイン・メモリ406に配置されるが、ハードディスク・ドライブ416に配置してもよい。
コード生成モジュール518は、グラフ表現508と、並列化テーブル516を参照して、コンパイラ520がコンパイルするためのソースコードを生成する。コンパイラ520が想定するプログラミング言語としては、C、C++、C#、Java(商標)などのマルチコア、またはマルチプロセッサに対応したプログラミングが可能な任意のプログラミング言語を使用することができ、コード生成モジュール518はそれに対応して、クラスタ毎に、ソースコードを生成することになる。
コンパイラ520が生成したクラスタ毎の実行可能バイナリ・コード(図示しない)は、並列化テーブル516などに記述された内容に基づき、異なるコアまたはプロセッサに割り当てられて、オペレーティング・システムの作用により、実行環境522で実行される。
以下、一連のフローチャートに従い、本発明の処理をより詳細に説明するが、その前に、用語と記法の定義を与えておく。
<定義>
・集合
|X|は、集合Xに含まれている要素の数をあらわす。
¬Xは、集合Xの補集合をあらわす。
X−Y = X∩¬Y
X[i]は、集合Xのi番目の要素である。
MAX(X)は、集合Xに記録された最大値である。
FIRST(X)は、集合Xの最初の要素である。
SECOND(X)は、集合Xの最初の要素である。
・グラフ
グラフGは、<V,E>であらわす。
Vは、グラフGのノードの集合である。
Eは、グラフGの頂点(ノード)を結ぶエッジの集合である。
PARENT(v)は、グラフGにおけるノードv(∈V)の親ノードの集合である。
CHILD(v)は、グラフGにおけるノードv(∈V)の子ノードの集合である。
SIBLING(v)は、{c:c!=v, c∈CHILD(p),p∈PARENT(v)}で定義される。
エッジe = (u,v),(u∈V,v∈V)について、
SRC(e) := u
DEST(e) := v
・クラスタ
クラスタとは、ブロックの集合を意味する。SCCもブロックの集合であり、クラスタの一種である。
WORKLOAD(C)とは、クラスタCのワークロードのことである。クラスタCのワークロードとは、クラスタCにおける全てのブロックのワークロードを足し合わせることによって計算される。
START(C)は、クラスタCを含むクラスタの集合に対して、静的なスケジューリングが実行された際に、クラスタCの開始時刻を表す。
END(C)は、クラスタCを含むクラスタの集合に対して、静的なスケジューリングが実行された際に、クラスタCの終了時刻を表す。
・並列化テーブルT
Tは、下記のようなエントリIの集合である。
I := <プロセッサの数, スケジュール長, クラスタの集合>
ENTRY(T,i)とは、並列化テーブルTにおいて、最初の要素がiであるエントリである。
LENGTH(T,i)とは、並列化テーブルTにおいて、最初の要素がiであるエントリの第2の要素である。そのようなエントリがないなら、∞を返す。
CLUSTERS(T,i)とは、並列化テーブルTにおいて、プロセッサのフィールドがiであるエントリに記録されているクラスタの集合である。
・シリーズパラレルグラフ
シリーズパラレル入れ子ツリーGsp-treeは、<Vsp-tree,Esp-tree>で表される、バイナリ・ツリーである。
sp-treeは、Gsp-treeのノードの集合を表し、各ノードはエッジと記号の組(f,s)となる。ここで、f∈Ept-sp(ここで、Ept-spは、あるグラフのエッジを要素とする集合)であり、s∈{"L","S","P"}である。
"L"は、葉(leaf)、"S"は直列(series)、"P"は並列(parallel)という種別をあらわす記号である。
sp-treeは、ツリーGsp-treeのエッジ(u,v)の集合である。
EDGE(n)(n∈Vsp-tree)は、nの最初の要素である。
SIGN(n)(n∈Vsp-tree)は、nの2番目の要素である。
LEFT(n)(n∈Vsp-tree)は、ツリーGsp-treeにおけるノードnの左の子ノードである。
RIGHT(n)(n∈Vsp-tree)は、ツリーGsp-treeにおけるノードnの右の子ノードである。
次に、図6を参照して、本発明の全体的な概要フローチャートについて説明する。図7に、シミュレーション・モデリング・ツール502で作成した、ブロック線図を、解析モジュールがグラフ表現に変換した図を示す。
先ず最初に、このグラフG := <V,E>によってあらわす。Vはブロックの集合で、Eはエッジの集合である。
図6に戻って、ステップ602では、予測可能なエッジが除去される。予測可能なエッジは、シミュレーションモデルを作成した人が、モデルの性質を考慮して予め、手作業で選択することを想定している。
そのようにして予測可能なエッジを除去した後のグラフ表現を、
pred := <Vpred,Epred>とあらわす。すると、Vpred = Vであるが、Epred = E - 予測可能なエッジの集合となる。
予測可能なエッジとは、一般的には物体の速度など、連続的で、短時間で急激な変化を示さないようなシグナル(ブロック線図上のエッジ)を選択するものである。典型的には、モデル作成者に、モデル上でアノテーションを書いてもらうことで、コンパイラがどのエッジが予測可能であるかを知ることができる。
図8に、図7のグラフから予測可能なエッジを取り除いたブロック線図を示す。図7において、702が予測可能なエッジである。
ステップ604では、クラスタリング・モジュール510が、強連結成分(SCC)を検出する。図9において、そのようにして検出された、一つ以上のブロックを含むSCCは、クラスタ902、904、906及び908で示されている。また、クラスタ902、904、906及び908に含まれないブロックは、それぞれが一つのブロックからなるSCCであるとする。
このように検出されたSCCを以って、SCCのグラフを、
SCC := <VSCC,ESCC>とあらわす。
ここで、VSCCは、このアルゴリズムによって作成されたSCCの集合であり、
SCCは、VSCCにおいてSCCを接続するエッジの集合である。
さらにまたここでは、ノードがループを構成するSCC(すなわち、二つ以上のブロックを含むSCC)の集合であるVloopも作成される。
ステップ606では、クラスタリング・モジュール510によって、ブロックを一つだけ含む隣接するSCCが、その後の並列化を妨げないように統合され、非SCCクラスタが形成される。その状況は、図11に示されている。
このように統合されたグラフを、Garea := <Varea,Earea>とあらわす。
ここで、Vareaは、このアルゴリズムによって統合されて新たにできた非SCCクラスタと、このアルゴリズムで変化の無かったSCCクラスタの集合であり、
areaは、Vareaの要素間を接続するエッジの集合である。
さらにまたここでは、新しく作成された非SCCクラスタの集合である、Vnon-loopも作成される。
ステップ608では、並列化テーブル処理モジュール514が、Vloopにおける各クラスタ毎に並列化テーブルを計算する。これにより、並列化テーブルの集合Vpt-loopが得られる。
ステップ610では、並列化テーブル処理モジュール514が、Vnon-loopにおける各クラスタ毎に並列化テーブルを計算する。これにより、並列化テーブルの集合Vpt-non-loopが得られる。
このようにして得られた並列化テーブルを図11に示す。並列化テーブル1102、1104、1106、1108がVpt-loopの要素であり、並列化テーブル1110、1112、1114、1116がVpt-non-loopの要素である。なお、並列化テーブルのフォーマットは、図10に示すように、各エントリが、可用なプロセッサの数と、ワークロード、クラスタの集合からなる。
ステップ612では、並列化テーブル処理モジュール514が、並列化テーブルをノードとするグラフを構築する。
このように構築されたグラフを、Gpt := <Vpt,Ept>とあらわす。
ここで、Vptは、このアルゴリズムによって作成された並列化テーブルの集合であり、
ptは、Vptの要素間を接続するエッジの集合である。
ステップ614では、並列化テーブル処理モジュール514が、Vpt中の並列化テーブルを1つに統合する。そのような統合処理は、まずGptをシリーズパラレルグラフに変換し、そこから、シリーズパラレル入れ子ツリーを生成する。ここで生成されるシリーズパラレル入れ子ツリーの例を、図12の1202に示す。この例では、元々Gptがシリーズパラレルグラフであったため、シリーズパラレルグラフへの変換過程は示されていない。このように生成されたシリーズパラレル入れ子ツリーの構造に従い、並列化テーブルが統合されていく。この例を、図13に示す。例えば、並列化テーブルF,Gを統合し、新しい並列化テーブルSP6を作成する。続いて、SP6と並列化テーブルEが結合され、新しい並列化テーブルSP4が作成される。このように、シリーズパラレル入れ子ツリーの構造に従って並列化テーブルの結合が進むと、最終的に一つの並列化テーブルSP0が出来上がり、この最終的な一つの並列化テーブルをTunifiedとする。
統合された並列化テーブルTunifiedの例を、図14に示す。
並列化テーブル処理モジュール514は、統合された並列化テーブルTunifiedから最良の構成を選択する。その結果、結果のクラスタの集合Rfinalが得られる。
図14の例では、集合Rfinal = { C'''1, C''2, C'3, C4} である。
以下、図6の概要フローチャートの各ステップを、個別のフローチャートを使用して、より詳細に説明する。
図15は、図6における、SCCを見出すためのステップ604をより詳細に説明するフローチャートである。この処理は、図5のクラスタリング・モジュール510が実行する。
示されているステップ1502において、以下の処理が行われる。
SCCアルゴリズムを Gpredに適用する。このSCCアルゴリズムとしては、例えば、R. Tarjan, “Depth-first search and linear graph algorithms” SIAM Journal on Computing, pp. 146-160, 1972に記載されている。
Vscc = そのアルゴリズムによって得られたSCCの集合
Escc = { (C, C’) : C∈Vscc , C’∈Vscc , C!=C’,
∃(u, v) ∈Epred, u∈C, v∈C’}
Gscc = <Vscc , Escc>
Vloop = {C : C∈Vscc , |C| > 1}
図16は、図6における、ブロックを1つだけ含むSCCを統合ためのステップ606をより詳細に説明するフローチャートである。この処理も、クラスタリング・モジュール510が実行する。
ステップ1602では、下記のように変数がセットされる。
H = {C : C ∈ {Vloop ∪{C’: C’ ∈Vscc - Vloop , |PARENT(C’)| = 0}} }
S = スタック, T = SCCと新しいクラスタの間の空の写像.
Varea = 新しいクラスタの空集合
ステップ1604では、Hの全ての要素が処理されたかどうかが判断され、もしそうでないなら、ステップ1606に進み、そこで、Hにおける未処理SCCを1つ取り出しCとする。
ステップ1608では、C∈Vloopかどうかが判断され、もしそうなら、ステップ1610に進み、そこで、{C’ : C’∈{CHILD(C)∩¬Vloop }} における全ての要素をSに入れる、という処理が行われる。
ここで¬Vloopは、VSCCを全体集合としたときのVloopの補集合である。
次に、ステップ1612に進んで、新しい空クラスタCnewを作成することと、CnewをVareaに加えることが行われる。
ステップ1608に戻って、C∈Vloopでないなら、ステップ1614で、CがSに入れられて、ステップ1612に進む。
ステップ1616では、|S| = 0かどうかが判断され、もしそうなら、ステップ1604に戻る。
ステップ1616で、|S| = 0でないと判断されると、ステップ1618に進み、そこで、次のような処理が行われる。
SからCを取り出す
(C, Cnew) をTに入れる
F = CHILD(C)
次に、ステップ1620に進み、そこで、|F| = 0かどうかが判断され、もしそうなら、ステップ1620に戻る。
ステップ1620で、|F| = 0でないと判断されると、ステップ1622に進み、そこで、Fから1つの要素Cchildを取得する処理が行われる。
次にステップ1624で、Cchild∈Hかどうかが判断され、もしそうなら、ステップ1620に戻る。
ステップ1624で、Cchild∈Hでないと判断されると、ステップ1626で、
|{(Cchild, C’) ∈T : C’ ∈Varea }| = 0かどうか判断され、もしそうなら、ステップ1628で、CchildをSに入れた後、ステップ1620に戻る。
ステップ1626で、|{(Cchild, C’) ∈T : C’ ∈Varea }| = 0でないと判断されたら、ステップ1630で、C’== Cnew かどうか判断し、もしそうなら、ステップ1620に戻る。
ステップ1630で、C’== Cnewでないと判断されると、ステップ1632で、
Clear_path_and_assign(Cchild,T)という関数を呼び出し、ステップ1620に戻る。
Clear_path_and_assign(Cchild,T)の詳細は、後で詳しく説明する。
ステップ1604に戻って、Hの全てのCが処理されたと判断されると、ステップ1634に行って、
Tにおけるすべての要素 (C, Cnew) について, Cの全てのブロックをCnewに入れる
Varea = { Varea - {C’ : C’ ∈Varea , |C’| = 0} } ∪Vloop
Earea = {(C, C’) : C ∈Varea , C’ ∈Varea , C!=C’ , ∃(u, v) ∈Epred , u∈C, v∈C’}
Garea = <Varea, Earea>
Vnon-loop = Varea - Vloop
という処理を行って、終わる。
図17は、図16のフローチャートで呼び出されるClear_path_and_assign(Cchild,T)という関数の処理の内容を示すフローチャートである。
ステップ1702では、下記のセットアップが行われる。
S1 = スタック
Cchild を S1に入れる。
Tから第一要素がCchildである要素 (Cchild, Cprev_new) を見つける。
新しい 空クラスタCnewを作成する。
CnewにVareaを入れる。
ステップ1704では、|S1| = 0かどうかが判断され、もしそうなら、処理は終了する。
ステップ1704で、|S1| = 0でないと判断されると、ステップ1706で、下記の処理が行われる。
CをS1から取り出す。
Tから第一要素がCである要素 (C, X)を除く,ただし、X∈Varea
(C, Cnew)をTに加える。
F1 = CHILD(C)
ステップ1708では、|F1| = 0かどうかが判断され、もしそうなら、ステップ1704に戻り、そうでなければ、ステップ1710に進み、そこでF1からCgcを取得する処理が行われる。
次にステップ1712に進み、そこで、Cgc∈Hかどうか判断され、もしそうなら、ステップ1708に戻る。
ステップ1712で、Cgc∈Hでないと判断されると、ステップ1716で、Tから 第1要素がCgcであるような要素(Cgc,Cgca) が見つけられ、次にステップ1718でCprev_new == Cgcaかどうか判断される。もしそうなら、ステップ1714に進み、そこで、CgcがS1に入れられ、そこから処理は、ステップ1708に戻る。そうでないなら、直ちにステップ1708に戻る。
次に、図18のフローチャートを参照して、図6におけるステップ608における、Vloopにおける各クラスタ毎に並列化テーブルを計算する処理をより詳細に説明する。この処理は、図5の並列化テーブル処理モジュール514が実行する。
図18において、ステップ1802では、mに、ターゲット・システムで利用可能なプロセッサの数がセットされる。
ステップ1804では、|Vloop| = 0かどうかが判断され、もしそうなら、この処理は完了する。
次のステップ1806では、次の処理が行われる。
i = 1
VloopからクラスタCを得る。
L = { (u, v) : u∈C, v∈C, (u, v) ∈Epred }
Gtmp = <C, L>
Tc = 0エントリの新しい並列化テーブル
ここで、Gtmp = <C, L>とは、Cに含まれるブロックをノードとし、Lに含まれるエッジをエッジとするグラフをGtmpとすることを表している。
ステップ1808では、i <= mかどうかが判断され、もしそうでなければ、ステップ1810で、TcをVpt-loopに入れてから、ステップ1804に戻る。
ステップ1808で、i <= mであると判断されると、ステップ1812に進み、そこで、S = {s : s ∈C, | PARENT(s) ∩¬C | > 0 }とセットされる。
次のステップ1814では、|S| = 0かどうかが判断され、もしそうなら、ステップ1816で、iを1増やして、ステップ1808に戻る。
ステップ1814で、|S| = 0でないと判断されたなら、ステップ1818で、Sからsを得て、ステップ1820で、Gtmpからバックエッジの集合を検出する処理が行われる。これは例えば、Gtmpのエントリ・ノードがsであるという条件で、Alfred V. Aho , Monica S. Lam , Ravi Sethi ,and Jeffrey D. Ullman, “Compilers: Principles, Techniques, and Tools (2nd Edition)”, Addison Wesleyに記述されているような方法で行われる。
ここで、検出されたバックエッジの集合は、Bとおく。
そして、Gc = <C,L-B>
ステップ1822では、C中のブロックを、 i個のクラスタにクラスタ化する処理が行われる。これは例えば、Sih G. C., and Lee E. A , A compile-time scheduling heuristic for interconnection-constrained heterogeneous processor architectures. IEEE Trans. Parallel Distrib. Syst. 4, 2 (Feb.), 75-87に記述されているようなマルチプロセッサ・スケジューリング方法を、利用可能なプロセッサの数がiであるという条件でGcに適用することによって、行われる。このようなスケジューリングの結果、各ブロックはいずれかのプロセッサで実行される形となり、一つのプロセッサによって実行されることとなったブロックの集合を一つのクラスタとする。
そうして、結果のクラスタの集合(i個のクラスタ)をRとおき、Gcの結果のスケジュール長をtとおく。
ここで、スケジュール長とは、上記のスケジューリングの結果、処理の開始から終了までに要する時間である。
またこのとき、上記のスケジューリングの結果、最も最初に実行されるブロックの処理の開始時刻を0とし、各クラスタの開始時刻と終了時刻を、それぞれ、そのクラスタが対応するプロセッサ上で最初にブロックの処理が実行される時刻と、最後のブロックの処理が終了する時刻として記録し、参照可能な状態にしておく。
ステップ1824では、t’= LENGTH(Tc, i)として、ステップ1826に進み、そこで、t < t’かどうかが判断される。もしそうなら、ステップ1828でエントリ (i,t,R) をTCに入れてから、ステップ1814に戻る。そうでなければ、直ちにステップ1814に戻る。
次に、図19のフローチャートを参照して、図6におけるステップ610における、
Vnon-loopにおける各クラスタ毎に並列化テーブルを計算する処理をより詳細に説明する。この処理は、図5の並列化テーブル処理モジュール514が実行する。
図19において、ステップ1902では、mに、ターゲット・システムで利用可能なプロセッサの数がセットされる。
ステップ1904では、|Vnon-loop| = 0かどうかが判断され、もしそうなら、この処理は完了する。
ステップ1906で、|Vnon-loop| = 0でないと判断されると、ステップ1906で、iに1をセットし、Vnon-loopからクラスタCを取得し、Tcに0エントリの新しい並列化テーブルをセットする処理が行われる。
ステップ1908では、i <= mかどうかが判断され、そうでなければ、ステップ1910に進んで、TcをVpt-non-loopに入れた後、処理はステップ1904に戻る。
ステップ1908で、i <= mであると判断されると、ステップ1912では、C中のノードを、i個のクラスタにクラスタ化する処理が行われる。これは、これは例えば、G. Ottoni, R. Rangan, A. Stoler, and D. I. August, “Automatic Thread Extraction with Decoupled Software Pipelining”, In Proceedings of the 38th IEEE/ACM International Symposium on Microarchitecture, November 2005に記述されているようなマルチプロセッサ・スケジューリング方法を、利用可能なプロセッサの数がiであるという条件でGcに適用することによって、行われる。
そして、Rに、i個のクラスタからなる結果の集合がセットされ、tにMAX_WORKLOAD(R)がセットされ、(i, t, R)をTCに入れた後、iを1だけ増分して、ステップ1908に戻る。またこのとき、上記のスケジューリングの結果、最も最初に実行されるブロックの処理の開始時刻を0とし、各クラスタの開始時刻と終了時刻を、それぞれ、そのクラスタが対応するプロセッサ上で最初にブロックの処理が実行される時刻と、最後のブロックの処理が終了する時刻として記録し、参照可能な状態にしておく。
図20は、並列化テーブルからなるグラフを構成するための処理を示すフローチャートである。この処理は、図5の並列化テーブル処理モジュール514が実行する。そのステップ2002ではまず、
Vpt := Vpt-loop ∪ Vpt-non-loopによって、2つのクラスタの合弁が得られる。
次に、下記の式によって、並列化テーブルからなるグラフのエッジの集合を与える。
Ept := { (T, T’) : T ∈Vpt, T’∈Vpt, T!=T’,∃(u, v) ∈Epred,
u∈FIRST(CLUSTERS(T,1)) , v∈FIRST(CLUSTERS(T’,1)) }
以上から、Gpt := <Vpt,Ept>によって、並列化テーブルからなるグラフが構成される。
なお、CLUSTERS(T,1)は、常に1つのクラスタを返す。なぜなら、二番目の引数が示すように、利用可能なプロセッサの数が1だからである。
また、同一の終点の対をもつエッジが、1つに統合される。
次に、図21のフローチャートを参照して、並列化テーブルの統合処理について説明する。この処理は、図5の並列化テーブル処理モジュール514が実行する。
ステップ2102ではまず、
Gpt を、直接−並列グラフ Gpt-sp = <Vpt-sp, Ept-sp> に変換する処理が行われる。これは例えば、Arturo Gonzalez Escribano, Valentin Cardenoso Payo, and Arjan J.C. van Gemund, “Conversion from NSP to SP graphs”, Tech. Rep. TRDINFO -01-97, Universidad de Valladolid, Valladolid (Spain), 1997に記述されているような方法で、行われる。
次に、下記によって、Vpt-spがえられる。
Vpt-sp = Vpt∪Vdummy
ここで、Vdummyは、このアルゴリズムによって追加されるダミー・ノードの集合である。各ダミー・ノードは、並列化テーブル{(i,0,φ):i=1,...,m}であり、mは、ターゲット・システムにおける利用可能なプロセッサの数である。
また、下記によって、Ept-spがえられる。
Ept-sp = Ept∪Edummy
ここで、Edummyは、Vpt-spの要素を接続する、このアルゴリズムによって追加されたダミー・エッジである。
ステップ2104では、下記の式によって、Gsp-treeを得る。
Gsp-tree := get_series_parallel_nested_tree(Gpt-sp)
なお、get_series_parallel_nested_tree()という関数については、後で詳細に説明する。
ステップ2106では、nroot := Gsp-treeのルート・ノードとセットされる。このルート・ノードとは、親ノードをもたないノードであり、そのようなノードは、Gsp-treeに唯一存在する。
次に、下記の式によって、Tunifiedを得る。
Tunified := get_table(nroot)
なお、get_table()という関数については、後で詳細に説明する。
次に、図22のフローチャートを参照して、get_series_parallel_nested_tree(Gpt-sp)の動作について、説明する。
まず、ステップ2202では、Vcpy = Vpt-sp, Ecpy = Ept-spと、一旦コピーする。
ステップ2204では、Scand = { T: T∈Vcpy , |{e=(T’,T) : e∈Ecpy}|=1
∧ |{e=(T, T'') : e∈Ecpy}|=1 }によって、集合を更新する。
ステップ2206では、|Scand| = 0かどうかが判断され、もしそうなら、
Gsp-tree := <Vsp-tree, Esp-tree>として、処理を終る。
ステップ2206で、|Scand| = 0でないと判断されたなら、ステップ2210に進んで、以下の処理が行われる。
まず、ScandからTを取得し、
f := (T’, T ), f’ := (T, T'') とし、
ここで (T’, T)∈Ecpy , (T, T'')∈Ecpy
新しいエッジ f’’ = (T’, T'')を作成し、
nsnew = (f'',“S”)
nsnewを、Vsp-treeに入れる。
次に、ステップ2212に進んで、そこで、fは新しく作成されたエッジかどうかが判断される。もしそうなら、ステップ2214に進んで、Vsp-treeからFIRST(n)=fであるようなノードnを見つける処理が行われる。
一方、ステップ2212で、fは新しく作成されたエッジでないと判断されたなら、ステップ2216に進み、新しいツリーノード n = (f, “L”)を作成し、nをVsp-treeに入れる。
ステップ2214または2216からは、ステップ2218に進み、そこで、(nsnew , n) を Esp-treeに入れる処理が行われる。
次にステップ2220に進み、そこで、f'は新しく作成されたエッジかどうかが判断される。もしそうなら、ステップ2222に進み、Vsp-treeからFIRST(n')=f'であるようなノードn'を見つける処理が行われる。
一方、ステップ2220で、f'は新しく作成されたエッジでないと判断されたなら、ステップ2224に進み、新しいツリーノード n' = (f', “L”)を作成し、n'をVsp-treeに入れる。
ステップ2222または2224からは、ステップ2226に進み、そこで、(nsnew , n') を Esp-treeに入れる処理が行われる。さらに、P = { p=(T’, T'') : p∈Ecpy}とセットされる。
次に、ステップ2228では、|P| = 0かどうかが判断され、もしそうなら、ステップ2230に進んで、そこで、f''をVcpyに入れ、次にステップ2232で、TをVcpyから除去してf'及びf''をEcpyから除去し、ステップ2204に戻る。
ステップ2228に戻って、|P| = 0でないと判断されたなら、ステップ2234に進み、そこでPから1つの要素pを取得する。
次にステップ2236で、Pが新しく作成されたエッジかどうかが判断され、もしそうなら、ステップ2238で、Vsp-treeからFIRST(r) = pであるようなノードrを見つける処理が行われる。
ステップ2236で、pが新しく作成されたエッジでないと判断されると、ステップ2240に進み、そこで、新しいツリーノード r = (p, “L”)を作成し、rをVsp-treeに入れる処理が行われる。
ステップ2238またはステップ2240からは、ステップ2242に進み、そこで、新しいエッジ f''' = (T',T'')を作成を作成し、npnew = (f''',"P")とセットし、 (npnew,nsnew) をETに入れ、(npnew, r)をETに入れ、pをEcpyから除去し、f'''をEcpyに入れる処理が行われる。
ステップ2242からは、既に説明したステップ2232を経て、ステップ2204に戻る。
図23は、図21のステップ2106で呼ばれる、get_table()という関数の処理の内容を示すフローチャートである。
図23において、ステップ2302ではまず、SIGN(l) =“L”かどうかが判断される。ここで、SIGN()という関数は、前に、ツリーGsp-treeの対(f,s)としてあらわされるノードの集合において、s∈{"L","S","P"}として説明した集合の要素を返す。ここの"L"は、葉(leaf)、"S"は直列(series)、"P"は並列(parallel)という種別をあらわす。
ステップ2302でSIGN(l) ="L"であると判断されたなら、ステップ2304に進み、そこでTc = NULLとし、ステップ2306でTcを返して、処理を終わる。
ステップ2302でSIGN(l) ="L"でないと判断されたなら、ステップ2308に進み、そこで、l = LEFT(n), r = RIGHT(n), Tl = get_table(l), Tr = get_table(r)という演算を行なう。このフローチャートはget_table()について処理なので、ここのget_table(l)とget_table(r)は、再帰呼び出しである。
次にステップ2310に進んで、そこで、SIGN(l) ="S"かどうか判断する。そうでなければ、ステップ2312でTc = parallel_merge(Tl,Tr)として、ステップ2306でTcを返して、処理を終わる。parallel_merge()の詳細は、後で説明する。
ステップ2310で、SIGN(n) ="S"であると判断されたなら、ステップ2314でel = EDGE(l), Tc = DEST(el)とし、ステップ2316でTl = NULLかどうか判断される。もしそうでないなら、ステップ2318で、Tc = series_merge(Tl,Tc)として、ステップ2320に進む。もしそうなら、直ちにステップ2320に進む。series_merge()の詳細は、後で説明する。
次に、ステップ2320で、Tr = NULLかどうか判断され、もしそうでないなら、ステップ2322で、Tc = series_merge(Tc,Tr)として、ステップ2306に進む。もしそうなら、直ちにステップ2306に進む。こうして、Tcを返して、処理を終わる。
次に、図24のフローチャートを参照して、series_merge(Tl,Tr)の処理を説明する。まず、ステップ2402では、Tl == NULLまたはTr == NULLであるかどうかが判断される。もしそうなら、ステップ2404に進んで、Tl == NULLかどうかが判断され、もしそうでないなら、ステップ2406で、Tnew = Tlとして、ステップ2408でTnewを返して、処理を終わる。
Tl == NULLであるなら、ステップ2410に進み、そこで、Tr == NULLであるかどうかが判断される。もしそうでないなら、ステップ2412で、Tnew = Trとして、ステップ2408でTnewを返して、処理を終わる。
もしTr == NULLであるなら、ステップ2414に進み、Tnew = NULLとして、ステップ2408でTnewを返して、処理を終わる。
ステップ2402で、Tl == NULLでもないしTr == NULLでもないと判断されたなら、ステップ2416に進んで、mに、利用可能なプロセッサの数がセットされ、Tnewに、新しい空の並列化テーブルがセットされる。
ステップ2417では、iに1がセットされ、ステップ2418では、i <= mかどうか判断される。i <= mでなければ、処理は、ステップ2408に行って、Tnewを返して、処理を終わる。
i <= mであるなら、ステップ2420で、j = 1とセットして、ステップ2422でj<=mかどうか判断し、そうでなければ、ステップ2424でiを1だけ増分して、ステップ2418に戻る。
ステップ2422でj<=mであると判断されると、ステップ2426に進み、そこで、i+j<=mかどうかが判断される。もしそうなら、ステップ2428に進み、そこで、下記の処理が行なわれる。
lsl = LENGTH(Tl,i)
lsr = LENGTH(Tr,j)
ls = MAX(lsl,lsr)
Rl = CLUSTERS(Tl,i)
Rr = CLUSTERS(Tr,j)
Rnew = Rl ∪ Rr
ステップ2428に続いて、ステップ2430では、ls < LENGTH(Tnew, i+j)かどうかが判断され、もしそうなら、ステップ2432で、(i+j,ls,Rnew)が、Tnewに記録される。そして処理は、ステップ2434に進む。ステップ2430で、ls < LENGTH(Tnew, i+j)でないと判断した場合は、処理は直ちにステップ2434に進む。
ステップ2434では、i = jかどうかが判断され、もしそうなら、ステップ2436で、下記の処理が行なわれる。
Rl = CLUSTERS(Tl,i)
Rr = CLUSTERS(Tr,j)
(Rnew,ls) = merge_clusters_in_shared(Rl,Rr,i)
なお、merge_clusters_in_shared()の処理の詳細については、後で説明する。
ステップ2436に続いて、ステップ2438では、ls < LENGTH(Tnew, i)かどうかが判断され、もしそうなら、ステップ2440で、(i,ls,Rnew)が、Tnewに記録される。そして処理は、ステップ2442に進む。ステップ2430で、ls < LENGTH(Tnew, i)でないと判断した場合は、処理は直ちにステップ2442に進む。
ステップ2434で、i = jでないと判断された場合も、ステップ2434から直ちにステップ2442に進む。ステップ2442では、jを1だけ増分して、ステップ2422に戻る。
次に、図25のフローチャートを参照して、parallel_merge(Tl,Tr)の処理を説明する。まず、ステップ2502では、Tl == NULLまたはTr == NULLであるかどうかが判断される。もしそうなら、ステップ2504に進んで、Tl == NULLかどうかが判断され、もしそうでないなら、ステップ2506で、Tnew = Tlとして、ステップ2508でTnewを返して、処理を終わる。
Tl == NULLであるなら、ステップ2510に進み、そこで、Tr == NULLであるかどうかが判断される。もしそうでないなら、ステップ2512で、Tnew = Trとして、ステップ2508でTnewを返して、処理を終わる。
もしTr == NULLであるなら、ステップ2514に進み、Tnew = NULLとして、ステップ2508でTnewを返して、処理を終わる。
ステップ2502で、Tl == NULLでもないしTr == NULLでもないと判断されたなら、ステップ2516に進んで、mに、利用可能なプロセッサの数がセットされ、Tnewに、新しい空の並列化テーブルがセットされる。
さらに、
T1 = series_merge(Tl,Tr)
T2 = series_merge(Tr,Tl)
とセットされる。series_mergeについては、図24で説明済みである。
ステップ2518では、iに1がセットされ、ステップ2520では、i <= mかどうか判断される。i <= mでなければ、処理は、ステップ2508に行って、Tnewを返して、処理を終わる。
i <= mであるなら、ステップ2522に進んで、そこで、下記の式により、l1と、l2がセットされる。
l1 = LENGTH(T1,i)
l2 = LENGTH(T2,i)
ステップ2524では、l1 < l2かどうか判断され、もしそうなら、ステップ2526で、
R = CLUSTERS(T1,i)とされ、(i,l1,R)がTnewに記録される。
l1 < l2でないなら、ステップ2528で、R = CLUSTERS(T2,i)とされ、(i,l2,R)がTnewに記録される。
次に、ステップ2530でiを1増分してから、ステップ2520に戻る。
次に、図26のフローチャートを参照して、merge_clusters_in_shared(Rl,Rr,i)の処理を説明する。
先ず、ステップ2602では、Rl中のクラスタを、その終了時間で昇順にソートする。
また、Rr中のクラスタを、その終了時間で昇順にソートする。
次に、END(Rl[x]) - START(Rr[x]) が最大となるように、1からiの中から、インデックスxを選ぶ。
さらに、以下の計算を行なう。
w = MAX({ v = END(Rl[u])+gap[u]+WORKLOAD(Rr[u]) :
gap[u] = END(Rl[x])-START(Rr[x])+START(Rr[u])-END(Rl[u]), u=1,…,i})
R := {Ru: Ru:=Rl[u]∪Rr[u], u = 1,…,i}
ステップ2604では、(R,w)を返して、処理を終了する。
次に、図27のフローチャートを参照して、Tunifiedから最良の構成を選択する処理について説明する。Tunifiedは、図21のステップ2106から得られたものである。この処理は、図5の並列化テーブル処理モジュール514が実行する。
ステップ2702では、利用可能なプロセッサの数をmとセットする。また、i = 1とし、min = ∞とおく。∞は実際上、非常に大きい数である。
ステップ2704では、i <= mかどうか判断され、もしそうなら、ステップ2706で、w = LENGTH(Tunified,i)が計算され、ステップ2708では、w < minかどうかが判断される。
w < minでないなら、ステップ2704に戻る。w < minならステップ2170でmin = wとセットし、ステップ2712で、Rfinal = CLUSTERS(Tunified,i)を計算してステップ2704に戻る。
ステップ2704で、i <= mでないと判断されると、処理は終了する。その時点のRfinalが、求める結果となる。図14には、このようにして選ばれた構成の例が示されている。
図5に戻って、コンパイラ520は、Rfinalに基づきクラスタ毎にコードをコンパイルして、実行環境522に引き渡す。実行環境522は、クラスタ毎にコンパイルされた実行可能コードを個別のプロセッサにアサインして、実行させる。
以上、この発明を特定の実施例に基づき説明してきたが、この発明は、この特定の実施例に限定されず、当業者が自明に思いつく様々な変形、置換などの構成、技法適用可能であることを理解されたい。例えば、特定のプロセッサのアーキテクチャ、オペレーティング・システムなどに限定されない。
また、上記実施例は、主として、自動車のSILSのシミュレーション・システムにおける並列化に関連するものであったが、このような例には限定されず、航空機、ロボットその他の物理システムのシミュレーション・システムに広く適用可能であることを理解されたい。
402 ホスト・バス
404a、404b、404c、404n・・・ CPU
406 メイン・メモリ
408 バス
410 キーボード
412 マウス
414 ディスプレイ
416 ハードティスク・ドライブ
418 ブリッジ
502 シミュレーション・モデリング・ツール
504 ソース・コード
506 解析モジュール
504 ソースコード
508 グラフ表現
510 クラスタリング・モジュール
512 変形モジュール
514 並列化テーブル処理モジュール
516 並列化テーブル
518 コード生成モジュール
520 コンパイラ
522 実行環境
802 エッジ
902 クラスタ
1102 並列化テーブル
1110 並列化テーブル
1202 並列化テーブルのグラフ

Claims (7)

  1. コンピュータの処理によって、マルチプロセッサ・システムで、個々のプロセッサに割当てて並列実行させるためのコードを生成する方法であって、
    実行すべき処理を、複数の制御ブロックと、その制御ブロックをつなくエッジで記述するステップと、
    強連結クラスタを識別するステップと、
    各強連結クラスタと、該強連結クラスタの間の孤立した非強連結クラスタのノード毎に、プロセッサ数と、そのコストと、対応クラスタをエントリとしてもつ並列化テーブルを作成するステップと、
    並列化テーブルからなるグラフを作成するステップと、
    該並列化テーブルからなるグラフをシリーズパラレルグラフに変換するステップと、
    シリアルパス毎に、前記並列化テーブルをマージするステップと、
    並列セクション毎に、前記並列化テーブルをマージするステップとを有する、
    コード生成方法。
  2. 前記マージされた並列化テーブルのエントリのプロセッサ数とコストに基づき、利用可能なプロセッサの数の範囲でコスト的に最良のエントリを選ぶステップと、
    該最良のエントリのクラスタに基づき、個々のプロセッサに割り当てるための実行可能コードを生成するステップをさらに有する、請求項1に記載のコード生成方法。
  3. コンピュータの処理によって、マルチプロセッサ・システムで、個々のプロセッサに割当てて並列実行させるためのコードを生成するシステムであって、
    実行すべき処理を、複数の制御ブロックと、その制御ブロックをつなくエッジで記述する手段と、
    強連結クラスタを識別する手段と、
    各強連結クラスタと、該強連結クラスタの間の孤立した非強連結クラスタのノード毎に、プロセッサ数と、そのコストと、対応クラスタをエントリとしてもつ並列化テーブルを作成する手段と、
    並列化テーブルからなるグラフを作成するステップと、
    該並列化テーブルからなるグラフをシリーズパラレルグラフに変換するステップと、
    シリアルパス毎に、前記並列化テーブルをマージする手段と、
    並列セクション毎に、前記並列化テーブルをマージする手段とを有する、
    コード生成システム。
  4. 前記マージされた並列化テーブルのエントリのプロセッサ数とコストに基づき、利用可能なプロセッサの数の範囲でコスト的に最良のエントリを選ぶ手段と、
    該最良のエントリのクラスタに基づき、個々のプロセッサに割り当てるための実行可能コードを生成する手段をさらに有する、請求項3に記載のコード生成システム。
  5. マルチプロセッサをもち、請求項4に記載の実行可能コードを生成する手段によって生成されたコードを個々のプロセッサに割り当て実行させるための実行環境を提供するコンピュータ・システム。
  6. コンピュータの処理によって、マルチプロセッサ・システムで、個々のプロセッサに割当てて並列実行させるためのコードを生成するプログラムであって、
    前記コンピュータをして、
    強連結クラスタを識別するステップと、
    各強連結クラスタと、該強連結クラスタの間の孤立した非強連結クラスタのノード毎に、プロセッサ数と、そのコストと、対応クラスタをエントリとしてもつ並列化テーブルを作成するステップと、
    並列化テーブルからなるグラフを作成するステップと、
    該並列化テーブルからなるグラフをシリーズパラレルグラフに変換するステップと、
    シリアルパス毎に、前記並列化テーブルをマージするステップと、
    並列セクション毎に、前記並列化テーブルをマージするステップとを実行させる、
    コード生成プログラム。
  7. 前記マージされた並列化テーブルのエントリのプロセッサ数とコストに基づき、利用可能なプロセッサの数の範囲でコスト的に最良のエントリを選ぶステップと、
    該最良のエントリのクラスタに基づき、個々のプロセッサに割り当てるための実行可能コードを生成するステップをさらに有する、請求項6に記載のコード生成プログラム。
JP2009232369A 2009-10-06 2009-10-06 並列化処理方法、システム、及びプログラム Expired - Fee Related JP4931978B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2009232369A JP4931978B2 (ja) 2009-10-06 2009-10-06 並列化処理方法、システム、及びプログラム
US12/898,851 US20110083125A1 (en) 2009-10-06 2010-10-06 Parallelization processing method, system and program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009232369A JP4931978B2 (ja) 2009-10-06 2009-10-06 並列化処理方法、システム、及びプログラム

Publications (2)

Publication Number Publication Date
JP2011081539A true JP2011081539A (ja) 2011-04-21
JP4931978B2 JP4931978B2 (ja) 2012-05-16

Family

ID=43824139

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009232369A Expired - Fee Related JP4931978B2 (ja) 2009-10-06 2009-10-06 並列化処理方法、システム、及びプログラム

Country Status (2)

Country Link
US (1) US20110083125A1 (ja)
JP (1) JP4931978B2 (ja)

Cited By (5)

* 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> 並列化方法、システム、及びプログラム
WO2013046363A1 (ja) 2011-09-28 2013-04-04 トヨタ自動車株式会社 エンジン制御装置
JP2013134670A (ja) * 2011-12-27 2013-07-08 Toshiba Corp 情報処理装置及び情報処理方法
JP2019526853A (ja) * 2016-07-29 2019-09-19 アー・ファウ・エル・リスト・ゲゼルシャフト・ミト・ベシュレンクテル・ハフツング 直接フィードスルーループを有する信号フローに基づいたコンピュータプログラム。
WO2022052973A1 (zh) * 2020-09-10 2022-03-17 阿里巴巴集团控股有限公司 一种模型处理方法、装置、设备及计算机可读存储介质

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8161048B2 (en) * 2009-04-24 2012-04-17 At&T Intellectual Property I, L.P. Database analysis using clusters
JP5059174B2 (ja) * 2010-08-10 2012-10-24 株式会社東芝 プログラム変換装置、およびそのプログラム
US8789065B2 (en) 2012-06-08 2014-07-22 Throughputer, Inc. System and method for input data load adaptive parallel processing
US9448847B2 (en) 2011-07-15 2016-09-20 Throughputer, Inc. Concurrent program execution optimization
US9508181B2 (en) * 2011-08-31 2016-11-29 Adobe Systems Incorporated Ordering and rendering buffers for complex scenes with cyclic dependency
US9003383B2 (en) * 2011-09-15 2015-04-07 You Know Solutions, LLC Analytic engine to parallelize serial code
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 株式会社デンソー 並列化コンパイル方法、並列化コンパイラ、並列化コンパイル装置、及び、車載装置
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
US10536357B2 (en) 2015-06-05 2020-01-14 Cisco Technology, Inc. Late data detection in data center
US10033766B2 (en) 2015-06-05 2018-07-24 Cisco Technology, Inc. Policy-driven compliance
US10089099B2 (en) 2015-06-05 2018-10-02 Cisco Technology, Inc. Automatic software upgrade
US9967158B2 (en) 2015-06-05 2018-05-08 Cisco Technology, Inc. Interactive hierarchical network chord diagram for application dependency mapping
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
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
US10594560B2 (en) 2017-03-27 2020-03-17 Cisco Technology, Inc. Intent driven network policy platform
US10250446B2 (en) 2017-03-27 2019-04-02 Cisco Technology, Inc. Distributed policy store
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
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
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
US10574575B2 (en) 2018-01-25 2020-02-25 Cisco Technology, Inc. Network flow stitching using middle box flow stitching
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 (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007048052A (ja) * 2005-08-10 2007-02-22 Internatl Business Mach Corp <Ibm> コンパイラ、制御方法、およびコンパイラ・プログラム

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2288614C (en) * 1999-11-08 2004-05-11 Robert J. Blainey Loop allocation for optimizing compilers
JP3664473B2 (ja) * 2000-10-04 2005-06-29 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムの最適化方法及びこれを用いたコンパイラ
US7793276B2 (en) * 2003-11-14 2010-09-07 Intel Corporation Apparatus and method for automatically parallelizing network applications through pipelining transformation
US20100070958A1 (en) * 2007-01-25 2010-03-18 Nec Corporation Program parallelizing method and program parallelizing apparatus
US8752008B2 (en) * 2009-09-02 2014-06-10 Advanced Micro Devices, Inc. Lightweight service based dynamic binary rewriter framework

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007048052A (ja) * 2005-08-10 2007-02-22 Internatl Business Mach Corp <Ibm> コンパイラ、制御方法、およびコンパイラ・プログラム

Cited By (9)

* 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> 並列化方法、システム、及びプログラム
WO2013046363A1 (ja) 2011-09-28 2013-04-04 トヨタ自動車株式会社 エンジン制御装置
JP5668864B2 (ja) * 2011-09-28 2015-02-12 トヨタ自動車株式会社 エンジン制御装置
US9624774B2 (en) 2011-09-28 2017-04-18 Toyota Jidosha Kabushiki Kaisha Engine control apparatus
JP2013134670A (ja) * 2011-12-27 2013-07-08 Toshiba Corp 情報処理装置及び情報処理方法
JP2019526853A (ja) * 2016-07-29 2019-09-19 アー・ファウ・エル・リスト・ゲゼルシャフト・ミト・ベシュレンクテル・ハフツング 直接フィードスルーループを有する信号フローに基づいたコンピュータプログラム。
JP7127015B2 (ja) 2016-07-29 2022-08-29 アー・ファウ・エル・リスト・ゲゼルシャフト・ミト・ベシュレンクテル・ハフツング 直接フィードスルーループを有する信号フローに基づいたコンピュータプログラム。
US11720722B2 (en) 2016-07-29 2023-08-08 Avl List Gmbh Signal flow-based computer program with direct feedthrough loops
WO2022052973A1 (zh) * 2020-09-10 2022-03-17 阿里巴巴集团控股有限公司 一种模型处理方法、装置、设备及计算机可读存储介质

Also Published As

Publication number Publication date
US20110083125A1 (en) 2011-04-07
JP4931978B2 (ja) 2012-05-16

Similar Documents

Publication Publication Date Title
JP4931978B2 (ja) 並列化処理方法、システム、及びプログラム
Chandrasekaran et al. OpenACC for programmers: concepts and strategies
JP5209059B2 (ja) ソース・コード処理方法、システム、及びプログラム
JP4886838B2 (ja) 並列化方法、システム、及びプログラム
US8438553B2 (en) Paralleling processing method, system and program
Perchat et al. Component based framework to create mobile cross-platform applications
JP6021342B2 (ja) 並列化方法、システム、及びプログラム
Rodrigues et al. An MDE approach for automatic code generation from UML/MARTE to OpenCL
Ziogas et al. Productivity, portability, performance: Data-centric Python
JP5479942B2 (ja) 並列化方法、システム、及びプログラム
JP6004818B2 (ja) 並列化方法、システム、及びプログラム
CN105700933A (zh) 可重构处理器的高级语言的并行化和循环优化方法及系统
Castrillon et al. Dataflow Models of computation for programming heterogeneous multicores
JP5775386B2 (ja) 並列化方法、システム、及びプログラム
Gebremedhin Parmodelica: Extending the algorithmic subset ofmodelica with explicit parallel languageconstructs for multi-core simulation
Harrison et al. Tools for multiple-CPU environments
Basthikodi et al. Classifying a program code for parallel computing against hpcc
Clucas et al. CAPP: A C++ aspect-oriented based framework for parallel programming with OpenCL
WO2011090032A1 (ja) 並列処理プログラム生成方法、並列処理プログラム生成プログラム、及び並列処理プログラム生成装置
US11556357B1 (en) Systems, media, and methods for identifying loops of or implementing loops for a unit of computation
US8990791B2 (en) Intraprocedural privatization for shared array references within partitioned global address space (PGAS) languages
Athrij Vectorizing Memory Access on HammerBlade Architecture
KHALILI MAYBODI A Data-Flow Threads Co-processor for MPSoC FPGA Clusters
Wu et al. Task Mapping and Scheduling on RISC-V MIMD Processor With Vector Accelerator Using Model-Based Parallelization
Ziogas A Data-Centric Optimization Workflow for the Python Language

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111011

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111227

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

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

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20150224

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees