(57)【要約】処理は、プロセッサアレイのプロセッサに自動的に割り当てられる。また、対応する通信リソースは、プログラマーから与えられる情報を用いてコンパイル時に割り当てられる。したがって、アレイの処理タスクは、異なるプロセッサ間においてデータを通信するために必要なリソースが保証されるような方法で、割り当てられる。
2006518505.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサアレイのプロセッサにソフトウェアタスクを自動的に割り当てる方法であって、
前記プロセッサアレイは、各プロセッサと必要な他の各プロセッサとの接続を可能にする接続部を備える複数のプロセッサを備え、
複数の処理の定義を受け取り、前記処理の少なくともいくつかは、第１および第２の不特定のプロセッサにおいてそれぞれ実行される第１および第２のタスクを少なくとも含む共有処理であり、前記共有処理のそれぞれは、データが前記第１のプロセッサと前記第２のプロセッサとの間で転送される周期でさらに定義され、
自動的に静的に、前記プロセッサアレイのプロセッサに前記複数の前記処理のソフトウェアタスクを割り当て、それぞれの定義された周期で前記各共有処理において前記タスクを実行する前記プロセッサ間の接続を割り当てることを特徴とする方法。
【請求項２】
前記方法は、コンパイル時に実行されることを特徴とする請求項１記載の方法。
【請求項３】
コンピュータプログラムを用いて、前記ソフトウェアタスクの割り当てを行う前記ステップを実行することを特徴とする請求項１または２記載の方法。
【請求項４】
さらに、割り当てられた前記ソフトウェアタスクを実行するためのソフトウェアを前記各プロセッサに読み込むことを特徴とする請求項１〜３のいずれかに記載の方法。
【請求項５】
複数の処理の定義を受け取るステップを実行し、前記処理の少なくともいくつかは、第１および第２の不特定のプロセッサにおいてそれぞれ実行される第１および第２のタスクを少なくとも含む共有処理であり、前記共有処理のそれぞれは、データが前記第１のプロセッサと前記第２のプロセッサとの間で転送される周期でさらに定義され、
自動的に静的に、前記プロセッサアレイのプロセッサに前記複数の処理の前記ソフトウェアタスクを割り当て、それぞれの定義された周期で前記各共有処理において前記タスクを実行する前記プロセッサ間の接続を割り当てるステップを実行することを特徴とするプログラムプロダクト。
【請求項６】
プロセッサアレイであって、
各プロセッサと必要な他の各プロセッサとの接続を可能にする接続部を備える複数のプロセッサを備え、前記プロセッサアレイのプロセッサにソフトウェアタスクを自動的に割り当てるための関連ソフトウェアプロダクトを備え、
前記ソフトウェアプロダクトは、
複数の処理の定義を受け取るステップを実行し、前記処理の少なくともいくつかは、第１および第２の不特定のプロセッサにおいてそれぞれ実行される第１および第２のタスクを少なくとも含む共有処理であり、前記共有処理のそれぞれは、データが前記第１のプロセッサと前記第２のプロセッサとの間で転送される周期でさらに定義され、
自動的に静的に、前記プロセッサアレイのプロセッサに前記複数の処理の前記ソフトウェアタスクを割り当て、それぞれの定義された周期で前記各共有処理において前記タスクを実行する前記プロセッサ間の接続を割り当てるステップを実行することを特徴とするプロセッサアレイ。
【請求項７】
プロセッサアレイであって、
複数のプロセッサアレイを備え、
前記プロセッサは、各プロセッサと必要な他のプロセッサとの接続を可能にする複数のバスおよび複数のスイッチによって相互接続され、
前記各プロセッサは、静的に割り当てられた演算シーケンスのそれぞれを実行するようにプログラムされ、
前記シーケンスは、複数のシーケンス周期で繰り返され、
前記アレイにおいて実行される少なくともいくつかの処理は、第１のプロセッサおよび第２のプロセッサのそれぞれにおいて実行される第１および第２のソフトウェアタスクを含み、
前記処理のそれぞれに対して、前記タスクを実行する前記プロセッサ間の必要な接続は、各シーケンス周期における固定された時間に割り当てられることを特徴とするプロセッサアレイ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサネットワークに関し、特に、プロセッサにソフトウェアタスクを割り当てるプロセッサアレイに関する。他の局面では、本発明は、アレイのプロセッサにソフトウェアタスクを自動的に割り当てる方法およびソフトウェアプロダクトに関する。
【背景技術】
【０００２】
プロセッサシステムは、以下のように分類される。
【０００３】
Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ，Ｓｉｎｇｌｅ  Ｄａｔａ（ＳＩＳＤ）。これは、命令ストリームによって制御される単一プロセッサを含む従来のシステムである。
【０００４】
Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ，Ｍｕｌｔｉｐｌｅ  Ｄａｔａ（ＳＩＭＤ）。アレイプロセッサとして知られることもある。同一演算が、各々の命令に起因して多重データ要素上で平行して実行されるからである。このタイプのプロセッサは、たいてい、行列計算に用いられ、スーパーコンピュータに組み込まれている。
【０００５】
Ｍｕｌｔｉｐｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ，Ｍｕｌｔｉｐｌｅ  Ｄａｔａ（ＭＩＭＤ）。このタイプのシステムは、同一のデータ上で異なる命令をそれぞれ実行する多重独立プロセッサとして考えることができる。
【０００６】
ＭＩＭＤプロセッサは、細分することができ、以下のものを含む。
【０００７】
スーパースケーラ。スーパースケーラにおいては、単一プログラムまたは単一命令ストリームは、お互いに依存しない命令グループに、実行時間においてプロセッサハードウェアによって分割される。これらの命令グループは、個々の演算実行部において同時に処理される。このタイプのプロセッサは、一度に一つの命令ストリームを実行するだけであり、実際には機能強化されたＳＩＳＤ装置である。
【０００８】
Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ（ＶＬＩＷ）。スーパースケーラのように、ＶＬＩＷ装置は、単一の命令ストリームを実行する多重実行部を備える。しかしながら、この場合、同一のワードの中のすべての命令が平行に実行されつつ、命令がコンパイラによって並行処理されロングワードに翻訳される。ＶＬＩＷ装置は、２つから２０程度の実行部を備えていてもよい。しかしながら、これらの実行部の効率的な使用のためのコンパイラの能力は、２つまたは３つに過ぎない実行部を備えることによって急激に低下する。
【０００９】
マルチスレッド。本質的には、通信の定義済みポイントを除いて互いに独立しかつスレッドが同期化された異なるプログラムスレッドを実行する異なる実行部を備えた、スーパースケーラまたはＶＬＩＷである。スレッドは個々のプログラムの一部であるが、全てのスレッドは、実行部の数を制限する共通のメモリを共有する。
【００１０】
共有メモリ。ここで、多くの従来のプロセッサは、メモリの共有エリアを経由して通信を行う。このメモリは純粋な多重ポートメモリでもよく、これらのプロセッサは共有メモリの使用のための調整をしてもよい。プロセッサは、たいていはローカルメモリも備える。それぞれのプロセッサは、独立した命令ストリームを実際に実行する。また、それらのプロセッサが情報を通信する必要のある場合には、この情報はソケットのような種々の安定したプロトコルを用いて実行される。多量のデータはそれぞれの通信イベントにおいて転送されるが、本来、共有メモリアーキテクチャにおけるプロセッサ間の通信は、比較的遅い。
【００１１】
ネットワーク化されたプロセッサ。これらは、ネットワークを介して通信が行われることを除いては、共有メモリプロセッサとほとんど同様の通信を行う。通信はさらに遅く、たいては標準的な通信プロトコルを用いて実行される。
【発明の開示】
【発明が解決しようとする課題】
【００１２】
これらのＭＩＭＤマルチプロセッサアーキテクチャのほとんどは、複数のプロセッサが備わっている場合に、比較的遅いプロセッサ間の通信および／または制限されたプロセッサ間の通信の帯域幅によって特徴づけられる。スーパースケーラ、ＶＬＩＷおよびマルチスレッドアーキテクチャは、すべての実行部がその実行部内の共通のメモリおよびたいていは共通のレジスタを共有することから、制限されている。また、共有メモリアーキテクチャは、制限される。システムの全てのプロセッサが互いに通信できるとすれば、それらのプロセッサはすべて、メモリの共通領域に限定された帯域幅を共有しなければならないからである。
【００１３】
ネットワークプロセッサに対して、通信速度および通信帯域幅は、ネットワークの種類によって決定される。データがプロセッサから他のプロセッサに一度に送信され得る場合、帯域幅全体が制限される。しかしながら、スイッチ、ルータ、個々のプロセッサ間の２点間リンクおよびスイッチ組織の使用を含む他の多数のトポロジがある。
【００１４】
マルチプロセッサシステムの種類にかかわらず、プロセッサが、個別のタスク上で独立に機能しまた同一のリソースを共有するのではなく単一システムの一部を形成する場合、ソフトウェアタスク全体の種々の部分は、異なるプロセッサに割り当てられなければならない。この方法は、以下のものを含む。
【００１５】
実行時間においてタスクを他のプロセッサに割り当てる１または複数の監視プロセッサの使用。このことは、割り当てられたタスクが完了するのに比較的長時間を要する場合に機能するが、多数の非同期性タスクを実行しなければならないリアルタイムシステムにおいて非常に困難である。
【００１６】
プロセッサへの処理の手動割り当て。これは、たいていはコンパイルの際に必要となる。多くのリアルタイムアプリケーションにとって、このことはたいてい好ましいことである。プログラマーが、リアルタイムタスクにとって使用可能な十分なリソースが常に存在することを保証することができるからである。しかしながら、多数の処理およびプロセッサがあると、ソフトウェアが修正され処理が再割り当てされることが必要な場合には特に、タスクは困難になる。
【００１７】
コンパイルの際における処理のプロセッサへの自動割り当て。これは、リアルタイムシステムにとっての手動割り当てと同様の利点を有し、大幅に低減された設計時間といった付加的な利点と多数の処理およびプロセッサを含むシステムにとってのメンテナンスの容易さとを備える。
【００１８】
本発明は、コンパイル時における処理のプロセッサへの割り当てに関する。
【００１９】
プロセッサのクロックスピードが増加してアーキテクチャが高度化するにつれて、それぞれのプロセッサは与えられた期間にたくさんのタスクを達成することができるようになる。このことは、以前の特殊用途のハードウェアを必要としていたプロセッサにおいてタスクが実行され得ることを意味する。このことは、新しい種類の課題への取り組みを実現してきたが、リアルタイム処理における新しい課題を生み出してきた。
【００２０】
リアルタイム処理は、特定の時期ごとに結果が必要とされる処理として定義され、洗濯機から自動車のエンジン制御およびデジタルエンターテイメントシステム、果ては移動体通信の基地局に至るまで幅広いアプリケーションに用いられる。後者のアプリケーションにおいては、単一の基地局は複雑な信号処理を実行しかつ一度に何百もの音声およびデータの呼び出しの間に何百ものプロセッサを必要とするタスクを制御してもよい。そのようなリアルタイムシステムにおいては、特定期間に個々のプロセッサにおいて実行されるスケジューリングタスクのジョブおよび共有リソースの使用の調整がますます困難になる。個々のプロセッサは何十何百の異なる処理を実行することができるため、部分的にスケジューリングの課題が発生する。しかしながら、これらの処理が定期的に何度も発生する一方で、他の処理は、非同期的であって数分または数時間おきに発生するだけでもよい。タスクが不正確に組まれれば、イベントの比較的まれなシーケンスがシステムの不具合を起こしうる。さらに、イベントがまれであるので、すべての環境においてシステムの正しい演算を検証することは現実的に不可能である。
【００２１】
この問題の一つの解決策は、より小さくより単純なプロセッサをより多く用い、少数の固定されたタスクをそれぞれのプロセッサに割り当てることである。個々のプロセッサは安価であるから、いくつかのプロセッサは、短期間に完了する必要のある非常にまれで非同期的なタスクを提供することに特化され得る。しかしながら、多数の小さいプロセッサの使用は、調整、特に共有バスまたはネットワークリソースの調整を悪化させる。このことを克服する一つの方法は、バス構造と必要なバスリソースが各々の通信パスにとって使用可能であることを保証する関連プログラミング手順とを用いることである。そのような構造の一つは、国際特許公開第０２／５０６２４号に記載されている。
【課題を解決するための手段】
【００２２】
ある局面においては、本発明は、処理をプロセッサに自動的に割り当て、プログラマーによって与えられる情報を用いてコンパイルの際に通信リソースを割り当てる方法に関する。他の局面においては、本発明は、プロセッサに処理を割り当てるプロセッサアレイに関する。
【００２３】
さらに具体的には、本発明は、異なるプロセッサ間においてデータを伝達する必要のあるリソースが保証されるように、マルチプロセッサシステムにおいて処理タスクを割り当てる方法に関する。本発明は、国際特許公開第０２／５０６２４号に記載されている一般的な種類のプロセッサアレイに関連して記載されているが、プロセッサ間におけるデータ伝達に用いられるバス上のスロットの割り当てを可能にするマルチプロセッサシステムに適用することができる。
【発明を実施するための最良の形態】
【００２４】
図１を参照すると、国際特許公開第０２／５０６２４号に記載されている一般的なプロセッサアレイは、行列に配列された複数のプロセッサ２０から構成される。図１は６つの列を示し、各列は１０個のプロセッサから構成され、各列の各プロセッサにはＰ０，Ｐ１，Ｐ２，…，Ｐ８，Ｐ９のように番号が付され、アレイ内に合計６０個のプロセッサが配置されている。本発明の好ましい一実施の形態は４００個以上のプロセッサを含むが、本発明の動作を説明するには十分である。各プロセッサ２０は、左から右に伝わる水平バスのセグメント３２と右から左に伝わる水平バスのセグメント３６とに、コネクタ５０によって接続されている。図１に示すように、これらの水平バスセグメント３２，３６は、上方に伝わる垂直バスセグメント２１，２３と下方に伝わる垂直バスセグメント２２，２４とに、スイッチ５５において接続されている。
【００２５】
図１は本発明が用いられているプロセッサアレイの一形態を示すが、本発明は他の形態のプロセッサアレイにも適用することができることに留意すべきである。
【００２６】
図１のそれぞれのバスは、主として３２個または６４個のデータライン、データ有効信号ラインならびに肯定応答信号および再送肯定応答信号からなる２つの肯定応答信号ラインから構成される。
【００２７】
スイッチ５５のそれぞれの構造は、図２を参照して説明されている。スイッチ５５は、あらかじめデータが読み込まれたＲＡＭ６１を含む。そのスイッチは、所定のシーケンスにおいてＲＡＭ６１のアドレスを初めから終わりまでカウントするカウンタを備えるコントローラ６０をさらに含む。この同一のシーケンスは無数に繰り返される。また、１回のシーケンスを完了するために要する時間は、システムクロックのサイクル数単位で測定され、シーケンス期間と呼ばれる。各クロックサイクルにおいて、ＲＡＭ６１からの出力データは、レジスタ６２に読み込まれる。
【００２８】
スイッチ５５は、左から右へ伝わる水平バス、右から左へ伝わる水平バス、上方に伝わる２つの垂直バスセグメントおよび下方に伝わる２つの垂直バスセグメントの６つの出力バスを備える。しかしながら、これらの出力バスの１つのみへの接続が、明確にする目的のために図２に示されている。６つの出力バスのそれぞれは、出力肯定応答信号および再送肯定応答信号のためのライン６８に加えてバスセグメント６６（３２個または６４個のラインデータバスおよびデータ品質信号線から構成される）から構成される。
【００２９】
マルチプレクサ６５は、７つの入力ラインを備える。それらは、左から右へ伝わる水平バス、右から左へ伝わる水平バス、上方に伝わる２つの垂直バスセグメント、下方に伝わる２つの垂直バスセグメントおよび定数ゼロソースからの入力ラインである。マルチプレクサ６５は、レジスタ６２からの制御入力６４を有する。レジスタ６２の中身に応じて、そのサイクル中にこれらの入力のうちの選択された１つの入力上のデータは、出力ライン６６に与えられる。定数ゼロの入力は、電力が不必要にバス上の値を変更しないように、出力バスが用いられない場合に優先的に選択される。
【００３０】
同時に、レジスタ６２から与えられる値は、ブロック６７にも与えられる。ブロック６７は、左から右に伝わる水平バス、右から左へ伝わる水平バス、上方に伝わる２つの垂直バスセグメント、下方に伝わる２つの垂直バスセグメントおよび定数ゼロソースからの肯定応答および再送肯定応答信号を受けとり、ライン６８上の一組の出力肯定応答信号を選択する。
【００３１】
図３は、２つのプロセッサ２０がそれぞれのコネクタ５０において左から右へ伝わる水平バス３２および右から左へ伝わる水平バス３６のセグメントに接続される様子を示す、拡大ブロック概略図である。バスのセグメントは、２つのマルチプレクサ５１間の部分として定義され、接続点２５によってプロセッサの入力に接続される。プロセッサの出力は、出力バスセグメント２６および他のマルチプレクサ５１を介してバスのセグメントに接続される。また、プロセッサからの肯定応答信号は、肯定応答重ね合わせブロック２７においてバス上の他の肯定応答信号と重ね合わされる。
【００３２】
マルチプレクサ５１およびブロック２７の選択入力は、関連するプロセッサ内の回路によって制御される。
【００３３】
アレイ内の全ての通信は、所定のシーケンスにおいて発生する。一実施の形態においては、シーケンス期間は１０２４クロックサイクルである。各スイッチおよび各プロセッサは、シーケンス周期をカウントするカウンタを含む。このシーケンスの各サイクルにおいて、各スイッチは、６つの出力バスのそれぞれに通じる入力バスの一つを選択する。シーケンスの所定のサイクルで、プロセッサは接続点２５を経由して入力バスセグメントからデータを読み込み、マルチプレクサ５１を用いて出力バスセグメントの方にデータを切り替える。
【００３４】
最低でも、各プロセッサは、関連するマルチプレクサおよび肯定応答重ね合わせブロックを制御し、シーケンスの正しい時間において接続されるバスセグメントからデータを読み込み、データに関する有効な機能を果たすことができることが必要である。この有効な機能は、データの記憶のみから構成されることもある。
【００３５】
データがプロセッサ間において伝達される方法を、図４の例を参照して述べる。図４は図１のアレイの一部を示し、図４においてはｘ列かつｙ行のプロセッサはＰｘｙとして特定される。
【００３６】
図の説明のために、データがプロセッサＰ２４からプロセッサＰ１５に転送される場合を述べる。所定のクロックサイクルにおいて、送信プロセッサＰ２４はデータをバスセグメント８０に対して有効にし、スイッチＳＷ２１はこのデータをバスセグメント７２に切り替え、スイッチＳＷ１１はそのデータをバスセグメント７６に切り替え、受信プロセッサＰ１５はそのデータを読み込む。
【００３７】
通信パスは、アレイの他のプロセッサ間において、それらのプロセッサがバスセグメント８０，７２または７６のいずれも用いないという条件で、同時に構築され得る。本発明の好ましいこの形態においては、送信プロセッサＰ２４および受信プロセッサＰ１５は、１回のシーケンス周期において１またはそれ以上の少数の特定タスクを１または複数回実行するようにプログラムされている。その結果、シーケンス周期ごとに複数回、送信プロセッサＰ２４と受信プロセッサＰ１５との間での通信パスを構築する必要がある。
【００３８】
さらに具体的に、本発明の好ましい形態は、２，４，８，１６または１０２４までの２のべき乗のクロックサイクルごとに一度、通信パスの構築を可能にする。
【００３９】
送信プロセッサＰ２４と受信プロセッサＰ１５との間の通信パスが構築されない場合のクロックサイクルにおいては、バスセグメント８０，７２および７６は、他のいずれかのプロセッサ間の通信パスとして用いられてもよい。
【００４０】
各転送時に用いられるバスセグメント数を低減させるために各プロセッサが隣接するプロセッサと頻繁に通信するように処理をプロセッサに割り当てることが望ましいが、アレイ中の各プロセッサは、他のいずれのプロセッサとも通信することができる。
【００４１】
本発明の好ましい形態においては、各プロセッサは図５に示す全体構成を備える。プロセッサコア１１は、命令メモリ１５およびデータメモリ１６に接続され、また、コンフィギュレーションまたはモニタリングに用いられるコンフィギュレーションバスインタフェース１０にも接続され、バスコネクタ５０を介して上述した各バスに接続される入出力ポート１２に接続される。
【００４２】
ポート１２は、図６に示すように構成される。明確にするために、図６は、左から右に伝わる各バス３２に接続されるポートのみを示し、右から左に伝わる各バス３６に接続されるポートを示さず、制御または時期の詳細について示していない。あるプロセッサと１またはそれ以上の他のプロセッサとの間におけるデータ送信のための各通信チャネルは、一組のバッファ、すなわち、入力ポート用の入力ペア１２１，１２２または出力ポート用の出力ペア１２３，１２４に割り当てられる。入力ポートは、マルチプレクサ１２０を経由してプロセッサコア１１に接続されている。また、出力ポートは、マルチプレクサ１２５およびマルチプレクサ５１を経由してアレイバス３２に接続されている。
【００４３】
他のプロセッサにデータを送信するプロセッサにとって、送信プロセッサコアは、出力ポートバッファ１２４にデータを転送する命令を実行する。通信チャネルに割り当てられたバッファ１２４にすでにデータが格納されていれば、そのデータはバッファ１２３に送信される。また、バッファ１２３が占有されている場合には、プロセッサコアはバッファが使用可能になるまで停止する。さらに多くのバッファをそれぞれの通信チャネルに使用することができるが、想定しているアプリケーションには二つのバッファで十分であることが以下に延べられている。特定の通信チャネル（スロット）に割り当てられたサイクルで、マルチプレクサ１２５、５１を用いて、データが重ねあわされてアレイバスセグメントに与えられる。また、データは目標プロセッサまたは上述したプロセッサに送られる。
【００４４】
受信プロセッサにおいては、データは、そのチャネルに割り当てられたバッファ１２１または１２２に読み込まれる。受信プロセッサ上のプロセッサコア１１は、マルチプレクサ１２０を経由してポートからデータを転送する命令を実行することができる。データが受信された場合、通信チャネルに割り当てられたバッファ１２１および１２２の両方が空であれば、データワードはバッファ１２１に格納される。バッファ１２１がすでに占有されている場合には、データワードはバッファ１２２に格納される。以下、バッファ１２１および１２２の両方が占有されている場合について説明する。
【００４５】
上記からあきらかであるが、プロセッサ間のデータの転送のためのスロットは通常の周期で割り当てられるが、出力ポートおよび入力ポートにバッファが設けられていることは、出力バッファのオーバーフローの原因にならずかつ入力バッファのアンダーフローの原因にならなければ、プロセッサコアが常にポートへおよびポートからデータを転送することができることを意味する。このことは、以下のテーブルの例で説明されている。見出し欄は、以下のことを意味する。
【００４６】
Ｃｙｃｌｅ  この例の目的のために、各システムクロックサイクルに番号が付されている。
【００４７】
ＰＵＴ  プロセッサコアから出力ポートへのデータの転送は、「ＰＵＴ」と称される。テーブルにおいて、送信プロセッサコアが出力ポートにデータを送信する際にはいつでも、ＰＵＴ欄に記載が現れる。その記載は、転送されるデータ値を示す。上述したように、ＰＵＴはプロセッサ間のデータ転送に対して非同期である。すなわち、プロセッサコア上で動作するソフトウェアによってスケジュールが決定される。
【００４８】
ＯＢｕｆｆｅｒ０  送信プロセッサ（図６においてマルチプレクサ１２５に接続された出力バッファ１２４）における出力バッファ０の中身である。
【００４９】
ＯＢｕｆｆｅｒ１  送信プロセッサ（図６においてプロセッサコア１１に接続された出力バッファ１２３）における出力バッファ１の中身である。
【００５０】
Ｓｌｏｔ  データが送信されるサイクルを示す。この例では、データは４サイクルごとに転送される。スロットは、明確にするために番号が付されている。
【００５１】
ＩＢｕｆｆｅｒ０  受信プロセッサ（図６のプロセッサコア１２０に接続された入力バッファ１２１）における入力バッファ０の中身である。
【００５２】
ＩＢｕｆｆｅｒ１  受信プロセッサ（図のバス３２に接続された入力バッファ１２２）における入力バッファ１の中身である。
【００５３】
ＧＥＴ  入力ポートからプロセッサへのデータ転送は、ＧＥＴと称される。受信プロセッサがデータを入力ポートから転送する際にはいつでも、テーブルにおいてＧＥＴ欄に記載が現れる。その記載は、転送されるデータ値を示す。上述したように、ＧＥＴはプロセッサ間のデータ転送に対して非同期である。すなわち、プロセッサコア上で動作するソフトウェアによってスケジュールが決定される。
【００５４】
【表１】
2006518505.tif 000003
【００５５】
好ましくは、本発明は、上述したようなマルチプロセッサシステムのプロセッサをプログラムするために用いることができるソフトウェアを書く方法を用いる。特に、本発明は、プロセッサ間における通信帯域幅の要求に関するプログラマーの意図を惹き付ける方法と、決定論的通信を保証するためのバスリソースを割り当てるためにこの通信帯域幅を用いる方法とを提供する。このことを、例を用いて説明する。
【００５６】
プログラム例を以下に示す。また、プログラム例は、図７において図示されている。この例においては、プロセッサ上で実行されるソフトウェアは、ポートへのＰＵＴおよびポートからのＧＥＴの動作が明確にわかるように、アセンブラで記載されている。このアセンブラコードは、それぞれの処理のアーキテクチャ描写のＣＯＤＥとＥＮＤＣＯＤＥとの間の行に記載されている。チャネルがプロセッサ間においてデータを運ぶ方法は、Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ，ＶＨＤＬ（ＩＥＥＥ  Ｓｔｄ  １０７６−１９９３）に記載されている。図７は、Ｐｒｏｄｕｃｅｒ、ＭｏｄｉｆｉｅｒおよびｍｅｍＷｒｉｔｅからなる３つの処理がチャネル１１およびチャネル１２にリンクされる方法を示す。
【００５７】
ＶＨＤＬおよびアセンブラコードのほとんどの詳細は、本発明にとって重要ではなく、また、当業者にとって解釈できるものである。重要な点は、以下のとおりである。
【００５８】
インタフェースを定義づけるＶＨＤＬエンティティ宣言および中身を定義づけるＶＨＤＬアーキテクチャ宣言によって定義される各処理は、手動でまたは自動コンピュータプログラムを用いることによって、図１のアレイのようなシステムにおけるプロセッサに配置される。
【００５９】
各チャネルに対して、ソフトウェアライターは、ＶＨＤＬ言語の拡張子を用いてスロット周期要件を定義する。これは、「＠」と表記され、エンティティ宣言および「ｔｏｐｌｅｖｅｌ」のアーキテクチャの信号宣言のポート定義に現れ、３つの処理を結びつける方法を定義する。
【００６０】
「＠」の後の数字は、システムクロック周期で、処理を実行するシステム内のプロセッサ間にスロットが割り振られなければならない回数を意味する。したがって、本例においては、１６システムクロック周期ごとにチャネル１（３２ビットバスが２つの１６ビット値を持つことを示すｉｎｔｅｇｅｒ１６ｐａｉｒ）に沿ってＭｏｄｉｆｉｅｒ処理にデータを送信するためのＰｒｏｄｕｃｅｒ処理に対してスロットが割り振られ、８システムクロック周期ごとにｍｅｍＷｒｉｔｅ処理にデータを送信するためのＭｏｄｉｆｉｅｒ処理に対してスロットが割り振られる。
【００６１】
entity Producer is
port (outPort:out integer16pair@16);
end entity Producer;
architecture ASM of Producer is
begin STAN
initialize regs:=(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
CODE
loop
for r6 in 0 to 9 loop
copy.0 r6,r4
add.0 r4, 1, r5
put r[5:4], outport
end loop
end loop
ENDCODE;
end Producer;
entity Modifier is
port (outPort:out integer16pair@8;
inPort:in    integer16pair@16);
end entity Modifier;
architecture ASM of Modifier is
begin MAC
initialize regs:= (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
CODE
loop
for r6 in 10 to 19 loop
get inport, r[3:2]
add.0 r2, 10, r4
add.0 r3, 10, r5
put r[5:4], outport  --This output should be
input into third AE
end loop
end loop
ENDCODE;
end Modifier;
entity memWrite is
port (inPort:in integer16pair@8);
end entity memWrite;
architecture ASM of memWrite is
begin MEM
initialize regs:= (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
initialize code_partition :=2;
CODE
copy.0 0,AP              //initialize write pointer
loop
get inPort, r[3:2]
stl r[3:2], (AP) \ add.0 AP, 4, AP
end loop
ENDCODE;
end;
entity toplevel is
end toplevel;
architecture STRUCTURAL of toplevel is
signal channel1: integer16pair@16;
signal channel2: integer16pair@8;
begin
finalObject: entity memWrite
port map (inPort =>channel2);
modifierObject: entity Modifier
port map (inPort=>channel1, outPort=>channel2);
producerObject: entity Producer
port map (outPort=>channel1);
end toplevel
【００６２】
上述したように、各処理のアーキテクチャ描写のＣＯＤＥとＥＮＤＣＯＤＥとの間のコードは、プロセッサコアがこれらの命令を実行できるように、機械語命令に翻訳され、プロセッサの命令メモリ（図５）に読み込まれる。ＰＵＴ命令が実行されるたびに、上述したようにデータがプロセッサコアのレジスタから出力ポートに転送される。また、ＧＥＴ命令が実行されるたびに、入力ポートからプロセッサコアのレジスタにデータが転送される。
【００６３】
各信号に対するスロット割合は、プログラム例の「＠」記号の後の数字であり、適当な周期でアレイバスにスロットを割り当てるために用いられる。例えば、スロット割合が「＠４」である場合、スロットは４システムクロックサイクルごとの１つのシステムクロックサイクルで送信プロセッサと受信プロセッサとの間のすべてのバスセグメントに割り当てられなければならない。また、スロット割合が「＠８」である場合、スロットは８システムクロックサイクルごとの１つのシステムクロックサイクルで送信プロセッサと受信プロセッサとの間のすべてのバスセグメントに割り当てられなければならない。
【００６４】
上述した方法を用いて、ソフトウェア処理を個々のプロセッサに割り当てることができる。また、データを送信するためのチャネルを提供するアレイバスにスロットを割り当てることができる。特に、ユーザは、同時に処理を実行する２つのプロセッサ間において通信チャネルが構築される回数をそのシステムにより特定することができる。、また、処理を構成するソフトウェアタスクを、必要なチャネルの構築が可能である方法で特定のプロセッサに割り当てることができる。
【００６５】
この割り当ては、手動で、または好ましくはコンピュータプログラムを用いて実行され得る。
【００６６】
図８は、本発明のこの局面に係る方法の一般的な構成を説明するフローチャートである。
【００６７】
ステップＳ１においては、ユーザは、実行される処理を定義することによってシステム全体の必要な機能性を定義し、処理の一部を実行するプロセッサ間の通信チャネルを構築するために必要な頻度を定義する。
【００６８】
ステップＳ２においては、コンパイル処理が発生し、ソフトウェアタスクが固定的にアレイのプロセッサに割り当てられる。この割り当ては、必要な通信チャネルが必要な頻度で構築されるような方法で実行される。
【００６９】
ここの記載および特定のシステムパラメータの知識に基づいて、当業者は、コンパイルを実行するための適当なソフトウェアを書くことができる。
【００７０】
ソフトウェアタスクが割り当てられた後、適正なソフトウェアは定義された処理を実行するために各プロセッサに読み込まれ得る。
【００７１】
上述した方法を用いて、プログラマーは、データが送信される正確な時間（位相またはオフセット）ではなく、スロット頻度を特定する。このことは、ソフトウェアを書く仕事を十分に簡略化する。チャネルの入力ポートまたは出力ポートのいずれか一方のバッファがフルになっていないために待たなければならないプロセッサがシステム内に含まれないことも、主な目的である。送信プロセッサがスロット割合より多くＰＵＴ命令を実行しようとせず受信プロセッサがスロット割合より多くＧＥＴ命令を実行しようとしなければ、このことは、各チャネルに関連する入力ポート内の２つのバッファと対応する出力ポート内の２つのバッファとを用いて達成することができる。
【００７２】
したがって、使用可能なリソースの効率的な使用を許容するプロセッサアレイおよびアレイのプロセッサにソフトウェアタスクを割り当てる方法が記載されている。
【００７３】
なお、添付図面は、本発明をよりよく理解し、かつ、本発明が実施される形態を説明するために、次に、一例としての目的のためだけに参照されるものである。
【図面の簡単な説明】
【００７４】
【図１】本発明に係るプロセッサアレイの概略的ブロック図である。
【図２】図１のプロセッサアレイの一部の概略拡大ブロック図である。
【図３】図１のプロセッサアレイの他の部分の概略拡大ブロック図である。
【図４】図１のプロセッサアレイの部分の概略拡大ブロック図である。
【図５】図１のプロセッサアレイの部分び概略拡大ブロック図である。
【図６】図１のプロセッサアレイの部分の概略拡大ブロック図である。
【図７】図１のプロセッサアレイにおける動作を示す図である。
【図８】本発明に係る方法を説明するためのフローチャートである。
【図１】
2006518505.tif 000004
【図２】
2006518505.tif 000005
【図３】
2006518505.tif 000006
【図４】
2006518505.tif 000007
【図５】
2006518505.tif 000008
【図６】
2006518505.tif 000009
【図７】
2006518505.tif 000010
【図８】
2006518505.tif 000011
【手続補正書】
【提出日】平成17年4月1日(2005.4.1)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プロセッサアレイのプロセッサにソフトウェアタスクを自動的に割り当てる方法であって、
前記プロセッサアレイは、各プロセッサと必要な他の各プロセッサとの接続を可能にする接続部を備える複数のプロセッサを備え、
複数の処理の定義を受け取り、前記処理の少なくともいくつかは、第１および第２の不特定のプロセッサにおいてそれぞれ実行される第１および第２のタスクを少なくとも含む共有処理であり、前記共有処理のそれぞれは、データが前記第１のプロセッサと前記第２のプロセッサとの間で転送される周期でさらに定義され、
自動的に静的に、前記プロセッサアレイのプロセッサに前記複数の前記処理のソフトウェアタスクを割り当て、それぞれの定義された周期で前記各共有処理において前記タスクを実行する前記プロセッサ間の接続を割り当てることを特徴とする方法。
【請求項２】
前記方法は、コンパイル時に実行されることを特徴とする請求項１記載の方法。
【請求項３】
コンピュータプログラムを用いて、前記ソフトウェアタスクの割り当てを行う前記ステップを実行することを特徴とする請求項１または２記載の方法。
【請求項４】
さらに、割り当てられた前記ソフトウェアタスクを実行するためのソフトウェアを前記各プロセッサに読み込むことを特徴とする請求項１〜３のいずれかに記載の方法。
【請求項５】
複数の処理の定義を受け取るステップを実行し、前記処理の少なくともいくつかは、第１および第２の不特定のプロセッサにおいてそれぞれ実行される第１および第２のタスクを少なくとも含む共有処理であり、前記共有処理のそれぞれは、データが前記第１のプロセッサと前記第２のプロセッサとの間で転送される周期でさらに定義され、
自動的に静的に、前記プロセッサアレイのプロセッサに前記複数の処理の前記ソフトウェアタスクを割り当て、それぞれの定義された周期で前記各共有処理において前記タスクを実行する前記プロセッサ間の接続を割り当てるステップを実行することを特徴とするプログラムプロダクト。
【請求項６】
プロセッサアレイであって、
各プロセッサと必要な他の各プロセッサとの接続を可能にする接続部を備える複数のプロセッサを備え、前記プロセッサアレイのプロセッサにソフトウェアタスクを自動的に割り当てるための関連ソフトウェアプロダクトを備え、
前記ソフトウェアプロダクトは、
複数の処理の定義を受け取るステップを実行し、前記処理の少なくともいくつかは、第１および第２の不特定のプロセッサにおいてそれぞれ実行される第１および第２のタスクを少なくとも含む共有処理であり、前記共有処理のそれぞれは、データが前記第１のプロセッサと前記第２のプロセッサとの間で転送される周期でさらに定義され、
自動的に静的に、前記プロセッサアレイのプロセッサに前記複数の処理の前記ソフトウェアタスクを割り当て、それぞれの定義された周期で前記各共有処理において前記タスクを実行する前記プロセッサ間の接続を割り当てるステップを実行することを特徴とするプロセッサアレイ。
【請求項７】
プロセッサアレイであって、
複数のプロセッサアレイを備え、
前記プロセッサは、各プロセッサと必要な他のプロセッサとの接続を可能にする複数のバスおよび複数のスイッチによって相互接続され、
前記各プロセッサは、静的に割り当てられた演算シーケンスのそれぞれを実行するようにプログラムされ、
前記シーケンスは、複数のシーケンス周期で繰り返され、
前記アレイにおいて実行される少なくともいくつかの処理は、第１のプロセッサおよび第２のプロセッサのそれぞれにおいて実行される第１および第２のソフトウェアタスクを含み、
前記処理のそれぞれに対して、前記タスクを実行する前記プロセッサ間の必要な接続は、各シーケンス周期における固定された時間に割り当てられることを特徴とするプロセッサアレイ。
【請求項８】
データが転送される前記周期は、使用可能なクロックサイクルの一部として定義されることを特徴とする請求項１〜４のいずれかに記載の方法。
【請求項９】
データが転送される前記周期は、使用可能なクロックサイクルの１／２ｎとして定義され、
前記ｎは、２≦２ｎ≦ｓとなる値であり、
前記ｓは、１回のシーケンス期間のクロックサイクル数であることを特徴とする請求項８記載の方法。
【国際調査報告】
2006518505.tif 000012
2006518505.tif 000013
2006518505.tif 000014