コンピュータの処理により、コード化対象外ブロックと、コード化対象ブロックを含む複数のブロックを連結して構成されたコードを並列化する方法であって、前記コードを、DAGのタスクグラフとして用意するステップと、前記タスクグラフを、直列実行ノードがそこから分岐するSノードと、並列実行ノードがそこから分岐するPノードを含む、直接-並列木に変換するステップと、前記コード化対象外ブロックの上位に前記Pノードが存在しなくなるまで前記直接-並列木を別の直接-並列木に変形するステップを有する、コード並列化方法。前記直接-並列木に変換する前に、前記タスクグラフにおいて、前記コード化対象外ブロックをマージするステップをさらに含む、請求項1に記載のコード並列化方法。前記コード化対象外ブロックのマージが、リストスケジューリングにより行われる、請求項2に記載のコード並列化方法。請求項1のコード並列化方法で生成されたコードを、マルチプロセッサ環境で実行する方法であって、前記Pノードの下位の個々のノードをコード化するステップと、該コード化されたコードを実行可能コードに個別にコンパイルするステップと、前記実行可能コードを個々のプロセッサに割り当てて実行するステップを有する、コード並列実行方法。請求項1のコード並列化方法で生成されたコードを、前記コード化対象外ブロックのコードを実行するためのインタープリタをもつマルチプロセッサ環境で実行する方法であって、前記Pノードの下位の個々のノードをコード化するステップと、該コード化されたコードが前記コード化対象外ブロックを含まないなら、実行可能コードに個別にコンパイルするステップと、前記実行可能コードを個々のプロセッサに割り当てて実行するステップと、前記コード化されたコードが前記コード化対象外ブロックを含むなら、前記コード化されたコードを前記インタープリタで実行するステップを有する、コード並列実行方法。コンピュータの処理により、コード化対象外ブロックと、コード化対象ブロックを含む複数のブロックを連結して構成されたコードを並列化するプログラムであって、前記コンピュータに、前記コードを、DAGのタスクグラフとして用意するステップと、前記タスクグラフを、直列実行ノードがそこから分岐するSノードと、並列実行ノードがそこから分岐するPノードを含む、直接-並列木に変換するステップと、前記コード化対象外ブロックの上位に前記Pノードが存在しなくなるまで前記直接-並列木を別の直接-並列木に変形するステップを実行させる、プログラム。前記直接-並列木に変換する前に、前記タスクグラフにおいて、前記コード化対象外ブロックをマージするステップをさらに含む、請求項6に記載のプログラム。前記コード化対象外ブロックのマージが、リストスケジューリングにより行われる、請求項7に記載のプログラム。コンピュータの処理により、コード化対象外ブロックと、コード化対象ブロックを含む複数のブロックを連結して構成されたコードを並列化するシステムであって、記憶手段と、前記記憶手段に保存された、DAGのタスクグラフと、前記タスクグラフを、直列実行ノードがそこから分岐するSノードと、並列実行ノードがそこから分岐するPノードを含む、直接-並列木に変換する手段と、前記コード化対象外ブロックの上位に前記Pノードが存在しなくなるまで前記直接-並列木を別の直接-並列木に変形する手段とを有する、コード並列化システム。前記タスクグラフにおいて、前記コード化対象外ブロックをマージする手段をさらに含む、請求項9に記載のコード並列化システム。前記コード化対象外ブロックのマージが、リストスケジューリングにより行われる、請求項10に記載のコード並列化システム。マルチプロセッサ環境と、前記Pノードの下位の個々のノードをコード化する手段と、該コード化されたコードを実行可能コードに個別にコンパイルする手段と、前記実行可能コードを個々のプロセッサに割り当てて実行する手段をさらに有する、請求項9に記載のコード並列化システム。前記コード化対象外ブロックのコードを実行するためのインタープリタをもつマルチプロセッサ環境と、前記Pノードの下位の個々のノードをコード化する手段と、該コード化されたコードが前記コード化対象外ブロックを含まないなら、実行可能コードに個別にコンパイルする手段と、前記実行可能コードを個々のプロセッサに割り当てて実行する手段と、前記コード化されたコードが前記コード化対象外ブロックを含むなら、前記コード化されたコードを前記インタープリタで実行する手段をさらに有する、請求項9に記載のコード並列化システム。この発明の目的は、基本処理の流れを表すブロック線図について、その実行速度を最適化するように分割することである。この発明の他の目的は、その際に、実行速度を損なわないように、コード化対象外ブロックを分割の境界に配置するための技法を提供することにある。この発明は、上記課題を解決するためになされたものであり、この発明に従うシステムは先ず、ブロック線図を、DAGdirectedacyclicgraphのタスクグラフに変換する。次に、この発明に従うシステムは、上記タスクグラフを、既知のアルゴリズムに従い一旦直列-並列グラフSPGseriesparallelgraphに変換してから、構造構文解析を行い、一意の直列-並列木SPTseriesparallelparsetreeを得る。SPTは、直列実行ノードがそこから分岐するSノードと、並列実行ノードがそこから分岐するPノードを含む。また、末端のノードは、タスクグラフのノードを表す。次に、この発明に従うシステムは、上記SPTを、コード化対象外ブロックの上位にPノードが存在しなくなるまで、別のSPTに変形する。こうして最適なSPTが得られると、発明に従うシステムは、結果のSPTのPノードの下に連なるブロックを並列に実行するように、コードを生成しコンパイルして、異なるプロセッサまたはコアに割り当てて、並列実行させる。なお、あるDAGのタスクグラフに対して一般的に、ノード実行順序の前後関係に矛盾しないSPTは複数存在する。そこで、本発明の好適な一側面によれば、SPTに変換する前に、DAGのタスクグラフは、点在するコード化対象外ブロックをなるべくマージさせるように変形される。これによって、結果のタスクグラフの分割数の低減がはかられる。一般に、各分割のサイズが同程度であれば、全体におけるクリティカルパスが小さくなって並列処理での高速化の効果が大きくなる。また、逐次処理であっても、分割数が小さければ、呼び出しのオーバヘッドが減少するために、実行の高速化に大いに貢献する。この発明によれば、ブロック線図であらわされるプログラムコードにおいて、コード化対象外ブロックの存在を考慮して、コードの分割数を減らし、並列実行コストのバランスのとれた分割を与える技法が提供される。以下、図面を参照して、本発明の一実施例の構成及び処理を説明する。以下の記述では、特に断わらない限り、図面に亘って、同一の要素は同一の符号で参照されるものとする。なお、ここで説明する構成と処理は、一実施例として説明するものであり、本発明の技術的範囲をこの実施例に限定して解釈する意図はないことを理解されたい。先ず、図4を参照して、本発明を実施するために使用されるコンピュータのハードウェアについて説明する。図4において、ホストバス402には、複数のCPU1404a、CPU2404b、CPU3404c、CPUn404nが接続されている。ホストバス402にはさらに、CPU1404a、CPU2404b、CPU3404c、CPUn404nの演算処理のためのメインメモリ406が接続されている。一方、I/Oバス408には、キーボード410、マウス412、ディスプレイ414及びハードティスクドライブ416が接続されている。I/Oバス408は、I/Oブリッジ418を介して、ホストバス402に接続されている。キーボード410及びマウス412は、オペレータが、コマンドを打ち込んだり、メニューをクリックするなどして、操作するために使用される。ディスプレイ414は、必要に応じて、本発明に係るプログラムをGUIで操作するためのメニューを表示するために使用される。この目的のために使用される好適なコンピュータシステムのハードウェアとして、IBMRSystemXがある。その際、CPU1404a、CPU2404b、CPU3404c、CPUn404nは、例えば、インテルRXeonRであり、オペレーティングシステムは、Windows商標Server2003である。オペレーティングシステムは、ハードティスクドライブ416に格納され、コンピュータシステムの起動時に、ハードティスクドライブ416からメインメモリ406に読み込まれる。本発明を実施するためには、マルチプロセッサシステムを用いることが必要である。ここでマルチプロセッサシステムとは、一般に、独立に演算処理し得るプロセッサ機能のコアを複数もつプロセッサを用いるシステムを意図しており、従って、マルチコアシングルプロセッサシステム、シングルコアマルチプロセッサシステム、及びマルチコアマルチプロセッサシステムのどれでもよいことを理解されたい。なお、本発明を実施するために使用可能なコンピュータシステムのハードウェアは、IBMRSystemXに限定されず、本発明のシミュレーションプログラムを走らせることができるものであれば、任意のコンピュータシステムを使用することができる。オペレーティングシステムも、WindowsRXP、WindowsR7、LinuxR、MacOSRなど、任意のオペレーティングシステムを使用することができる。さらに、シミュレーションプログラムを高速で動作させるために、POWER商標6ベースで、オペレーティングシステムがAIX商標のIBMRSystemPなどのコンピュータシステムを使用してもよい。ハードティスクドライブ416にはさらに、MATLABSimulink、Cコンパイラまたは、Cコンパイラ、後述する、タスクグラフ生成、タスクグラフ変形直接-並列木SPT変換、SPT変形などのためのモジュール、CPU割り当て用コード生成モジュールなどが格納されており、オペレータのキーボードやマウス操作に応答して、メインメモリ406にロードされて実行される。タスクグラフ生成、タスクグラフ変形直接-並列木SPT変換、SPT変形などのためのモジュールは、Java、C、C、Cなどの既存の任意のプログラミング言語で作成することができる。尚、使用可能なシミュレーションモデリングツールは、MATLABSimulinkに限定されず、オープンソースのScilabScicosなど、タイムステップに基づくタスクグラフで表現される任意のシミュレーションモデリングツールを使用することが可能である。あるいは、場合によっては、シミュレーションモデリングツールを使わず、直接、C、Cなどでシミュレーションシステムのソースコードを書くことも可能であり、その場合にも、個々の機能が、互いに依存関係にある個別の機能ブロックとして記述できるなら、本発明は適用可能である。図5は、本発明の実施例に係る機能ブロック図である。各々のブロックは、基本的に、ハードティスクドライブ416に格納されているモジュールに対応する。図5において、シミュレーションモデリングツール502は、好適には、MATLABSimulinkであり、それ以外に、ScilabScicosなど、コード化対象外ブロックを含み得る、任意のシミュレーションモデリングツールを使用することができる。モデルデータ504は、シミュレーションモデリングツール502を用いて作成され、好適にはブロック線図で記述され、ハードディスクドライブ416に保存されている。そのブロック線図に含まれるブロックにおいて、コード化対象外ブロックは、予めマークされている。メインルーチン506は、本発明に係る処理の各種モジュールを呼び出し、実行するためのプログラムであり、好適には、ディスプレイ414上で、キーボード410やマウス412で操作して処理を行うためのGUIなどのインターフェースを与える。DAG変換モジュール508は、モデルデータ504を読み込んで、DAGのタスクグラフに変換する機能をもつ。好適には、変換されたタスクグラフのデータは、メインメモリ406上に必要な領域を確保して展開される。なお、コンピュータメモリ上にグラフを表現するデータ構造として、行列表現あるいはリスト表現などが知られているが、この実施例で、既知の任意のデータ構造を使用することができる。タスクグラフ変形モジュール510は、DAG変換モジュール508によって変換して得られたタスクグラフに含まれるコード化対象外ブロックを可能な範囲でマージする機能をもつ。変形された結果のタスクグラフは、好適には、メインメモリ406上に必要な領域を確保して展開される。この処理は後で、図7のフローチャートを参照して、より詳細に説明する。SPT変換モジュール512は、タスクグラフ変形モジュール510によって変形して得られたタスクグラフを、直接-並列木SPTに変換する機能をもつ。SPTは、直列実行ノードがそこから分岐するSノードと、並列実行ノードがそこから分岐するPノードを含む。変換された結果のタスクグラフは、好適には、メインメモリ406上に必要な領域を確保して展開される。この処理は後で、図9のフローチャートを参照して、より詳細に説明する。SPT変形モジュール514は、SPT変換モジュール512によって得られたSPTのグラフを、別の直接-並列木SPTに変形する機能をもつ。変形は、コード化対象外ブロックの上位にPノードが存在しなくなるまで行われる。変形された結果のタスクグラフは、好適には、メインメモリ406上に必要な領域を確保して展開される。この処理は後で、図12のフローチャートを参照して、より詳細に説明する。CPU割当てモジュール516は、SPT変形モジュール514の変形の結果得られたSPTに基づき、個別のプロセッサあるいはコアに割り当てるためのコードを抽出する。抽出されたコードは、好適には、ハードティスクドライブ416に書き出される。このコードは、機能ブロックに対応する、好適にはCまたはCのソースコードである。CPU割当てモジュール516の処理は後で、図17のフローチャートを参照して、より詳細に説明する。コンパイラ518は、CPU割当てモジュール516によって書き出されたコードをコンパイルして、実行可能コードを生成する。実行環境520は、個別のプロセッサあるいはコアに割り当てて並列実行させる。実行環境520は、好適には、CPU割当てモジュール516が生成した補助的な情報を参照して実行可能コードを割り当てる。実行環境520の一部として、MATLABSimulinkを利用する場合には、それが未コンパイルのサブブロックとコンパイル済みのサブブロックを区別して、前者はインタプリターとして実行し、後者はバイナリーコードとしてホスト実行する。図6は、本発明の処理の全体の流れを示す概要フローチャートである。この後の詳細な説明は、この流れに沿って説明することになる。ステップ602では、DAG変換モジュール508により、モデルデータがDAGのタスクグラフに変換される。ステップ604では、タスクグラフ変形モジュール510により、コード化対象外ブロックを可能な範囲でマージするように、タスクグラフが変形される。ステップ606では、SPT変換モジュール512により、タスクグラフがSPTに変換される。ステップ608では、SPT変形モジュール514により、SPTが、コード化対象外ブロックの上位にPノードが存在しなくなるように、別のSPTに変換される。ステップ610では、SPT変形モジュール514により生成されたSPTに基づき、CPU割当てモジュール516により、各CPUに割り当てるためのコードが生成される。ステップ612では、コンパイラ518により、生成されたコードがコンパイルされ、ステップ614では、コンパイルされたコードが実行される。以下、各ステップについて詳細に説明するが、その前に、DAGおよびSPT上のノードに関する用語について定義を与えておく。xノードコード化対象外ノード非xノード:コード化対象ノードSPT上のノードに関する用語ノードの順序木の左優先の深さ優先探索で辿られる順番で決定する。SPT中のある二つのノードに対して、辿られる順番が他方より早いものを前、他方より遅い方を後ろとする。根ノード一般的な定義に順ずる。葉ノード子ノードを持たないノード。DAG上のノードに対応する。一般的な定義と同じ内部ノード葉ノードでないノード一般的な定義と同じ親ノード一般的な定義に順ずる子ノード一般的な定義に順ずる兄ノード親ノードが同じノードのうち、対象ノードより前にあるノード弟ノード親ノードが同じノードのうち、対象ノードより後ろにあるノード兄弟ノード兄ノードおよび弟ノード祖父ノード親ノードの親ノード曽祖父ノード祖父ノードの親ノードSノード子ノードの直列実行を表す内部ノードPノード子ノードの並列実行を表す内部ノードまた、SPTの構成に関する補足について述べると、SPT上では、Sノード同士またはPノード同士が親子関係になることはないものとする。仮に同種の内部ノードが親子関係になった場合には、当該子ノードを切り離し、当該子ノードの子ノードを順序を維持したまま親ノードに移動させるこのとき移動されるノード以下のノードも引き連れて移動するものとする処理を自動的に適用するものとする。上記処理は、木によって表現される直列並列実行の意味合いを変化させない。以上の定義と補足に基づき、図6の各ステップを順に説明していく。先ず、モデルデータをDAGのタスクグラフに変換するステップ602であるが、DAG変換モジュール508は、モデルデータ504を読み込んで、DAGのタスクグラフに変換する。このとき、図3にあるような、スケジュールの先頭になるブロックを解釈して、自己ループのないDAG構造へと変換する。好適には、変換されたタスクグラフのデータは、メインメモリ406上に必要な領域を確保して展開される。DAG変換モジュール508は、ブロック線図として記述されたモデルデータ504において、入力のない機能ブロックや実行のスケジュール上先頭に来る機能ブロックを全体のソースとして、またノード間の接続を有向エッジとしてDAG無閉路有向グラフを構成する。全体のシンクとなるのは、出力のない機能ブロックや実行上、最後にスケジュールされる機能ブロックなどである。タスクグラフ変形モジュール510が、コード化対象外ブロックを可能な範囲でマージするように、タスクグラフを変形するステップ604は、タスクグラフに対して以下の性質を持つリストスケジューリングを行い、スケジュール上で隣接するコード化対象外ノードXをひとつにマージする処理を行う。このとき、直前にスケジュールされたノードがxであれば可能な限りxをスケジュールし、直前にスケジュールされたノードがxでなければ可能な限りxでないノードをスケジュールする。ここでの目的は、タスクノードの前後関係に矛盾しない範囲でなるべくxをひとつの塊にすることである。これにより、次のステップで抽出されるSPT上でxが分散配置されて最終的なコードの分割数を増やしたり、最終的に利用できないxとの並列性の抽出により本来利用できる並列性が抽出されない事態を極力回避する。図7は、図6のステップ604に対応する、タスクグラフ変形モジュール510の処理のフローチャートを示す図である。この処理は、xノード、非xノードをもつDAGを入力とし、直列スケジュールSを出力する。直列スケジュールSは、タスクグラフにおいて、マージされた単一のノードとして扱われる。さて、図7のステップ702において、タスクグラフ変形モジュール510は、空のリストとしてS、DAGの全ノード未スケジュールノード集合としてCを用意する。ステップ704でタスクグラフ変形モジュール510は、親をC中に持たないC中の非xノードの集合としてRoを、親をC中に持たないC中のxノードの集合としてRxを、それぞれ用意する。ステップ706でタスクグラフ変形モジュール510は、Roφ∧Rxφすなわち、Roが空集合且つRxが空集合かどうか判断する。そうでないなら、タスクグラフ変形モジュール510は、ステップ708で、直前にSに加えられたノードがxノードかどうか判断し、そうならステップ710で、Rxφかどうか判断する。ステップ710でRxφでないと判断すると、タスクグラフ変形モジュール510は、ステップ712で、Rxから1つノードを取り出し、そのノードはRxから削除し、そのノードをSの最後に加える。更にそのノードをCから削除する。そして、ステップ704に戻る。ステップ710に戻って、Rxφであると判断すると、タスクグラフ変形モジュール510は、ステップ714に進み、Roφかどうか判断する。ステップ714でRoφでないと判断すると、タスクグラフ変形モジュール510は、ステップ716で、Roから1つノードを取り出し、そのノードはRoから削除し、そのノードをSの最後に加える。更にそのノードをCから削除する。そして、ステップ704に戻る。ステップ708に戻って、直前にSに加えられたノードがxノードでないなら、ステップ714に進み、タスクグラフ変形モジュール510はRoφかどうか判断し、もしそうなら、ステップ710に進む。ステップ710での処理は、上述のとおりである。ステップ714でRxφでないと判断された場合の処理も上述のとおりである。こうして、ステップ704を経由してステップ706に戻った時点で、Roが空集合且つRxが空集合であると判断すると、タスクグラフ変形モジュール510は、ステップ718で、S中で隣接するxノードを1つの集合とし、その集合毎に含まれるxノードをDAG上で1つのノードにマージする処理を行い、処理を終わる。図8は、図7の処理の様子を模式的に示す図である。すなわち、図8に示すようなタスクグラフが与えられると、図7のフローチャートに示すステップ702~716の処理で、図8に示すリストスケジューリングが行われる。そこで、ステップ718の処理で、隣接するxノードを1つの集合とし、その集合毎に含まれるxノードをDAG上で1つのノードにマージすることで、図8に示す変更されたタスクグラフが得られる。図9は、SPT変換モジュール512の処理のフローチャートを示す図である。この処理は、図6のステップ606に対応する。この処理は、DAGを入力とし、SPTを出力する。ステップ902で、SPT変換モジュール512は、DAGを直列-並列グラフに変換して、それをSPGとおく。DAGを直列-並列グラフに変換する処理として、例えば、AGonzalezEscribanoVCardenosoandAJCvanGemundConversionfromNSPtoSPgraphsTechRepTRDINFO0197UniversidaddeValladolidValladolid1997などに記述されている技法を使用することができる。また、ステップ902では、SPGの構造を解析して、SPTseriesparallelparsedtreeを得る。ここで、SPT上の葉ノードはSPGのノードに対応する。また、非端末非葉ノードはSPG上には存在しないが、間接的にノード間の接続順序を表す。次にステップ904で、SPT変換モジュール512は、SPG上のノード数が1以下かどうか判断し、そうでないなら、ステップ906に進む。ステップ906でSPT変換モジュール512は、以下の処理を行う。すなわち、SPG上で直列に接続しているノードのパスを見つける。ここで、直列に接続しているノードのパスとは、親を複数持つ、または親を持たないノードから、子を複数持つ、または子を持たないノードまでの、親と子を1つずつ持つノードによって構成されるパスを指す。そして、SPT変換モジュール512は、各々のパスLに対して、以下の処理を行う。SPG上のLに属するすべてのノードを一つのノードSに置き換えるこのとき、Lの外部のノードとの接続関係は維持される。同時に、SをSPT上の一つのノードとし、L中のノードに該当するSPT上のノードをL中での順序順にSPT上のSの子ノードとして加える。ここで、SPG上に構成されていくノードは、対応するノードがSPT上にも構築されていくため、つねに互いに対応関係が取れる。次に、SPT変換モジュール512は、ステップ908で、SPG上で並列関係にあるノードの集合を見つける。ここで、並列関係にあるノードの集合とは、親および子ノードが一致存在しない場合を含むしているノードの集合を指す。また、SPT変換モジュール512は、各々の集合Cに対して、以下の処理を行う。SPG上のCに属するすべてのノードを一つのノードPに置き換えるこのとき、Pの外部のノードとの接続関係は維持される。同時に、PをSPT上の一つのノードとし、C中のノードに該当するSPT上のノードを、SPT上のPの子ノードとして加える。ここでも、SPG上に構成されていくノードは、対応するノードがSPT上にも構築されていくため、つねに互いに対応関係が取れることに留意されたい。ステップ908の後は、SPT変換モジュール512は、ステップ904に戻り、SPT変換モジュール512は、SPG上のノード数が1以下かどうか判断し、もしそうなら、処理を終わる。図10は、図9に示すフローチャートの処理に従い、DAGをSPTに変換する例を示す図である。すなわち、図10のDAGが、図10のSPTに変換される。その際、SPTでは、子ノードの直列実行を表す内部ノードであるSノードと、子ノードの並列実行を表す内部ノードであるPノードが生成されていることが見て取れる。参考までに、図11は、タスクグラフ変形モジュール510の変形を経ていないDAGをSPTに変換する例を示す図である。図11に示すSPTは、図10のSPTに比較して、xノードが葉ノードとして散在していることが見て取れる。図12は、SPT変形モジュール514の処理のフローチャートを示す図である。この処理は、図6のステップ608に対応する。この処理は、SPTを入力とし、SPTを出力する。ステップ1202で、SPT変形モジュール514は、SPTの根ノードがPノードである場合、新たな根ノードとしてSノードを設け、元の根であったPノードを当該Sノードの子ノードとする。また、上位にPノードを持つSPT上のすべてのxノードの集合をXとする。ステップ1204で、SPT変形モジュール514は、Xが空集合かどうか判断する。もし空集合なら、処理を終わる。もしXが空集合でないなら、ステップ1206に進み、SPT変形モジュール514は、Xから1つの要素xを取り出すxはXから削除。ステップ1208で、SPT変形モジュール514は、xの親がSかどうか判断する。そうでなければ、SPT変形モジュール514はステップ1210で、xを祖父ノードとして、親ノードの直前に移動する。このとき、SPT上のノードを移動する場合、その子ノード以下もすべて引き連れて移動することとする。ステップ1212で、SPT変形モジュール514は、xの祖先にPノードが存在するかどうか判断する。もしそうなら、処理はステップ1208に戻り、そうでなければ処理はステップ1204に戻る。ステップ1208に戻って、xの親がSであると判断すると、処理はステップ1214に進み、そこで、SPT変形モジュール514は、xの兄ノードの重みの和xの弟ノードの重みの和であるかどうか判断する。ここで、SPT上のノードの重みとは、そのノード以下の葉ノードの重みの和である。葉ノードは元のDAG上のノードであり、DAG上のノードはシミュレーションモデル中の特定の処理と対応づいている。その処理の計算時間をDAG上のノードの重みとする。もしxの兄ノードの重みの和xの弟ノードの重みの和であると判断すると、SPT変形モジュール514は、ステップ1216で、xの兄ノードおよびxを、順序を維持したままxの曽祖父ノードの子として、xの祖父ノードの直前に移動し、ステップ1212に戻る。xの兄ノードの重みの和xの弟ノードの重みの和ではないと判断すると、SPT変形モジュール514は、ステップ1218で、xおよびxの弟ノードを、順序を維持したままxの曽祖父ノードの子として、xの祖父ノードの直後に移動し、ステップ1212に戻る。ステップ1212からは、そこでの判断に応じて、処理はステップ1208またはステップ1204に戻る。図13は、図12に示すフローチャートの処理に従い、SPTを変形する例を示す図である。すなわち、図13では、変形後のSPTでは最早、コード化対象外ブロックxの上位にPノードが存在しないことが見て取れる。参考までに、図14は、タスクグラフ変形モジュール510の変形を経ていないDAGから変換されたSPT図14を、図12に示すフローチャートの処理に従い、変形した例を示す図である。図14ではやはり、変形後のSPTでは最早、コード化対象外ブロックxの上位にPノードが存在しているが、コード化対象外ブロックxが、トップのSノードの下に分散していることが見て取れる。図15及び図16は、SPTの変形の途中の様子を示すである。先ず、図15に示すように、コード化対象外ブロックのノードxが、Pの直下にあるなら、変形処理は、図15または図15に示すように、ノードxを、祖父ノードSの子ノードとして、親ノードPの前または後ろに移動することである。すなわち、図15がノードxを親ノードPの後ろに移動することに対応し、図15がノードxを親ノードPの前に移動することに対応する。このようにしても、依存性の違反にはならない。すると、図16のような状態に移行する。これは、図16に示すように、ノードxが、Sの直下にある場合である。この場合の変形処理は、図16または図16に示すように、ノードxと、その同一の親Sの下にある先行ノードまたは後続ノードを、曽祖父ノードSの子として、祖父ノードPの前または後ろに移動することである。図16が後続ノードを祖父ノードPの後に移動することに対応し、図16が先行ノードを祖父ノードPの前に移動することに対応する。このようにしても、依存性の違反にはならない。この際、移動の方向によってPの下から移動するノードのワークロードが異なるため、小さい方を選択して移動させる。図17は、CPU割当てモジュール516が、変形された結果のSPTに基づき、複数のCPUに個別に割り当てるコードに対応するSPTを生成する処理のフローチャートを示す図である。この処理は、図6のステップ610に対応する。この処理は、SPTを入力とし、SPTを出力する。以下で、maxは、利用可能なプロセッサまたはコアの数である。ステップ1702で、CPU割当てモジュール516は、SPTの根ノードの子ノードのうち、Pノードの集合としてTを用意する。ステップ1704で、CPU割当てモジュール516は、Tが空集合かどうか判断し、もしそうなら処理を終了する。そうでなければ、ステップ1706に進み、Tから一つのPノードqを取り出す。qはTから削除する。また、Yを、qおよび、qの下位にあるすべてのPノードの集合とする。また、emax0Umaxφpmaxnullとする。ステップ1708で、CPU割当てモジュール516は、Yが空集合かどうか判断し、そうでなければ、ステップ1710で、Yから1つのPノードpを取り出す。そしてpはYから削除する。さらに、利用可能なプロセッサ数n分の空集合U1...Unを用意し、pの各子ノードを、各集合の重みがなるべく均等になるようU1...Unに配分するこのためにbinpackingalgorithmなどを利用するまた、以下の変数を用意する。m配分された集合ごとに属するノードの重みの和を計算し、その中で最大の値epの全子ノードの重みの和memaxeならemaxeUmaxU1...Unpmaxpとする。この後、処理は、ステップ1708に戻る。そこで、ステップ1708に戻って、Yが空集合であると判断されると、CPU割当てモジュール516は、ステップ1712で、lqの下位の葉ノードで、pmaxの下位でない葉ノードの内、pmaxよりも前の葉ノードのリストとする。また、rqの下位の葉ノードで、pmaxの下位でない葉ノードの内、pmaxよりも後ろの葉ノードのリストとする。こうしておいて、CPU割当てモジュール516は、lに含まれる葉ノードを根ノードの子ノードとしてqの直前に、rに含まれる葉ノードを根ノードの子ノードとしてqの直後にリスト内の順序を維持したまま移動する。そして、qをpmaxで置き換える。そしてさらに、CPU割当てモジュール516は、以下の処理を行う。pmaxの子ノードを切り離す一度子ノードがいない状態になる。Umaxの要素のうち、空でない各集合Uiに対し、新しいSノードをpmaxの子ノードとして作成する。各Uiに含まれるすべてのノードの下位の葉ノードを、順序関係を維持したまま対応するSノードの子ノードとする。このステップ1712の処理が終わると、処理はステップ1704に戻る。そして、Tが空集合でないなら、ステップ1706に進み、Tが空集合であると判断されると、処理は終了する。この処理の結果、UmaxU1...Unの各々にSPTが与えられる。この処理が終わると、出力となるSPTは、以下のような構造となる。根ノードがSノード根ノードの子ノードは葉ノードすなわちオリジナルのDAG上のノードまたはPノード当該Pノードの子ノードの数はプロセッサ数n以下当該Pノードの子ノードはすべてSノードで、葉ノードのみをその子ノードに持つSPT上に存在するすべてのPノードの子ノードの数はプロセッサ数以下であるため、各子ノード以下の葉ノード元のDAG上のノードをどのようにプロセッサに配分するかを示した構造になっている。根ノードの子ノードのうち、連続する非xノードである葉ノード、および各Pノードが一つのコード化の単位となる。こうして、図6のステップ612では、UmaxU1...Unの各々にSPTがコードに展開されて、実行可能ファイルにコンパイルされ、ステップ614で個別のプロセッサまたはコアに割り当てられて実行される。この際、U1...Unのうちの、コード化対象外コードを含む要素は、実行可能ファイルにコンパイルにされず、MATLABSimulinkのインタープリターにより実行されることになる。以上説明した実施例において、タスクグラフをSPTに変換する前に、コード化対象外コードをマージするように、タスクグラフを変形するようにしたが、これは望ましい処理ではあるが必須ではなく、タスクグラフを変形する処理を省略しても、コンパイル結果の実行速度向上の効果は得られることを理解されたい。以上、この発明を特定の実施例に基づき説明してきたが、この発明は、この特定の実施例に限定されず、当業者が自明に思いつく様々な変形、置換などの構成、技法適用可能であることを理解されたい。例えば、特定のプロセッサのアーキテクチャ、オペレーティングシステムなどに限定されない。また、上記実施例は、MATLABSimulinkを例にとって説明したが、これに限らず、任意のモデリングツールに適用可能であることを、この技術分野の当業者なら理解するであろう。