(57)【要約】単一のプロセッサのための一連のオリジナル命令（２０）が、実行のために異なるタイプの複数のプロセッサ（１２、１６）にわたって配分される実施命令に変換される。一連のオリジナル命令（２０）は、プロセッサのそれぞれ（１２、１６）に割り当てられる連続するセクション（２２ａ〜ｃ、２４ａ、ｂ）に分割される。オペランド転送命令がセクション（２２ａ〜ｃ、２４ａ、ｂ）に付加され、セクション（２２ａ〜ｃ、２４ａ、ｂ）間のデータ依存性をサポートする。割り当ては、オリジナル命令が実施されるときオペランド転送のためのコストを含みオリジナル命令の実行コスト要素の集積を最小にするように一連のオリジナル命令で連続するセクション（２２ａ〜ｃ、２４ａ、ｂ）間の境界の位置を選択することを含む。境界の位置は、異なる境界の位置の中で、探索から決定されることが望ましい。
2006520034.tif 000002
【特許請求の範囲】
【請求項１】
単一のプロセッサのための一連のオリジナル命令からの命令を生成して、複数のプロセッサにわたって配分される前記オリジナル命令を実施するための方法であって、少なくとも２つの前記プロセッサが、それぞれのオリジナル命令を実行するための実行コスト要素に依存するオリジナル命令において異なり、前記命令が、
前記一連のオリジナル命令を、前記プロセッサのそれぞれに割り当てられる連続するセクションに分割し、
前記プロセッサの前記少なくとも２つに割り当てられる前記セクションからのオリジナル命令を、前記シリーズからの前記命令を実施するこれらプロセッサのための実施命令に変換し、
オペランド転送命令を前記セクションに付加して前記セクション間のデータ依存性をサポートし、
前記オリジナル命令が実施されるとき前記オペランド転送命令のためのコストを含み、前記オリジナル命令の実施コスト要素の集積を実質的に最小にするように、前記割り当てが、前記一連のオリジナル命令で、代替境界位置のなかからの連続するセクション間で境界位置を選択することを含む、
オリジナル命令を実施するための方法。
【請求項２】
前記選択において、特定のプロセッサのための前記それぞれのオリジナル命令のために使用される前記実行コスト要素が、前記特定のプロセッサで前記オリジナル命令を実施するのに使用される実施命令を実行するために必要な持続時間と共に増加する、請求項１に記載の方法。
【請求項３】
前記選択において、特定のプロセッサのための前記それぞれのオリジナル命令のために使用される前記実行コスト要素が、前記特定のプロセッサで前記オリジナル命令を実施するために必要な実施命令を実行するために特定のプロセッサによって消費されるエネルギと共に増加する、請求項１に記載の方法。
【請求項４】
前記境界位置の前記選定が、連続するグループでその各々の少なくとも１つのオリジナル命令を通してステップを実施し、前記代替のプロセッサのために前記グループを実施するためのオペランド転送命令のコストを含め集積コスト要素を評価し、比較する探索を含む請求項１に記載の方法。
【請求項５】
前記グループが、一連のオリジナル命令内のオリジナル命令のベーシック・ブロックである請求項４に記載の方法。
【請求項６】
前記オリジナル命令がＪＡＶＡバイト・コードである請求項１に記載の方法。
【請求項７】
前記実施命令を前記プロセッサで実行することを含む請求項１に記載の方法。
【請求項８】
前記複数のプロセッサのうちの第１のプロセッサが、実施命令ごとに複数のオリジナル命令を実施する能力があるＶＬＩＷプロセッサであり、より多くのオリジナル命令が同じ実施命令に組み合わされるにつれて、前記複数のプロセッサのうちの前記第１のプロセッサ上で前記オリジナル命令を実施するための前記コスト要素が減少する、前記第１のプロセッサに割り当てられたセクションからの複数のオリジナル命令をＶＬＩＷ実施命令へ組合せることを備える請求項１に記載の方法。
【請求項９】
前記複数のプロセッサのうちの第２のプロセッサが、実施命令当たり最大でオリジナル命令１つを実施する能力を有し、前記それぞれのオリジナル命令に対する実行コスト要素が、前記複数のプロセッサのうちの前記第２のプロセッサのために使用され、その実行コスト要素が、前記第１または第２のプロセッサで使用される実施命令当たりの前記複数のプロセッサのうちの前記第１のプロセッサのための実行コスト要素より少ない請求項８に記載の方法。
【請求項１０】
前記境界位置の前記選定が、
特定のオリジナル命令までのそれぞれのオリジナル命令を、前記複数のプロセッサのうちのそれぞれで実施するように割り当てる、異なる割り当てパスを累加的に構築し、
前記複数のパスの第１のパスに対する第１の集積コストと、前記複数のパスの第２のパスに対する第２の集積コストに、前記第２のパスの後に少なくとも前記第１のパスの後と同じ方式で必要なオペランドを利用可能にするためのコストを加えた値とを比較し、
前記第２の集積コストが、前記第１の集積コストより少ない時には、前記第１のパスを考慮から削除すること、
を備える請求項１に記載の方法。
【請求項１１】
第２のパスの後で、前記必要なオペランドを前記複数のプロセッサのうちの好まれる１つで使用可能にするための第１のコストと、第１のパスの後で前記複数のプロセッサのうちの好まれる１つ以外のプロセッサで使用可能であり、第２のパスの後で前記プロセッサの好まれる１つ以外のプロセッサで使用可能である前記必要なオペランドのセットを作るための第２のコストを計算することによって、前記第１のコストと前記第２のコストが比較される請求項１０に記載の方法。
【請求項１２】
コンピュータに前記請求項の何れか１つの方法を行わせる命令をもつコンピュータ・プログラム製品。
【請求項１３】
前記請求項の何れか１つの方法を実行するためにプログラムされたコンピュータ。
【請求項１４】
データ処理装置であって、
単一のプロセッサのための一連のオリジナル命令のための入力部と、
複数のプロセッサであって、少なくともそのうちの２つのプロセッサが、それぞれのオリジナル命令を実施するためのオリジナル命令に依存する実行コスト要素の点で異なる複数のプロセッサと、
前記複数のプロセッサにわたって配布された前記オリジナル命令を実施するために命令を生成する変換ユニットであって、前記変換ユニットが、
前記一連のオリジナル命令を、前記複数のプロセッサのそれぞれに割り当てられる連続したセクションに分割し、
前記少なくとも２つのプロセッサに割り当てられた前記セクションからの前記オリジナル命令を、前記一連のオリジナル命令からの前記命令を実施するこれらのプロセッサのための実施命令に変換し、
オペランド転送命令を前記セクションに付加して、前記セクション間のデータ依存性をサポートするようにアレンジされており、
前記オリジナル命令が実施されるとき前記オペランド転送命令のためのコストを含み、その実施コスト要素の集積を実質的に最小にするように前記割り当てが、前記一連のオリジナル命令で、複数の代替境界位置の間からの前記複数のセクションのうちの連続するものの間で境界位置を選択することを含むデータ処理装置。
【請求項１５】
前記変換装置が、前記オリジナル命令を実施するために前記命令を生成するようにプログラムされた前記複数のプロセッサのうちの１つである請求項１４に記載のデータ処理装置。
【請求項１６】
前記境界位置の前記選定が、連続するグループでその各々の少なくとも１つのオリジナル命令を通してステップを実施し、前記代替のプロセッサのために前記グループを実施するためのオペランド転送命令のコストを含め集積コスト要素を評価し、比較する探索を含む請求項１４に記載のデータ処理装置。
【発明の詳細な説明】
【背景技術】
【０００１】
コンピュータ・プログラムは、通常一連の機械語命令をもつファイルの形態で配布されている。例えばＪＡＶＡプログラムは一連のバイト・コードとして配布されている。従来（仮想的な）機械語命令は、命令を「理解する」単一のプロセッサによって連続して実行されたが、１つのプロセッサのためのプログラムの機械語命令を目的プロセッサのために変換（翻訳）し、目的プロセッサで変換した命令を実行することも知られている。例えばＪＡＶＡバイト・コード・プログラムは、一プロセッサが直接実行するためのネイティブ命令に変換されることもある。変換を伴わない場合では、プロセッサはＪＡＶＡバイト・コード・プログラムを実行するためにインタープリタプログラムを走らせなければならないであろう。ＪＡＶＡホット・スポットは、ＪＡＶＡプログラムのセクションを選択的にネイティブ命令に変換するための技術である。ＪＡＶＡホット・スポットは、プログラムの異なる部分が解釈される頻度を検知し、最も頻繁に実行される部分を後々の直接実行のためにネイティブ命令に変換する。したがって、ＪＡＶＡプログラムを実行するプロセッサは、最も頻繁に実行されるプログラムの部分を直接実行でき、実行頻度の小さい命令は、解釈プログラムを実行することによって間接的に実行される。
【０００２】
他の展開では、異なるプロセッサを含む、非均一な処理システムを提供することが知られてきたが、それは命令を実行するための、命令に依存する別のコストを招いている。例えば米国特許第４，６３８，４２７号が、高位（ｍａｊｏｒ）および低位（ｍｉｎｏｒ）プロセッサの使用を教示している。タスク・プログラムには、高位プロセッサのための命令が供給される。低位プロセッサは、タスク・プログラムからの命令を実行する能力を有し、その場合その命令のいくつかあるいは全部がエミュレーションを必要とする。米国特許第４，６３８，４２７号が、下位プログラムでタスク・プログラムを実行するときに必要となる追加命令の数で表されたタスク・プログラムのための親和性値（ａｆｆｉｎｉｔｙ  ｖａｌｕｅ）を計算することを教示している。タスクの親和性値は、タスクを上位プロセッサで走らせるか下位プロセッサで走らせるか選択するために使用される。ＰＣＴ特許出願ＷＯ９８／１９２３８もヘテロジニアスな処理システムを開示している。このシステムでは、異なるプロセッサは、一般的には異なる命令セットを有する。プログラムの様々なスレッドは、異なるプロセッサのためにコンパイルされ、それによってスレッドは、プロセッサのそれぞれによって実行される。
【０００３】
これら刊行物はどれも、（仮想）機械語命令のプログラムをヘテロジニアスなプロセッサによるネイティブ実行（ｎａｔｉｖｅ  ｅｘｅｃｕｔｉｏｎ）のための命令に変換する可能性については議論していない。しかし、ＪＡＶＡは，一般的に複数スレッドをサポートしている。あるいは、異なるプロセッサへのタスクの割り当てを選択するための親和性値を使用して、異なるスレッド（タスク）のための命令を異なるプロセッサのためのネイティブ命令に変換できることも考えられる。これでもヘテロジニアスなプロセッサ・システムの最適な使用ではない。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
単一のプロセッサのためのプログラムからの一連の命令を、複数のヘテロジニアスなプロセッサを含むシステムにおいて、効率的な実行のための実行命令に変換する方法を提供することがとりわけ本発明の目的である。
【課題を解決するための手段】
【０００５】
本発明による方法は、請求項１に述べられている。プログラムのそれぞれのセクションが、それぞれのプロセッサのための命令に変換され、セクション間の転送の位置は、異なるプロセッサにわたって配布された命令を実行する集積コストの最小化に依存して選択される。
【０００６】
その方法は、例えばＪＡＶＡバイト・コードのプログラムに適用される。したがって、任意のコンピュータで実行することができるプログラムを、互いに異なる複数のプロセッサをもつ特定のコンピュータで最適に走るように適用される。
【０００７】
集積コストを最小化する境界位置の組み合わせの選択は、コスト要因が一旦定義されれば、どのような形であれ行うことができる。第１の実施形態では、特定のプロセッサでオリジナル命令を実行するのに必要な命令を実施する回数と共に増加する実行コスト要因を使用する。したがって、オリジナル命令を実施するために必要な命令実行回数を最小にするようにセクション間の境界が決められる。第２の実施形態では、特定のプロセッサで消費されるエネルギの量と共に増加する実行コスト要因を使用する。したがって、実施命令を実行するために必要な電力消費量を最小にするようにセクション間の境界が決められる。
【０００８】
異なるプロセッサで実施されるセクション間の境界の位置は、探索において、複数のプロセッサの１つの代替プロセッサのために命令グループを実施するためのオペランド転送命令のコストを含む集積コスト要因を評価し比較して決定することが好ましい。探索は、異なる境界をもつ代替パスを累加的に構築することによって、かつ劣等パス（ｉｎｆｅｒｉｏｒ  ｐａｔｈ）が、劣等パスをさらにいくら累加的に延長してもよりよいパスに向上することができないことが明らかになったときには、劣等パスを削除することにより、行われることが好ましい。一実施形態では、オリジナル命令は、ベーシック・ブロックごとに割り当てられる（オリジナル命令内の一分岐目標から次の分岐目標へ）。実際的なプログラムでは、これが、境界の最適性に深刻な影響を及ぼすことなしに探索を簡素化することが分かっている。したがって、プログラム構成を使用して、オリジナル命令を異なるプロセッサで実施するためのもっとも費用効率がよい方式を選択する。
【０００９】
一実施形態では、プロセッサの内の１つはＶＬＩＷ（非常に長い命令語）プロセッサであり、命令実施ごとに複数のオリジナル命令を実施する能力がある。この場合、オリジナル命令を単一のＶＬＩＷ命令に組み合わせることによりコストを削減できる。
【００１０】
これらおよびこの他の有利な態様を以下の図を使用してより詳細に説明する。
【発明を実施するための最良の形態】
【００１１】
インターネットからＪＡＶＡプログラムを受け取り、ＪＡＶＡプログラムからのバイト・コードをネイティブ命令に変換し、それによって変換したプログラムの実行が２つの異なるプロセッサで交互に進行するシステムに関して本発明を説明する。しかし、本発明はＪＡＶＡプログラムに限定されるものではないことを理解されたい。例えば、本発明はＸ８６命令のプログラムにも同様に適応できる。同じように、２つより大きな数のプロセッサも使用できる。
【００１２】
図１は、ヘテロジニアスな処理システムの一例を示している。システムは、命令メモリ１１、１４、第１のプロセッサ１２、第２のプロセッサ１６、データ・メモリ１８およびバス１９を含む。物事をはっきりとさせるために、出力が命令メモリ１１、１４に接続された別の命令変換ユニット１０が示されているが、実際にはプロセッサ１２、１６のうちの１つが変換ユニットとして働くこともあり、命令メモリがバス１９に接続されること、命令メモリ１１、１４が、両方のプロセッサ１２、１６のためのデータ・メモリ１８の一部、または結合されたメモリの一部のこともあることを理解されたい。命令メモリ１１、１４はプロセッサ１２、１６に接続されている。プロセッサ１２、１６およびメモリ１８は、バス１９を介して接続されている。
【００１３】
第１のプロセッサ１２は、処理ユニット１２０およびレジスタ・ファイル１２２を含むように示されている。同様に第２のプロセッサ１６は処理ユニット１６０およびレジスタ・ファイル１６２を含む。一例として、第２のプロセッサは、ＶＬＩＷプロセッサであり、レジスタ・ファイル１６２が複数ポートを有し複数のオペランドを供給し、処理ユニット１６０内の複数の機能ユニット（別途には示されていない）から同時に複数の結果を受け取り、第２のプロセッサ１６の命令メモリが異なる機能ユニットに同時に命令を出力する。対照的に、第１のプロセッサ１２は、単一のコマンドを１つずつ処理するための回路を含むように示されている。
【００１４】
作動中、命令変換ユニット１０は、外部接続からプログラムを受け取る（例えばインターネットを介して）。プログラムは、単一のプロセッサのための一連の命令、例えば全てＪＡＶＡ（仮想）マシンで実行するための一連のバイト・コードを含む。命令変換ユニット１０は、一連の命令を第１および第２のプロセッサ１１，１６のために変換する。第１または第２のプロセッサ１２、１６のためにバイト・コードの単一の命令への変換が可能であることが頻繁であり、又プロセッサの１つがＶＬＩＷプロセッサのときには、プロセッサ１２、１６の１つのために複数のバイト・コードを単一の命令に変換することさえできる。しかし、ある場合には、一連の複数命令をバイト・コードの変形として使用することが必要である。
【００１５】
図２は、オリジナル・プログラムからの一連のオリジナル命令２０と、第１のプロセッサ１２のための命令ブロック２３ａ〜ｃに変換されるセクション２２ａ〜ｃと、第２のプロセッサ１６のために変換される命令の命令ブロック２５ａ、ｂに変換されるセクション２４ａ、ｂとを象徴的に表している。一連のオリジナル命令２０は、最上部から最下部に進行する。シリーズ２０の最初のセクションは、第１のプロセッサ１２のための命令の第１のセクション２２ａに変換される。シリーズ２０の第２のセクションは、第２のプロセッサ１６のための命令の第２のセクション２４ａに変換される。シリーズ２０の第３のセクションは、第１のプロセッサ１２のための命令の第３のセクション２２ｂに変換される、等々である。
【００１６】
プロセッサ１２か１６のための命令が生成されるブロック２３ａ〜ｃ、２５ａ、ｂの外にある斜線セクションでは「その他の」プロセッサ１２、１６は、関連する命令を実行しない。関連するプロセッサ１２、１６のための命令メモリ１１、１４が、ＮＯＰ（無演算命令（Ｎｏ  Ｏｐｅｒａｔｉｏｎ命令）を含むこともある。これらのセクションでは、関連するプロセッサを低電力消費モードに切り替えるためのいくつかの命令を使用することもある。
【００１７】
変換後、プログラムは、２つのプロセッサ１２、１６の組み合わせで実行され、２２ａ〜ｃ、２４ａ、ｂの間の境界では第２のプロセッサ１６が第１のプロセッサ１２に取って代わるまたはその逆が起こる。プロセッサ１２、１６は、命令メモリ１１、１４から変換された命令を読み出し、変換された命令を実行するが、それはレジスタ・ファイル１２２、１６２からオペランドを読み出すこと、結果をレジスタ・ファイル１２２および１６２へ書き込むこと、ならびにある命令のためにメモリ１８内のデータを読み出し、書き込むことを含む。
【００１８】
オリジナル・シリーズ２０からの命令の変換とは別に、セクション２２ａ〜ｃ、２４ａ、ｂを実施するブロックは、プロセッサ１２、１６のレジスタ・ファイル間でオペランド・データを転送する追加転送命令を含むこともある。セクション間でデータに依存性がある場合、必要に応じて命令変換ユニット１０が、このような追加の転送命令を生成する。つまり、プロセッサ１２、１６のうちの第１のプロセッサによって実行される、セクション２２ａ〜ｃ、２４ａ、ｂの一セクションからの命令が、プロセッサ１２、１８のうちの異なる第２のプロセッサによって実行される、他のセクションからの命令の結果であるオペランドを使用する場合、命令変換ユニット１０は、１つまたは複数の転送命令を加えてその結果をプロセッサの２番目のものからプロセッサの第１のものに転送する。プロセッサ１２、１６のうちの１つまたは複数がパイプライン処理されるときには、セクションを実施するブロックの間にＮＯＰを挿入して、次のセクションで必要とするデータが利用可能になるまでプロセッサはどのような命令も実行しないようにすることがさらに必要になるかもしれない。
【００１９】
命令変換ユニット１０は、異なるプロセッサのためにセクション２２ａ〜ｃ、２４ａ、ｂの間で移転の位置を選択しなくてはならない。つまり、全て単一のプロセッサのための命令である一連のオリジナル命令を、異なるプロセッサ１２、１６で命令を実行するために、どこで細分（ｓｕｂｄｉｖｉｄｅ）するか選択しなくてはならない。命令変換ユニット１０は、コスト関数を最小にするようにこれらの位置の選択を実行しなくてはならない。いくつかの代替実施形態は、このコスト関数のために存在する。
【００２０】
第１の実施形態では、一連の命令を実施するために必要な命令サイクルの合計数を表す命令サイクル・カウント、つまり変換された命令に追加の転送命令を加えた命令のために必要なサイクルの数が使用される。（サイクル当たり１つの命令を実行するプロセッサでは、この数は命令の数に等しい）。転送命令をカウントしない場合、もちろん、最小数のサイクルで実施されるプロセッサ１２、１６が各命令のために使用される結果になるはずであるが、転送命令が必要であるために切り替えに対してある閾値が存在する。第１の実施形態では、プロセッサ１２、１６の命令サイクルは同じ長さを有するものと仮定している。より一般的には、一連の命令を実行するために必要な持続時間が使用されている。
【００２１】
第２の実施形態では、異なるプロセッサで実行されるサイクルは、コスト関数で別々に重み付けされ、例えば、ＶＬＩＷプロセッサで実行される命令にはより重い重み付けがなされ機会コストに対応する。したがって、最も軽く重み付けされた、プロセッサのうちの１つが、実施のための「好まれる」プロセッサである。より重く重み付けされた、プロセッサのうちの１つが選ばれるのは、通常、処理速度を十分に早くして、より重い重みづけおよび追加が必要な転送命令に対抗することができるプロセッサだけである。これは、例えば、より軽く重み付けされたプロセッサで複数の命令によってのみ実施することができる命令に対して起こることがある。
【００２２】
他の実施形態では、電力消費がコスト関数で重み付けされる。プロセッサ１２、１６の１つ（例えばＶＬＩＷプロセッサ）が、命令の実行当たり他方のプロセッサに比べより多くの電力を消費する場合には、対応して、そのプロセッサによって実行される命令にコスト関数でより重い重みを割り当てる。この重みは、ＮＯＰ（無演算）命令を実行するのに必要な電力と、他の命令を実行するのに必要な電力との間の違い、あるいは命令を実行しないときにはプロセッサを低電力モードに切り替えることができる場合には、命令実行中に消費する電力と低電力モードでの消費電力との違いを表すこともある。したがって、より重く重み付けされた、プロセッサのうちの１つが選択されるのは処理スピードを十分に上げてより大きな電力消費に対抗できるときだけである。
【００２３】
セクション間の境界位置を選択するために様々なテクニックを使用できる。第１の実施形態では、ある探索技術が使用され、一連のオリジナル命令２０をセクション２２ａ〜ｃ、２４ａ、ｂに細分化した複数の異なるものを検討し、その複数の細分（ｓｕｂｄｉｖｉｓｉｏｎ）の各々に対する集積コストを評価して最も低いコストをもつ細分を選択する。このような探索を実施する多くの方式が存在する。
【００２４】
実施形態の１タイプについてより詳細に説明する。この実施形態は「パス」を考慮する。パスＰは、プロセッサ１２、１６のうちのどちらで命令が実施されるのかを一連のオリジナル命令２０からの各命令に対して説明する。パスの一表現例は、
Ｐ＝（１、１、２、２、１、１）
である。
【００２５】
この意味するところは、シリーズ２０からの第１、２、５および６番目のオリジナル命令が順番に第１のプロセッサ１２で実施され、第３および第４の命令が第２のプロセッサ１６で実施されることである。
【００２６】
パスＰは、累積的に構築され、先ず部分パスＰ（ｉ）が、シリーズ２０からの命令で、シリーズ２０のｉｔｈ番目を含む命令までのものに対して構築される（パスは、その命令を含む命令までのものが実施されるプロセッサを記述する）。セクションパスＰ（ｉ）から、各々にプロセッサ１２，１６の異なる一つの「ｘ」を割り当てることにより、命令を実施するための延長パスＰ（ｉ＋ｌ）＝（Ｐ（ｉ）｜ｘ）を構築できる（シンボル「｜」は、先行のパスの終端にｘを添付することを意味する）。
【００２７】
その命令を含み、その命令までのものを選択されたプロセッサで実施するためのコストにオペランドのための転送命令を加えた合計である集積コストＡ（Ｐ（ｉ））を各パスＰ（ｉ）に対して計算できる。パスＰ（ｉ＋ｌ）の集積コストＡは、このパスがそれから構築されたパスＰ（ｉ）のコストに関して再起的に表現される。
【００２８】
Ａ（（Ｐ（ｉ）｜ｘ））＝Ａ（Ｐ（ｉ））＋Ｃ（ｉ＋ｌ、ｘ）＋Ｔ
ここで、Ｃ（ｉ＋ｌ、ｘ）は、プロセッサ「ｘ」でシリーズ２０からの命令（ｉ＋１）を実施するためのコスト、「Ｔ」は、シリーズの命令（ｉ＋１）にとって必要である限りオペランドをプロセッサｘに転送するための転送命令のコストである。
【００２９】
原則として、考慮する必要のある異なるパスの数は、シリーズ２０内の命令の数に従って指数的に増加し、選択するプロセッサがＮ個（図１の実施形態では、Ｎ＝２である）あるときには、パスＰ（ｉ）がＮｉ個存在する。しかし、これら多くのパスは、下記を考慮することによって発見的（ｈｅｕｒｉｓｔｉｃａｌｌｙ）に削減できる。第１のパスＰ（ｉ）と第２のパスＰ’（ｉ）を比較するとき、パスの集積コスト同士間の差が、第１のパスの後でｉｔｈ番目の命令以後依然として必要となる全てのオペランドが同じプロセッサで少なくとも利用可能であることを保証するために命令を転送するための転送コストＴａｌｌより大きい場合、第２のパスの後では、Ａ（Ｐ（ｉ））−Ａ（Ｐ’（ｉ））＜Ｔａｌｌゆえに、常に第１のパスの方が良いことに気づくであろう。
【００３０】
この場合、第２のパスＰ’（ｉ）から派生するいかなるパスも第１のパスＡ（Ｐ（ｉ））から派生する最良のパスよりコストが低いことは有り得ないのでそれを考慮する必要はない。したがって、考慮しなくてはならないパスの数は相当に削減することができる。
【００３１】
例えば、第１のパスＰ＝（１、１、２、２、２、２）は、Ａ＝５のコスト（１で示され第１のプロセッサ１２で実行される各命令に対して１、２で示され第２のプロセッサ１６で実行される各命令に対して０．５、さらに第１のプロセッサ１２から第２のプロセッサ１６にオペランドを転送するために１）を有することもある。第２のパスＰ’＝（１、１、１、１、１、１）は、コストＡ＝６（各命令につき１）を有することもある。ここで、第２のプロセッサ１６にパスＰの後にだけ置かれた１つの結果のみが、後のオペランドとして必要で、かつこのオペランドを転送するコストが１かそれより小さい場合には、第２のパスＰ’が、第１のパスＰより低コストになることは決してない。したがって、第２のパスＰ’は考慮から除外できる。
【００３２】
原則として、この形の削減では検討中のパスの各対の比較を必要とする。しかし、各パスに対して上限Ｕ（Ｐ（ｉ））を計算し、プロセッサ１２、１６の任意の組み合わせを使用してパスＰ（ｉ）から先に進むために必要な転送コストを出すことによって、もっと少ない仕事量で厳格ではないが削減を行うことができる。検討中の全てのパスＰ（ｉ）の上限から、合計値Ａ（Ｐ（ｉ））＋Ｕ（Ｐ（ｉ））から最小和ＭＩＮが決定される。Ａ（Ｐ（ｉ））＞ＭＩＮ
である場合には、パスＰ（ｉ）は拒否されることもある。
【００３３】
上限の決定には、ｉｔｈの命令までに生成され、この命令以降も必要となる「生きている」オペランドの数を決定することを伴う。効率に程度の差はあるが、コスト関数の本質に依存して様々な代替実施が可能である。コスト関数が、ほとんどのタイプの命令に対して概して特定の一プロセッサを好むのであれば、好まれるプロセッサで未だに利用可能でない全ての生きているオペランドをそのプロセッサに転送するコストを集計することによって上限Ｕ’を計算できる。前の様に、Ａ＋Ｕ’の最低値ＭＩＮを全てのパスの間で決められる。次いで、好みのプロセッサよりも他のプロセッサでどの生きているオペランドが使用可能であるか決定し、好みのプロセッサから他のプロセッサにこれら生きているオペランドを転送するのに必要な命令を転送するためのコストを集計することにより、各パスに対するヘッドスタート・コスト（ｈｅａｄ  ｓｔａｒｔ  ｃｏｓｔ）Ｈ（Ｐ（ｉ））を計算できる。ここで、Ａ（Ｐ（ｉ））−Ｈ（Ｐ（ｉ））＞ＭＩＮ’であれば、パスは拒否されることもある。
【００３４】
パスの数を削減するための条件が同一であれば、パスは拒否されることもある。
【００３５】
図３は、セクション間の境界を選択するためのフロー・チャートを示している。フロー・チャートは初期ステップ３０で始まり、一連のオリジナル命令２０内の変換されなければならないあらゆる命令に対して繰り返される一連のステップがこれに続く。初期ステップ３０では、空のパスを１つ含むパスの初期セットが生成され、生きているオペランドのセットが空のセットに初期化される。命令カウントがゼロにセットされる。初期ステップの後、第１のステップ３１が実行される。
【００３６】
第１のステップ３１では、命令カウントｉが増分され、全ての可能なプロセッサ「ｘ」を前のパス｛Ｐ（ｉ−ｌ）｝からの全ての先行パスに付加することにより新しいパス｛Ｐ（ｉ）｝のセットが生成され、命令カウントｉで指示された命令が実行される。第２のステップ３２では、関連するパスに対するプロセッサｘで命令ｉを実施するためのコストと、その命令のオペランドで先行するパスの後でそのプロセッサで利用可能でないものを転送するためのコストとを加算することによって、各パスＰ（ｉ）に対する集積コストＡを決定する。第３のステップ３３では、命令ｉによって生成された、後の命令が使用する結果を加え、命令ｉの後の命令が使用しないオペランドを除去することにより、生きているオペランドのセットをアップデートする。第４のステップ３４では、生きているオペランドに対する転送コストの上限Ｕが各パスについて決められる（例えば、好まれるプロセッサ１２への転送コスト）。５番目のステップでは、パスの中でＡ＋Ｕの最小値が決められる。第６のステップ３６では、最小値ＭＩＮより高いコストを有する（例えば、パスＡの集積コストからヘッドスタート・コストを差し引いた値が最低値ＭＩＮより高い）パスが、パスのセットから除去される。第７のステップ３７では、一連のオリジナル命令２０からのいずれかの命令が実施されるように残されているかどうかがテストされる。もしそうであれば、ステップ３１から処理が繰り返される。そうでなければ、第８のステップ３８が実行され、その中で最低の集積コストをもつパスが選択され、セクション２２ａ〜ｃ、２４ａ、ｂ内の細分を制御するために使用される。
【００３７】
続いて、選択されたパスで選択されたそれぞれのプロセッサで実施される、シリーズ２０からの命令を実施する命令が生成される。さらに必要な転送命令が生成され、例えばプロセッサ１２または１６内にあるレジスタ・ファイル１２２または１６２内の一レジスタからのデータがデータ・メモリ１８に、データ・メモリ１８からのデータが他のプロセッサ１２または１６内のレジスタ・ファイル１２２、１６２に転送される。原則として転送命令は、関連するオペランドを生成する命令と、そのオペランドを使用する命令の間のどこに存在してもよい。
【００３８】
図３のフロー・チャートは、有利な実施形態を提供しているが、セクション内の細分を選択するためのプロセスの一例であることを理解されたい。セクション間の境界の探索を異なる方式で実施するがそれでもセクション中で最も低いコストの細分をもたらすか、あるいは細分探索のためのより少ない仕事量で最適に近い細分をもたらすことができる近似法を使用する多くの代替策が可能である。
【００３９】
例えば、同じ先行パスから生成された異なるパスを比較することにより、新しく生成されたいくつかのパスを直ちに排除することが可能なこともある。すなわち、同じプロセッサを使用する、部分パスＰ（ｉ）の最後の命令ｉを除く全ての命令に対する異なるいくつかの実施をそれら同士の間で限定比較してもよい。このケースでは命令ｉを、そのオペランドが利用可能でないプロセッサで実施することを考慮する必要はないが、それは命令ｉをそのプロセッサで実施するコストが他のプロセッサでのものより大きくなく、実施した命令の結果を転送するコストがそのオペランドを他のプロセッサに転送するコストより大きくない場合である。この限定比較を使用して考慮が必要なパスの数を削減してもよい。
【００４０】
他の例として、多くのオペランドは、それらが生成された後では少数の命令の内部で使用されるか、プログラムを通して使用されるという事実を利用してもよい。この結果、集積コストＡの「記憶」は、比較的短い：命令ｉまでの最後のいくつかの命令のためのプロセッサの選択で同じであるパスの集積コストは、一般的に同じ量で増加する（つまり、前の命令に対する差異に無関係）。これを使用して、命令ｉまでの所定の数の命令に対して同じであるパスのサブセットを比較し、最も低い集積コストを有するサブセットの一つを保持するのに使用することができる。
【００４１】
好まれるプロセッサ１２が、命令実施に対して平均してより低いコストを有するとき、シリーズ２０のセクションへの最適細分は、ほとんどの命令を好まれるプロセッサに割り当てがちであるが、より低いコストで他のプロセッサ１６で実施することができる命令の周りに別途割り当てられた命令の小さな島を伴う。
【００４２】
図４がこれを利用する処理のフロー・チャートを示している。第１のステップ４１で、シリーズ２０、１２からの命令ｉが、より低いコストで好まれていないプロセッサ１６で実施することができる命令であるかどうか決められる。そうでなければ、第２のステップ４２が実行され、命令カウントを増し、命令ｉを実行した結果がおよび／または転送されたオペランドが、どこで利用可能であるか記録する。第２のステップ４２に続くのは全ての命令が処理されたかどうかテストするための第３のステップ４３である。そうでなければ、処理は、第１のステップ４１から繰り返される。
【００４３】
第１のステップ４１が、シリーズ２０  １２からの命令ｉが、より低いコストで好まれないプロセッサ１６で実施することができる命令であることを決定すると、第４のステップ４４が実行される。第４のステップ４４が、好まれないプロセッサによる命令の実施コストにオペランドを転送するための転送命令のコストと好まれるプロセッサ１２からのおよびそのプロセッサへの結果を加えたものが、好まれるプロセッサ１２による実施コストより少ないと決定した場合には第５のステップ４５が実行され、命令ｉが好まれないプロセッサ１６に割り当てられ、第２のステップ４２がこれに続く。それ以外は、第６のステップ４６が実行され、最初命令ｉと、ｉに初期化される補助命令ポインタｊを含む命令のリストを設定する。
【００４４】
第７のステップ４７では、命令ｊから所定の距離（例えば次の命令ｊ＋ｉにすぎない、または２命令ｊ＋１、ｊ＋２の範囲内）内にある命令で、命令ｉと同じ好まれないプロセッサ１６でより少ないコストで実施することができる命令が、次の命令のために探索される。何も探せない場合には次のステップ４２が実行される。このような命令が見つかった場合には、第８のステップ４８が実行され、その中で、見つかった命令がリストに加えられ、ｊは、見つかった命令のカウントにセットされる。命令リスト内の命令を合わせて実施するコストにオペランドを転送するのに必要な転送命令のコストと、好まれるプロセッサ１２からのおよびそのプロセッサへの結果を加えたものが好まれるプロセッサ１２での実施コストより少ないかテストする。そうである場合には、ステップ４５を実施して命令カウントを適切に増加する。そうでない場合には、第７のステップ４７から処理を繰り返す。
【００４５】
図３および４のフロー・チャートは、有利な実施形態を提供しているが、セクション２２ａ〜ｃ、２４ａ、ｂ内で細分を選択するための処理の一例にすぎないことを理解されたい。多くの代替実施形態が可能であり、例えば、代替処理は、適切に変形した転送コスト計算方法で、シリーズ２０の命令を全て逆に探索するか、あるいは命令のための処理命令の全部を実行する代わりに、全ての命令に対して１つまたは複数のステップが先ず実行されることもある。
【００４６】
以上、一連の入力オリジナル命令２０からの各命令は、１つまたは複数の命令としてプロセッサ１２か１６で実施されるという想定のもとで本発明を説明してきたが、ある状況の下ではシリーズ２０からの複数の命令は、１つのプロセッサ、例えばＶＬＩＷプロセッサ１６で単体の命令として実施されることもあることを理解されたい。このような実施が、実行時間でコストを評価するときコストを著しく削減することは明白である。
【００４７】
この場合、セクション２２ａ〜ｃ、２４ａ、ｂを選択するための処理を少し変形しなくてはならない。シリーズ２０内の関連する複数の命令が、例えばそのシリーズ２０内で、この複数の命令で構成されている仮想ＶＬＩＷ命令に取って代わられ、したがって非ＶＬＩＷプロセッサによる命令の実施は、この仮想ＶＬＩＷ命令をいくつかの連続する命令によって行う実施、つまりシリーズからのオリジナル命令の実施として取り扱われることもある。もちろん、このような仮想ＶＬＩＷ命令に合体できる、異なる命令の組み合わせを探ることも可能である。
【００４８】
仮想的ＶＬＩＷ命令への組み合わせのためのシリーズ２０からの命令の選択は、セクション２２ａ〜ｃ、２４ａ、ｂ間の境界の探索と組み合わせてもよいことはもちろんである。シリーズ２０からの選択されたグループの命令がＶＬＩＷに組み合わされるところで例えば異なるパスＰ（ｉ）を生成することによってこれを行うことができる。この場合、集積コストの計算には、一般的にＶＬＩＷ命令内の第１の命令に加えられるこれら命令に対する追加コストを含まない（あるいは、ＶＬＩＷ命令内の追加命令を実行するコストを表す適切に変形されたコスト計算を含む）。
【００４９】
以上、シリーズ２０からの命令は、プロセッサ１２、１６で順番に実行される、つまり連続する命令は、それらが異なるプロセッサで実行されるとしても連続して実施されるものと仮定してきた。もちろん、データの依存性が並行実行を可能にすればこれは必要ではない。これは、探索中にも当てはまり、例えば命令を、パスＰ（ｉ）内の、異なるプロセッサで走る先行命令と並行して実行できれば、パス内の命令に対して実行時間コストを加算しない。
【００５０】
同様に、データの依存性がそれを可能にすればシリーズ１２内の命令が再配置されることもある。例えば好まれないプロセッサ１６でより少ないコストで実行することができる命令をこの方式で纏め、セクションを形成し、あるいは各々がシリーズ２０からの複数の命令を実施する１つまたは複数の連続するＶＬＩＷ命令を形成するとき、これがより低い実行コストを可能にする。最低でも、重いデータ依存性をもつ命令を纏めることは、セクション境界の探索をより効率的にする。
【００５１】
探索処理を、特定の命令ｉを使用して説明してきたが、より大きなユニットの命令を使用できることを理解されたい。例えば、命令が、ベーシック・ブロック内で異なるプロセッサに割り当てられることが好ましいことが分かっている（ベーシック・ブロックとは、シリーズ２０のサブシリーズで分岐目標から始まり、次の分岐命令の直前で終わる）。ベーシック・ブロックの命令を全体として同じプロセッサに割り当てることによって最適に近いコストを実現できることが分かっている。これを使用して、個々の命令の代わりにベーシック・ブロックに対するパスを作ることによってセクションの境界をより効率よく探索することができる。
【００５２】
以上、シリーズ２０を実施するもの以外の命令は走らせる必要はないと仮定してきた。しかし、本発明から逸脱することなく、１つまたは複数のタスクからの命令をプロセッサに予め割り当てることもできる。この割り当てが、プロセッサ１２、１６を、ある命令サイクルにおいて自由に追加命令を実行できるようにしておく場合には、プロセッサ１２か１６がなお自由であるサイクルでシリーズ２０を命令をもって実施することができる。このような実施のための探索は、例えば、プロセッサ１２か１６が既に割り当てられた命令を有しているサイクルで、プロセッサ１２か１６による命令の実行に対して法外に高いコストを割り当てることによって実施されることがある。この場合、命令を実行するのに費用効果的なプロセッサが、その命令を予定することができるとき特定のサイクルで、自由ではないことが起こることがある。その結果、命令を適切度の低いプロセッサで実施することがより費用効果的であることもある。しかし、最も費用効果の高いプロセッサが自由になるまで何もしないことがより費用効果が高いこともある。これが、その他のプロセッサに何もしないようにさせる（例えばＮＯＰ命令を実行する）。したがって、この探索で、費用効果的なプロセッサを利用できるまで待つために一連のオリジナル命令２０の実施にアイドル命令を追加挿入することがある。このような何もしないこと（ｉｄｌｅ）は、探索処理に挿入されたこのような何もしないことを伴うパスＰ（ｉ）を含むことによって対応される。
【００５３】
このように、インターネットを介して受け取られたＪＡＶＡプログラムは、利用可能なサイクルでプロセッサ１２、１６によって実行される、固定タスクを差し挟んで実行されるこれらプロセッサのネイティブ命令として実行されることがある。これは、これらＪＡＶＡプログラムを実行するための特別なプロセッサを必要としないという利点を有する。これは特に埋め込み式プロセッサをもつ装置、例えばそれによって効率よくＪＡＶＡプログラムを実行するテレビジョン・セット、移動電話、家庭用品または個人用ケア用品で特に有利である。
【図面の簡単な説明】
【００５４】
【図１】ヘテロジニアスな処理システムを示す図である。
【図２】一連の命令および変換された命令を示す図である。
【図３】プログラムを変換するためのフロー・チャートである。
【図４】プログラムを変換するためのさらなるフロー・チャートである。
【符号の説明】
【００５５】
１０  命令変換ユニット
１１、１４  命令メモリ
１２、１６  プロセッサ
１８  データ・メモリ
１９  バス
１２０  処理ユニット
１２２  レジスタ・ファイル
１６０  処理ユニット
１６２  レジスタ・ファイル
【図１】
2006520034.tif 000003
【図２】
2006520034.tif 000004
【図３】
2006520034.tif 000005
【図４】
2006520034.tif 000006
【国際調査報告】
2006520034.tif 000007
2006520034.tif 000008
2006520034.tif 000009