(57)【要約】【課題】  動作時にメインメモリと接続されるプロセッサのためにデータをストアする方法と装置を提供する。【解決手段】  プロセッサ１０２は、メインメモリ１０６に記憶されたデータの少なくとも一部を使用するためのリクエストをすることができ、ローカルメモリ１０４は動作時にプロセッサ１０２と接続され、プロセッサ１０２が使用するためのデータをストアする。ローカルメモリ１０４はハードウェアキャッシュメモリではなく、プロセッサ１０２はソフトウェアによって呼び出されるキャッシュメモリ領域を少なくともひとつ含むようにローカルメモリ１０４を構成するアプリケーションプログラムインタフェイスのコードを実行するよう動作することが可能である。【選択図】  図１
2005339557.tif 000002
【特許請求の範囲】
【請求項１】
メインメモリに接続可能、かつ、メインメモリ内に記憶されたデータを取得可能なプロセッサと、
ハードウェアキャッシュメモリではなく、プロセッサによって使用されることによりデータを記憶するよう動作時にプロセッサに接続されるローカルメモリとを備え、
プロセッサは、ソフトウェアによって呼び出されるキャッシュメモリ領域を少なくともひとつ含むようにローカルメモリを構成するアプリケーションプログラムインタフェイスのコードを実行するよう動作することを特徴とするキャッシュメモリ実装装置。
【請求項２】
請求項１に記載のキャッシュメモリ実装装置において、プロセッサがアプリケーションプログラムインタフェイスのコードを使用することにより、ソフトウェアによって呼び出される前記キャッシュメモリ領域を含むべき所定数のキャッシュラインを指定することを特徴とするキャッシュメモリ実装装置。
【請求項３】
請求項１に記載のキャッシュメモリ実装装置において、ソフトウェアによって呼び出される少なくともひとつの前記キャッシュメモリ領域は、所定数のキャッシュラインを含み、プロセッサはアプリケーションプログラムインタフェイスのコードを使用してキャッシュラインのサイズを指定するよう動作することを特徴とするキャッシュメモリ実装装置。
【請求項４】
請求項１に記載のキャッシュメモリ実装装置において、プロセッサは、アプリケーションプログラムインタフェイスのコードを使用して、前記データをリード／ライトするためのメインメモリの特定領域を指定するよう動作することを特徴とするキャッシュメモリ実装装置。
【請求項５】
請求項１に記載のキャッシュメモリ実装装置において、プロセッサはアプリケーションプログラムインタフェイスのコードを使用して、各リード／ライトサイクルにおいてメインメモリからリードし、またはメインメモリへライトする前記データのデータサイズを指定するよう動作することを特徴とするキャッシュメモリ実装装置。
【請求項６】
請求項１に記載のキャッシュメモリ実装装置において、ソフトウェアによって呼び出される少なくともひとつの前記キャッシュメモリ領域は、所定数のキャッシュラインを含み、プロセッサはアプリケーションプログラムインタフェイスのコードを使用することでキャッシュライン置換の方針を指定するよう動作することを特徴とするキャッシュメモリ実装装置。
【請求項７】
請求項１に記載のキャッシュメモリ実装装置において、プロセッサは、ソフトウェアによって呼び出される複数の独立したキャッシュメモリ領域を含むようローカルメモリを構成するアプリケーションプログラムインタフェイスのコードを実行するよう動作することを特徴とするキャッシュメモリ実装装置。
【請求項８】
請求項１に記載のキャッシュメモリ実装装置において、プロセッサがアプリケーションプログラムインタフェイスのコードを使用し、
ａ．ソフトウェアによって呼び出される少なくともひとつのキャッシュメモリ領域に含むべきキャッシュラインの数
ｂ．キャッシュラインのサイズ
ｃ．前記データがリード／ライトされるメインメモリの特定領域
ｄ．各リード／ライトサイクルでメインメモリからリードし、またはメインメモリにライトするデータのデータサイズ
ｅ．キャッシュライン置換の方針
のパラメータの少なくともいずれかを指定するよう動作することを特徴とするキャッシュメモリ実装装置。
【請求項９】
請求項１に記載のキャッシュメモリ実装装置において、
プロセッサは少なくともキャッシュヒット率とキャッシュアクセス頻度のいずれかに基づきキャッシュペナルティを計算するよう動作し、計算結果に対応してソフトウェアによって呼び出されるキャッシュメモリ領域のパラメータを再構成するよう動作することを特徴とするキャッシュメモリ実装装置。
【請求項１０】
請求項９に記載のキャッシュメモリ実装装置において、ソフトウェアによって呼び出されるキャッシュメモリ領域のパラメータは、
ａ．ソフトウェアによって呼び出される少なくともひとつのキャッシュメモリ領域に含むべきキャッシュラインの数
ｂ．キャッシュラインのサイズ
ｃ．前記データがリード／ライトされるメインメモリの特定領域
ｄ．各リード／ライトサイクルでメインメモリからリードし、またはメインメモリにライトするデータのデータサイズ
ｅ．キャッシュライン置換の方針
のいずれかを含むことを特徴とするキャッシュメモリ実装装置。
【請求項１１】
データを記憶するよう動作可能なメインメモリと、
それぞれメインメモリと接続されるよう動作可能であり、メインメモリから少なくとも前記データの一部を得るよう動作可能な複数のプロセッサと、
ハードウェアキャッシュメモリではなく、それぞれプロセッサに対応してオンチップで配置され、プロセッサによって使用されることによりデータを格納するよう動作時にプロセッサに接続されるローカルメモリと、
を備え、各プロセッサは、ソフトウェアによって呼び出されるキャッシュメモリ領域を少なくともひとつの含むように各ローカルメモリを構成するアプリケーションプログラムインタフェイスのコードを実行するよう動作することを特徴とするキャッシュメモリ実装装置。
【請求項１２】
請求項１１に記載のキャッシュメモリ実装装置において、少なくともひとつのプロセッサは、ソフトウェアによって呼び出される複数の独立したキャッシュメモリ領域を含むようそのプロセッサに対応するローカルメモリを構成するアプリケーションプログラムインタフェイスのコードを実行するよう動作することを特徴とするキャッシュメモリ実装装置。
【請求項１３】
請求項１１に記載のキャッシュメモリ実装装置において少なくともひとつのプロセッサがアプリケーションプログラムインタフェイスのコードを使用し、
ａ．ソフトウェアによって呼び出される少なくともひとつのキャッシュメモリ領域に含むべきキャッシュラインの数
ｂ．キャッシュラインのサイズ
ｃ．前記データがリード／ライトされるメインメモリの特定領域
ｄ．各リード／ライトサイクルでメインメモリからリードし、またはメインメモリにライトするデータのデータサイズ
ｅ．キャッシュライン置換の方針
のパラメータの少なくともいずれかを指定するよう動作することを特徴とするキャッシュメモリ実装装置。
【請求項１４】
請求項１１に記載のキャッシュメモリ実装装置において、少なくともひとつプロセッサは少なくともキャッシュヒット率とキャッシュアクセス周波数のいずれかに基づきキャッシュペナルティを計算するよう動作可能であり、当該プロセッサは計算結果に対応してソフトウェアによって呼び出されるキャッシュメモリ領域のパラメータを再構成するよう動作可能であることを特徴とするキャッシュメモリ実装装置。
【請求項１５】
ハードウェアキャッシュメモリではなく、ソフトウェアによって呼び出されるキャッシュメモリ領域を少なくともひとつ含むようにローカルメモリを構成するアプリケーションプログラムインタフェイスのコードをプロセッサによって実行し、
このプロセッサは、当該プロセッサによってローカルメモリ内で使用するために、メインメモリからデータを取得するようメインメモリに接続可能であることを特徴とするキャッシュメモリ実装方法。
【請求項１６】
請求項１５に記載のキャッシュメモリ実装方法において、さらに、アプリケーションプログラムインタフェイスのコードを使用することにより、少なくともひとつの前記ソフトウェアによって呼び出されたキャッシュメモリ領域に含まれるべきキャッシュラインの数を指定することを特徴とするキャッシュメモリ実装方法。
【請求項１７】
請求項１５に記載のキャッシュメモリ実装方法において、さらに、アプリケーションプログラムインタフェイスのコードを使用することにより、少なくともひとつの前記ソフトウェアによって呼び出されたキャッシュメモリ領域に含まれるべきキャッシュラインのサイズを指定することを特徴とするキャッシュメモリ実装方法。
【請求項１８】
請求項１５に記載のキャッシュメモリ実装方法において、さらに、アプリケーションプログラムインタフェイスのコードを使用して、前記データをリード／ライトするためのメインメモリの特定領域を指定することを特徴とするキャッシュメモリ実装方法。
【請求項１９】
請求項１５に記載のキャッシュメモリ実装方法において、アプリケーションプログラムインタフェイスのコードを使用して、各リード／ライトサイクルにおいてメインメモリからリードし、またはメインメモリへライトする前記データのデータサイズを指定することを特徴とするキャッシュメモリ実装方法。
【請求項２０】
請求項１５に記載のキャッシュメモリ実装方法において、アプリケーションプログラムインタフェイスのコードを使用することにより、ソフトウェアによって呼び出される少なくともひとつの前記キャッシュメモリ領域におけるキャッシュライン置換の方針を指定することを特徴するキャッシュメモリ実装方法。
【請求項２１】
請求項１５に記載のキャッシュメモリ実装方法において、
少なくともキャッシュヒット率とキャッシュアクセス頻度のいずれかに基づきキャッシュペナルティを計算し、
計算結果に対応してソフトウェアによって呼び出されるキャッシュメモリ領域のパラメータを再構成することを特徴とするキャッシュメモリ実装方法。
【請求項２２】
請求項２１に記載のキャッシュメモリ実装方法において、ソフトウェアによって呼び出されるキャッシュメモリ領域のパラメータは、
ａ．ソフトウェアによって呼び出される少なくともひとつのキャッシュメモリ領域に含むべきキャッシュラインの数
ｂ．キャッシュラインのサイズ
ｃ．前記データがリード／ライトされるメインメモリの特定領域
ｄ．各リード／ライトサイクルでメインメモリからリードし、またはメインメモリにライトするデータのデータサイズ
ｅ．キャッシュライン置換の方針
のいずれかを含むことを特徴とするキャッシュメモリ実装方法。
【請求項２３】
ハードウェアキャッシュメモリではなく、ソフトウェアによって呼び出されるキャッシュメモリ領域を少なくともひとつの含むようにローカルメモリを構成するようプロセッサに動作せしめるプログラムを格納した記憶媒体であって、前記プロセッサは、当該プロセッサによってローカルメモリ内で使用するために、メインメモリからデータを取得するようメインメモリに接続可能であることを特徴とする記憶媒体。
【請求項２４】
請求項２３に記載の記憶媒体において、さらに、アプリケーションプログラムインタフェイスのコードを使用することにより、少なくともひとつの前記ソフトウェアによって呼び出されたキャッシュメモリ領域に含まれるべきキャッシュラインの数を指定することを特徴とする記憶媒体。
【請求項２５】
請求項２３に記載の記憶媒体において、さらに、アプリケーションプログラムインタフェイスのコードを使用することにより、少なくともひとつの前記ソフトウェアによって呼び出されたキャッシュメモリ領域に含まれるべきキャッシュラインのサイズを指定することを特徴とする記憶媒体。
【請求項２６】
請求項２３に記載の記憶媒体において、さらに、アプリケーションプログラムインタフェイスのコードを使用して、前記データをリード／ライトするためのメインメモリの特定領域を指定することを特徴とする記憶媒体。
【請求項２７】
請求項２３に記載の記憶媒体において、アプリケーションプログラムインタフェイスのコードを使用して、各リード／ライトサイクルにおいてメインメモリからリードし、またはメインメモリへライトする前記データのデータサイズを指定することを特徴とする記憶媒体。
【請求項２８】
請求項２３に記載の記憶媒体において、アプリケーションプログラムインタフェイスのコードを使用することにより、ソフトウェアによって呼び出される少なくともひとつの前記キャッシュメモリ領域におけるキャッシュライン置換の方針を指定することを特徴する記憶媒体。
【請求項２９】
請求項２３に記載の記憶媒体において、
少なくともキャッシュヒット率とキャッシュアクセス頻度のいずれかに基づきキャッシュペナルティを計算し、
計算結果に対応してソフトウェアによって呼び出されるキャッシュメモリ領域のパラメータを再構成する処理をプロセッサに実行せしめるソフトウェアプログラムを含むことを特徴とする記憶媒体。
【請求項３０】
請求項２９に記載の記憶媒体において、ソフトウェアによって呼び出されるキャッシュメモリ領域のパラメータは、
ａ．ソフトウェアによって呼び出される少なくともひとつのキャッシュメモリ領域に含むべきキャッシュラインの数
ｂ．キャッシュラインのサイズ
ｃ．前記データがリード／ライトされるメインメモリの特定領域
ｄ．各リード／ライトサイクルでメインメモリからリードし、またはメインメモリにライトするデータのデータサイズ
ｅ．キャッシュライン置換の方針
のいずれかを含むことを特徴とする記憶媒体。
【請求項３１】
位置に依存しないコードに対する参照情報を、内部に少なくともひとつのキャッシュメモリ領域を有するローカルメモリを備えたプロセッサにて受け取るステップと、
位置に依存しないコードがプロセッサのローカルメモリ内のキャッシュメモリ領域に属するか否かを判定するステップと、
読み出された位置に依存しないコードを実行可能プログラムにおいて使用するステップと、
を備えるキャッシュメモリ実装方法。
【請求項３２】
請求項３１に記載のキャッシュメモリ実装方法において、ローカルメモリのキャッシュメモリ領域がソフトウェアによって呼び出されることを特徴とするキャッシュメモリ実装方法。
【請求項３３】
ハードウェアで実装されたキャッシュメモリに接続され、メインメモリに接続されることの可能なプロセッサであって、メインメモリからキャッシュメモリへデータを格納するよう動作可能な少なくともひとつの主プロセッサと、
それぞれが前記少なくともひとつの主プロセッサと接続され、メインメモリに接続されることの可能な副プロセッサであって、メインメモリから少なくともデータの一部を取得するよう動作可能な複数の副プロセッサと、
ハードウェアキャッシュメモリではなく、それぞれプロセッサに対応してオンチップで配置され、各プロセッサによって使用されることによりデータを格納するよう動作時に各プロセッサに接続されるローカルメモリと、
を備え、各プロセッサは、ソフトウェアによって呼び出されるキャッシュメモリ領域を少なくともひとつの含むように各ローカルメモリを構成するアプリケーションプログラムインタフェイスのコードを実行するよう動作することを特徴とするキャッシュメモリ実装装置。
【請求項３４】
請求項３３に記載のキャッシュメモリ実装装置において、主プロセッサ、ハードウェアキャッシュメモリ、サブプロセッサおよびローカルメモリが共通の半導体チップ上に構成されたことを特徴とするキャッシュメモリ実装装置。
【請求項３５】
請求項３４に記載のキャッシュメモリ実装装置において、さらにメインメモリが前記半導体チップ上に構成されたことを特徴とするキャッシュメモリ実装装置。
【請求項３６】
請求項３３に記載のキャッシュメモリ実装装置において、各副プロセッサがアプリケーションプログラムインタフェイスのコードを使用し、
ａ．ソフトウェアによって呼び出される少なくともひとつのキャッシュメモリ領域に含むべきキャッシュラインの数
ｂ．キャッシュラインのサイズ
ｃ．前記データがリード／ライトされるメインメモリの特定領域
ｄ．各リード／ライトサイクルでメインメモリからリードし、またはメインメモリにライトするデータのデータサイズ
ｅ．キャッシュライン置換の方針
のパラメータの少なくともいずれかを指定するよう動作することを特徴とするキャッシュメモリ実装装置。
【請求項３７】
請求項３３に記載のキャッシュメモリ実装装置において、プロセッサは、ソフトウェアによって呼び出される複数の独立したキャッシュメモリ領域を含むようローカルメモリを構成するアプリケーションプログラムインタフェイスのコードを実行するよう動作することを特徴とするキャッシュメモリ実装装置。
【請求項３８】
ハードウェアで実装されたキャッシュメモリに接続され、メインメモリに接続されることの可能なプロセッサであって、メインメモリからキャッシュメモリへデータを格納するよう動作可能な少なくともひとつの主プロセッサと、
それぞれが前記少なくともひとつの主プロセッサと接続され、メインメモリに接続されることの可能な副プロセッサであって、メインメモリから少なくともデータの一部を取得するよう動作可能な複数の副プロセッサと、
ハードウェアキャッシュメモリではなく、それぞれプロセッサに対応してオンチップで配置され、各プロセッサによって使用されることによりデータを格納するよう動作時に各プロセッサに接続されるローカルメモリと、
を備えることを特徴とするキャッシュメモリ実装装置。
【請求項３９】
請求項３８に記載のキャッシュメモリ実装装置において、プロセッサとそれらプロセッサのそれぞれに関連するローカルメモリが共通の半導体基板上に構成されたことを特徴とするキャッシュメモリ実装装置。
【請求項４０】
請求項３８に記載のキャッシュメモリ実装装置において、バスを介してプロセッサ群に接続された共有メモリをさらに備えることを特徴とするキャッシュメモリ実装装置。
【請求項４１】
請求項４０に記載のキャッシュメモリ実装装置において、プロセッサ群、それらプロセッサに関連ローカルメモリ、および共有メモリは共通の半導体基板上に構成されることを特徴とするキャッシュメモリ実装装置。
【請求項４２】
ハードウェアキャッシュメモリではなく、ソフトウェアによって呼び出されるキャッシュメモリ領域を少なくともひとつの含むようにローカルメモリを構成するようプロセッサに動作せしめるプログラムであって、前記プロセッサは、当該プロセッサによってローカルメモリ内で使用するために、メインメモリからデータを取得するようメインメモリに接続可能であることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は外部メインメモリにアクセスするプロセッサのローカルメモリの中に、ソフトウェアによって実装されるキャッシュメモリを提供するための方法、装置、および記録媒体とプログラムに関する。
【背景技術】
【０００２】
リアルタイムのマルチメディアアプリケーションはますます重要になっている。これらのアプリケーションは、毎秒何千メガビットものデータ処理という非常に高速な処理を必要とする。高速処理速度を達成するのに単一プロセッサを用いる処理システムもあるが、マルチプロセッサアーキテクチャを利用して実装されるシステムもある。マルチプロセッサシステムでは、複数のサブプロセッサが、所望の処理結果を達成するために並列で(または少なくとも協調して)動作する。
【０００３】
最先端のコンピュータアプリケーションがますます複雑になり、処理システムに対する需要は絶えず増大しているため、近年、より速いコンピュータによる処理データスループットについて強い要望がある。そうした中、特にグラフィックスアプリケーションは、望ましい視覚結果を実現するために、比較的短い時間内で膨大な数のデータアクセス、データ計算、およびデータ操作を必要とし、処理システムに対する需要は最も高い。従来のプロセッサは、非常に高速な1ナノ秒以下のオーダのサイクルタイム(すなわち、マイクロプロセッサがデータを操作できる単位時間)を有する。しかし、メインメモリに保存されたデータにアクセスするのに必要な時間はマイクロプロセッサのサイクルタイムよりかなり長い。例えば、ダイナミックＲＡＭ（ＤＲＡＭ）技術を使用して実装されたメインメモリから１バイトのデータを得るのに必要なアクセスタイムは、約１００ナノ秒のオーダである。
【０００４】
比較的長いアクセスタイムによってＤＲＡＭメモリに生じるボトルネックを改善するために、当業者はキャッシュメモリを利用してきた。キャッシュメモリは、ＤＲＡＭメモリよりかなり速く、メインメモリによって提供されたデータストレージの機能を増大させる。
【０００５】
例えば、Ｌ２キャッシュメモリをプロセッサの外部でプロセッサと接続でき、または、Ｌ１キャッシュメモリをプロセッサの内部でプロセッサと接続できる。いずれも、ＤＲＡＭ技術を利用して実装されるメインまたはシステムメモリよりかなり速い。例えばＤＲＡＭ技術より２、３倍速いスタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）技術を利用してＬ２キャッシュメモリを実装することができる。また、通常、Ｌ１キャッシュメモリはＬ２キャッシュメモリよりさらに速い。
【０００６】
キャッシュメモリは比較的高価なため、通常、その容量はメインメモリよりはるかに小さい。その結果、いずれのデータがキャッシュメモリで保存されるべきかを決定するために既存のアルゴリズムが使われてきた。これらの既存のアルゴリズムは、例えば、大きい実行可能プログラムとその関連データの比較的小さい部分だけが、任意の特定時刻において使用されるという事実を利用した「参照の局所性」の理論に基づきうる。したがって、参照の局所性の概念によると、実行可能プログラム全体の中の少量だけが、ある特定時刻においてキャッシュメモリに保存される。
【０００７】
参照の局所性、または他のいかなる概念を利用してキャッシュメモリにおけるデータの記憶を制御する既知のアルゴリズムの特質は、非常に多数存在するため、ここでは説明しきれるものではない。ただし、すべのアルゴリズムがあらゆるアプリケーションに適するとは限らない。データ処理の目的は種々のアプリケーションにおいて相当異なるためである。さらに、データの局所性が弱い場合、またはメモリアクセスがシーケンシャルではない場合（すなわち、必要なプログラムとデータの部分がある程度ランダムに位置している場合）、キャッシュメモリのアーキテクチャを利用する優位性は少ない。
【０００８】
キャッシュメモリを実装する従来のアプローチは、チップ内蔵（Ｌ１キャッシュという）またはチップ外に置かれた（Ｌ２キャッシュという）ハードウェアによるキャッシュメモリである。これらはいずれも高価であり、貴重な実装面積を食う。そのため、キャッシュメモリを配することは、相当本格的な検討がないかぎり、採用すべきではない。現実にいくつかの例では、キャッシュメモリを配しても性能上有利とならないため、処理システムによっては、キャッシュメモリを採用しない。しかし、ハードウェアキャッシュメモリの不採用は、ある程度参照の局所性が存在する状況では、処理のスループットを制限し、不利な効果をもたらす。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
したがって、本技術分野では、費用と実装面積の点で不利なコスト上昇を招くことなく、かつ、ハードウェアで実装されたキャッシュメモリの有利さの少なくとも一部を利用できる新たなキャッシュメモリ実装方法および装置の必要性が本技術においてある。
【課題を解決するための手段】
【００１０】
処理タスクを実行するためのローカルメモリとメインメモリとを備える一方、従来のハードウェアキャッシュの能力を備えないプロセッサにおいて、望ましくないメモリアクセスレイテンシが生じる場合がある。本発明は、このレイテンシ問題を解決するために、プロセッサのローカルメモリ内にソフトウェアによって実装されるキャッシュメモリ能力を提供する。本発明のある態様によれば、１つ以上のアプリケーション・プログラミング・インターフェース（ＡＰＩ）コードをプログラミングすることによって、ローカルメモリ内から、ソフトウェアが実装された、異なるキャッシュメモリを１つ以上呼び出す。さらに、ＡＰＩコードによって、異なるキャッシュメモリセクションの数、メモリ毎のキャッシュラインの数、インストラクション毎のタグ比較の数、ラインブロックのサイズ、キャッシュライン置き換えの方針を設定することができる。これは、上述したパラメータが固定されたハードウェアキャッシュを実装することよりかなりの優位性を提供する。
【００１１】
本発明の少なくとも１つの態様による方法および装置は、動作時にメインメモリと接続されるプロセッサを提供する。メインメモリはプログラムコード、関連データなどプロセッサにより操作または使用されるデータをストアする。ここで、「データ」は、広く定義されたものを指し、アプリケーションプログラムコード、システムレベルプログラムコード、操作または使用されるデータ、オペランドデータ、データストリームなどを含むものである。プロセッサは使用または実行のために少なくとも一部のデータをリクエストすることができる。ローカルメモリは、動作時にプロセッサと接続され、プロセッサに使用されるデータを格納する。ここで、ローカルメモリはハードウェアキャッシュメモリではない。プロセッサは、ソフトウェアによって呼び出されるキャッシュメモリ領域を少なくとも一つを含むようにローカルメモリを構成するアプリケーションプログラムインタフェイスのコードを実行するよう動作することができる。なお、プロセッサは複数の異なるソフトウェアキャッシュメモリ領域を呼び出すことができるようにするのが望ましい。
【００１２】
さらに、プロセッサはアプリケーションプログラムインタフェイスのコードを用いて下記のパラメータのうちの少なくとも一つを指定することができるようにすることが望ましい：ソフトウェアによって呼び出される１つのキャッシュメモリ領域に含まれるキャッシュラインの数、キャッシュラインのサイズ、データがリードまたはライトされるメインメモリの特定領域、各リードサイクルまたはライトサイクルでメインメモリからリードし、またはメインメモリにライトするデータのデータサイズ、キャッシュラインの置換の方針。
【００１３】
プロセッサは、下記のことを行うことができるようにしてもよい：（ｉ）キャッシュヒット率とキャッシュアクセス頻度とのうちの少なくとも１つに基づいてキャッシュペナルティを計算する共に、（ｉｉ）計算結果に応じて、ソフトウェアによって呼び出されるキャッシュメモリ領域のパラメータを再構成する。
【００１４】
本発明の他の態様、特徴、優位性などについては、当業者であれば、上記説明と添付の図面とを参照することによって理解される。
【００１５】
なお、前述した構成要素の任意の組合せ、本発明の表現を装置、方法、システム、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
【発明を実施するための最良の形態】
【００１６】
図１は本発明の実施形態による処理システム１００である。ここでは、説明の簡潔のために、図１を参照して、処理システム１００を用いて説明するが、本発明は処理システム１００に限らず、他の実施形態に適用することができることは言うまでもない。処理システム１００は、プロセッサ１０２と、ローカルメモリ１０４と、メインメモリ１０６（例えばＤＲＡＭ）と、バス１０８とを有する。
【００１７】
プロセッサ１０２は、メインメモリ１０６からデータをリクエストすることと、データを操作して所望の結果を得ることとができれば、既知のいずれの技術を用いて実装されたものであってもよい。例えば、プロセッサ１０２は、標準マイクロプロセッサや、分散型マイクロプロセッサなど、ソフトウェアまたはファームウェアを実行することができる既知のマイクロプロセッサを用いることができる。一例として、プロセッサ１０２は、ピクセルデータのようなデータをリクエスト、操作することができるグラフィックプロセッサとすることができる。なお、ピクセルデータは、グレースケールデータや、カラーデータや、テクスチャーデータや、イラストデータや、ビデオフレーム情報などを意味する。
【００１８】
ここで、ローカルメモリ１０４はプロセッサ１０２と同じチップに設けられている。ローカルメモリ１０４は、従来のハードウェアキャッシュメモリではないことが望ましく、ローカルメモリ１０４には、ハードウェアキャッシュメモリ機能を実現するための、チップ内蔵またはチップ外に置かれたハードウェアキャッシュ回路、キャッシュレジスタ、キャッシュメモリコントローラなどが無い。チップ上の実装面積が限られているので、ローカルメモリ１０４のサイズは、メインメモリ１０６のサイズより遥かに小さい。プロセッサ１０２は、プログラムの実行とデータの操作のために、バス１０８を介してメインメモリ１０６からローカルメモリ１０４にデータ（プログラムデータを含む）をコピーするためのデータアクセスのリクエストを提供することが好ましい。データアクセスを手助けするメカニズムとしては、例えばダイレクト・メモリ・アクセス（ＤＭＡ）技術など、既知のいかなる技術を用いてもよい。
【００１９】
ローカルメモリ１０４のサイズが限られているため、一つの処理機能を完成するために、ローカルメモリ１０４からメインメモリ１０６へのかなりの回数のアクセスを必要とする場合がある。例えば、レイトレーシング（画素ベースの画像表示）に用いられ、よく知られているＫＤ−ツリーサーチ技術は、メインメモリ内の１ＭＢよりも多いデータにアクセスすることを必要とする。ローカルメモリは１ＭＢより遥かに小さく（例えば２５６ＫＢ）、ローカルメモリ１０４に追加コピーすることができるデータ量はさらに小さい（１２８Ｂ）かもしれないので、レイトレース機能を実現するにはメインメモリ１０６へのかなりの（アクセスレイテンシが伴う）アクセス回数が必要である。
【００２０】
本発明の実施形態において、メインメモリへのアクセス回数を減らすことができる具体例として、ローカルメモリ１０４内にソフトウェアが実装されたキャッシュを用いる。図２は処理システム１００におけるローカルメモリ１０４を示す概念図である。ローカルメモリ１０４は、１つ以上の、ソフトウェアで呼び出されるキャッシュメモリ、すなわちソフトウェアキャッシュメモリ１２０（１２０Ａ、１２０Ｂ、１２０Ｃ，・・・１２０Ｎ）を有する。各々のソフトウェアキャッシュメモリ１２０は、プロセッサ１０２によりアプリケーションプログラムインターフェース（ＡＰＩ）コードを実行することによって実現される。前述したように、ローカルメモリ１０４は、従来のハードウェアキャッシュメモリではなく、ローカルメモリ１０４には、ハードウェアキャッシュメモリ機能を実現するための、チップ内蔵またはチップ外に置かれたハードウェアキャッシュ回路、キャッシュレジスタ、キャッシュメモリコントローラなどが無い。ソフトウェアキャッシュメモリ１２０は、これらのようなハードウェアにより実装されるものではなく、ソフトウェアコードにより形成される。例えば、図３に示すように、プロセッサ１０２は、ＡＰＩコードを用いてソフトウェアキャッシュメモリ１２０Ａの様々なパラメータを指定することができる。ステップ３００において、プロセッサ１０２は、ソフトウェアキャッシュメモリ１２０Ａのエリアに含まれるキャッシュライン１２２の数を示すキャッシュエントリサイズを指定することができる。図２に示すように、任意のラインの数、例えば４を指定することができる。プロセッサ１０２は、プログラムコードを用いて、ソフトウェアキャッシュメモリ１２０（１２０Ａ〜Ｎ）の各々のキャッシュライン１２２のサイズ範囲を示すラインサイズを指定することもできる。プログラマがプログラムの中で用いる、キャッシュエントリサイズとラインサイズを指定するための適切なＡＰＩコードは、下記のように表すことことができる。
ｃｈａｒ  ｃａｃｈｅ―ｂｕｆ[ｅｎｔｒｙ][ｌｉｎｅ＿ｓｉｚｅ]
【００２１】
プロセッサ１０２は、メインメモリ１０６における特定のエリアを規定するシステムアドレスを指定することができることが好ましい（ステップ３０２）。ここで、システムアドレスは、メインメモリ１０６における特定のエリアを規定する、メインメモリ１０６内のポイント（通常はスタートポイント）である。データはこれらのエリアとソフトウェアキャッシュメモリエリアとの間でリードまたはライトされる。プロセッサ１０２は、データエレメント転送サイズ（あるいはエレメントサイズ）を指定すること（ステップ３０２）ができることも望ましい。データエレメント転送サイズは、一つのリード／ライトサイクルにおいて、メインメモリ１０６からまたはメインメモリ１０６へリード／ライトするデータのサイズである。例えば、メインメモリ１０６中に対して指定されたシステムアドレスが１０００であり、データエレメント転送サイズが１００であるようにすることができる。したがって、メインメモリ１０６は、アドレス１０００からアドレス１０９９まではエリア０であり、アドレス１１００からアドレス１１９９はエリア１であり、アドレス１２００からアドレス１２９９はエリア２・・・であるように、エリア０、エリア１、エリア２、・・・などのように複数の特定のエリアに分けられることができる。そのため、メインメモリ１０６のリアルアドレスは下記のように表すことができる：リアルアドレス＝システムアドレス（あるいはベースアドレス）＋（データエレメント転送サイズ）×エレメントＩＤ。エレメントＩＤは、例えば、ＩＤ＝０はエリア０に対応し、ＩＤ＝１はエリア１に対応するように、メインメモリ１０６における各エリアにそれぞれ対応する数である。プログラマがプログラムの中で用いる、システムアドレスとデータエレメント転送サイズを指定するための適宜なＡＰＩコードは、下記のように表すことことができる。
ｖｏｉｄ  ｉｎｉｔ＿ｃａｃｈｅ（ｕｎｉｔ  ａｄｄｒｅｓｓ，ｕｎｉｔ  ｓｉｚｅ）
【００２２】
プロセッサ１０２は、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）技術や、キャッシュメモリの中のデータを置き換えることに関する既知のアルゴリズムなど、データ（またはキャッシュライン）を置き換える方針を指定することができることがさらに望ましい。他の実施形態として、各ラインに対して、置き換えの優先度をそれぞれ付与するように、どのラインを他のラインより先に置き換えるべきかの「ヒント」を与えるようにしてもよい。例えば、ソフトウェアキャッシュメモリ１２０Ａの各々のキャッシュライン１２２Ａ−Ｎに対して、置き換える順序を示す優先度値をそれぞれ付与することができる。
【００２３】
ＡＰＩコードによって、キャッシュエントリサイズ、ラインサイズ、システムアドレス、データエレメントサイズなどのパラメータを一旦決めれば、プロセッサ１０２は、ローカルメモリ１０４の中でソフトウェアキャッシュメモリ１２０Ａのエリアの初期化と設定を行うことができる。そして、エレメントＩＤを指定すると共に、データのリードかライトかを示す適切なＡＰＩコードによって、ソフトウェアキャッシュメモリ１２０のエリアからのデータのリードまたはソフトウェアキャッシュメモリエリア１２０へのデータのライトが行われる。これに関してプログラマが用いるべき適切なＡＰＩコードは、下記のように表すことことができる。
ｖｏｉｄ  *ｇｅｔ＿ｃａｃｈｅ（ｉｎｔ  ｉｄ，ｉｎｔ  ｃｏｎｔｒｏｌ）
【００２４】
ソフトウェアキャッシュメモリエリアの初期化と設定が終わると、プロセッサ１０２は、適宜なプログラムコードを実行してキャッシュメモリを機能させる。例えば、図４に示すように、ステップ３０８において、プログラムコードは、所定のエレメントＩＤを指定することによってメインメモリ１０６からのリードを示すことができる。ステップ３１０において、所望のデータがソフトウェアキャッシュメモリ１２０のいずれかのキャッシュライン１２２に含まれているか否かの判定がなされる。これは、各々のキャッシュライン１２２にキャッシュタグを付与すると共に、１つのキャッシュタグが、いずれかのキャッシュラインに蓄積されたデータにマッチするか否かをチェックすることによって行うことができる。このチェックが肯定されると、処理フローがステップ３１２に進み、このキャッシュラインのステイタスが修正される。キャッシュラインのステイタスの修正は、例えばこのキャッシュラインがヒットしたことがある否かを示す情報を「ヒットしたことがある」に修正することや、ＬＲＵ値を更新することや、ヒント（または優先度）の値を更新することなどである。そして、処理フローがステップ３２２に進み、ヒットしたキャッシュラインのローカルメモリにおけるアドレスがリターンされ、所望のデータの取得と処理ができるようになる。
【００２５】
ステップ３１０に戻り、マッチするキャッシュタグがなく、チェックの結果が否であると、キャッシュミスが生じ、処理フローはステップ３１４に進む。ステップ３１４において、置き換えの方針に従って、置き換えられるキャッシュラインが選択される。例えば、置き換えの方針にＬＲＵ技術が用いられていると、最も過去にヒットしたキャッシュラインが選択される。ステップ３１６において、選択されたキャッシュラインがクリーンであるか否かの判断がなされる。ここで、「キャッシュラインがクリーンである」とは、該キャッシュラインのステイタスは修正されたことがないこと意味する。キャッシュラインがクリーンであると、処理フローがステップ３１８に進み、このステップにおいて、指定されたエレメントＩＤにしたがってメインメモリ１０６から新しいデータがリードされて、選択されたキャッシュライン１２２にストアされる。そして、処理フローがステップ３２２に進み、選択されたキャッシュラインのローカルメモリにおけるアドレスがリターンされ、所望のデータの取得と処理ができるようになる。
【００２６】
ステップ３１６に戻り、選択されたキャッシュラインのステイタスがクリーンではなければ、処理プローがステップ３２０に進む。ステップ３２０において、キャッシュラインのデータがメインメモリ１０６にライトバックされ、エレメントＩＤにより特定される新しいデータがリードされて、このキャッシュラインにライトされる。そして、処理フローがステップ３２２に進み、選択されたキャッシュラインのローカルメモリにおけるアドレスがリターンされ、所望のデータの取得と処理ができるようになる。
【００２７】
ソフトウェアキャッシュメモリの使い方についての他の例として、プロセッサ１０２は、例えばＤＲＡＭまたは図示していないネットワーク接続からのデータストリームの中から、位置に依存しないコードへの参照要求を受けることがある。それに応じて、プロセッサは、ローカルメモリ１０４のキャッシュメモリエリア１２０に位置に依存しないコードがあるか否かを確認し、もしあれば、位置に依存しないコードをキャッシュメモリエリア１２０から読み出す。そして、この読み出された、位置に依存しないコードは、例えば実行プログラムの中で使用されることができる。
【００２８】
ソフトウェアキャッシュメモリエリアを実行するためのＡＰＩを使用することが可能な場合は多数あり、ここで全部列挙するのが不可能である。例として、ＫＤ―ツリープロセスのサーチにおいてリーフ・ノードを探す場合に、ソフトウェアキャッシュメモリエリアが有用である。下記のオペコードは、プログラムがいかにソフトウェアキャッシュメモリエリアの概念を利用するかを示している。
init_cache (KDTREE_ADDRESS, sizeof (KDTree));
node = (DKTree*) get_cache (id, READ);
while (node−＞nextid != -1){
id = node−＞nextid;
node = get_cache (id, READ);
}
【００２９】
本発明の他の態様において、プロセッサ１０２は、ソフトウェアキャッシュメモリ１２０に関連するキャッシュヒット率とアクセス頻度とのうちの少なくとも１つを算出することが望ましい。キャッシュヒット率Ｐは、所望のデータがリクエストされるときにこのデータが所定のソフトウェアキャッシュメモリ１２０に存在する確率を示すものであり、その値は０から１の間である。キャッシュアクセス頻度Ｎは、所定のソフトウェアキャッシュメモリ１２０が毎秒にアクセスされる回数を示すものである。下記の式に従って、キャッシュペナルティを算出することができる。
キャッシュペナルティ＝Ｎ×Ｐ×Ｃｈｉｔ＋Ｎ×（１−Ｐ）×Ｃmiss
【００３０】
ここで、ＣｈｉｔとＣｍｉｓｓは、夫々ヒットのペナルティとミスのペナルティを表すものである。キャッシュペナルティと、キャッシュがないときのペナルティとを比較することによって、ソフトウェアキャッシュメモリ１２０を用いることに優位性があるか否かを判定することができる。もし、優位性が無く、または優位性が高くない場合において、プロセッサ１０２は、優位性を増やすようにソフトウェアキャッシュメモリのパラメータを再設定することが望ましい。前述したように、修正されるパラメータはキャッシュラインの数、メインメモリの特定のエリアの定義（エレメントＩＤ）、データエレメント転送サイズ、キャッシュラインの置き換えの方針などとすることができる。
【００３１】
ソフトウェアキャッシュメモリの上述した特徴と利用するための適切なプログラムの例を下に示す。
【００３２】
/* 設定 */
#define CACHE_BUF_NUM   4      /* キャッシュのウェイ数 */
#define CACHE_BUF_SIZE 15*1024 /* キャッシュバンクサイズ */
/* ソフトウェアキャッシュを構成する領域：4way SIMD レジスタとして利用 */
static vector signed int cache_simd_buf_tag; /* タグID保存用領域 */
static vector signed int cache_simd_buf_status; /* ステータス保存用領域 */
/* 1:dirty, 0: other */
static vector signed int cache_simd_buf_tagnum; /* キャッシュライン数 */
static vector signed int cache_simd_buf_elementsize; /* キャッシュラインサイズ */
static vector unsigned int cache_simd_buf_addr; /* ローカルストレージ上のアドレス */
static vector unsigned int cache_simd_buf_systemaddr; /* メインメモリ上のアドレス */
/* 演算用データ:スカラーレジスタとして利用  */
static unsigned int cache_buf_systemaddr; /*  メインメモリ上のアドレス */
static unsigned int cache_buf_elementsize; /* キャッシュラインサイズ  */
static signed int cache_buf_tagnum; /* キャッシュライン数 */
/* キャッシュバッファ領域 */
static char cache_buf[CACHE_BUF_NUM][CACHE_BUF_SIZE];
/* キャッシュ初期化  */
void init_cache(unsigned int system_address, unsigned int element_size)
/* system_address: メインメモリ上のキャッシュの先頭アドレス
element_size: キャッシュラインサイズ  */
{
/* 入力値エラー処理  */
if (element_size ＞ CACHE_BUF_SIZE || element_size ＜ 1) {
エラー処理
}
/* キャッシュの設定  */
cache_buf_systemaddr = system_address; /* メインメモリ上のキャッシュスタートアドレス  */
cache_simd_buf_systemaddr = simd_splats(system_address); /* SIMDレジスタの4スロットに設定 */
cache_buf_elementsize = element_size; /* キャッシュのラインサイズ */
cache_simd_buf_elementsize = simd_splats(element_size); /* SIMDレジスタの4スロットに設定 */
cache_buf_tagnum = CACHE_BUF_SIZE/element_size; /* キャッシュライン数 */
cache_simd_buf_tag = simd_splats(-1); /* タグID：初期値 */
cache_simd_buf_status = simd_splats(0); /* ステータス: 初期値 */
cache_simd_buf_addr = simd_set(cache_buf[0], cache_buf[1], cache_buf[2], cache_buf[3]); /* アドレス値設定 */   
}
/* キャッシュアクセス  */
void *get_cache_buf(int id, int control)
/* id: エレメントID
contorl: 0 リード、1 ライト  */
{
id, cache_simd_buf_tagの二つのレジスタからどのスロットのタグに
一致するかのチェックを行う。
/* キャッシュヒットの処理 */
simd_ret_addr に返り値となるローカルアドレスを設定
if (最初のスロットに一致する場合) {
cache_simd_buf_status = simd_insert(control, cache_simd_buf_status, 0); /* 最初のスロットにcontrolを挿入 */
return((void*)simd_extract(simd_ret_addr, 0); /* 最初のスロットのローカルアドレス値を返す */
}
else if (２つ目のスロットに一致する場合) {
cache_simd_buf_tagの２番目のスロットを1番目に移動する(LRUのアルゴリズム)
cache_simd_buf_statusの２番目のスロットを1番目に移動する(LRUのアルゴリズム)
cache_simd_buf_addrの２番目のスロットを1番目に移動する(LRUのアルゴリズム)
cache_simd_buf_status = simd_insert(control, cache_simd_buf_status, 0); /* 最初のスロットにcontrolを挿入 */
return((void*)simd_extract(simd_ret_addr, 1); /* ２番目のスロットのローカルアドレス値を返す */
}
else if (３つ目のスロットに一致する場合) {
cache_simd_buf_tagの３番目のスロットを1番目に移動する(LRUのアルゴリズム)
cache_simd_buf_statusの３番目のスロットを1番目に移動する(LRUのアルゴリズム)
cache_simd_buf_addrの３番目のスロットを1番目に移動する(LRUのアルゴリズム)
cache_simd_buf_status = simd_insert(control, cache_simd_buf_status, 0); /* 最初のスロットにcontrolを挿入 */
return((void*)simd_extract(simd_ret_addr, 2); /* ３番目のスロットのローカルアドレス値を返す */
}
else if (４つ目のスロットに一致する場合) {
cache_simd_buf_tagの４番目のスロットを1番目に移動する(LRUのアルゴリズム)
cache_simd_buf_statusの４番目のスロットを1番目に移動する(LRUのアルゴリズム)
cache_simd_buf_addrの４番目のスロットを1番目に移動する(LRUのアルゴリズム)
cache_simd_buf_status = simd_insert(control, cache_simd_buf_status, 0); /* 最初のスロットにcontrolを挿入 */
return((void*)simd_extract(simd_ret_addr, 3); /* ４番目のスロットのローカルアドレス値を返す */
}
/* キャッシュミスの処理: 4番目のスロットを入れ替える */
cache_buf_addr = simd_extract(cache_simd_buf_addr, 3); /* ４番目のスロットからキャッシュローカルアドレス取得 */
if (キャッシュにステータスにライト属性がついている場合) {
/* ライトバック処理 */
cache_buf_tag = simd_extract(cache_simd_buf_tag, 3); /* ４番目のスロットからタグID取得 */
system_address = cache_buf_systemaddr + cache_buf_tag * cache_buf_elementsize; /* ターゲットとなるメインメモリ上のアドレス算出 */
cache_buf_addrで指し示されるローカルストレージのデータをsystem_addressで示されるメインメモリ上へDMA
cache_simd_buf_statusの3番目のスロットをリードステータスに変更
}
/* キャッシュのリフィル */
new_tag = (id/cache_buf_tagnum)*cache_buf_tagnum;
system_address = cache_buf_systemaddr + new_tag*cache_buf_elementsize;
cache_buf_addrで指し示されるローカルストレージ領域へsystem_addressで示されるメインメモリ上データをDMA
cache_simd_buf_tag = simd_insert(new_tag, cache_simd_buf_tag, 3); /* 新規タグを３番目のスロットに設定 */
cache_simd_buf_status = simd_insert(control, cache_simd_buf_status, 3); /* ３番目のスロットにステータス設定 */
return_address = cache_buf_addr + (id - new_tag) * cache_buf_elementsize; 
return ((void*)return_address);
}
【００３３】
図１〜図４を参照して説明した上記の概念は、マルチプロセッサシステムに適用することができ、図５はマルチプロセッサシステムＡを示している。図５に示すマルチプロセッサシステムＡは、複数のプロセッサ１０２Ａ〜１０２Ｄと、夫々のプロセッサ１０２におけるローカルメモリ１０４（１０４Ａ〜１０４Ｄ）と、バス１０８によって各々のプロセッサ１０２およびそのローカルメモリ１０４と接続されるメインメモリ１０６とを有する。ここで、図５において、例として、プロセッサ１０２が４つであるが、本発明の主旨を逸脱しない限り、いかなる数のプロセッサを用いてもよい。プロセッサ１０２は、既知のいかなる技術で利用されてもよく、各プロセッサの構造も同じであってもよいし、異なってもよい。
【００３４】
ここで、マルチプロセッサシステムにおいて前述した特徴を実現するのに適した望ましいコンピュータアーキテクチャについて説明する。マルチプロセッサは、具体的には、ゲームシステムや、ホームターミナルや、ＰＣシステムや、サーバシステムや、ワークステーションなどのような多様なメディアを使用するアプリケーションのスタンドアロンまたは分散型処理のためのシングルチップソリューションとして適用することができる。一部のアプリケーション、例えばゲームシステムとホームターミナルの場合、リアルタイム処理が必要である。例えば、リアルタイムの分散型ゲームアプリケーションにおいて、ネットワークを経由した一つ以上の画像の解凍、３ＤＣＧ（コンピューターグラフィック）、音声生成、ネットワーク通信、物理シミュレーション、人工知能計算などは、ユーザにリアルタイムの感覚を体験させるために十分の速さで実行されなければならない。したがって、マルチプロセッサシステムにおける各プロセッサは、短く、かつ予測できる時間内で自分のタスクを終わらせなければならない。
【００３５】
そのために、このコンピュータアーキテクチャにより、マルチプロセッシングコンピュータシステムのすべてのプロセッサは、共通のコンピューティングモジュール（またはセル）により構成される。この共通のコンピューティングモジュールは、一致した構造を有し、望ましくは、同じインストラクション・セットアーキテクチャを用いるものである。マルチプロセッサシステムは、１つ以上のクライアント、サーバ、パーソナルコンピュータ、モバイルコンピュータ、ゲーム機、ＰＤＡ、セットトップボックス、電気製品、デジタルテレビ機、およびコンピュータプロセッサを用いる他のデバイスなどから構成されることができる。
【００３６】
必要であれば、多数のコンピュータシステムはネットワークのメンバーであってもよい。一致したモジュラー構造は、マルチプロセッサシステムによるアプリケーションとデータの処理を高効率および高速にすることができると共に、ネットワークが用いられる場合においては、ネットワークを介してアプリケーションとデータの送信を迅速にすることができる。この構造は、サイズや、演算能力が様々であるネットワーク上における各メンバーの構築と、これらのメンバーによる処理のためのアプリケーションの準備とを簡単化することができる。
【００３７】
図６は、基本処理モジュールとなるプロセッサエレメント（ＰＥ）５００を示している。ＰＥ５００は、Ｉ／Ｏインターフェース５０２と、処理ユニット（ＰＵ）５０４と、複数のサブ処理ユニット５０８、すなわちサブ処理ユニット５０８Ａ、サブ処理ユニット５０８Ｂ、サブ処理ユニット５０８Ｃ、サブ処理ユニット５０８Ｄとを有する。ローカル（あるいは内部）ＰＥバス５１２は、ＰＵ５０４と、サブ処理ユニット５０８と、メモリインターフェース５１１との間のデータおよびアプリケーションの転送を行うものである。ＰＥバス５１２は、例えば従来のアーキテクチャを適用したものや、パケット交換型ネットワークとして実装されたものであればよい。パケット交換型ネットワークとして実装される場合において、より多くのハードウェアが必要となるが、使用可能な帯域幅を広げることができる。
【００３８】
ＰＥ５００は、デジタルロジックを用いる様々な方法で構成することができ、シリコン基板上に設けられたＣＭＯＳを用いる単一なＩＣとして構成されることが望ましい。回路基板の材料としては、ガリウム砒素（ＧａＡＳ）、ガリウムアルミニウム砒素（ＧａＡｌＡｓ）、様々の微量添加物を有する他の所謂ＩＩＩ−Ｂ化合物などを用いることができる。ＰＥ５００は、例えばＲＳＦＱ（rapid  single-flux-quantum）ロジックなど、超伝導材料により構成されるものであってもよい。
【００３９】
ＰＥ５００は、広い帯域幅のメモリ接続５１６により共有メモリ、すなわちメインメモリ５１４と緊密に接続されている。メインメモリ５１４は、ダイナミックＲＡＭ（ＤＲＡＭ）であることが望ましいが、他の種類のメモリ、例えばスタティックＲＡＭ（ＳＲＡＭ）、磁気ＲＡＭ（ＭＲＡＭ）、光学メモリ、ホログラフィックメモリなどであってもよい。
【００４０】
ＰＵ５０４およびサブ処理ユニット５０８は、夫々、ダイレクト・メモリ・アクセス（ＤＭＡ）機能を有するメモリフローコントローラ（ＭＦＣ）と接続されることが望ましい。ＭＦＣは、メモリインターフェース５１１と協働して、メインメモリ５１４、ＰＥ５００におけるサブ処理ユニット５０８、ＰＵ５０４間のデータの転送を円滑にするものである。ＤＭＡＣとメモリインターフェース５１１は、サブ処理ユニット５０８とＰＵ５０４とから独立して設置されるようにしてもよいし、一体化されるようにしてもよい。例えば、メインメモリ５１４は図６に示すようにチップ外部に設けられるようにしてもよく、集積方式でチップ内蔵されるようにしてもよい。
【００４１】
ＰＵ５０４は、例えばスタンドアロンにデータとアプリケーションを処理することができる標準プロセッサとすることができる。動作中、ＰＵ５０４は、サブ処理ユニットによるデータとアプリケーションの処理のスケジューリングおよび統合処理をすることが望ましい。サブ処理ユニットは、ＳＩＭＤ（ｓｉｍｐｌｅ  ｉｎｓｔｒｕｃｔｉｏｎ  ｍｕｌｔｉｐｌｅ  ｄａｔａ）プロセッサであることが望ましい。サブ処理ユニットは、ＰＵ５０４の制御下において、データとアプリケーションの処理を独立して並列的に行う。ＰＵ５０４としては、ＲＩＳＣ（ｒｅｄｕｃｅｄ  ｉｎｓｔｒｕｃｔｉｏｎ−ｓｅｔ  ｃｏｍｐｕｔｉｎｇ）技術を用いるマイクロプロセッサアーキテクチャとなるパワーＰＣ（商標）コアを用いることが好ましい。ＲＩＳＣは単純なインストラクションの組み合わせによって複雑なインストラクションを実行するものである。したがって、プロセッサのタイミングは、比較的簡単かつ速いオペレーションに基づきうる。これは、決められたクロックスピードにおいてより多くのインストラクションを実行することを可能とする。
【００４２】
ＰＵ５０４は、サブ処理ユニット５０８のうちの一つとして実装されてもよい。この場合、このサブ処理ユニット５０８は、メイン処理ユニットＰＵによる処理、すなわち各々のサブ処理ユニット５０８によるデータとアプリケーションの処理のスケジューリングと統合処理を行うものとすればよい。さらに、ＰＥ５００内において、複数のＰＵを実装してもよい。
【００４３】
このモジュラー構造にしたがって、一つのコンピュータシステムに用いられるＰＥ５００の数は、そのシステムが必要とする処理能力に基づくものである。例えば、サーバ、ワークステーション、ＰＤＡは夫々４つ、２つ、１つのＰＥ５００を有するようにすることができる。一つのソフトウェアセルの処理に割り当てられた１つのＰＥ５００に含まれるサブプロセッシングユニットの数は、セル内プログラムとデータの複雑度およびサイズに基づくものである。
【００４４】
図７は、サブ処理ユニット（ＳＰＵ）５０８の望ましい構造と機能を示す図である。サブ処理ユニット５０８のアーキテクチャは、汎用プロセッサ（多数のアプリケーションが高い平均性能を実現するように設計されているもの）と特殊用途のプロセッサ（一つのアプリケーションにおいて高い性能を実現するように設計されている）との間に位置するものであることが望ましい。サブ処理ユニット５０８は、ゲームアプリケーション、メディアアプリケーション、ブロードバンドシステムなどにおいて高い性能を実現すると共に、リアルタイムアプリケーションのプログラマに高度な制御自由度を提供するように設計されている。サブ処理ユニット５０８の一部の機能として、グラフィック構造パイプライン、サーフェス分割、高速フーリエ変換、画像処理キーワード、ストリーム処理、ＭＰＥＧエンコード／デコード、暗号化、復号化、デバイスドライバー拡張、モデリング、ゲームフィジクス、コンテンツ制作、音声合成と処理などを挙げることができる。
【００４５】
サブ処理ユニット５０８は、サブ処理ユニットコア、すなわちＳＰＵコア５１０Ａとメモリフローコントローラ、すなわちＭＦＣ５１０Ｂという２つの基本機能ユニットを有する。ＳＰＵコア５１０Ａは、プログラムの実行、データの操作などを担うものであり、ＭＦＣ５１０Ｂは、ＳＰＵコア５１０Ａと、システムのメインメモリ５１４との間のデータ転送に関連する機能を担うものである。
【００４６】
ＳＰＵコア５１０Ａはローカルメモリ５５０と、インストラクションユニット（ＩＵ）５５２と、レジスタ５５４と、１つ以上の浮動小数点処理ステージ５５６と、１つ以上の固定小数点処理ステージ５５８とを有する。ローカルメモリ５５０は、ＳＲＡＭのようなシングルポートのＲＡＭであることが望ましい。メモリへのアクセスのレイテンシを軽減するために、従来のほとんどのプロセッサはキャッシュを用いるが、ＳＰＵコア５１０Ａは、キャッシュよりも、比較的小さいローカルメモリ５５０を用いる。実際には、リアルタイムのアプリケーション（およびここで言及したほかのアプリケーション）のプログラマに、予測可能で、かつ一致したメモリアクセスのレイテンシを提供するために、サブ処理ユニット５０８Ａ内においてキャッシュメモリアーキテクチャを用いることは好ましくない。キャッシュメモリのキャッシュヒット／ミス値は、数サイクルから数百サイクルの範囲内で変化する、予測困難な、メモリアクセス回数を生じさせる。このようなメモリアクセスの回数の予測困難性は、例えばリアルタイムアプリケーションのプログラミングに望まれるアクセスタイミングの予想可能性を下げる。データ演算とＤＭＡ転送をオーバーラップすることが、ローカルメモリ５５０内のレイテンシを補うことができる。これはリアルタイムアプリケーションのプログラミングに高度なコントロール性を提供する。ＤＭＡ転送と関連するレイテンシおよびインストラクションのオーバーヘッドが、キャッシュミスにより生じたレイテンシより長いため、ＳＲＡＭローカルメモリアプローチは、ＤＭＡ転送サイズが十分大きいかつ十分予測可能なとき（例えばデータが要求される前にＤＭＡコマンドを発行することができる）において優位性を提供する。
【００４７】
サブ処理ユニット５０８のうちのいずれか１つの上で実行されるプログラムは、ローカルアドレスを用いて関連するローカルメモリ５５０を参照する。ローカルメモリ５５０の各場所にはシステムの全体のメモリマップ上におけるリアルアドレス（ＲＡ）が付与されている。これは、特権レベルのアプリケーションソフトウェアがローカルメモリ５５０を一つの処理における実効アドレス（ＥＡ）にマッピングすることを可能とし、それによって２つのローカルメモリ５５０間のＤＭＡ転送が容易になる。ＰＵ５０４は、実効アドレスを用いてローカルメモリ５５０に直接アクセスすることもできる。ローカルメモリ５５０は、５５６キロバイトの容量を有し、レジスタ５５４の容量は１２８×１２８ビットであることが望ましい。
【００４８】
ＳＰＵコア５１０Ａは、演算パイプラインを用いて実装されることが望ましく、その中において論理インストラクションがパイプライン方式で処理される。パイプラインは、インストラクションを処理する任意の数のステージに分けることができるが、通常、パイプラインは、１つ以上のインストラクションのフェッチ、インストラクションのデコード、インストラクション間の従属関係のチェック、インストラクションの発行、およびインストラクションの実行から構成される。これに関連して、インストラクションユニット５５２は、インストラクションバッファと、インストラクションデコード回路と、従属関係チェック回路と、インストラクション発行回路とを含む。
【００４９】
インストラクションバッファは、ローカルメモリと接続されており、インストラクションがフェッチされたときにこれらのインストラクションを一時的に格納することができる複数のレジスタを有することが好ましい。インストラクションバッファは、すべてのインストラクションが１つのグループとして（すなわち同時に大量に）レジスタから出るように動作することが好ましい。インストラクションバッファはいかなるサイズであってもよいが、レジスタの数が２または３以下となるようにするサイズであることが好ましい。
【００５０】
通常、デコード回路はインストラクションを細分化すると共に、対応するインストラクションの機能を果たす論理・マイクロオペレーションを発生させる。例えば、論理・マイクロペレーションは、計算オペレーションと論理オペレーションの指定、ローカルメモリ５５０へのロードオペレーションと格納オペレーションの指定、レジスタソースオペランドおよび／または即値データオペランドの指定などを行うことができる。デコード回路は、ターゲットのレジスタのアドレスや、構造リソースや、機能ユニットおよび／またはバスなどのような、インストラクションが用いるリソースを指定してもよい。デコード回路は、リソースが必要とされるインストラクションパイプラインのステージを示す情報を提供してもよい。インストラクションデコード回路は、同時に大量に、インストラクションバッファのレジスタの数と同じ数のインストラクションをデコードするように動作可能であることが好ましい。
【００５１】
従属関係チェック回路は、チェック対象となるインストラクションのオペランドがパイプラン内の他のインストラクションのオペランドに従属するか否かを判定するためのチェックを行うデジタルロジックを含む。従属するならば、チェック対象となるインストラクションは、これらの他のオペランドが（例えば、これらの他のインストラクションの実行の完了を許可することによって）更新されるまで、実行されるべきではない。従属関係チェック回路は、デコード回路１１２から同時に送信されてきた複数のインストラクションの従属関係を判定することが好ましい。
【００５２】
インストラクション発行回路は、浮動小数点処理ステージ５５６および／または固定小数点処理ステージ５５８にインストラクションを発行することができる。
【００５３】
レジスタ５５４は、１２８―エントリレジスタファイルのような、比較的大きな統合レジスタファイルとして実装されることが好ましい。これは、レジスタ不足を避けるためのレジスタのリネームを必要とせずに、深くパイプライン化された高周波数の実行を可能とする。ハードウェアのリネームは、一般的に処理システムにおける実装面積と電力の高い割合を消費する。したがって、ソフトウェアによるループアンローリングまたは他のインターリーブ技術によってレイテンシがカバーされるような場合おいて優位性のあるオペレーションを実現することができる。
【００５４】
ＳＰＵコア５１０Ａは、クロックサイクル毎に複数のインストラクションを発行するようなスーパースカラーアーキテクチャで実装されることが好ましい。ＳＰＵコア５１０Ａは、インストラクションバッファから同時に送信されるインストラクションの数、例えば２と３の間（クロックサイクル毎に２つまたは３つのインストラクションが発行されることを意味する）に対応する程度のスーパーカラーとして動作可能であることが好ましい。必要とされる処理能力に応じた多少なりの数の浮動小数点処理ステージ５５６と固定小数点処理ステージ５５８を用いることができる。浮動小数点処理ステージ５５６と固定小数点処理ステージ５５８の望ましいスピードは夫々毎秒３２ギガ浮動小数点オペレーション（３２  ＧＦＬＯＰＳ）と毎秒３２ギガオペレーション（３２  ＧＯＰＳ）である。
【００５５】
ＭＦＣ５１０Ｂは、バスインターフェースユニット（ＢＩＵ５６４）と、メモリマネジメントユニット（ＭＭＵ５６２）と、ダイレクトメモリアクセスコントローラ（ＤＭＡＣ５６０）とを有することが望ましい。低電力消費の設計目的を達成するために、ＭＦＣ５１０Ｂは、ＤＭＡＣ５６０を除いて、ＳＰＵコア５１０ＡおよびＰＥバス５１２の半分の周波数（半分のスピード）で動作することが好ましい。ＭＦＣ５１０Ｂは、ＰＥバス５１２からサブ処理ユニット５０８に入るデータとインストラクションを操作することができ、ＤＭＡＣのためのアドレス変換と、データ一貫性のためのスヌープオペレーションとを提供する。ＢＩＵ５６４は、ＰＥバス５１２とＭＭＵ５６２とＤＭＡＣとの間のインターフェースを提供する。したがって、サブ処理ユニット５０８（ＳＰＵコア５１０ＡとＭＦＣ５１０Ｂを含む）は物理的および／または論理的にＰＥバス５１２と接続されている。
【００５６】
ＭＭＵ５６２は、メモリアクセスのために実効アドレス（ＤＭＡコマンドから取得される）をリアルアドレスへ変換することができるようにすることが望ましい。例えば、ＭＭＵ５６２は、実効アドレスの比較的高いオーダのビットをリアルアドレスのビットに変換することができる。比較的低いオーダアドレスビットについては、変換不可であると共に、物理的におよび論理的にリアルアドレスの形成およびメモリへのアクセスのリクエストに用いられるようにすることが好ましい。具体的には、ＭＭＵ５６２は、６４ビットのメモリマネジメントモジュールをベースにして実装されることができ、４Ｋバイト、６４Ｋバイト、１メガバイト、１６メガバイトのページサイズと２５６ＭＢのセグメントサイズを有する２６４バイトの実効アドレス空間を提供することができる。ＭＭＵ５６２は、ＤＭＡコマンドのために、２６５までの仮想メモリと、２４２バイトの物理メモリをサポート可能であることが好ましい。ＭＭＵ５６２のハードウェアは、８−エントリの完全連想ＳＬＢ、２５６−エントリの４ウェイセット連想ＴＬＢ、ＴＬＢのための４×４代替マネジメントテーブル（ＲＭＴ）を含むものとすることができる。なお、ＲＭＴはハードウェアＴＬＢミスのハンドリングに用いられるものである。
【００５７】
ＤＭＡＣ５６０は、ＳＰＵコア５１０Ａと、１つ以上の、ＰＵ５０４および／または他のＳＰＵのようなデバイスからのＤＭＡコマンドを管理することができることが望ましい。ＤＭＡコマンドは下記の３つのカテゴリがある：ローカルメモリ５５０からメインメモリ５１４へデータを移動するＰｕｔコマンド、メインメモリ５１４からローカルメモリ５５０へデータを移動するＧｅｔコマンド、ＳＬＩコマンドと同期コマンドを含むストレージコントロールコマンド。同期コマンドは、アトミックコマンド、送信コマンド、専用のバリアコマンドを含むものとすることができる。ＤＭＡコマンドに応じて、ＭＭＵ５６２は実効アドレスをリアルアドレスに変換し、このリアルアドレスはＢＩＵ５６４に転送される。
【００５８】
ＳＰＵコア５１０Ａはチャンネルインターフェースとデータインターフェースとを用いて、ＤＭＡＣ５６０内のインターフェースと通信（ＤＭＡコマンド、ステイタスなどの送信）することが好ましい。ＳＰＵコア５１０Ａは、チャンネルインターフェースを介してＤＭＡコマンドをＤＭＡＣ５６０内のＤＭＡキューに送信する。一旦ＤＭＡキューに格納されたＤＭＡコマンドは、ＤＭＡＣ５６０内の発行ロジックと完了ロジックに操作される。一つのＤＭＡコマンドのためのすべてのバス・トランザクションが完了すると、チャンネルインターフェースを介して、一つの完了信号がＳＰＵコア５１０Ａに返送される。
【００５９】
図８は、ＰＵ５０４の好ましい構造と機能を示す図である。ＰＵ５０４は、ＰＵコア５０４Ａとメモリフローコントローラ、すなわちＭＦＣ５０４Ｂとの２つの基本機能ユニットを有する。ＰＵコア５０４Ａは、プログラムの実行、データの操作、マルチプロセッサ管理機能などを担うものであり、ＭＦＣ５０４Ｂは、ＰＵコア５０４Ａと、処理システム１００のメモリスペースとの間のデータ転送に関連する機能を担うものである。
【００６０】
ＰＵコア５０４Ａは、Ｌ１キャッシュ５７０と、インストラクションユニット５７２と、レジスタ５７４と、少なくとも１つの浮動小数点処理ステージ５７６と、少なくとも１つの固定小数点処理ステージ５７８とを有する。Ｌ１キャッシュ５７０は、メインメモリ１０６、プロセッサ１０２、あるいはＭＦＣ５０４Ｂにおけるほかの部分のメモリスペースから受信したデータのキャッシング機能を提供する。ＰＵコア５０４Ａはスーパーパイプラインとして実装されることが好ましいため、インストラクションユニット５７２は、フェッチ、デコード、従属関係のチェック、発行などを含む多数のステージを有するインストラクションパイプラインとして実装されることが好ましい。ＰＵコア５０４Ａは、スーパースカラー構造を有することが好ましく、それによって、クロックサイクル毎にインストラクションユニット５７２から２つ以上のインストラクションが発行される。高い演算パワーを実現するために、浮動小数点処理ステージ５７６と固定小数点処理ステージ５７８は、パイプライン方式の多数のステージを有する。必要とされる処理能力に応じた多少なりの浮動小数点処理ステージ５５６と固定小数点処理ステージ５５８を用いることができる。
【００６１】
ＭＦＣ５０４Ｂは、バスインターフェースユニット（ＢＩＵ５８０）と、Ｌ２キャッシュ５８２と、キャッシュ不可ユニット（ＮＣＵ５８４）と、コアインターフェースユニット（ＣＩＵ５８６）と、メモリマネジメントユニット（ＭＭＵ５８８）とを有する。低電力消費の設計目的を達成するために、ＭＦＣ５０４Ｂのほとんどは、ＰＵコア５０４Ａとバス１０８の半分の周波数（半分のスピード）で動作することが好ましい。
【００６２】
ＢＩＵ５８０は、バス１０８と、Ｌ２キャッシュ５８２と、ＮＣＵロジックブロックとの間のインターフェースを提供する。ＢＩＵ５８０は、完全一致のメモリオペレーションを実行するために、マスターデバイスとして動作してもよく、バス１０８上のスレーブデバイスとして動作してもよい。マスターデバイスとして動作する場合、ＢＩＵ５８０は、Ｌ２キャッシュ５８２とＮＣＵ５８４の代わりに、バス１０８へのロードリクエストとストアリクエストを発信する。ＢＩＵ５８０は、バス１０８へ送ることができるコマンドの総数を限定するコマンドのフローコントロールメカニズムを実装してもよい。バス１０８上のデータオペレーションは、８ビートになるように設計されることができ、そして、ＢＩＵ５８０は、キャッシュラインが１２８バイト前後であり、一貫性と同期の精度が１２８ＫＢであるように設計されることが好ましい。
【００６３】
Ｌ２キャッシュ５８２（およびそれをサポートするハードウェアロジック）は、５１２ＫＢデータをキャッシュするように設計されることが好ましい。例えば、Ｌ２キャッシュ５８２は、キャッシュ可能なロードとストア、データのプリフェッチ、インストラクションフェッチ、インストラクションのプリフェッチ、キャッシュオペレーション、バリアオペレーションを操作することができる。Ｌ２キャッシュ５８２は、６つのキャストアウトキュー（例えば６つのＲＣマシン）に合わせた６つのリロードキューと、８つの（６４バイトの幅）ストアキューとを有することができる。Ｌ２キャッシュ５８２は、Ｌ１キャッシュ５７０の中の一部または全てのデータのバックアップコピーを提供するように動作してもよい。これは特に、処理ノードがホットスワップ（動作中に変更）されたときの、復元状況において有用である。この構成は、Ｌ１キャッシュ５７０が、ほぼポート無しにさらに速く動作することを可能にするとともに、キャッシュ間の転送を速くすることができる（リクエストがＬ２キャッシュ５８２で止まることができるから）。この構成は、Ｌ２キャッシュ５８２にキャッシュ一貫性のマネジメントを及ばしめるメカニズムも提供する。
【００６４】
ＮＣＵ５８４はインターフェースによってＣＩＵ５８６と、Ｌ２キャッシュ５８２と、ＢＩＵ５８０と接続されており、通常、ＰＵコア５０４Ａとメモリシステム間のキャッシュ不可なオペレーションのキューまたはバッファ回路として機能する。ＮＣＵ５８４は、ＰＵコア５０４Ａとの通信のうちの、Ｌ２キャッシュ５８２によって扱わない全ての通信を操作することが好ましい。ここで、Ｌ２キャッシュ５８２によって扱わないものとしては、キャッシュ不可なロードとストアや、バリアオペレーションや、キャッシュ一貫性オペレーションなどを挙げることができる。低電力消費の設計目的を達成するために、ＮＣＵ５８４は、半分のスピードで動作することが好ましい。
【００６５】
ＣＩＵ５８６は、ＭＦＣ５０４ＢとＰＵコア５０４Ａとの境界線上に配置され、浮動小数点処理ステージ５７６、固定小数点処理ステージ５７８、インストラクションユニット５７２、ＭＭＵ５８８から、Ｌ２キャッシュ５８２とＮＣＵ５８４へ送られるリクエストのためのルーティング、アービトレイション、フローコントロールポイントとして動作する。ＰＵコア５０４ＡとＭＭＵ５８８はフルスピードで動作し、Ｌ２キャッシュ５８２とＮＣＵ５８４は２：１のスピード比で動作可能であることが好ましい。こうすることによって、ＣＩＵ５８６に周波数境界線が存在することになり、この境界線はその一つの機能により、２つの周波数領域間にリクエストの転送およびデータのリロードをする際に、周波数の交錯を適切に操作する。
【００６６】
ＣＩＵ５８６は、ロードユニット、ストアユニット、リロードユニットの３つの機能ブロックから構成される。さらに、データをプリフェッチする機能がＣＩＵ５８６により実行される。この機能は、ロードユニットの一部の機能であることが好ましい。ＣＩＵ５８６は、下記の動作を実行可能であることが好ましい：（ｉ）ＰＵコア５０４ＡとＭＭＵ５８８からのロードリクエストとストアリクエストを受信する、（ｉｉ）これらのリクエストをフルスピードクロック周波数から半分のスピードに変換する（２：１クロック周波数変換）、（ｉｉｉ）キャッシュ可能なリクエストとキャッシュ不可なリクエストとをそれぞれＬ２キャッシュ５８２とＮＣＵ５８４へルーティングする、（ｉｖ）Ｌ２キャッシュ５８２とＮＣＵ５８４へのリクエストが均等になるように調整する、（ｖ）リクエストが目標時間内に受信されると共に、オーバーフローが発生しないための、Ｌ２キャッシュ５８２とＮＣＵ５８４へ送信するリクエストのフローコントロール、（ｖｉ）ロードリターンデータを受信すると共に、これらのデータを浮動小数点処理ステージ５７６、固定小数点処理ステージ５７８、インストラクションユニット５７２、またはＭＭＵ５８８へルーティングする、（ｖｉｉ）スヌープリクエストを浮動小数点処理ステージ５７６、固定小数点処理ステージ５７８、インストラクションユニット５７２、またはＭＭＵ５８８へ転送する、（ｖｉｉｉ）ロードリターンデータとスヌープトラフィックを半分のスピードからフルスピードへ変換する。
【００６７】
ＭＭＵ５８８は、第２レベルアドレス変換手段のごとく、ＰＵコア５４０Ａのためにアドレス変換を提供することが好ましい。変換の第１レベルは、ＰＵコア５０４Ａ内において、セパレートインストラクションと、ＭＭＵ５８８より遥かに小さくてかつ速いデータＥＲＡＴ（実効アドレスからリアルアドレスへの変換）アレイとにより提供されることが好ましい。
【００６８】
ＰＵ５０４は６４ビットで実装され、４〜６ＧＨz、１０Ｆ０４（Ｆａｎ−ｏｕｔ−ｏｆ−ｆｏｕｒ）で動作することが好ましい。レジスタは６４ビットの長さを有することが好ましく（特定用途のための１つまたはより多くのレジスタが６４ビットより小さいかもしれないが）、実効アドレスは６４ビットの長さを有することが好ましい。インストラクションユニット５７２、レジスタ５７４、浮動小数点処理ステージ５７６と固定小数点処理ステージ５７８はＲＩＳＣコンピューティング技術を達成するためにパワーＰＣ（商標）技術により実装されることが好ましい。
【００６９】
このコンピュータシステムのモジュラー構造のさらなる詳細については、米国特許第６５２６４９１号公報に記載されており、そちらを参照することができるため、ここで全体の詳細説明を省略する。
【００７０】
本発明の態様にしたがって、図中に示されるような適切なハードウェアを用いて上述した方法及び装置を実現することができる。これらのハードウェアは、例えば、標準のデジタル回路や、ソフトウェアおよび／またはファームウェアプログラムを実行することができる任意の既知のプロセッサや、プログラムで制御可能なリード・オンリメモリ（ＰＲＯＭ）とアレイ・ロジックデバイス（ＰＡＬ）等のような、１つまたはより多くの、プログラムで制御可能なデジタルデバイスまたはシステムなど、従来の任意の技術を適用して実装することができる。さらに、図面に示される装置は、所定の機能ブロックに分けられているが、これらのブロックは、別々の回路により構成されたり、１つ以上の機能ユニットに一体化されたりしてもよい。さらに、本発明の各態様は、搬送や配送のために、適切な記憶媒体（フロッピ（登録商標）ディスク、メモリチップなど）に記録されるソフトウェアや、ファームウェアプログラムとして提供されてもよい。
【００７１】
上述したように、本発明の各態様は、プロセッサのローカルメモリ内において、キャッシュメモリをソフトウェアで呼び出す技術を提供する。明確なキャッシュメモリセクションの数、１つのメモリについてのキャッシュラインの数、１つのインストラクションについてのタグ比較の数、ラインブロックのサイズ、置き換え方針はＡＰＩコードによって設定することができる。これはパラメータが固定されたハードウェアキャッシュメモリより大きな優位性を与える。さらに、キャッシュヒット率とアクセス頻度をモニタリングし、キャッシュペナルティを計算することによって、処理性能を向上させるようにキャッシュ設定（すなわち、上記のパラメータおよび／または他のキャッシュパラメータ）を自動的にソフトウェアで調整することができる。
【００７２】
ソフトウェアで呼び出されるキャッシュメモリを提供する本発明の方法および装置は、費用と実装面積の点で不利なコスト上昇を招くことなく、かつ、ハードウェアで実装されるキャッシュメモリの有利さの少なくとも一部をプログラマに活用させることができるという優位性を有する。したがって、メモリ効率、処理スループット、処理品質の多大な向上を図ることができる。
【００７３】
ここでは本発明の具体例について説明したが、これらの実施例は単に本発明の趣旨と応用を示すものである。したがって、請求項により定義された本発明の主旨および範囲から逸脱しないかぎり、上述した実施形態に対して様々な変更を加えることができる。
【図面の簡単な説明】
【００７４】
【図１】本発明の実施形態による処理システムを示す図である。
【図２】図１に示す処理システムにおける、ソフトウェアによって呼び出されるキャッシュメモリを１つ以上有するローカルメモリを示す図である。
【図３】図１に示す処理システムが実行しうる処理を示すフローチャートである。
【図４】図４は、図１に示す処理システムが実行しうるさらなる処理を示すフローチャートである。
【図５】２つ以上のサブプロセッサを有するマルチプロセッサシステムの構成を示す図である。これらのサブプロセッサのうちの一つまたは複数は、図2に示す、ソフトウェアによって呼び出されるキャッシュメモリを１つ以上有するローカルメモリを含むものである。本発明の態様にしたがってスケジューリングするマルチキューを示す図である。
【図６】本発明の実施形態によるマルチプロセッサシステムを適用することができる望ましいプロセッサエレメント（ＰＥ）を示すブロック図である。
【図７】図６に示すシステムにおける典型的なサブプロセッシングユニット（ＳＰＵ）の構造を示すブロック図である。
【図８】図６に示すシステムにおけるプロセッシングユニット（ＰＵ）の構造を示すブロック図である。
【符号の説明】
【００７５】
１００  処理システム、  １０２  プロセッサ、  １０４  ローカルメモリ、  １０６  メインメモリ、  １０８  バス、  １２０  ソフトウェアキャッシュメモリ、  １２２  キャッシュライン、  １００Ａ  マルチプロセッサシステム、  ５００  プロセッサエレメント、  ５０２  Ｉ／Ｏ  インターフェース、  ５０４  処理ユニット、  ５０８  サブ処理ユニット、  ５１１  メモリインターフェース、  ５１２  ＰＥバス、  ５１４  メインメモリ、  ５１６  メモリ接続、  ５１０Ａ  サブ処理ユニットコア、  ５１０Ｂ  メモリフローコントローラ、  ５５０  ローカルメモリ、  ５５２  インストラクションユニット、  ５５４  レジスタ、  ５５６  浮動小数点処理ステージ、  ５５８  固定小数点処理ステージ、  ５６０  ＤＭＡＣ、  ５６２  メモリマネジメントユニット、  ５６４  バスインターフェースユニット、  ５７０  Ｌ１キャッシュ、  ５７２  インストラクションユニット、  ５７４  レジスタ、  ５７６  浮動小数点処理ステージ、  ５７８  固定小数点処理ステージ、  ５８０  バスインターフェースユニット、  ５８２  Ｌ２キャッシュ、  ５８４  キャッシュ不可ユニット、  ５８６  コアインターフェースユニット、  ５８８  メモリマネジメントユニット。  
【図１】
2005339557.tif 000003
【図２】
2005339557.tif 000004
【図３】
2005339557.tif 000005
【図４】
2005339557.tif 000006
【図５】
2005339557.tif 000007
【図６】
2005339557.tif 000008
【図７】
2005339557.tif 000009
【図８】
2005339557.tif 000010