(57)【要約】【課題】マルチ処理システムの複数のプロセッサ内においてデータ並列処理モデルに従って１以上のソフトウェアプログラムを実行する方法及び装置を提供する。【解決手段】ソフトウェアプログラムは複数の処理タスクからなり、各タスクは１以上の入力データユニットに命令を実行することにより出力データユニットを生成し、入出力の各データユニットは１以上のデータオブジェクトを含む。また、１以上のアプリケーションプログラミングインタフェースコードに応答して、プロセッサのうち所定の１以上のプロセッサ内部において、現在の処理タスクから次の処理タスクへの変更を行う。そして、次の処理タスクが現在の処理タスクによって生成された出力データユニットを入力データユニットとして用いて、同じプロセッサ内で更なる出力データユニットを生成する。【選択図】図１
2006221638.tif 000002
【特許請求の範囲】
【請求項１】
メインメモリと通信可能であり、１以上のデータオブジェクトを含む１以上の入力データユニットに対して命令を実行して１以上のデータオブジェクトを含む出力データユニットを生成する処理タスクを複数有する１以上のソフトウェアプログラムを、データ並列処理モデルに従って実行する複数のプロセッサを備えており、
各プロセッサは、１以上のアプリケーションプログラミングインタフェースコードに応答して、現在の処理タスクにより生成された前記出力データユニットを次の処理タスクが入力データユニットとして用いることにより同じプロセッサ内で更なる出力データユニットを生成することができるように、処理タスクを現在の処理タスクから次の処理タスクへ変更することを特徴とする、
データ処理装置。
【請求項２】
前記アプリケーションプログラミングインタフェースコードは、前記複数のプロセッサが前記データ並列処理モデルを実装する場合に呼び出されることを特徴とする、
請求項１記載のデータ処理装置。
【請求項３】
前記ソフトウェアプログラムは、最終結果を得るまで、異なるデータユニットに対して前記処理タスクを繰り返し実行することを命令することを特徴とする、
請求項１又は２記載のデータ処理装置。
【請求項４】
１以上の入力データユニット及び出力データユニットは、他の１以上の入力データユニット及び出力データユニットに依存することを特徴とする、
請求項３記載のデータ処理装置。
【請求項５】
前記各プロセッサは、前記メインメモリに頼らずに内部で前記処理タスクを実行するためのローカルメモリを含み、
前記各プロセッサは、前記１以上のアプリケーションプログラミングインタフェースコードに応答して、処理タスクを前記現在の処理タスクから前記次の処理タスクへ変更し、当該プロセッサの前記ローカルメモリに前記現在の処理タスクによる前記出力データユニットを保持することを特徴とする、
請求項１〜３のいずれかに記載のデータ処理装置。
【請求項６】
前記各プロセッサは、要求に応答して、別のプロセッサへ前記現在の処理タスクによる前記出力データユニットをコピーして、異なる処理タスクの入力データユニットとして使用することを特徴とする、
請求項５記載のデータ処理装置。
【請求項７】
前記ソフトウェアプログラムはＮ個のデータユニットに対して動作するＭ個の処理タスクを含み（Ｍ及びＮは整数）、
前記プロセッサのうちの第１のプロセッサは、前記処理タスクのうちの第１のタスクを前記データユニットのうち少なくとも第１のデータユニットに対して実行することにより、第１の出力データユニットを自身から生成して前記ローカルメモリに格納するように動作可能であり、
前記第１のプロセッサは、前記１以上のアプリケーションプログラミングインタフェースコードに応答して、前記第１の処理タスクから第２の処理タスクへ処理タスクを変更するとともに少なくとも前記第１の出力データユニットに対して動作することにより第２の出力データユニットを自身から生成して前記ローカルメモリに格納するように動作可能であり、
前記第１のプロセッサは、前記第１のデータユニットに対して前記Ｍ個の処理タスクの実行が完了するまでこれらの動作を繰り返すようになっていることを特徴とする、
請求項５又は６記載のデータ処理装置。
【請求項８】
前記プロセッサのうちの第２のプロセッサは、前記第１のプロセッサの動作と同時に、前記処理タスクのうちの第１のタスクを前記データユニットのうち少なくとも第２のデータユニットに対して実行することにより、第１の出力データユニットを自身から生成して前記ローカルメモリに格納するように動作可能であり、
前記第２のプロセッサは、前記１以上のアプリケーションプログラミングインタフェースコードに応答して、前記第１の処理タスクから前記第２の処理タスクへ処理タスクを変更するとともに少なくとも前記第１の出力データユニットに対して動作することにより第２の出力データユニットを自身から生成して前記ローカルメモリに格納するように動作可能であり、
前記第２のプロセッサは、前記第２のデータユニットに対して前記Ｍ個の処理タスクの実行が完了するまでこれらの動作を繰り返すようになっていることを特徴とする、
請求項７記載のデータ処理装置。
【請求項９】
さらに別の１以上のプロセッサは、前記Ｎ個のデータユニットのすべてに対して前記Ｍ個の処理タスクすべての実行が完了するまで、前記データユニットに対して前記Ｍ個の処理タスクを順次実行するようになっていることを特徴とする、
請求項８記載のデータ処理装置。
【請求項１０】
各々が１以上のデータオブジェクトを含む１以上の入力データユニットに対して命令を実行することにより１以上のデータオブジェクトを含む出力データユニットを生成する処理タスクを複数有する１以上のソフトウェアプログラムを、データ並列処理モデルに従ってマルチ処理システムの複数のプロセッサ内で実行し、
前記プロセッサのうち所定の１以上のプロセッサ内において、１以上のアプリケーションプログラミングインタフェースコードに応答して現在の処理タスクから次の処理タスクへ処理タスクを変更し、
前記次の処理タスクが前記現在の処理タスクによって生成された前記出力データユニットを入力データユニットとして使用することにより、同じプロセッサ内に更なる出力データユニットを生成することを特徴とする、
データ処理方法。
【請求項１１】
前記アプリケーションプログラミングインタフェースコードが、前記複数のプロセッサが前記データ並列処理モデルを実装する場合に呼び出されることを特徴とする、
請求項１０記載のデータ処理方法。
【請求項１２】
前記ソフトウェアプログラムが、最終結果を得るまで、異なるデータユニットに対して前記処理タスクを繰り返し実行することを命令することを特徴とする、
請求項１０又は１１記載のデータ処理方法。
【請求項１３】
１以上の入力データユニット及び出力データユニットが、他の１以上の入力データユニット及び出力データユニットに依存することを特徴とする、
請求項１２記載のデータ処理方法。
【請求項１４】
各プロセッサが、前記メインメモリに頼らずに内部で前記処理タスクを実行するローカルメモリを含む場合に、
前記１以上のアプリケーションプログラミングインタフェースコードに応答して、所定のプロセッサ内で前記現在の処理タスクから前記次の処理タスクへ処理タスクを変更し、当該プロセッサのローカルメモリに前記現在の処理タスクによる前記出力データユニットを保持することを特徴とする、
請求項１０〜１２のいずれかに記載のデータ処理方法。
【請求項１５】
要求に応答して、別のプロセッサへ前記現在の処理タスクによる前記出力データユニットをコピーして、異なる処理タスクの入力データユニットとして使用することを特徴とする、
請求項１４記載のデータ処理方法。
【請求項１６】
前記ソフトウェアプログラムがＮ個のデータユニットに対して動作するＭ個の処理タスクを含む場合に（Ｍ及びＮは整数）、
前記処理タスクのうちの第１のタスクを前記データユニットのうち少なくとも第１のデータユニットに対して実行することにより、第１の出力データユニットを自身から生成して前記プロセッサのうちの第１のプロセッサのローカルメモリに格納し、
前記１以上のアプリケーションプログラミングインタフェースコードに応答して、前記第１の処理タスクから少なくとも前記第１の出力データユニットに対して動作するための第２の処理タスクへ処理タスクを変更することにより、第２の出力データユニットを自身から生成して前記プロセッサのうちの第１のプロセッサのローカルメモリに格納し、
前記第１のプロセッサの第１のデータユニットに対して、前記Ｍ個の処理タスクの実行が完了するまでこれらの動作を繰り返すことを特徴とする、
請求項１４又は１５記載のデータ処理方法。
【請求項１７】
前記プロセッサのうちの第２のプロセッサが、前記第１のプロセッサの動作と同時に、前記処理タスクのうちの第１のタスクを前記データユニットのうち少なくとも第２のデータユニットに対して実行することにより、第１の出力データユニットを自身から生成して前記第２のプロセッサのローカルメモリに格納し、
前記１以上のアプリケーションプログラミングインタフェースコードに応答して、前記第１の処理タスクから前記第２の処理タスクへ処理タスクを変更するとともに少なくとも前記第１の出力データユニットに対して動作することにより第２の出力データユニットを自身から生成して前記第２のプロセッサの前記ローカルメモリに格納し、
前記第２のプロセッサの第２のデータユニットに対して、前記Ｍ個の処理タスクの実行が完了するまでこれらの動作を繰り返すことを特徴とする、
請求項１６記載のデータ処理方法。
【請求項１８】
別の１以上のプロセッサにおけるＮ個のデータユニットのすべてに対して前記Ｍ個の処理タスクすべての実行が完了するまで、前記データユニットに対して前記Ｍ個の処理タスクを順次実行することを特徴とする、
請求項１７記載のデータ処理方法。
【請求項１９】
マルチ処理システムの複数のプロセッサのうちの１以上に、
各々が１以上のデータオブジェクトを含む１以上の入力データユニットに対して命令を実行することにより１以上のデータオブジェクトを含む出力データユニットを生成する処理タスクを複数有する１以上のソフトウェアプログラムを、データ並列処理モデルに従ってマルチ処理システムの複数のプロセッサ内で実行し、
前記プロセッサのうち所定の１以上のプロセッサ内において、１以上のアプリケーションプログラミングインタフェースコードに応答して現在の処理タスクから次の処理タスクへ処理タスクを変更し、
前記次の処理タスクが前記現在の処理タスクによって生成された前記出力データユニットを入力データユニットとして使用することにより、同じプロセッサ内に更なる出力データユニットを生成する、
ことを特徴とする動作を実行させるためのコンピュータプログラム。
【請求項２０】
前記アプリケーションプログラミングインタフェースコードが、前記複数のプロセッサが前記データ並列処理モデルを実装する場合に呼び出されることを特徴とする、
請求項１９記載のコンピュータプログラム。
【請求項２１】
前記ソフトウェアプログラムに、最終結果を得るまで、異なるデータユニットに対して前記処理タスクを繰り返し実行することを命令させることを特徴とする、
請求項１９又は２０記載のコンピュータプログラム。
【請求項２２】
１以上の入力データユニット及び出力データユニットが、他の１以上の入力データユニット及び出力データユニットに依存することを特徴とする、
請求項２１記載のコンピュータプログラム。
【請求項２３】
各プロセッサが、前記メインメモリに頼らずに内部で前記処理タスクを実行するローカルメモリを含む場合に、
前記１以上のアプリケーションプログラミングインタフェースコードに応答して、所定のプロセッサ内で前記現在の処理タスクから前記次の処理タスクへ処理タスクを変更させ、当該プロセッサのローカルメモリに前記現在の処理タスクによる前記出力データユニットを保持させることを特徴とする、
請求項１９〜２１のいずれかに記載のコンピュータプログラム。
【請求項２４】
要求に応答して、別のプロセッサへ前記現在の処理タスクによる前記出力データユニットをコピーして、異なる処理タスクの入力データユニットとして使用させることを特徴とする、
請求項２３記載のコンピュータプログラム。
【請求項２５】
前記ソフトウェアプログラムがＮ個のデータユニットに対して動作するＭ個の処理タスクを含む場合に（Ｍ及びＮは整数）、
前記処理タスクのうちの第１のタスクを前記データユニットのうち少なくとも第１のデータユニットに対して実行することにより、第１の出力データユニットを自身から生成して前記プロセッサのうちの第１のプロセッサのローカルメモリに格納させ、
前記１以上のアプリケーションプログラミングインタフェースコードに応答して、前記第１の処理タスクから少なくとも前記第１の出力データユニットに対して動作するための第２の処理タスクへ処理タスクを変更させることにより、第２の出力データユニットを自身から生成して前記プロセッサのうちの第１のプロセッサのローカルメモリに格納させ、
前記第１のプロセッサの第１のデータユニットに対して、前記Ｍ個の処理タスクの実行が完了するまでこれらの動作を繰り返させることを特徴とする、
請求項２３記載のコンピュータプログラム。
【請求項２６】
前記プロセッサのうちの第２のプロセッサに、前記第１のプロセッサの動作と同時に、前記処理タスクのうちの第１のタスクを前記データユニットのうち少なくとも第２のデータユニットに対して実行することにより、第１の出力データユニットを自身から生成して前記第２のプロセッサのローカルメモリに格納させ、
前記１以上のアプリケーションプログラミングインタフェースコードに応答して、前記第１の処理タスクから前記第２の処理タスクへ処理タスクを変更するとともに少なくとも前記第１の出力データユニットに対して動作することにより第２の出力データユニットを自身から生成して前記第２のプロセッサの前記ローカルメモリに格納させ、
前記第２のプロセッサの第２のデータユニットに対して、前記Ｍ個の処理タスクの実行が完了するまでこれらの動作を繰り返させることを特徴とする、
請求項２５記載のコンピュータプログラム。
【請求項２７】
さらに別の１以上のプロセッサにおけるＮ個のデータユニットのすべてに対して前記Ｍ個の処理タスクすべての実行が完了するまで、前記データユニットに対して前記Ｍ個の処理タスクを順次実行させることを特徴とする、
請求項２６記載のコンピュータプログラム。
【請求項２８】
請求項１９〜２７のいずれかに記載されたコンピュータプログラムが記録される、コンピュータが読み取り記録媒体。
【請求項２９】
共有メモリと、
この共有メモリに接続されて、各々が１以上のデータオブジェクトを含む１以上の入力データユニットに対して命令を実行して１以上のデータオブジェクトを含む出力データユニットを生成する処理タスクを複数個有する１以上のソフトウェアプログラムを、データ並列処理モデルに従って実行する複数のプロセッサと、
各プロセッサに対応しており、前記共有メモリに頼らずに前記処理タスクを実行するローカルメモリを備えた装置であって、
各プロセッサは、１以上のアプリケーションプログラミングインタフェースコードに応答して、現在の処理タスクにより生成された前記出力データユニットを次の処理タスクが入力データユニットとして用いることにより同じプロセッサ内で更なる出力データユニットを生成することができるように、前記現在の処理タスクから前記次の処理タスクへ処理タスクを変更することを特徴とする、
データ処理システム。
【請求項３０】
前記プロセッサは、前記１以上のアプリケーションプログラミングインタフェースコードに応答して前記現在の処理タスクから前記次の処理タスクへ処理タスクを変更し、当該プロセッサのローカルメモリ内において前記現在の処理タスクからの前記出力データユニットを保持することを特徴とする、
請求項２９記載のデータ処理システム。
【請求項３１】
前記複数のプロセッサは共通の半導体基板上に形成されていることを特徴とする、
請求項２９又は３０記載のデータ処理システム。
【請求項３２】
前記プロセッサ及びこのプロセッサに対応するローカルメモリは、共通の半導体基板上に形成されていることを特徴とする、
請求項３１記載のデータ処理システム。
【請求項３３】
前記ローカルメモリはハードウェアキャッシュメモリではないことを特徴とする、
請求項３１又は３２記載のデータ処理システム。
【請求項３４】
前記複数のプロセッサ、前記複数のローカルメモリ、及び共有メモリは共通の半導体基板上に形成されていることを特徴とする、
請求項２９記載のデータ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、１以上のタスク変更アプリケーションプログラミングインタフェース（ＡＰＩ：Application Programming Interface）コードに応答して、マルチ処理システム内の複数のプロセッサ間でタスクを変更する機能を提供する方法及び装置に関する。
【背景技術】
【０００２】
近年、最先端のコンピュータアプリケーションがますます複雑になり、かつ処理システムへの要求が増え続けているので、データスループットがより高いコンピュータ処理が常に望まれている。なかでも、グラフィックアプリケーションは処理システムへの要求が最も高いものの１つであり、その理由は、グラフィックアプリケーションが所望のビジュアル結果を実現するために、比較的短時間で非常に多くのデータアクセス、データ演算処理、及びデータ操作を要求するからである。
【０００３】
リアルタイムマルチメディアアプリケーションが重要性を増してきている。これらのアプリケーションには、１秒間に数千メガビットのデータ処理といった非常に高速な処理速度が必要である。シングルプロセッサを採用して高速の処理速度を実現している処理システムもある一方で、マルチプロセッサアーキテクチャを利用して実装されている処理システムもある。マルチプロセッサシステムでは、複数のサブプロセッサが並列に（或いは、少なくとも協調して）動作することで、所望の処理結果を得ることが出来る。
【０００４】
並列マルチプロセッサシステムにおいて複数のプロセッサを用いて数多くの処理ステップを実行するモデルとして、２つの基本処理モデル、すなわち、（ｉ）データ並列処理モデル、（ii）機能並列処理モデルがある。これらのモデルを十二分に議論するために、いくつかの基本的な仮定を考える。アプリケーションプログラム（もしくはその一部）は、データからなるユニットを様々な方法で操作する複数のステップ（１、２、３、４、．．．）からなる。これらのデータユニットをＵｎ（例えばｎ＝１、２、３、４）で指定してもよい。ここで、Ｕｎはｎ個のデータオブジェクトＵ１、Ｕ２、Ｕ３、Ｕ４の組を表す。従って、ステップ１において、データユニットＵｎ（Ｕ１、Ｕ２、Ｕ３、Ｕ４）はｎ個のデータオブジェクトのうちの１以上を処理操作した結果として求められる。ステップ間でデータユニットに何らかの依存性があると仮定すると、ステップ２において、データユニットＵｎ'（Ｕ１'、Ｕ２'、Ｕ３'、Ｕ４'）はデータユニットＵｎを操作することにより求められる。同様に、ステップ３において、データユニットＵｎ''（Ｕ１''、Ｕ２''、Ｕ３''、Ｕ４''）はデータユニットＵｎ'を操作することにより求められる。最終的に、ステップ４において、データユニットＵｎ'''（Ｕ１'''、Ｕ２'''、Ｕ３'''、Ｕ４'''）はデータユニットＵｎ''を操作することにより求められる。
【０００５】
再度基本並列処理モデルに戻って、データ並列処理モデルでは、マルチプロセッサシステム内の各プロセッサはステップ１〜４の各々を順次（もしくはデータの依存性が要求するいかなるものにも応じて）実施する。これにより、マルチプロセッサシステム内に４個のプロセッサがある場合、各プロセッサはステップ１〜４を、４つのデータの組Ｕ１、Ｕ２、Ｕ３、Ｕ４のうち対応するものに対して実施する。しかし、機能並列処理モデルでは、ＣＰＵはそれぞれステップ１〜４のうちの１つのみを実施し、データユニットは、データ依存性に応じて変更された次のデータユニットを実現するために、あるＣＰＵから次のＣＰＵへと送られる。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
この技術領域における従来の考え方は、機能並列処理モデルはデータ並列処理モデルよりも優れているというものである。その理由は、データ並列処理モデルは各プロセッサ内部においてタスク機能を変更できることが必要となり、これにより処理のスループットが悪くなるからである。しかし、この従来の考え方が正しくないことが明からかになっている。
【０００７】
理想的な （オーバヘッドのない）システムでは、４つのプロセッサを使用した場合、データ並列処理モデルと機能並列処理モデルの両方ともシングルプロセッサと比較して４倍速い処理を実現することができる。実際のシステムでは、データ並列処理モデルと機能並列処理モデルは異なるオーバヘッド特性を示すので、処理スピードも異なってくる。実験やシミュレーションにより以下のことが明らかになっている。例えば、「全オーバヘッド」分析を用いると、２以上のステップを行うのに必要な時間がかなり違う場合、データ並列処理モデルは機能並列処理モデルよりもオーバヘッドによる不利が４．６５倍低くなる。また、「ＭＦＣセットアップオーバヘッド」分析を用いると、データ並列処理モデルは機能並列処理モデルよりもオーバヘッドによる不利が１．６６倍低くなる。「同期化オーバヘッド」分析を用いると、データ並列処理モデルは機能並列処理モデルよりもオーバヘッドによる不利がやや高くなる。しかし、このやや高めのオーバヘッドによる不利は、上述の機能並列処理モデルのオーバヘッドによる不利よりはずっと低い。
【０００８】
よって、この技術領域において、マルチプロセッサシステムによるデータ並列処理モデルを実現する新たな手法が必要であり、これにより、その技術のわかるプログラマがタスク変更アプリケーションプログラミングインタフェースコードを用いてシステムの各プロセッサ内またはプロセッサ間でタスク変更を実現することができる。
【課題を解決するための手段】
【０００９】
本発明の１以上の態様によれば、マルチプロセッサシステムには、データ並列処理モデルを実行するタスク変更機能が備わっており、タスク変更はアプリケーションプログラミングインタフェース（ＡＰＩ）コードを用いて実現される。マルチプロセッサシステムがＭＰＥＧ２コーデック（ここで、ステップ１は可変長復号化（ＶＬＤ：Variable Length Decoding）、ステップ２は逆量子化（ＩＱ：Inverse Quantization）、ステップ３は逆離散コサイン変換（ＩＤＣＴ：Inverse Discrete Cosine Transform）、ステップ４は動き補償（ＭＣ：Motion Compensation）である）を実装している実験では、本発明の各態様によるタスク変更ＡＰＩ符号化機能を用いたデータ並列処理モデルは、４個のプロセッサを用いることでシングルプロセッサシステムよりも３．６倍高速な処理を実現した。一方、同じＭＰＥＧ２コーデックを実装する機能並列処理モデルは、４個のプロセッサを用いることでシングルプロセッサシステムよりも２．９倍高速な処理しか実現しなかった。
【００１０】
本発明の少なくとも１つの態様によれば、マルチ処理システムの複数のプロセッサ内においてデータ並列処理モデルに従って１以上のソフトウェアプログラムを実行する方法及び装置を提供する。ソフトウェアプログラムは複数の処理タスクからなり、各タスクは１以上の入力データユニットに命令を実行することにより出力データユニットを生成し、入出力の各データユニットは１以上のデータオブジェクトを含む。１以上のアプリケーションプログラミングインタフェースコードに応答して、プロセッサのうち所定の１以上のプロセッサ内部において、現在の処理タスクから次の処理タスクへの変更を呼び出す。さらに、次の処理タスクが現在の処理タスクによって生成された出力データユニットを入力データユニットとして用いて、同じプロセッサ内で更なる出力データユニットを生成する。
【００１１】
ソフトウェアプログラマは、複数のプロセッサがデータ並列処理モデルを実装するように１以上のソフトウェアプログラムを設計する場合に、アプリケーションプログラミングインタフェースコードを呼び出すことができる。
【００１２】
好ましくは、ソフトウェアアプリケーションは、最終結果を得るために異なるデータユニットに対して処理タスクを繰り返し実行することを命令する。データユニットのうちのいくつかは、好ましくは他の１以上のデータユニットに依存する。
【００１３】
各プロセッサは、メインメモリに頼らずに内部で処理タスクを実行するローカルメモリを含む。１又は複数のアプリケーションプログラミングインタフェースコードに応答して、当該プロセッサのローカルメモリ内で現在の処理タスクからの出力データユニットを保持する間に、所定のプロセッサ内で現在の処理タスクから次の処理タスクへの変更を呼び出す。
【００１４】
本方法及び本装置は、要求に応答して、現在の処理タスクから別のプロセッサへ出力データユニットをコピーして、異なる処理タスクの入力データユニットとして使用することを提供しうる。
【００１５】
一例では、ソフトウェアプログラムはＮ個のデータユニットに対して動作するＭ個の処理タスクを含みうる。ここでＭ及びＮは整数である。このような場合、本発明の１以上の態様に従って、以下のステップ及び／又は機能を実行しうる。
処理タスクのうちの第１のタスクをデータユニットのうちの少なくとも第１のデータユニットに対して実行することにより、第１の出力データユニットを自身から生成して第１のプロセッサのローカルメモリに格納する、
１又は複数のアプリケーションプログラミングインタフェースコードに応答して、第１の処理タスクから少なくとも第１の出力データユニットに対して動作する第２の処理タスクへと変更することにより、第２の出力データユニットを自身から生成して第１のプロセッサのローカルメモリに格納する、
第１のプロセッサの第１のデータユニットに対して、Ｍ個の処理タスクの実行が完了するまでこれらの動作を繰り返す。
【００１６】
本発明の種々の態様はさらに、以下のことを提供するようにしてもよい。
第１のプロセッサの動作と同時に、処理タスクのうちの第１のタスクをデータユニットのうち少なくとも第２のデータユニットに対して実行することにより、第１の出力データユニットを自身から生成して第２のプロセッサのローカルメモリに格納する、
１又は複数のアプリケーションプログラミングインタフェースコードに応答して、第１の処理タスクから第２の処理タスクへ変更するとともに少なくとも第１の出力データユニットに対して動作することにより第２の出力データユニットを自身から生成して第２のプロセッサのローカルメモリに格納する、
第２のプロセッサの第２のデータユニットに対して、Ｍ個の処理タスクの実行が完了するまでこれらの動作を繰り返す。
【００１７】
好ましくは、さらに別のプロセッサにおけるＮ個のデータユニットのすべてに対してＭ個の処理タスクのすべての実行が完了するまで、データユニットに対してＭ個の処理タスクが順次実行される。
【００１８】
本明細書において、本発明を添付図面とともに説明した場合に、他の態様、特徴、利点等は当業者には明らかであろう。
【００１９】
本発明の様々な態様を説明するために、現在の好ましい形態を図面の形式にて示すが、本発明は図示したとおりの構成ならびに手段に限定されないことを理解されたい。
【発明を実施するための最良の形態】
【００２０】
図１に本発明の１以上の態様を用いるのに適した処理システム１００を示す。簡潔で分かりやすくするために、図１のブロック図をここでは装置１００の図示として参照し、かつ説明するが、この説明は等しい効力を有する方法の様々な態様に容易に適用できることを理解されたい。なお、各図面において同じ要素は同じ番号で示している。
【００２１】
処理システム１００は複数のプロセッサ１０２Ａ、１０２Ｂ、１０２Ｃ、１０２Ｄを有しているが、本発明の趣旨および範囲から逸脱することなく任意のプロセッサ数を用いることができることを理解されたい。処理システム１００は、複数のローカルメモリ１０４Ａ、１０４Ｂ、１０４Ｃ、１０４Ｄ及び共有メモリ１０６を有している。プロセッサ１０２Ａ〜Ｄ、ローカルメモリ１０４Ａ〜Ｄ、及び共有メモリ１０６は、好ましくは、各構成要素間で適切なプロトコルに従ってデータを転送するように動作可能なバスシステム１０８で（直接または間接的に）互いに接続されている。
【００２２】
各プロセッサ１０２は同様の構成でも、或いは異なる構成でもよい。これらのプロセッサ１０２は、共有（或いはシステム）メモリ１０６からデータを要求し、そのデータを操作して所望の結果を得ることが可能な任意の従来技術を用いて実現することができる。例えば、プロセッサ１０２は、標準マイクロプロセッサや分散型マイクロプロセッサ等のソフトウェア及び／又はファームウェアの実行が可能な任意の従来のプロセッサを用いて実現できる。一例では、１以上のプロセッサ１０２は、グレースケール情報、色情報、テクスチャデータ、ポリゴン情報、ビデオフレーム情報等を含む画素データ等のデータを要求し、操作することが可能なグラフィックスプロセッサである。
【００２３】
処理システム１００のプロセッサ１０２の少なくとも１つは、メイン（または管理）プロセッサとしての役割を担うことができる。メインプロセッサは、他のプロセッサによるデータ処理をスケジューリングして調整を行う。
【００２４】
共有メモリ１０６は、好ましくは、メモリインタフェース回路（図示せず）を介して各プロセッサ１０２に接続されるダイナミックランダムアクセスメモリ（ＤＲＡＭ：Dynamic Random Access Memory）である。共有メモリ１０６は好ましくはＤＲＡＭであるが、例えばスタティックランダムアクセスメモリ（ＳＲＡＭ：Static Random Access Memory）、磁気ランダムアクセスメモリ（ＭＲＡＭ：Magnetic Random Access Memory）、光メモリ、ホログラフィックメモリ等の他の手段を用いて実現されてもよい。
【００２５】
各プロセッサ１０２は、好ましくは、プロセッサコア及びそれに対応するローカルメモリ１０４を含み、これによりプログラムを実行する。これらの構成要素は共通の半導体基板上に一体化して配置してもよく、また、設計者の望むとおりに別個に配置してもよい。プロセッサコアは、好ましくは、論理命令がパイプライン方式で処理されるプロセッシングパイプラインを用いて実現することができる。パイプラインは、命令が処理される任意の数のステージに分けることができ、一般にパイプラインは、１以上の命令のフェッチ、命令のデコード、命令間の依存性チェック、命令の発行、及び命令の実行の各ステップを有している。この点に関しプロセッサコアは、命令バッファ、命令デコード回路、依存性チェック回路、命令発行回路、及び実行ステージを有する。
【００２６】
各ローカルメモリ１０４はバス経由で対応するプロセッサコア１０２に接続されており、好ましくは、プロセッサコアとして同じチップ（同じ半導体基板）上に位置されている。ローカルメモリ１０４は、好ましくは、ハードウェアキャッシュメモリ機能を実装するためのオンチップもしくはオフチップのハードウェアキャッシュ回路、キャッシュレジスタ、キャッシュメモリコントローラ等が存在しない点において、従来のハードウェアキャッシュメモリとは異なる。オンチップのスペースは限定されていることが多いので、その場合、各ローカルメモリ１０４の寸法は共有メモリ１０６よりもずっと小さい。
【００２７】
プロセッサ１０２は、好ましくは、データアクセスの要求を行い、共有メモリ１０６からバスシステム１０８を介して、プログラム実行及びデータ操作用の関連するローカルメモリ１０４へ、（プログラムデータを含みうる）データをコピーする。データアクセスを容易にするメカニズムは、既知の技術、例えばダイレクトメモリアクセス（ＤＭＡ：Direct Memory Access）技術を利用して実現できる。この機能は、好ましくはメモリインタフェース回路によって実現される。
【００２８】
図２、３を参照すると、プロセッサ１０２は、好ましくは、自身に格納された１以上のソフトウェアプログラムを実行するために、共有メモリ１０６と動作可能な通信状態にある。ソフトウェアプログラムは多数の処理タスクから構成される。これらの処理タスクは、結果を得るために、データに対して１以上の命令を実行することを含む。データは、各々が１以上のデータオブジェクトを有するデータユニットＵｎを多数含む。
【００２９】
プロセッサ１０２は、好ましくは、１以上のアプリケーションプログラミングインタフェース（ＡＰＩ：Application Programming Interface）コードに応答して、処理タスクを実行する。例えば動作２００において、好ましくは、少なくとも１つの処理タスクを、共有メモリ１０６から所定のプロセッサ１０２に関連するローカルメモリ１０４へロードする。動作２０２では、当該プロセッサ１０２が処理タスクを実行して、入力データユニット（例えばＵｎ）から出力データユニット（例えばＵｎ'）を生成する。その後、出力データユニットを当該プロセッサ１０２の当該ローカルメモリ１０４に格納する（動作２０４）。
【００３０】
ソフトウェアプログラム全体の実行に関連し、動作２０６において、好ましくはプロセッサ１０２は、１以上のＡＰＩコードに応答して、（動作２００からの）現在の処理タスクから、次の処理タスクへと変更する。さらに、次の処理タスクが用いるデータユニットは、好ましくは現在の処理タスクからの出力データユニット（例えばＵｎ'）であり、このユニットでは当該プロセッサ１０２内においてさらなる出力データユニット（例えばＵｎ''）を求める。
【００３１】
上述に関連して、動作２０６では、プロセッサ１０２は１以上のＡＰＩコードを評価して、１又は複数のＡＰＩコードがタスク変更ＡＰＩコードであるか否かについて判定を行う（動作２０８）。動作２０８での判定結果が否定的である場合には、プロセスフローは、好ましくは判定を受けたＡＰＩコード上の適切な動作を行う動作２１０へ進む。他方、判定動作２０８での結果が肯定的である場合には、好ましくは、プロセスフローが現在の処理タスクの実行を停止する動作２１２へ進み、共有メモリ１０６等から新たな処理タスクを得る（動作２１４）。
【００３２】
現在の処理タスクを停止し引き続き新たな処理タスクを得る間、好ましくは、プロセッサ１０２が次の処理タスクが使用できるように、ローカルメモリ１０４内部にある現在の処理タスクからの出力データユニット（Ｕｎ'）を保持するように動作することができる。この点に関して、動作２１６では、好ましくは、プロセッサ１０２が先の処理タスクからの出力データユニット（Ｕｎ'）に対して次の処理タスクを実行して、さらなる出力データユニット（Ｕｎ''）を生成する。このさらなる出力データユニットは、好ましくは、プロセッサ１０２に関連するローカルメモリ１０４に格納される（動作２１８）。その後、プロセスフローは、好ましくは動作２０６に戻り、更なるＡＰＩコードを評価する。
【００３３】
図２〜３に示すプロセスフローは、好ましくは、最終結果を得るために所定のソフトウェアプログラムのすべての処理タスクをデータユニットで実行するように、必要に応じて繰り返される。一例として、図４に、図１のマルチプロセッサシステム１００に実装され、かつ実行されるデータ並列処理モデルを示す。特に、図４のタイミング図に示されているのは、４つのプロセッサ１０２Ａ〜Ｄ内で行われる各動作である。一般に、ソフトウェアプログラムはＮ個のデータユニットに対して動作するためのＭ個の処理タスクを含む。ここで、Ｍ及びＮはそれぞれ整数である。図４に示す例では、Ｍ＝４（４個の処理タスク）、Ｎ＝６（６個のデータユニット）である。
【００３４】
第１の期間で、プロセッサ１０２Ａ内で第１の処理タスクを実行することによりデータユニットＵ１が、プロセッサ１０２Ｂ内で第１の処理タスクを実行することによりデータユニットＵ２が、プロセッサ１０２Ｃ内で第１の処理タスクを実行することによりデータユニットＵ３が、そしてプロセッサ１０２Ｄ内で第１の処理タスクを実行することによりデータユニットＵ４が、それぞれ得られる。図２〜３に示す処理フローに従い、得られた出力データユニットＵ１、Ｕ２、Ｕ３、Ｕ４は、それぞれプロセッサ１０２に関連するローカルメモリ１０４に格納される。
【００３５】
１以上のタスク変更ＡＰＩコードに応答して、各プロセッサ１０２は第１の処理タスクの実行を停止し、次に実行するための第２の処理タスクを得る。第２の期間では、出力データユニットＵ１'、Ｕ２'、Ｕ３'、Ｕ４'を求めるために、各プロセッサ１０２は、第２の処理タスクをそれぞれのデータユニットＵ１、Ｕ２、Ｕ３、Ｕ４に対して実行する。その後、各プロセッサ１０２Ａ〜Ｄは、好ましくは第２の処理タスクの実行を停止して次に実行するための第３の処理タスクを得ることにより、１以上の更なるタスク変更ＡＰＩコードに応答する。第３の期間では、各プロセッサ１０２は、好ましくは、出力データユニットＵ１''、Ｕ２''、Ｕ３''、Ｕ４''を生成するために、第３の処理タスクをそれぞれの出力データユニットＵ１'、Ｕ２'、Ｕ３'、Ｕ４'に対して実行する。
【００３６】
このプロセスは、好ましくは、すべてのデータユニットＵｎに対してすべての処理タスクの実行が完了するまで繰り返される。図４に示すように、出力データユニットＵ５'''、Ｕ６'''を生成するために、その後の期間を用いて、プロセッサ１０２Ａ、１０２Ｂ内で４つの処理タスクを実行することができる。なお、１以上のタスク変更ＡＰＩコードが処理タスクを変更すべきことを示している場合に、好ましくは、先の処理タスクからの出力データユニットを各プロセッサ１０２に関連するローカルメモリ１０４に格納して、次の処理タスクを実行する際に引き続き使用する。
【００３７】
なお、図４に示すタイミングシーケンスは、データ並列処理モデルを実現する際における実行可能な多数のシーケンスの中の一例に過ぎない。図１のマルチプロセッサシステム１００が実行可能なタイミングシーケンスの別の例を図５に示す。しかしながら、図５に示すシーケンスは、図４での依存性とは異なるデータユニット依存性を示している。特に、第１の期間で出力データユニットＵ１は、第１の処理タスクをプロセッサ１０２Ａ内の所定の入力データユニットに対して実行することにより求められる。第２の期間では、出力データユニットＵ１'は、第２の処理タスクをプロセッサ１０２Ａ内のデータユニットＵ１に対して実行することにより求められる。同時に、出力データユニットＵ１を単独で若しくは他のデータと組み合わせて使用し、プロセッサ１０２Ｂ内で第１の処理タスクを実行することにより出力データユニットＵ２を求めることができる。第３の期間では、出力データユニットＵ１''は、第３の処理タスクをプロセッサ１０２Ａ内の出力データユニットＵ１'に対して実行することにより求められる。同時に、出力データユニットＵ２'は、第２の処理タスクをプロセッサ１０２Ｂ内の出力データユニットＵ１'及び／又はデータユニットＵ２に対して実行することにより求めることができる。またさらに、出力データユニットＵ３は、データユニットＵ２のみに対して若しくはプロセッサ１０２Ｃ内の他のデータと組み合わせて第１の処理タスクを実行することにより得られる。
【００３８】
このシーケンスは、好ましくは、すべての処理タスクがすべてのデータユニットに対して動作して、所望の結果を得るまで繰り返される。各データユニットを必要に応じてプロセッサ１０２間で転送することにより、図５に示す依存性を実現する。
【００３９】
ソフトウェアプログラマがソフトウェアプログラムを設計する場合、好ましくは、タスク変更ＡＰＩコードがソフトウェアプログラマによって呼び出される。タスク変更ＡＰＩコードを適切に使用することにより、プログラマはデータ並列処理モデルを実現するマルチプロセッサシステム１００を実現することができる。
【００４０】
以下に本明細書で説明している１以上の特徴を実行するのに適した、マルチプロセッサシステムのための好ましいコンピュータアーキテクチャを説明する。１以上の実施形態によれば、マルチプロセッサシステムは、ゲームシステム、家庭用端末、ＰＣシステム、サーバシステム、及びワークステーションなどのメディアリッチアプリケーションを、スタンドアローン処理及び／又は分散処理するために動作することができる、シングルチップソリューションとして実装することができる。ゲームシステムや家庭用端末などのいくつかのアプリケーションでは、リアルタイムの演算処理が必須である。例えば、リアルタイムの分散ゲームアプリケーションでは、ユーザにリアルタイムの経験をしていると思わせる程速く、１以上のネットワークイメージの復元、３Ｄコンピュータグラフィック、オーディオ生成、ネットワーク通信、物理的シミュレーション、及び人工知能処理が実行される必要がある。従って、マルチプロセッサシステムの各プロセッサは、短時間で、かつ予測可能時間でタスクを完了する必要がある。
【００４１】
このために、本コンピュータアーキテクチャによれば、マルチプロセッシングコンピュータシステムの全プロセッサは、共通の演算モジュール（或いはセル）から構成される。この共通の演算モジュールは、構造が一貫しており、また好ましくは、同じ命令セットアーキテクチャを採用している。マルチプロセッシングコンピュータシステムは、１以上のクライアント、サーバ、ＰＣ、モバイルコンピュータ、ゲームマシン、ＰＤＡ、セットトップボックス、電気器具、デジタルテレビ、及びコンピュータプロセッサを使用する他のデバイスにより形成することができる。
【００４２】
複数のコンピュータシステムもまた、必要に応じてネットワークのメンバとなりうる。一貫したモジュール構造により、マルチプロセッシングコンピュータシステムによるアプリケーション及びデータの効率的な高速処理が可能になる。またネットワークが採用される場合は、ネットワーク上にアプリケーション及びデータの高速送信が可能になる。この構造はまた、大きさや処理能力が様々なネットワークのメンバの構築を単純化し、これらのメンバが処理するアプリケーションの準備を単純化する。
【００４３】
図６を参照すると、基本的な処理モジュールはプロセッサエレメント（ＰＥ）５００である。ＰＥ５００は、Ｉ／Ｏインタフェース５０２、プロセッシングユニット（ＰＵ）５０４、及び複数のサブプロセッシングユニット５０８、すなわち、サブプロセッシングユニット５０８Ａ、サブプロセッシングユニット５０８Ｂ、サブプロセッシングユニット５０８Ｃ、及びサブプロセッシングユニット５０８Ｄを備えている。なお、好適には、ＰＵ５０４としてパワーＰＣ（ＰＰＥ：Power PC Element）を、ＳＰＵ５０８としてシナジスティックプロセッシングエレメント（ＳＰＥ：Synergisstic Processing Element）を用いる。ローカル（或いは内部）ＰＥバス５１２は、データ及びアプリケーションを、ＰＵ５０４、サブプロセッシングユニット５０８、及びメモリインタフェース５１１間で送信する。ローカルＰＥバス５１２は、例えば従来のアーキテクチャを備えることができ、又は、パケット−スイッチネットワークとして実装することができる。パケットスイッチネットワークとして実装される場合は、更なるハードウェアが必要であるものの、利用可能な帯域幅を増やすことができる。
【００４４】
ＰＥ５００は、デジタル論理回路を実現するように様々な方法を用いて構成可能である。しかしながら、好ましくは、ＰＥ５００はＳＯＩ基板を用いた集積回路として構成でき、或いはシリコン基板に相補性金属酸化膜半導体（ＣＭＯＳ：Complementary Metal Oxide Semiconductor）を用いた単一の集積回路とすることも好適な構成である。基板の他の材料には、ガリウムヒ素、ガリウムアルミウムヒ素、及び、様々なドーパントを採用している他の、いわゆる、III−Ｂ化合物を含む。ＰＥ５００はまた、高速単一磁束量子（ＲＳＦＱ：Rapid Single-Flux-Quantum）論理回路などの超電導デバイスを用いて実現されてもよい。
【００４５】
ＰＥ５００は高帯域のメモリ接続５１６を介して、共有（メイン）メモリ５１４と密接に結合するよう構成できる。なお、メモリ５１４をオンチップ化してもよい。好ましくは、メモリ５１４はダイナミックランダムアクセスメモリ（ＤＲＡＭ：Dynamic Random Access Memory）であるが、例えば、スタティックランダムアクセスメモリ（ＳＲＡＭ：Static Random Access Memory）、磁気ランダムアクセスメモリ（ＭＲＡＭ：Magnetic Random Access Memory）、光メモリ、ホログラフィックメモリなど他の方法を用いて実現してもよい。
【００４６】
ＰＵ５０４とサブプロセッシングユニット５０８は、それぞれダイレクトメモリアクセス（ＤＭＡ）の機能を備えたメモリフローコントローラ（ＭＦＣ：Memory Flow Controller）と結合されており、該メモリフローコントローラは、メモリインタフェース５１１と共に、ＰＥ５００のＤＲＡＭ５１４とサブプロセッシングユニット５０８、ＰＵ５０４との間のデータ転送を促進する。ＤＭＡＣ及び／又はメモリインタフェース５１１は、サブプロセッシングユニット５０８及びＰＵ５０４に一体化して、或いは個別に配置される。更に、ＤＭＡＣの機能及び／又はメモリインタフェース５１１の機能は、１以上の（好ましくはすべての）サブプロセッシングユニット５０８及びＰＵ５０４に統合することができる。なお、ＤＲＡＭ５１４は、ＰＥ５００と一体化されて配置されてもよいし、ＰＥ５００とは別個に配置されてもよい。例えば、ＤＲＡＭ５１４は、実例で示しているように、チップ外に配置してもよく、あるいは一体化してオンチップ配置としてもよい。
【００４７】
ＰＵ５０４はデータ及びアプリケーションをスタンドアローン処理できる標準プロセッサなどを用いることができる。動作時にＰＵ５０４は、好ましくはサブプロセッシングユニットによるデータ及びアプリケーション処理をスケジューリングして調整を行う。サブプロセッシングユニットは、好ましくは、単一命令複数データ（ＳＩＭＤ：Single Instruction Multiple Data）プロセッサにより実現される。ＰＵ５０４の管理下、サブプロセッシングユニットは並列、かつ独立して、これらのデータ及びアプリケーション処理を行う。ＰＵ５０４は、好ましくは、ＲＩＳＣ（Reduced Instruction Set Computing）技術を採用しているマイクロプロセッサアーキテクチャであるパワーＰＣ（PowerPC）コアを用いて実現できる。ＲＩＳＣは、単純な命令の組合せを用いて、より複雑な命令を実行する。従って、プロセッサのタイミングは、単純で高速の動作に基づくものであり、マイクロプロセッサがより多くの命令を所定のクロック速度で実行できる。
【００４８】
ＰＵ５０４は、サブプロセッシングユニット５０８により、データ及びアプリケーション処理をスケジューリングして調整を行うことでメインプロセッシングユニットの役割を果たす、１つのサブプロセッシングユニットにより実現できる。更に、プロセッサエレメント５００内には更に多くのＰＵ５０４を設けてもよい。
【００４９】
本モジュール構造によれば、特定のコンピュータシステムが有するＰＥ５００の数は、そのシステムが要求する処理能力に基づく。例えば、サーバが有するＰＥ５００の数は４、ワークステーションが有するＰＥ５００の数は２、ＰＤＡが有するＰＥ５００の数は１とすることができる。特定のソフトウエアセルの処理に割当てられるＰＥ５００のサブプロセッシングユニット数は、セル内のプログラムやデータの複雑度や規模により決定される。このように、ＰＥ５００はモジュール構造を有していることから拡張性が高く、搭載するシステムのスケール、パフォーマンスに応じて容易に拡張することができる。
【００５０】
図７にサブプロセッシングユニット（ＳＰＵ）５０８の好ましい構造及び機能を例示する。ＳＰＵ５０８アーキテクチャは、好ましくは多目的プロセッサ（平均して高性能を広範なアプリケーションに実現するように設計されているもの）と、特殊目的プロセッサ（高性能を単一のアプリケーションに実現するように設計されているもの）との間の間隙を埋める。ＳＰＵ５０８は、ゲームアプリケーション、メディアアプリケーション、ブロードバンドシステムなどに高性能を実現するように、また、リアルタイムアプリケーションのプログラマに高度な制御を提供するように設計される。ＳＰＵ５０８は、グラフィックジオメトリーパイプライン、サーフェースサブディビジョン、高速フーリエ変換、画像処理キーワード、ストリームプロセッシング、ＭＰＥＧのエンコード／デコード、エンクリプション、デクリプション、デバイスドライバの拡張、モデリング、ゲーム物理学、コンテンツ制作、音響合成及び処理が可能である。
【００５１】
サブプロセッシングユニット５０８は２つの基本機能ユニットを有し、それらはＳＰＵコア５１０Ａ及びメモリフローコントローラ（ＭＦＣ）５１０Ｂである。ＳＰＵコア５１０Ａはプログラムの実行、データ操作、などを行い、一方でＭＦＣ５１０ＢはシステムのＳＰＵコア５１０ＡとＤＲＡＭ５１４の間のデータ転送に関連する機能を実行する。
【００５２】
ＳＰＵコア５１０Ａは、ローカルメモリ５５０、命令ユニット（ＩＵ：Instruction Unit）５５２、レジスタ５５４、１以上の浮動小数点実行ステージ５５６、及び１以上の固定小数点実行ステージ５５８を有している。ローカルメモリ５５０は、好ましくは、ＳＲＡＭなどの、シングルポートのランダムメモリアクセスを用いて実装される。殆どのプロセッサは、キャッシュの導入によりメモリへのレイテンシを小さくする一方で、ＳＰＵコア５１０Ａはキャッシュより小さいローカルメモリ５５０を実装している。リアルタイムアプリケーション（及び本明細書に述べているように、他のアプリケーション）のプログラマたちに一貫した、予測可能なメモリアクセスレイテンシを提供するために、ＳＰＵ５０８Ａ内のキャッシュメモリアーキテクチャは好ましくない。キャッシュメモリのキャッシュヒット／ミスという特徴のために、数サイクルから数百サイクルまでの、予測困難なメモリアクセス時間が生じる。そのような予測困難性により、例えばリアルタイムアプリケーションのプログラミングに望ましい、アクセス時間の予測可能性が低下する。ＤＭＡ転送をデータの演算処理にオーバーラップさせることで、ローカルメモリＳＲＡＭ５５０においてレイテンシの隠蔽を実現しうる。これにより、リアルタイムアプリケーションのプログラミングが制御しやすくなる。ＤＭＡの転送に関連するレイテンシと命令のオーバーヘッドが、キャッシュミスにサービスしているレイテンシのオーバーヘッドを超過していることから、ＤＭＡの転送サイズが十分に大きく、十分に予測可能な場合（例えば、データが必要とされる前にＤＭＡコマンドが発行される場合）に、このＳＲＡＭのローカルメモリ手法による利点が得られる。
【００５３】
サブプロセッシングユニット５０８のうちの、所定の１つのサブプロセッシングユニット上で実行しているプログラムは、ローカルアドレスを使用している関連のローカルメモリ５５０を参照する。しかしながら、ローカルメモリ５５０のそれぞれの場所はまた、システムのメモリマップ全体内に実アドレス（ＲＡ：Real Address）も割当てられる。これにより、プリビレッジソフトウエア（Privilege software）はローカルメモリ５５０をプロセスの有効アドレス（ＥＡ：Effective Address）にマッピングする、ローカルメモリ５５０と別のローカルメモリ５５０間のＤＭＡ転送を促進する。ＰＵ５０４はまた、有効アドレスを用いてローカルメモリ５５０に直接アクセスすることができる。好ましい実施形態では、ローカルメモリ５５０は５５６キロバイトのストレージを有し、またレジスタ５５４の容量は１２８×１２８ビットである。
【００５４】
ＳＰＵコア５１０Ａは、好ましくは、論理命令をパイプライン方式で処理するプロセッシングパイプラインを用いて実装される。パイプラインは命令が処理されるいずれの数のステージに分けられうるが、一般にパイプラインは１以上の命令のフェッチ、命令のデコード、命令間の依存性チェック、命令の発行、及び命令の実行ステップを有している。これに関連して、ＩＵ５５２は命令バッファ、命令デコード回路、依存性チェック回路、及び命令発行回路を有する。
【００５５】
命令バッファは、好ましくは、ローカルメモリ５５０と結合され、また、フェッチされる際に一時的に命令を格納するように動作できる、複数のレジスタを備えている。命令バッファは好ましくは、全ての命令が一つのグループとしてレジスタから出て行く、つまり、実質的に同時に出て行くように動作する。命令バッファはいずれの大きさでもよいが、好ましくは、２あるいは３レジスタよりは大きくないサイズである。
【００５６】
一般に、デコード回路は命令を分解し、対応する命令の関数を実施する論理的マイクロオペレーションを生成する。例えば、論理的マイクロオペレーションは、算術論理演算、ローカルメモリ５５０へのロード及びストアオペレーション、レジスタソースオペランド、及び／又は即値データオペランドを特定しうる。デコード回路はまた、ターゲットレジスタアドレス、構造リソース、機能ユニット、及び／又はバスなど、命令がどのリソースを使用するかを示しうる。デコード回路はまた、リソースが要求される命令パイプラインステージを示す情報を与えることが出来る。命令デコード回路は好ましくは、命令バッファのレジスタ数に等しい数の命令を実質的に同時にデコードするように動作する。
【００５７】
依存性チェック回路は、所定の命令のオペランドがパイプラインの他の命令のオペランドに依存しているかどうかを判断するために試験を行う、デジタル論理回路を含む。その場合、所定の命令はそのような他のオペランドが（例えば、他の命令が実行の完了を許容することにより）アップデートされるまで、実行されない。依存性チェック回路は好ましくは、デコード回路から同時に送られる複数の命令の依存性を判断する。
【００５８】
命令発行回路は、浮動小数点実行ステージ５５６及び／又は固定小数点実行ステージ５５８へ命令を発行するように動作することができる。
【００５９】
レジスタ５５４は好ましくは、１２８エントリのレジスタファイルなどの、相対的に大きな統一レジスタファイルとして実装される。これにより、レジスタが足りなくなる状態を回避するよう、レジスタリネーミングを必要としない、深くパイプライン化された高周波数の実装品が可能になる。一般に、ハードウェアリネーミングには、処理システムのかなりの割合の領域と電力を消費する。その結果、ソフトウエアのループ展開、又は他のインターリーブ技術によりレイテンシがカバーされると、最新のオペレーションが実現されうる。
【００６０】
ＳＰＵコア５１０Ａは、好ましくはスーパースカラアーキテクチャであり、これにより１以上の命令がクロックサイクル毎に発行される。ＳＰＵコア５１０Ａは好ましくは、命令バッファから送られる同時命令の数、例えば２〜３命令（各クロックサイクル毎に２命令あるいは３命令が発行されることを意味する）に対応する程度まで、スーパースカラとして動作する。所望の処理能力に応じて、多数の、あるいは少数の浮動小数点実行ステージ５５６と、固定小数点実行ステージ５５８が採用される。好ましい実施形態では、浮動小数点実行ステージ５５６は１秒あたり３２０億の浮動小数点演算速度で演算し（３２ＧＦＬＯＰＳ）、また、固定小数点実行ステージ５５８は１秒あたり３２０億回（３２ＧＯＰＳ）の演算速度となっている。
【００６１】
ＭＦＣ５１０Ｂは、好ましくは、バスインタフェースユニット（ＢＩＵ：Bus Interface Unit）５６４、メモリ管理ユニット（ＭＭＵ：Memory Management Unit）５６２、及びダイレクトメモリアクセスコントローラ（ＤＭＡＣ：Direct Memory Access Controller）５６０を備えている。ＤＭＡＣ５６０は例外として、ＭＦＣ５１０Ｂは好ましくは、低電力化設計とするため、ＳＰＵコア５１０Ａやバス５１２と比べて半分の周波数で（半分の速度で）動作する。ＭＦＣ５１０Ｂはバス５１２からＳＰＵ５０８に入力されるデータや命令を処理するように動作することができ、ＤＭＡＣに対しアドレス変換を行い、また、データコヒーレンシに対しスヌープオペレーションを提供する。ＢＩＵ５６４はバス５１２とＭＭＵ５６２及びＤＭＡＣ５６０との間にインタフェースを提供する。従って、ＳＰＵ５０８（ＳＰＵコア５１０Ａ及びＭＦＣ５１０Ｂを含む）及びＤＭＡＣ５６０は、バス５１２と物理的に及び／又は論理的に結合されている。
【００６２】
ＭＭＵ５６２は、好ましくは、メモリアクセスのために、実アドレスに有効アドレスを変換するように動作することができる。例えば、ＭＭＵ５６２は、有効アドレスの上位ビットを実アドレスビットに変換しうる。しかしながら下位のアドレスビットは、好ましくは変換不能であり、また、実アドレスの形成及びメモリへのアクセスリクエストに使用する場合には、ともに論理的及び物理的なものと考えられる。１以上の実施形態では、ＭＭＵ５６２は、６４ビットのメモリ管理モデルに基づいて実装され、また、４Ｋ−、６４Ｋ−、１Ｍ−、及び１６Ｍ−バイトのページサイズを有する２６４バイトの有効アドレススペースと、２５６ＭＢのセグメントサイズを提供しうる。ＭＭＵ５６２は好ましくは、ＤＭＡコマンドに対し、２６５バイトまでの仮想メモリ、２４２バイト（４テラバイト）までの物理メモリをサポートするように動作することができる。ＭＭＵ５６２のハードウェアは、８−エントリでフルアソシエイティブのＳＬＢと、２５６−エントリと、４ウエイセットアソシエイティブのＴＬＢと、ＴＬＢに対してハードウェアＴＬＢのミスハンドリングに使用される４×４リプレースメント管理テーブル（ＲＭＴ：Replacement Management Table）と、を含む。
【００６３】
ＤＭＡＣ５６０は、好ましくは、ＳＰＵコア５１０Ａや、ＰＵ５０４、及び／又は他のＳＰＵなどの１以上の他のデバイスからのＤＭＡコマンドを管理するように動作することができる。ＤＭＡコマンドには３つのカテゴリが存在し、それらは、プットコマンド、ゲットコマンド、及びストレージ制御コマンドである。プットコマンドは、ローカルメモリ５５０から共有メモリ５１４へデータを移動させるよう動作する。ゲットコマンドは、共有メモリ５１４からローカルメモリ５５０へデータを移動させるよう動作する。また、ストレージ制御コマンドには、ＳＬＩコマンドと同期化コマンドが含まれる。この同期化コマンドは、アトミックコマンド（atomic command）、信号送信コマンド、及び専用バリアコマンドを有しうる。ＤＭＡコマンドに応答して、ＭＭＵ５６２は有効アドレスを実アドレスに変換し、実アドレスはＢＩＵ５６４へ送られる。
【００６４】
ＳＰＵコア５１０Ａは、好ましくは、ＤＭＡＣ５６０内のインタフェースと通信（ＤＭＡコマンド、ステータスなどを送る）するために、チャネルインタフェース及びデータインタフェースを使用する。ＳＰＵコア５１０Ａはチャネルインタフェースを介して、ＤＭＡＣ５６０のＤＭＡキューへＤＭＡコマンドを送る。ＤＭＡコマンドがＤＭＡキューに存在すると、そのコマンドはＤＭＡＣ５６０内の発行及び完了論理により処理される。ＤＭＡコマンドに対する全てのバストランザクションが終了すると、完了信号がチャネルインタフェースを越えて、ＳＰＵコア５１０Ａへ送られる。
【００６５】
図８はＰＵ５０４の好ましい構造及び機能を例示している。ＰＵ５０４は２つの基本的な機能ユニットを有しており、それらはＰＵコア５０４Ａとメモリフローコントローラ（ＭＦＣ）５０４Ｂである。ＰＵコア５０４Ａは、プログラム実行、データ操作、マルチプロセッサマネージメント機能などを実行し、一方でＭＦＣ５０４Ｂはシステム１００のＰＵコア５０４Ａとメモリスペース間のデータ転送に関連する機能を実行する。
【００６６】
ＰＵコア５０４Ａは、Ｌ１キャッシュ５７０、命令ユニット５７２、レジスタ５７４、１以上の浮動小数点実行ステージ５７６、及び１以上の固定小数点実行ステージ５７８を有することができる。Ｌ１キャッシュ５７０は、共有メモリ１０６、プロセッサ１０２、又はＭＦＣ５０４Ｂを介してメモリスペースの他の部分から受信したデータに対するデータキャッシングの機能を提供する。ＰＵコア５０４Ａが好ましくはスーパーパイプラインとして実装されるので、命令ユニット５７２は好ましくは、フェッチ、デコード、依存性チェック、発行などを含む、多くのステージを備えた命令パイプラインとして実装される。またＰＵコア５０４は好ましくは、スーパースカラ構成であり、一方で１以上の命令がクロックサイクル毎に命令ユニット５７２から発行される。高度な処理（演算）能力を実現するために、浮動小数点実行ステージ５７６と固定小数点実行ステージ５７８は、パイプライン構成で複数のステージを有する。要求される処理能力に応じて、多数の又は少数の浮動小数点実行ステージ５７６と固定小数点実行ステージ５７８が採用されうる。
【００６７】
ＭＦＣ５０４Ｂは、バスインタフェースユニット（ＢＩＵ）５８０、Ｌ２キャッシュメモリ５８２、キャッシュ不可能なユニット（ＮＣＵ：Non-Cachable Unit）５８４、コアインタフェースユニット（ＣＩＵ：Core Interface Unit）５８６、及びメモリ管理ユニット（ＭＭＵ）５８８を備えている。殆どのＭＦＣ５０４Ｂは、低電力化設計とするために、ＰＵコア５０４Ａ及びバス１０８と比べて、半分の周波数（半分の速度）で動作する。
【００６８】
ＢＩＵ５８０は、バス１０８とＬ２キャッシュ５８２とＮＣＵ５８４論理ブロック間にインタフェースを提供する。このためにＢＩＵ５８０は、バス１０８上で、十分にコヒーレントなメモリオペレーションを実施するために、マスタデバイスとして、また同様にスレーブデバイスとして機能する。マスタデバイスとして、ＢＩＵ５８０はＬ２キャッシュ５８２とＮＣＵ５８４のために機能するため、バス１０８へロード／ストアリクエストを供給する。ＢＩＵ５８０はまた、バス１０８へ送信されうるコマンドの合計数を制限するコマンドに対し、フロー制御機構を実装しうる。バス１０８上のデータオペレーションは、８ビート要するように設計され、そのために、ＢＩＵ５８０は好ましくは１２８バイトキャッシュラインを有するように設計され、また、コヒーレンシーと同期化の粒度単位は１２８ＫＢである。
【００６９】
Ｌ２キャッシュメモリ５８２（及びサポートハードウェア論理回路）は、好ましくは、５１２ＫＢのデータをキャッシュするように設計されている。例えば、Ｌ２キャッシュ５８２はキャッシュ可能なロード／ストア、データプリフェッチ、命令フェッチ、命令プリフェッチ、キャッシュオペレーション、及びバリアオペレーションを処理しうる。Ｌ２キャッシュ５８２は、好ましくは８ウエイのセットアソシエイティブシステムである。Ｌ２キャッシュ５８２は、６つのキャストアウトキュー（６つのＲＣマシンなど）と一致する６つのリロードキューと、８つ（６４バイト幅）のストアキューを備えうる。Ｌ２キャッシュ５８２は、Ｌ１キャッシュ５７０において、一部、あるいは全てのデータのコピーをバックアップするように動作しうる。この点は、処理ノードがホットスワップである場合に、状態を回復するのに便利である。このような構成により、Ｌ１キャッシュ５７０が少ないポート数でより速く動作することができ、また、より速くキャッシュツーキャッシュ転送ができる（リクエストがＬ２キャッシュ５８２でストップしうるため）。この構成はまた、キャッシュコヒーレンシー管理をＬ２キャッシュメモリ５８２へ送るための機構も提供しうる。
【００７０】
ＮＣＵ５８４は、ＣＩＵ５８６、Ｌ２キャッシュメモリ５８２、及びＢＩＵ５８０と連動しており、通常は、ＰＵコア５０４Ａとメモリシステム間のキャッシュ不可能なオペレーションに対して、キューイング／バッファリング回路として機能する。ＮＣＵ５８４は好ましくは、キャッシュ抑制ロード／ストア、バリアオペレーション、及びキャッシュコヒーレンシーオペレーションなどの、Ｌ２キャッシュ５８２により処理されないＰＵコア５０４Ａとのすべての通信を処理する。ＮＣＵ５８４は、好ましくは、上述の低電力化目的を満たすように、半分の速度で動作されうる。
【００７１】
ＣＩＵ５８６は、ＭＦＣ５０４ＢとＰＵコア５０４Ａの境界に配置され、実行ステージ５７６、５７８、命令ユニット５７２、及びＭＭＵユニット５８８からのリクエストに対し、また、Ｌ２キャッシュ５８２及びＮＣＵ５８４へのリクエストに対し、ルーティング、アービトレーション、及びフロー制御ポイントして機能する。ＰＵコア５０４Ａ及びＭＭＵ５８８は、好ましくはフルスピードで実行され、一方でＬ２キャッシュ５８２及びＮＣＵ５８４は２：１の速度比で動作することができる。従って、周波数の境界がＣＩＵ５８６に存在し、その機能の一つは、２つの周波数ドメイン間でリクエストの送信及びデータのリロードを行いながら、周波数の差を適切に処理することである。
【００７２】
ＣＩＵ５８６は３つの機能ブロックを有しており、それらは、ロードユニット、ストアユニット、及びリロードユニットである。更に、データプリフェッチ機能がＣＩＵ５８６により実施され、また好ましくは、ロードユニットの機能部である。ＣＩＵ５８６は、好ましくは、
（i）ＰＵコア５０４ＡとＭＭＵ５８８からのロード及びストアリクエストを受ける、
（ii）フルスピードのクロック周波数をハーフスピードに変換する（２：１のクロック周波数変換）、
（iii）キャッシュ可能なリクエストをＬ２キャッシュ５８２へ送り、キャッシュ不可能なリクエストをＮＣＵ５８４へ送る、
（iv）Ｌ２キャッシュ５８２に対するリクエストとＮＣＵ５８４に対するリクエストを公正に調停する、
（v）ターゲットウインドウでリクエストが受信されてオーバーフローが回避されるように、Ｌ２キャッシュ５８２とＮＣＵ５８４に対する転送のフロー制御を提供する、
（vi）ロードリターンデータを受信し、そのデータを実行ステージ５７６、５７８、命令ユニット５７２、又はＭＭＵ５８８へ送る、
（vii）スヌープリクエストを実行ステージ５７６、５７８、命令ユニット５７２、又はＭＭＵ５８８へ送る、
（viii）ロードリターンデータとスヌープトラフィックを、ハーフスピードからフルスピードへ変換する、
ように動作可能である。
【００７３】
ＭＭＵ５８８は、好ましくはＰＵコア５０４Ａに対して、第２レベルのアドレス変換機能などによりアドレス変換を行う。第１レベルの変換は、好ましくは、ＭＭＵ５８８よりも小型で高速でありうる、別々の命令及びデータＥＲＡＴ（Effective to Real Address Translation）アレイにより、ＰＵコア５０４Ａにおいて提供されうる。
【００７４】
好ましい実施形態では、ＰＵ５０４は、６４ビットの実装品で、４−６ＧＨｚ、１０Ｆ０４で動作する。レジスタは、好ましくは６４ビット長（１以上の特殊用途のレジスタは小型でありうるが）であり、また、有効アドレスは６４ビット長である。命令ユニット５７２、レジスタ５７４、及び実行ステージ５７６、５７８は、好ましくは、（ＲＩＳＣ）演算技術を実現するために、PowerPC技術を用いて実装される。
【００７５】
本コンピュータシステムのモジュール構造に関する更なる詳細は、米国特許第６，５２６，４９１号に解説されており、該特許は参照として本願に組込まれる。
【００７６】
本発明の少なくとも１つの更なる態様によれば、上述の方法及び装置は、図面において例示しているような、適切なハードウェアを利用して実現されうる。そのようなハードウェアは標準デジタル回路などの任意の従来技術、ソフトウエア、及び／またはファームウエアプログラムを実行するように動作可能な任意の従来のプロセッサ、プログラム可能なＲＯＭ（ＰＲＯＭ：Programmable Read Only Memory）、プログラム可能なアレイ論理デバイス（ＰＡＬ：Programmable Array Logic）などの、１つ以上のプログラム可能なデジタルデバイスあるいはシステムを用いて実装されうる。更に、各図に図示している装置は、特定の機能ブロックに分割されて示されているが、そのようなブロックは別の回路を用いて実装されうる及び／あるいは組み合わされて１つ以上の機能ユニットになりうる。更に、本発明の様々な態様は、輸送及び／又は配布のために、（フロッピーディスク、メモリチップなどの）適切な１つまたは複数の記憶媒体に格納されうる、ソフトウエア及び／又はファームウエアプログラムを通じて実装されうる。
【００７７】
本発明の様々な態様により、ソフトウェアプログラマは、マルチプロセッサシステムを１つ以上のタスク変更ＡＰＩコードに応答させてデータ並列処理モデルを実現することが可能となり、好都合である。
【００７８】
本明細書において、具体的な実施形態を用いて本発明を記載したが、これらの実施形態は本発明の原理および用途の例を示すものに過ぎないことを理解されたい。このため、添付の請求の範囲で定義した本発明の趣旨および範囲から逸脱することなく、これら例示的な実施形態を種々に変更したり、上記以外の構成を考案し得ることが理解されよう。
【図面の簡単な説明】
【００７９】
【図１】本発明の１以上の態様による２以上のサブプロセッサを有するマルチ処理システムの構造を示すブロック図である。
【図２】本発明の１以上の更なる態様による、図１の処理システムによって実行されうる処理ステップを示すフローチャートである。
【図３】本発明の１以上の更なる態様による、図１の処理システムによって実行されうる、さらに後の処理ステップを示すフローチャートである。
【図４】本発明の１以上の更なる態様による、図１のプロセッサによる処理タスク実行方法の一例を示すタイミング図である。
【図５】本発明の１以上の更なる態様による、図１のプロセッサによる処理タスク実行方法の別の例を示すタイミング図である。
【図６】本発明の１以上の更なる態様による、マルチプロセッサシステムを実装するのに使用されうる、好ましいプロセッサエレメント（ＰＥ）を示すブロック図である。
【図７】本発明の１以上の更なる態様による、図６のシステムのサブプロセッシングユニット（ＳＰＵ）の一例の構造を示すブロック図である。
【図８】本発明の１以上の更なる態様による、図６のシステムのプロセッシングユニット（ＰＵ）の一例の構造を示すブロック図である。
【符号の説明】
【００８０】
１００  処理システム
１０２、１０２Ａ〜Ｄ  プロセッサ
１０４、１０４Ａ〜Ｄ  ローカルメモリ
１０６  共有メモリ
１０８  バスシステム
５００  プロセッサエレメント
５０２  Ｉ／Ｏインタフェース
５０４  プロセッシングユニット
５０４Ａ  ＰＵコア
５０８、５０８Ａ〜Ｄ  サブプロセッシングユニット
５１０Ａ  ＳＰＵコア
５１０Ｂ  メモリフローコントローラ
５１１  メモリインタフェース
５１２  ローカルＰＥバス
５１４  共有メモリ
５１６  高帯域のメモリ接続
５５０  ローカルメモリ
５５２、５７２  命令ユニット
５５４、５７４  レジスタ
５５６、５７６  浮動小数点実行ステージ
５５８、５７８  固定小数点実行ステージ
５６０  ダイレクトメモリアクセスコントローラ
５６２、５８８  メモリ管理ユニット
５６４、５８０  バスインタフェースユニット
５７０  Ｌ１キャッシュ
５８２  Ｌ２キャッシュ
５８４  ＮＣＵ
５８６  ＣＩＵ
【図１】
2006221638.tif 000003
【図２】
2006221638.tif 000004
【図３】
2006221638.tif 000005
【図４】
2006221638.tif 000006
【図５】
2006221638.tif 000007
【図６】
2006221638.tif 000008
【図７】
2006221638.tif 000009
【図８】
2006221638.tif 000010