JP3802042B2 - キャッシュメモリ実装方法および装置、キャッシュメモリシステム - Google Patents

キャッシュメモリ実装方法および装置、キャッシュメモリシステム Download PDF

Info

Publication number
JP3802042B2
JP3802042B2 JP2005153848A JP2005153848A JP3802042B2 JP 3802042 B2 JP3802042 B2 JP 3802042B2 JP 2005153848 A JP2005153848 A JP 2005153848A JP 2005153848 A JP2005153848 A JP 2005153848A JP 3802042 B2 JP3802042 B2 JP 3802042B2
Authority
JP
Japan
Prior art keywords
cache
memory
processor
cache memory
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2005153848A
Other languages
English (en)
Other versions
JP2005339557A (ja
Inventor
正宏 安江
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sony Interactive Entertainment Inc
Original Assignee
Sony Computer Entertainment Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sony Computer Entertainment Inc filed Critical Sony Computer Entertainment Inc
Publication of JP2005339557A publication Critical patent/JP2005339557A/ja
Application granted granted Critical
Publication of JP3802042B2 publication Critical patent/JP3802042B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/601Reconfiguration of cache memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Stored Programmes (AREA)
  • Memory System (AREA)
  • Multi Processors (AREA)

Description

本発明は外部メインメモリにアクセスするプロセッサのローカルメモリの中に、ソフトウェアによって実装されるキャッシュメモリを提供するための方法、装置、および記録媒体とプログラムに関する。
リアルタイムのマルチメディアアプリケーションはますます重要になっている。これらのアプリケーションは、毎秒何千メガビットものデータ処理という非常に高速な処理を必要とする。高速処理速度を達成するのに単一プロセッサを用いる処理システムもあるが、マルチプロセッサアーキテクチャを利用して実装されるシステムもある。マルチプロセッサシステムでは、複数のサブプロセッサが、所望の処理結果を達成するために並列で(または少なくとも協調して)動作する。
最先端のコンピュータアプリケーションがますます複雑になり、処理システムに対する需要は絶えず増大しているため、近年、より速いコンピュータによる処理データスループットについて強い要望がある。そうした中、特にグラフィックスアプリケーションは、望ましい視覚結果を実現するために、比較的短い時間内で膨大な数のデータアクセス、データ計算、およびデータ操作を必要とし、処理システムに対する需要は最も高い。従来のプロセッサは、非常に高速な1ナノ秒以下のオーダのサイクルタイム(すなわち、マイクロプロセッサがデータを操作できる単位時間)を有する。しかし、メインメモリに保存されたデータにアクセスするのに必要な時間はマイクロプロセッサのサイクルタイムよりかなり長い。例えば、ダイナミックRAM(DRAM)技術を使用して実装されたメインメモリから1バイトのデータを得るのに必要なアクセスタイムは、約100ナノ秒のオーダである。
比較的長いアクセスタイムによってDRAMメモリに生じるボトルネックを改善するために、当業者はキャッシュメモリを利用してきた。キャッシュメモリは、DRAMメモリよりかなり速く、メインメモリによって提供されたデータストレージの機能を増大させる。
例えば、L2キャッシュメモリをプロセッサの外部でプロセッサと接続でき、または、L1キャッシュメモリをプロセッサの内部でプロセッサと接続できる。いずれも、DRAM技術を利用して実装されるメインまたはシステムメモリよりかなり速い。例えばDRAM技術より2、3倍速いスタティック・ランダム・アクセス・メモリ(SRAM)技術を利用してL2キャッシュメモリを実装することができる。また、通常、L1キャッシュメモリはL2キャッシュメモリよりさらに速い。
キャッシュメモリは比較的高価なため、通常、その容量はメインメモリよりはるかに小さい。その結果、いずれのデータがキャッシュメモリで保存されるべきかを決定するために既存のアルゴリズムが使われてきた。これらの既存のアルゴリズムは、例えば、大きい実行可能プログラムとその関連データの比較的小さい部分だけが、任意の特定時刻において使用されるという事実を利用した「参照の局所性」の理論に基づきうる。したがって、参照の局所性の概念によると、実行可能プログラム全体の中の少量だけが、ある特定時刻においてキャッシュメモリに保存される。
参照の局所性、または他のいかなる概念を利用してキャッシュメモリにおけるデータの記憶を制御する既知のアルゴリズムの特質は、非常に多数存在するため、ここでは説明しきれるものではない。ただし、すべのアルゴリズムがあらゆるアプリケーションに適するとは限らない。データ処理の目的は種々のアプリケーションにおいて相当異なるためである。さらに、データの局所性が弱い場合、またはメモリアクセスがシーケンシャルではない場合(すなわち、必要なプログラムとデータの部分がある程度ランダムに位置している場合)、キャッシュメモリのアーキテクチャを利用する優位性は少ない。
キャッシュメモリを実装する従来のアプローチは、チップ内蔵(L1キャッシュという)またはチップ外に置かれた(L2キャッシュという)ハードウェアによるキャッシュメモリである。これらはいずれも高価であり、貴重な実装面積を食う。そのため、キャッシュメモリを配することは、相当本格的な検討がないかぎり、採用すべきではない。現実にいくつかの例では、キャッシュメモリを配しても性能上有利とならないため、処理システムによっては、キャッシュメモリを採用しない。しかし、ハードウェアキャッシュメモリの不採用は、ある程度参照の局所性が存在する状況では、処理のスループットを制限し、不利な効果をもたらす。
したがって、本技術分野では、費用と実装面積の点で不利なコスト上昇を招くことなく、かつ、ハードウェアで実装されたキャッシュメモリの有利さの少なくとも一部を利用できる新たなキャッシュメモリ実装方法および装置の必要性が本技術においてある。
処理タスクを実行するためのローカルメモリとメインメモリとを備える一方、従来のハードウェアキャッシュの能力を備えないプロセッサにおいて、望ましくないメモリアクセスレイテンシが生じる場合がある。本発明は、このレイテンシ問題を解決するために、プロセッサのローカルメモリ内にソフトウェアによって実装されるキャッシュメモリ能力を提供する。本発明のある態様によれば、1つ以上のアプリケーション・プログラミング・インターフェース(API)コードをプログラミングすることによって、ローカルメモリ内から、ソフトウェアが実装された、異なるキャッシュメモリを1つ以上呼び出す。さらに、APIコードによって、異なるキャッシュメモリセクションの数、メモリ毎のキャッシュラインの数、インストラクション毎のタグ比較の数、ラインブロックのサイズ、キャッシュライン置き換えの方針を設定することができる。これは、上述したパラメータが固定されたハードウェアキャッシュを実装することよりかなりの優位性を提供する。
本発明の少なくとも1つの態様による方法および装置は、動作時にメインメモリと接続されるプロセッサを提供する。メインメモリはプログラムコード、関連データなどプロセッサにより操作または使用されるデータをストアする。ここで、「データ」は、広く定義されたものを指し、アプリケーションプログラムコード、システムレベルプログラムコード、操作または使用されるデータ、オペランドデータ、データストリームなどを含むものである。プロセッサは使用または実行のために少なくとも一部のデータをリクエストすることができる。ローカルメモリは、動作時にプロセッサと接続され、プロセッサに使用されるデータを格納する。ここで、ローカルメモリはハードウェアキャッシュメモリではない。プロセッサは、ソフトウェアによって呼び出されるキャッシュメモリ領域を少なくとも一つを含むようにローカルメモリを構成するアプリケーションプログラムインタフェイスのコードを実行するよう動作することができる。なお、プロセッサは複数の異なるソフトウェアキャッシュメモリ領域を呼び出すことができるようにするのが望ましい。
さらに、プロセッサはアプリケーションプログラムインタフェイスのコードを用いて下記のパラメータのうちの少なくとも一つを指定することができるようにすることが望ましい:ソフトウェアによって呼び出される1つのキャッシュメモリ領域に含まれるキャッシュラインの数、キャッシュラインのサイズ、データがリードまたはライトされるメインメモリの特定領域、各リードサイクルまたはライトサイクルでメインメモリからリードし、またはメインメモリにライトするデータのデータサイズ、キャッシュラインの置換の方針。
プロセッサは、下記のことを行うことができるようにしてもよい:(i)キャッシュヒット率とキャッシュアクセス頻度とのうちの少なくとも1つに基づいてキャッシュペナルティを計算する共に、(ii)計算結果に応じて、ソフトウェアによって呼び出されるキャッシュメモリ領域のパラメータを再構成する。
本発明の他の態様、特徴、優位性などについては、当業者であれば、上記説明と添付の図面とを参照することによって理解される。
なお、前述した構成要素の任意の組合せ、本発明の表現を装置、方法、システム、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
図1は本発明の実施形態による処理システム100である。ここでは、説明の簡潔のために、図1を参照して、処理システム100を用いて説明するが、本発明は処理システム100に限らず、他の実施形態に適用することができることは言うまでもない。処理システム100は、プロセッサ102と、ローカルメモリ104と、メインメモリ106(例えばDRAM)と、バス108とを有する。
プロセッサ102は、メインメモリ106からデータをリクエストすることと、データを操作して所望の結果を得ることとができれば、既知のいずれの技術を用いて実装されたものであってもよい。例えば、プロセッサ102は、標準マイクロプロセッサや、分散型マイクロプロセッサなど、ソフトウェアまたはファームウェアを実行することができる既知のマイクロプロセッサを用いることができる。一例として、プロセッサ102は、ピクセルデータのようなデータをリクエスト、操作することができるグラフィックプロセッサとすることができる。なお、ピクセルデータは、グレースケールデータや、カラーデータや、テクスチャーデータや、イラストデータや、ビデオフレーム情報などを意味する。
ここで、ローカルメモリ104はプロセッサ102と同じチップに設けられている。ローカルメモリ104は、従来のハードウェアキャッシュメモリではないことが望ましく、ローカルメモリ104には、ハードウェアキャッシュメモリ機能を実現するための、チップ内蔵またはチップ外に置かれたハードウェアキャッシュ回路、キャッシュレジスタ、キャッシュメモリコントローラなどが無い。チップ上の実装面積が限られているので、ローカルメモリ104のサイズは、メインメモリ106のサイズより遥かに小さい。プロセッサ102は、プログラムの実行とデータの操作のために、バス108を介してメインメモリ106からローカルメモリ104にデータ(プログラムデータを含む)をコピーするためのデータアクセスのリクエストを提供することが好ましい。データアクセスを手助けするメカニズムとしては、例えばダイレクト・メモリ・アクセス(DMA)技術など、既知のいかなる技術を用いてもよい。
ローカルメモリ104のサイズが限られているため、一つの処理機能を完成するために、ローカルメモリ104からメインメモリ106へのかなりの回数のアクセスを必要とする場合がある。例えば、レイトレーシング(画素ベースの画像表示)に用いられ、よく知られているKD−ツリーサーチ技術は、メインメモリ内の1MBよりも多いデータにアクセスすることを必要とする。ローカルメモリは1MBより遥かに小さく(例えば256KB)、ローカルメモリ104に追加コピーすることができるデータ量はさらに小さい(128B)かもしれないので、レイトレース機能を実現するにはメインメモリ106へのかなりの(アクセスレイテンシが伴う)アクセス回数が必要である。
本発明の実施形態において、メインメモリへのアクセス回数を減らすことができる具体例として、ローカルメモリ104内にソフトウェアが実装されたキャッシュを用いる。図2は処理システム100におけるローカルメモリ104を示す概念図である。ローカルメモリ104は、1つ以上の、ソフトウェアで呼び出されるキャッシュメモリ、すなわちソフトウェアキャッシュメモリ120(120A、120B、120C,・・・120N)を有する。各々のソフトウェアキャッシュメモリ120は、プロセッサ102によりアプリケーションプログラムインターフェース(API)コードを実行することによって実現される。前述したように、ローカルメモリ104は、従来のハードウェアキャッシュメモリではなく、ローカルメモリ104には、ハードウェアキャッシュメモリ機能を実現するための、チップ内蔵またはチップ外に置かれたハードウェアキャッシュ回路、キャッシュレジスタ、キャッシュメモリコントローラなどが無い。ソフトウェアキャッシュメモリ120は、これらのようなハードウェアにより実装されるものではなく、ソフトウェアコードにより形成される。例えば、図3に示すように、プロセッサ102は、APIコードを用いてソフトウェアキャッシュメモリ120Aの様々なパラメータを指定することができる。ステップ300において、プロセッサ102は、ソフトウェアキャッシュメモリ120Aのエリアに含まれるキャッシュライン122の数を示すキャッシュエントリサイズを指定することができる。図2に示すように、任意のラインの数、例えば4を指定することができる。プロセッサ102は、プログラムコードを用いて、ソフトウェアキャッシュメモリ120(120A〜N)の各々のキャッシュライン122のサイズ範囲を示すラインサイズを指定することもできる。プログラマがプログラムの中で用いる、キャッシュエントリサイズとラインサイズを指定するための適切なAPIコードは、下記のように表すことことができる。
char cache―buf[entry][line_size]
プロセッサ102は、メインメモリ106における特定のエリアを規定するシステムアドレスを指定することができることが好ましい(ステップ302)。ここで、システムアドレスは、メインメモリ106における特定のエリアを規定する、メインメモリ106内のポイント(通常はスタートポイント)である。データはこれらのエリアとソフトウェアキャッシュメモリエリアとの間でリードまたはライトされる。プロセッサ102は、データエレメント転送サイズ(あるいはエレメントサイズ)を指定すること(ステップ302)ができることも望ましい。データエレメント転送サイズは、一つのリード/ライトサイクルにおいて、メインメモリ106からまたはメインメモリ106へリード/ライトするデータのサイズである。例えば、メインメモリ106中に対して指定されたシステムアドレスが1000であり、データエレメント転送サイズが100であるようにすることができる。したがって、メインメモリ106は、アドレス1000からアドレス1099まではエリア0であり、アドレス1100からアドレス1199はエリア1であり、アドレス1200からアドレス1299はエリア2・・・であるように、エリア0、エリア1、エリア2、・・・などのように複数の特定のエリアに分けられることができる。そのため、メインメモリ106のリアルアドレスは下記のように表すことができる:リアルアドレス=システムアドレス(あるいはベースアドレス)+(データエレメント転送サイズ)×エレメントID。エレメントIDは、例えば、ID=0はエリア0に対応し、ID=1はエリア1に対応するように、メインメモリ106における各エリアにそれぞれ対応する数である。プログラマがプログラムの中で用いる、システムアドレスとデータエレメント転送サイズを指定するための適宜なAPIコードは、下記のように表すことことができる。
void init_cache(unit address,unit size)
プロセッサ102は、LRU(Least Recently Used)技術や、キャッシュメモリの中のデータを置き換えることに関する既知のアルゴリズムなど、データ(またはキャッシュライン)を置き換える方針を指定することができることがさらに望ましい。他の実施形態として、各ラインに対して、置き換えの優先度をそれぞれ付与するように、どのラインを他のラインより先に置き換えるべきかの「ヒント」を与えるようにしてもよい。例えば、ソフトウェアキャッシュメモリ120Aの各々のキャッシュライン122A−Nに対して、置き換える順序を示す優先度値をそれぞれ付与することができる。
APIコードによって、キャッシュエントリサイズ、ラインサイズ、システムアドレス、データエレメントサイズなどのパラメータを一旦決めれば、プロセッサ102は、ローカルメモリ104の中でソフトウェアキャッシュメモリ120Aのエリアの初期化と設定を行うことができる。そして、エレメントIDを指定すると共に、データのリードかライトかを示す適切なAPIコードによって、ソフトウェアキャッシュメモリ120のエリアからのデータのリードまたはソフトウェアキャッシュメモリエリア120へのデータのライトが行われる。これに関してプログラマが用いるべき適切なAPIコードは、下記のように表すことことができる。
void *get_cache(int id,int control)
ソフトウェアキャッシュメモリエリアの初期化と設定が終わると、プロセッサ102は、適宜なプログラムコードを実行してキャッシュメモリを機能させる。例えば、図4に示すように、ステップ308において、プログラムコードは、所定のエレメントIDを指定することによってメインメモリ106からのリードを示すことができる。ステップ310において、所望のデータがソフトウェアキャッシュメモリ120のいずれかのキャッシュライン122に含まれているか否かの判定がなされる。これは、各々のキャッシュライン122にキャッシュタグを付与すると共に、1つのキャッシュタグが、いずれかのキャッシュラインに蓄積されたデータにマッチするか否かをチェックすることによって行うことができる。このチェックが肯定されると、処理フローがステップ312に進み、このキャッシュラインのステイタスが修正される。キャッシュラインのステイタスの修正は、例えばこのキャッシュラインがヒットしたことがある否かを示す情報を「ヒットしたことがある」に修正することや、LRU値を更新することや、ヒント(または優先度)の値を更新することなどである。そして、処理フローがステップ322に進み、ヒットしたキャッシュラインのローカルメモリにおけるアドレスがリターンされ、所望のデータの取得と処理ができるようになる。
ステップ310に戻り、マッチするキャッシュタグがなく、チェックの結果が否であると、キャッシュミスが生じ、処理フローはステップ314に進む。ステップ314において、置き換えの方針に従って、置き換えられるキャッシュラインが選択される。例えば、置き換えの方針にLRU技術が用いられていると、最も過去にヒットしたキャッシュラインが選択される。ステップ316において、選択されたキャッシュラインがクリーンであるか否かの判断がなされる。ここで、「キャッシュラインがクリーンである」とは、該キャッシュラインのステイタスは修正されたことがないこと意味する。キャッシュラインがクリーンであると、処理フローがステップ318に進み、このステップにおいて、指定されたエレメントIDにしたがってメインメモリ106から新しいデータがリードされて、選択されたキャッシュライン122にストアされる。そして、処理フローがステップ322に進み、選択されたキャッシュラインのローカルメモリにおけるアドレスがリターンされ、所望のデータの取得と処理ができるようになる。
ステップ316に戻り、選択されたキャッシュラインのステイタスがクリーンではなければ、処理プローがステップ320に進む。ステップ320において、キャッシュラインのデータがメインメモリ106にライトバックされ、エレメントIDにより特定される新しいデータがリードされて、このキャッシュラインにライトされる。そして、処理フローがステップ322に進み、選択されたキャッシュラインのローカルメモリにおけるアドレスがリターンされ、所望のデータの取得と処理ができるようになる。
ソフトウェアキャッシュメモリの使い方についての他の例として、プロセッサ102は、例えばDRAMまたは図示していないネットワーク接続からのデータストリームの中から、位置に依存しないコードへの参照要求を受けることがある。それに応じて、プロセッサは、ローカルメモリ104のキャッシュメモリエリア120に位置に依存しないコードがあるか否かを確認し、もしあれば、位置に依存しないコードをキャッシュメモリエリア120から読み出す。そして、この読み出された、位置に依存しないコードは、例えば実行プログラムの中で使用されることができる。
ソフトウェアキャッシュメモリエリアを実行するためのAPIを使用することが可能な場合は多数あり、ここで全部列挙するのが不可能である。例として、KD―ツリープロセスのサーチにおいてリーフ・ノードを探す場合に、ソフトウェアキャッシュメモリエリアが有用である。下記のオペコードは、プログラムがいかにソフトウェアキャッシュメモリエリアの概念を利用するかを示している。
init_cache (KDTREE_ADDRESS, sizeof (KDTree));
node = (DKTree*) get_cache (id, READ);
while (node−>nextid != -1){
id = node−>nextid;
node = get_cache (id, READ);
}
本発明の他の態様において、プロセッサ102は、ソフトウェアキャッシュメモリ120に関連するキャッシュヒット率とアクセス頻度とのうちの少なくとも1つを算出することが望ましい。キャッシュヒット率Pは、所望のデータがリクエストされるときにこのデータが所定のソフトウェアキャッシュメモリ120に存在する確率を示すものであり、その値は0から1の間である。キャッシュアクセス頻度Nは、所定のソフトウェアキャッシュメモリ120が毎秒にアクセスされる回数を示すものである。下記の式に従って、キャッシュペナルティを算出することができる。
キャッシュペナルティ=N×P×Chit+N×(1−P)×Cmiss
ここで、ChitとCmissは、夫々ヒットのペナルティとミスのペナルティを表すものである。キャッシュペナルティと、キャッシュがないときのペナルティとを比較することによって、ソフトウェアキャッシュメモリ120を用いることに優位性があるか否かを判定することができる。もし、優位性が無く、または優位性が高くない場合において、プロセッサ102は、優位性を増やすようにソフトウェアキャッシュメモリのパラメータを再設定することが望ましい。前述したように、修正されるパラメータはキャッシュラインの数、メインメモリの特定のエリアの定義(エレメントID)、データエレメント転送サイズ、キャッシュラインの置き換えの方針などとすることができる。
ソフトウェアキャッシュメモリの上述した特徴と利用するための適切なプログラムの例を下に示す。
/* 設定 */
#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 (2つ目のスロットに一致する場合) {
cache_simd_buf_tagの2番目のスロットを1番目に移動する(LRUのアルゴリズム)
cache_simd_buf_statusの2番目のスロットを1番目に移動する(LRUのアルゴリズム)
cache_simd_buf_addrの2番目のスロットを1番目に移動する(LRUのアルゴリズム)
cache_simd_buf_status = simd_insert(control, cache_simd_buf_status, 0); /* 最初のスロットにcontrolを挿入 */
return((void*)simd_extract(simd_ret_addr, 1); /* 2番目のスロットのローカルアドレス値を返す */
}
else if (3つ目のスロットに一致する場合) {
cache_simd_buf_tagの3番目のスロットを1番目に移動する(LRUのアルゴリズム)
cache_simd_buf_statusの3番目のスロットを1番目に移動する(LRUのアルゴリズム)
cache_simd_buf_addrの3番目のスロットを1番目に移動する(LRUのアルゴリズム)
cache_simd_buf_status = simd_insert(control, cache_simd_buf_status, 0); /* 最初のスロットにcontrolを挿入 */
return((void*)simd_extract(simd_ret_addr, 2); /* 3番目のスロットのローカルアドレス値を返す */
}
else if (4つ目のスロットに一致する場合) {
cache_simd_buf_tagの4番目のスロットを1番目に移動する(LRUのアルゴリズム)
cache_simd_buf_statusの4番目のスロットを1番目に移動する(LRUのアルゴリズム)
cache_simd_buf_addrの4番目のスロットを1番目に移動する(LRUのアルゴリズム)
cache_simd_buf_status = simd_insert(control, cache_simd_buf_status, 0); /* 最初のスロットにcontrolを挿入 */
return((void*)simd_extract(simd_ret_addr, 3); /* 4番目のスロットのローカルアドレス値を返す */
}

/* キャッシュミスの処理: 4番目のスロットを入れ替える */
cache_buf_addr = simd_extract(cache_simd_buf_addr, 3); /* 4番目のスロットからキャッシュローカルアドレス取得 */
if (キャッシュにステータスにライト属性がついている場合) {
/* ライトバック処理 */
cache_buf_tag = simd_extract(cache_simd_buf_tag, 3); /* 4番目のスロットからタグ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); /* 新規タグを3番目のスロットに設定 */
cache_simd_buf_status = simd_insert(control, cache_simd_buf_status, 3); /* 3番目のスロットにステータス設定 */

return_address = cache_buf_addr + (id - new_tag) * cache_buf_elementsize;

return ((void*)return_address);
}
図1〜図4を参照して説明した上記の概念は、マルチプロセッサシステムに適用することができ、図5はマルチプロセッサシステムAを示している。図5に示すマルチプロセッサシステムAは、複数のプロセッサ102A〜102Dと、夫々のプロセッサ102におけるローカルメモリ104(104A〜104D)と、バス108によって各々のプロセッサ102およびそのローカルメモリ104と接続されるメインメモリ106とを有する。ここで、図5において、例として、プロセッサ102が4つであるが、本発明の主旨を逸脱しない限り、いかなる数のプロセッサを用いてもよい。プロセッサ102は、既知のいかなる技術で利用されてもよく、各プロセッサの構造も同じであってもよいし、異なってもよい。
ここで、マルチプロセッサシステムにおいて前述した特徴を実現するのに適した望ましいコンピュータアーキテクチャについて説明する。マルチプロセッサは、具体的には、ゲームシステムや、ホームターミナルや、PCシステムや、サーバシステムや、ワークステーションなどのような多様なメディアを使用するアプリケーションのスタンドアロンまたは分散型処理のためのシングルチップソリューションとして適用することができる。一部のアプリケーション、例えばゲームシステムとホームターミナルの場合、リアルタイム処理が必要である。例えば、リアルタイムの分散型ゲームアプリケーションにおいて、ネットワークを経由した一つ以上の画像の解凍、3DCG(コンピューターグラフィック)、音声生成、ネットワーク通信、物理シミュレーション、人工知能計算などは、ユーザにリアルタイムの感覚を体験させるために十分の速さで実行されなければならない。したがって、マルチプロセッサシステムにおける各プロセッサは、短く、かつ予測できる時間内で自分のタスクを終わらせなければならない。
そのために、このコンピュータアーキテクチャにより、マルチプロセッシングコンピュータシステムのすべてのプロセッサは、共通のコンピューティングモジュール(またはセル)により構成される。この共通のコンピューティングモジュールは、一致した構造を有し、望ましくは、同じインストラクション・セットアーキテクチャを用いるものである。マルチプロセッサシステムは、1つ以上のクライアント、サーバ、パーソナルコンピュータ、モバイルコンピュータ、ゲーム機、PDA、セットトップボックス、電気製品、デジタルテレビ機、およびコンピュータプロセッサを用いる他のデバイスなどから構成されることができる。
必要であれば、多数のコンピュータシステムはネットワークのメンバーであってもよい。一致したモジュラー構造は、マルチプロセッサシステムによるアプリケーションとデータの処理を高効率および高速にすることができると共に、ネットワークが用いられる場合においては、ネットワークを介してアプリケーションとデータの送信を迅速にすることができる。この構造は、サイズや、演算能力が様々であるネットワーク上における各メンバーの構築と、これらのメンバーによる処理のためのアプリケーションの準備とを簡単化することができる。
図6は、基本処理モジュールとなるプロセッサエレメント(PE)500を示している。PE500は、I/Oインターフェース502と、処理ユニット(PU)504と、複数のサブ処理ユニット508、すなわちサブ処理ユニット508A、サブ処理ユニット508B、サブ処理ユニット508C、サブ処理ユニット508Dとを有する。ローカル(あるいは内部)PEバス512は、PU504と、サブ処理ユニット508と、メモリインターフェース511との間のデータおよびアプリケーションの転送を行うものである。PEバス512は、例えば従来のアーキテクチャを適用したものや、パケット交換型ネットワークとして実装されたものであればよい。パケット交換型ネットワークとして実装される場合において、より多くのハードウェアが必要となるが、使用可能な帯域幅を広げることができる。
PE500は、デジタルロジックを用いる様々な方法で構成することができ、シリコン基板上に設けられたCMOSを用いる単一なICとして構成されることが望ましい。回路基板の材料としては、ガリウム砒素(GaAS)、ガリウムアルミニウム砒素(GaAlAs)、様々の微量添加物を有する他の所謂III−B化合物などを用いることができる。PE500は、例えばRSFQ(rapid single-flux-quantum)ロジックなど、超伝導材料により構成されるものであってもよい。
PE500は、広い帯域幅のメモリ接続516により共有メモリ、すなわちメインメモリ514と緊密に接続されている。メインメモリ514は、ダイナミックRAM(DRAM)であることが望ましいが、他の種類のメモリ、例えばスタティックRAM(SRAM)、磁気RAM(MRAM)、光学メモリ、ホログラフィックメモリなどであってもよい。
PU504およびサブ処理ユニット508は、夫々、ダイレクト・メモリ・アクセス(DMA)機能を有するメモリフローコントローラ(MFC)と接続されることが望ましい。MFCは、メモリインターフェース511と協働して、メインメモリ514、PE500におけるサブ処理ユニット508、PU504間のデータの転送を円滑にするものである。DMACとメモリインターフェース511は、サブ処理ユニット508とPU504とから独立して設置されるようにしてもよいし、一体化されるようにしてもよい。例えば、メインメモリ514は図6に示すようにチップ外部に設けられるようにしてもよく、集積方式でチップ内蔵されるようにしてもよい。
PU504は、例えばスタンドアロンにデータとアプリケーションを処理することができる標準プロセッサとすることができる。動作中、PU504は、サブ処理ユニットによるデータとアプリケーションの処理のスケジューリングおよび統合処理をすることが望ましい。サブ処理ユニットは、SIMD(simple instruction multiple data)プロセッサであることが望ましい。サブ処理ユニットは、PU504の制御下において、データとアプリケーションの処理を独立して並列的に行う。PU504としては、RISC(reduced instruction−set computing)技術を用いるマイクロプロセッサアーキテクチャとなるパワーPC(商標)コアを用いることが好ましい。RISCは単純なインストラクションの組み合わせによって複雑なインストラクションを実行するものである。したがって、プロセッサのタイミングは、比較的簡単かつ速いオペレーションに基づきうる。これは、決められたクロックスピードにおいてより多くのインストラクションを実行することを可能とする。
PU504は、サブ処理ユニット508のうちの一つとして実装されてもよい。この場合、このサブ処理ユニット508は、メイン処理ユニットPUによる処理、すなわち各々のサブ処理ユニット508によるデータとアプリケーションの処理のスケジューリングと統合処理を行うものとすればよい。さらに、PE500内において、複数のPUを実装してもよい。
このモジュラー構造にしたがって、一つのコンピュータシステムに用いられるPE500の数は、そのシステムが必要とする処理能力に基づくものである。例えば、サーバ、ワークステーション、PDAは夫々4つ、2つ、1つのPE500を有するようにすることができる。一つのソフトウェアセルの処理に割り当てられた1つのPE500に含まれるサブプロセッシングユニットの数は、セル内プログラムとデータの複雑度およびサイズに基づくものである。
図7は、サブ処理ユニット(SPU)508の望ましい構造と機能を示す図である。サブ処理ユニット508のアーキテクチャは、汎用プロセッサ(多数のアプリケーションが高い平均性能を実現するように設計されているもの)と特殊用途のプロセッサ(一つのアプリケーションにおいて高い性能を実現するように設計されている)との間に位置するものであることが望ましい。サブ処理ユニット508は、ゲームアプリケーション、メディアアプリケーション、ブロードバンドシステムなどにおいて高い性能を実現すると共に、リアルタイムアプリケーションのプログラマに高度な制御自由度を提供するように設計されている。サブ処理ユニット508の一部の機能として、グラフィック構造パイプライン、サーフェス分割、高速フーリエ変換、画像処理キーワード、ストリーム処理、MPEGエンコード/デコード、暗号化、復号化、デバイスドライバー拡張、モデリング、ゲームフィジクス、コンテンツ制作、音声合成と処理などを挙げることができる。
サブ処理ユニット508は、サブ処理ユニットコア、すなわちSPUコア510Aとメモリフローコントローラ、すなわちMFC510Bという2つの基本機能ユニットを有する。SPUコア510Aは、プログラムの実行、データの操作などを担うものであり、MFC510Bは、SPUコア510Aと、システムのメインメモリ514との間のデータ転送に関連する機能を担うものである。
SPUコア510Aはローカルメモリ550と、インストラクションユニット(IU)552と、レジスタ554と、1つ以上の浮動小数点処理ステージ556と、1つ以上の固定小数点処理ステージ558とを有する。ローカルメモリ550は、SRAMのようなシングルポートのRAMであることが望ましい。メモリへのアクセスのレイテンシを軽減するために、従来のほとんどのプロセッサはキャッシュを用いるが、SPUコア510Aは、キャッシュよりも、比較的小さいローカルメモリ550を用いる。実際には、リアルタイムのアプリケーション(およびここで言及したほかのアプリケーション)のプログラマに、予測可能で、かつ一致したメモリアクセスのレイテンシを提供するために、サブ処理ユニット508A内においてキャッシュメモリアーキテクチャを用いることは好ましくない。キャッシュメモリのキャッシュヒット/ミス値は、数サイクルから数百サイクルの範囲内で変化する、予測困難な、メモリアクセス回数を生じさせる。このようなメモリアクセスの回数の予測困難性は、例えばリアルタイムアプリケーションのプログラミングに望まれるアクセスタイミングの予想可能性を下げる。データ演算とDMA転送をオーバーラップすることが、ローカルメモリ550内のレイテンシを補うことができる。これはリアルタイムアプリケーションのプログラミングに高度なコントロール性を提供する。DMA転送と関連するレイテンシおよびインストラクションのオーバーヘッドが、キャッシュミスにより生じたレイテンシより長いため、SRAMローカルメモリアプローチは、DMA転送サイズが十分大きいかつ十分予測可能なとき(例えばデータが要求される前にDMAコマンドを発行することができる)において優位性を提供する。
サブ処理ユニット508のうちのいずれか1つの上で実行されるプログラムは、ローカルアドレスを用いて関連するローカルメモリ550を参照する。ローカルメモリ550の各場所にはシステムの全体のメモリマップ上におけるリアルアドレス(RA)が付与されている。これは、特権レベルのアプリケーションソフトウェアがローカルメモリ550を一つの処理における実効アドレス(EA)にマッピングすることを可能とし、それによって2つのローカルメモリ550間のDMA転送が容易になる。PU504は、実効アドレスを用いてローカルメモリ550に直接アクセスすることもできる。ローカルメモリ550は、556キロバイトの容量を有し、レジスタ554の容量は128×128ビットであることが望ましい。
SPUコア510Aは、演算パイプラインを用いて実装されることが望ましく、その中において論理インストラクションがパイプライン方式で処理される。パイプラインは、インストラクションを処理する任意の数のステージに分けることができるが、通常、パイプラインは、1つ以上のインストラクションのフェッチ、インストラクションのデコード、インストラクション間の従属関係のチェック、インストラクションの発行、およびインストラクションの実行から構成される。これに関連して、インストラクションユニット552は、インストラクションバッファと、インストラクションデコード回路と、従属関係チェック回路と、インストラクション発行回路とを含む。
インストラクションバッファは、ローカルメモリと接続されており、インストラクションがフェッチされたときにこれらのインストラクションを一時的に格納することができる複数のレジスタを有することが好ましい。インストラクションバッファは、すべてのインストラクションが1つのグループとして(すなわち同時に大量に)レジスタから出るように動作することが好ましい。インストラクションバッファはいかなるサイズであってもよいが、レジスタの数が2または3以下となるようにするサイズであることが好ましい。
通常、デコード回路はインストラクションを細分化すると共に、対応するインストラクションの機能を果たす論理・マイクロオペレーションを発生させる。例えば、論理・マイクロペレーションは、計算オペレーションと論理オペレーションの指定、ローカルメモリ550へのロードオペレーションと格納オペレーションの指定、レジスタソースオペランドおよび/または即値データオペランドの指定などを行うことができる。デコード回路は、ターゲットのレジスタのアドレスや、構造リソースや、機能ユニットおよび/またはバスなどのような、インストラクションが用いるリソースを指定してもよい。デコード回路は、リソースが必要とされるインストラクションパイプラインのステージを示す情報を提供してもよい。インストラクションデコード回路は、同時に大量に、インストラクションバッファのレジスタの数と同じ数のインストラクションをデコードするように動作可能であることが好ましい。
従属関係チェック回路は、チェック対象となるインストラクションのオペランドがパイプラン内の他のインストラクションのオペランドに従属するか否かを判定するためのチェックを行うデジタルロジックを含む。従属するならば、チェック対象となるインストラクションは、これらの他のオペランドが(例えば、これらの他のインストラクションの実行の完了を許可することによって)更新されるまで、実行されるべきではない。従属関係チェック回路は、デコード回路112から同時に送信されてきた複数のインストラクションの従属関係を判定することが好ましい。
インストラクション発行回路は、浮動小数点処理ステージ556および/または固定小数点処理ステージ558にインストラクションを発行することができる。
レジスタ554は、128―エントリレジスタファイルのような、比較的大きな統合レジスタファイルとして実装されることが好ましい。これは、レジスタ不足を避けるためのレジスタのリネームを必要とせずに、深くパイプライン化された高周波数の実行を可能とする。ハードウェアのリネームは、一般的に処理システムにおける実装面積と電力の高い割合を消費する。したがって、ソフトウェアによるループアンローリングまたは他のインターリーブ技術によってレイテンシがカバーされるような場合おいて優位性のあるオペレーションを実現することができる。
SPUコア510Aは、クロックサイクル毎に複数のインストラクションを発行するようなスーパースカラーアーキテクチャで実装されることが好ましい。SPUコア510Aは、インストラクションバッファから同時に送信されるインストラクションの数、例えば2と3の間(クロックサイクル毎に2つまたは3つのインストラクションが発行されることを意味する)に対応する程度のスーパーカラーとして動作可能であることが好ましい。必要とされる処理能力に応じた多少なりの数の浮動小数点処理ステージ556と固定小数点処理ステージ558を用いることができる。浮動小数点処理ステージ556と固定小数点処理ステージ558の望ましいスピードは夫々毎秒32ギガ浮動小数点オペレーション(32 GFLOPS)と毎秒32ギガオペレーション(32 GOPS)である。
MFC510Bは、バスインターフェースユニット(BIU564)と、メモリマネジメントユニット(MMU562)と、ダイレクトメモリアクセスコントローラ(DMAC560)とを有することが望ましい。低電力消費の設計目的を達成するために、MFC510Bは、DMAC560を除いて、SPUコア510AおよびPEバス512の半分の周波数(半分のスピード)で動作することが好ましい。MFC510Bは、PEバス512からサブ処理ユニット508に入るデータとインストラクションを操作することができ、DMACのためのアドレス変換と、データ一貫性のためのスヌープオペレーションとを提供する。BIU564は、PEバス512とMMU562とDMACとの間のインターフェースを提供する。したがって、サブ処理ユニット508(SPUコア510AとMFC510Bを含む)は物理的および/または論理的にPEバス512と接続されている。
MMU562は、メモリアクセスのために実効アドレス(DMAコマンドから取得される)をリアルアドレスへ変換することができるようにすることが望ましい。例えば、MMU562は、実効アドレスの比較的高いオーダのビットをリアルアドレスのビットに変換することができる。比較的低いオーダアドレスビットについては、変換不可であると共に、物理的におよび論理的にリアルアドレスの形成およびメモリへのアクセスのリクエストに用いられるようにすることが好ましい。具体的には、MMU562は、64ビットのメモリマネジメントモジュールをベースにして実装されることができ、4Kバイト、64Kバイト、1メガバイト、16メガバイトのページサイズと256MBのセグメントサイズを有する264バイトの実効アドレス空間を提供することができる。MMU562は、DMAコマンドのために、265までの仮想メモリと、242バイトの物理メモリをサポート可能であることが好ましい。MMU562のハードウェアは、8−エントリの完全連想SLB、256−エントリの4ウェイセット連想TLB、TLBのための4×4代替マネジメントテーブル(RMT)を含むものとすることができる。なお、RMTはハードウェアTLBミスのハンドリングに用いられるものである。
DMAC560は、SPUコア510Aと、1つ以上の、PU504および/または他のSPUのようなデバイスからのDMAコマンドを管理することができることが望ましい。DMAコマンドは下記の3つのカテゴリがある:ローカルメモリ550からメインメモリ514へデータを移動するPutコマンド、メインメモリ514からローカルメモリ550へデータを移動するGetコマンド、SLIコマンドと同期コマンドを含むストレージコントロールコマンド。同期コマンドは、アトミックコマンド、送信コマンド、専用のバリアコマンドを含むものとすることができる。DMAコマンドに応じて、MMU562は実効アドレスをリアルアドレスに変換し、このリアルアドレスはBIU564に転送される。
SPUコア510Aはチャンネルインターフェースとデータインターフェースとを用いて、DMAC560内のインターフェースと通信(DMAコマンド、ステイタスなどの送信)することが好ましい。SPUコア510Aは、チャンネルインターフェースを介してDMAコマンドをDMAC560内のDMAキューに送信する。一旦DMAキューに格納されたDMAコマンドは、DMAC560内の発行ロジックと完了ロジックに操作される。一つのDMAコマンドのためのすべてのバス・トランザクションが完了すると、チャンネルインターフェースを介して、一つの完了信号がSPUコア510Aに返送される。
図8は、PU504の好ましい構造と機能を示す図である。PU504は、PUコア504Aとメモリフローコントローラ、すなわちMFC504Bとの2つの基本機能ユニットを有する。PUコア504Aは、プログラムの実行、データの操作、マルチプロセッサ管理機能などを担うものであり、MFC504Bは、PUコア504Aと、処理システム100のメモリスペースとの間のデータ転送に関連する機能を担うものである。
PUコア504Aは、L1キャッシュ570と、インストラクションユニット572と、レジスタ574と、少なくとも1つの浮動小数点処理ステージ576と、少なくとも1つの固定小数点処理ステージ578とを有する。L1キャッシュ570は、メインメモリ106、プロセッサ102、あるいはMFC504Bにおけるほかの部分のメモリスペースから受信したデータのキャッシング機能を提供する。PUコア504Aはスーパーパイプラインとして実装されることが好ましいため、インストラクションユニット572は、フェッチ、デコード、従属関係のチェック、発行などを含む多数のステージを有するインストラクションパイプラインとして実装されることが好ましい。PUコア504Aは、スーパースカラー構造を有することが好ましく、それによって、クロックサイクル毎にインストラクションユニット572から2つ以上のインストラクションが発行される。高い演算パワーを実現するために、浮動小数点処理ステージ576と固定小数点処理ステージ578は、パイプライン方式の多数のステージを有する。必要とされる処理能力に応じた多少なりの浮動小数点処理ステージ556と固定小数点処理ステージ558を用いることができる。
MFC504Bは、バスインターフェースユニット(BIU580)と、L2キャッシュ582と、キャッシュ不可ユニット(NCU584)と、コアインターフェースユニット(CIU586)と、メモリマネジメントユニット(MMU588)とを有する。低電力消費の設計目的を達成するために、MFC504Bのほとんどは、PUコア504Aとバス108の半分の周波数(半分のスピード)で動作することが好ましい。
BIU580は、バス108と、L2キャッシュ582と、NCUロジックブロックとの間のインターフェースを提供する。BIU580は、完全一致のメモリオペレーションを実行するために、マスターデバイスとして動作してもよく、バス108上のスレーブデバイスとして動作してもよい。マスターデバイスとして動作する場合、BIU580は、L2キャッシュ582とNCU584の代わりに、バス108へのロードリクエストとストアリクエストを発信する。BIU580は、バス108へ送ることができるコマンドの総数を限定するコマンドのフローコントロールメカニズムを実装してもよい。バス108上のデータオペレーションは、8ビートになるように設計されることができ、そして、BIU580は、キャッシュラインが128バイト前後であり、一貫性と同期の精度が128KBであるように設計されることが好ましい。
L2キャッシュ582(およびそれをサポートするハードウェアロジック)は、512KBデータをキャッシュするように設計されることが好ましい。例えば、L2キャッシュ582は、キャッシュ可能なロードとストア、データのプリフェッチ、インストラクションフェッチ、インストラクションのプリフェッチ、キャッシュオペレーション、バリアオペレーションを操作することができる。L2キャッシュ582は、6つのキャストアウトキュー(例えば6つのRCマシン)に合わせた6つのリロードキューと、8つの(64バイトの幅)ストアキューとを有することができる。L2キャッシュ582は、L1キャッシュ570の中の一部または全てのデータのバックアップコピーを提供するように動作してもよい。これは特に、処理ノードがホットスワップ(動作中に変更)されたときの、復元状況において有用である。この構成は、L1キャッシュ570が、ほぼポート無しにさらに速く動作することを可能にするとともに、キャッシュ間の転送を速くすることができる(リクエストがL2キャッシュ582で止まることができるから)。この構成は、L2キャッシュ582にキャッシュ一貫性のマネジメントを及ばしめるメカニズムも提供する。
NCU584はインターフェースによってCIU586と、L2キャッシュ582と、BIU580と接続されており、通常、PUコア504Aとメモリシステム間のキャッシュ不可なオペレーションのキューまたはバッファ回路として機能する。NCU584は、PUコア504Aとの通信のうちの、L2キャッシュ582によって扱わない全ての通信を操作することが好ましい。ここで、L2キャッシュ582によって扱わないものとしては、キャッシュ不可なロードとストアや、バリアオペレーションや、キャッシュ一貫性オペレーションなどを挙げることができる。低電力消費の設計目的を達成するために、NCU584は、半分のスピードで動作することが好ましい。
CIU586は、MFC504BとPUコア504Aとの境界線上に配置され、浮動小数点処理ステージ576、固定小数点処理ステージ578、インストラクションユニット572、MMU588から、L2キャッシュ582とNCU584へ送られるリクエストのためのルーティング、アービトレイション、フローコントロールポイントとして動作する。PUコア504AとMMU588はフルスピードで動作し、L2キャッシュ582とNCU584は2:1のスピード比で動作可能であることが好ましい。こうすることによって、CIU586に周波数境界線が存在することになり、この境界線はその一つの機能により、2つの周波数領域間にリクエストの転送およびデータのリロードをする際に、周波数の交錯を適切に操作する。
CIU586は、ロードユニット、ストアユニット、リロードユニットの3つの機能ブロックから構成される。さらに、データをプリフェッチする機能がCIU586により実行される。この機能は、ロードユニットの一部の機能であることが好ましい。CIU586は、下記の動作を実行可能であることが好ましい:(i)PUコア504AとMMU588からのロードリクエストとストアリクエストを受信する、(ii)これらのリクエストをフルスピードクロック周波数から半分のスピードに変換する(2:1クロック周波数変換)、(iii)キャッシュ可能なリクエストとキャッシュ不可なリクエストとをそれぞれL2キャッシュ582とNCU584へルーティングする、(iv)L2キャッシュ582とNCU584へのリクエストが均等になるように調整する、(v)リクエストが目標時間内に受信されると共に、オーバーフローが発生しないための、L2キャッシュ582とNCU584へ送信するリクエストのフローコントロール、(vi)ロードリターンデータを受信すると共に、これらのデータを浮動小数点処理ステージ576、固定小数点処理ステージ578、インストラクションユニット572、またはMMU588へルーティングする、(vii)スヌープリクエストを浮動小数点処理ステージ576、固定小数点処理ステージ578、インストラクションユニット572、またはMMU588へ転送する、(viii)ロードリターンデータとスヌープトラフィックを半分のスピードからフルスピードへ変換する。
MMU588は、第2レベルアドレス変換手段のごとく、PUコア540Aのためにアドレス変換を提供することが好ましい。変換の第1レベルは、PUコア504A内において、セパレートインストラクションと、MMU588より遥かに小さくてかつ速いデータERAT(実効アドレスからリアルアドレスへの変換)アレイとにより提供されることが好ましい。
PU504は64ビットで実装され、4〜6GHz、10F04(Fan−out−of−four)で動作することが好ましい。レジスタは64ビットの長さを有することが好ましく(特定用途のための1つまたはより多くのレジスタが64ビットより小さいかもしれないが)、実効アドレスは64ビットの長さを有することが好ましい。インストラクションユニット572、レジスタ574、浮動小数点処理ステージ576と固定小数点処理ステージ578はRISCコンピューティング技術を達成するためにパワーPC(商標)技術により実装されることが好ましい。
このコンピュータシステムのモジュラー構造のさらなる詳細については、米国特許第6526491号公報に記載されており、そちらを参照することができるため、ここで全体の詳細説明を省略する。
本発明の態様にしたがって、図中に示されるような適切なハードウェアを用いて上述した方法及び装置を実現することができる。これらのハードウェアは、例えば、標準のデジタル回路や、ソフトウェアおよび/またはファームウェアプログラムを実行することができる任意の既知のプロセッサや、プログラムで制御可能なリード・オンリメモリ(PROM)とアレイ・ロジックデバイス(PAL)等のような、1つまたはより多くの、プログラムで制御可能なデジタルデバイスまたはシステムなど、従来の任意の技術を適用して実装することができる。さらに、図面に示される装置は、所定の機能ブロックに分けられているが、これらのブロックは、別々の回路により構成されたり、1つ以上の機能ユニットに一体化されたりしてもよい。さらに、本発明の各態様は、搬送や配送のために、適切な記憶媒体(フロッピ(登録商標)ディスク、メモリチップなど)に記録されるソフトウェアや、ファームウェアプログラムとして提供されてもよい。
上述したように、本発明の各態様は、プロセッサのローカルメモリ内において、キャッシュメモリをソフトウェアで呼び出す技術を提供する。明確なキャッシュメモリセクションの数、1つのメモリについてのキャッシュラインの数、1つのインストラクションについてのタグ比較の数、ラインブロックのサイズ、置き換え方針はAPIコードによって設定することができる。これはパラメータが固定されたハードウェアキャッシュメモリより大きな優位性を与える。さらに、キャッシュヒット率とアクセス頻度をモニタリングし、キャッシュペナルティを計算することによって、処理性能を向上させるようにキャッシュ設定(すなわち、上記のパラメータおよび/または他のキャッシュパラメータ)を自動的にソフトウェアで調整することができる。
ソフトウェアで呼び出されるキャッシュメモリを提供する本発明の方法および装置は、費用と実装面積の点で不利なコスト上昇を招くことなく、かつ、ハードウェアで実装されるキャッシュメモリの有利さの少なくとも一部をプログラマに活用させることができるという優位性を有する。したがって、メモリ効率、処理スループット、処理品質の多大な向上を図ることができる。
ここでは本発明の具体例について説明したが、これらの実施例は単に本発明の趣旨と応用を示すものである。したがって、請求項により定義された本発明の主旨および範囲から逸脱しないかぎり、上述した実施形態に対して様々な変更を加えることができる。
本発明の実施形態による処理システムを示す図である。 図1に示す処理システムにおける、ソフトウェアによって呼び出されるキャッシュメモリを1つ以上有するローカルメモリを示す図である。 図1に示す処理システムが実行しうる処理を示すフローチャートである。 図4は、図1に示す処理システムが実行しうるさらなる処理を示すフローチャートである。 2つ以上のサブプロセッサを有するマルチプロセッサシステムの構成を示す図である。これらのサブプロセッサのうちの一つまたは複数は、図2に示す、ソフトウェアによって呼び出されるキャッシュメモリを1つ以上有するローカルメモリを含むものである。本発明の態様にしたがってスケジューリングするマルチキューを示す図である。 本発明の実施形態によるマルチプロセッサシステムを適用することができる望ましいプロセッサエレメント(PE)を示すブロック図である。 図6に示すシステムにおける典型的なサブプロセッシングユニット(SPU)の構造を示すブロック図である。 図6に示すシステムにおけるプロセッシングユニット(PU)の構造を示すブロック図である。
符号の説明
100 処理システム、 102 プロセッサ、 104 ローカルメモリ、 106 メインメモリ、 108 バス、 120 ソフトウェアキャッシュメモリ、 122 キャッシュライン、 100A マルチプロセッサシステム、 500 プロセッサエレメント、 502 I/O インターフェース、 504 処理ユニット、 508 サブ処理ユニット、 511 メモリインターフェース、 512 PEバス、 514 メインメモリ、 516 メモリ接続、 510A サブ処理ユニットコア、 510B メモリフローコントローラ、 550 ローカルメモリ、 552 インストラクションユニット、 554 レジスタ、 556 浮動小数点処理ステージ、 558 固定小数点処理ステージ、 560 DMAC、 562 メモリマネジメントユニット、 564 バスインターフェースユニット、 570 L1キャッシュ、 572 インストラクションユニット、 574 レジスタ、 576 浮動小数点処理ステージ、 578 固定小数点処理ステージ、 580 バスインターフェースユニット、 582 L2キャッシュ、 584 キャッシュ不可ユニット、 586 コアインターフェースユニット、 588 メモリマネジメントユニット。

Claims (26)

  1. メインメモリに接続可能、かつ、メインメモリ内に記憶されたデータを取得可能なプロセッサと、
    ハードウェアキャッシュメモリではなく、プロセッサによって使用されることによりデータを記憶するよう動作時にプロセッサに接続されるローカルメモリとを備え、
    プロセッサは、
    ソフトウェアによって呼び出されるキャッシュメモリ領域を少なくともひとつ含むようにローカルメモリを構成し、
    少なくともキャッシュヒット率とキャッシュアクセス頻度のいずれかに基づきキャッシュペナルティを計算するよう動作し、計算結果に対応してソフトウェアによって呼び出されるキャッシュメモリ領域のパラメータを再構成するよう動作することを特徴とするキャッシュメモリ実装装置。
  2. 請求項1に記載のキャッシュメモリ実装装置において、前記プロセッサは、アプリケーションプログラムインタフェイスのコードを実行することによってキャッシュメモリ領域を少なくともひとつ含むようにローカルメモリを構成することを特徴とするキャッシュメモリ実装装置。
  3. 請求項1または2に記載のキャッシュメモリ実装装置において、ソフトウェアによって呼び出されるキャッシュメモリ領域のパラメータは、
    a.ソフトウェアによって呼び出される少なくともひとつのキャッシュメモリ領域に含むべきキャッシュラインの数
    b.キャッシュラインのサイズ
    c.前記データがリード/ライトされるメインメモリの特定領域
    d.各リード/ライトサイクルでメインメモリからリードし、またはメインメモリにライトするデータのデータサイズ
    e.キャッシュライン置換の方針
    のいずれかを含むことを特徴とするキャッシュメモリ実装装置。
  4. 請求項1に記載のキャッシュメモリ実装装置において、プロセッサは、ソフトウェアによって呼び出される複数の独立したキャッシュメモリ領域を含むようローカルメモリを構成することを特徴とするキャッシュメモリ実装装置。
  5. データを記憶するよう動作可能なメインメモリと、
    それぞれメインメモリと接続されるよう動作可能であり、メインメモリから少なくとも前記データの一部を得るよう動作可能な複数のプロセッサと、
    ハードウェアキャッシュメモリではなく、それぞれプロセッサに対応してオンチップで配置され、プロセッサによって使用されることによりデータを格納するよう動作時にプロセッサに接続されるローカルメモリと、
    を備え、各プロセッサは、同じ構造を有し、それぞれが、共通のアプリケーションプログラムインタフェイスのコードを実行することによって、キャッシュメモリ領域を少なくともひとつ含むように各ローカルメモリを構成可能であることを特徴とするキャッシュメモリシステム。
  6. 請求項5に記載のキャッシュメモリシステムにおいて、少なくともひとつのプロセッサは、アプリケーションプログラムインターフェイスのコードを実行することによって、複数の独立したキャッシュメモリ領域を含むように対応するローカルメモリを構成することを特徴とするキャッシュメモリシステム。
  7. 請求項5に記載のキャッシュメモリシステムにおいて、少なくともひとつのプロセッサがアプリケーションプログラムインタフェイスのコードを使用し、
    a.ソフトウェアによって呼び出される少なくともひとつのキャッシュメモリ領域に含むべきキャッシュラインの数
    b.キャッシュラインのサイズ
    c.前記データがリード/ライトされるメインメモリの特定領域
    d.各リード/ライトサイクルでメインメモリからリードし、またはメインメモリにライトするデータのデータサイズ
    e.キャッシュライン置換の方針
    のパラメータの少なくともいずれかを指定するよう動作することを特徴とするキャッシュメモリシステム。
  8. 請求項5から7のいずれか1項に記載のキャッシュメモリシステムにおいて、少なくともひとつのプロセッサは少なくともキャッシュヒット率とキャッシュアクセス頻度のいずれかに基づきキャッシュペナルティを計算するよう動作可能であり、当該プロセッサは計算結果に対応してソフトウェアによって呼び出されるキャッシュメモリ領域のパラメータを再構成するよう動作可能であることを特徴とするキャッシュメモリシステム。
  9. プロセッサによって、ハードウェアキャッシュメモリではなく、ソフトウェアによって呼び出されるキャッシュメモリ領域を少なくともひとつ含むようにローカルメモリを構成し、
    このプロセッサは、当該プロセッサによってローカルメモリ内で使用するために、メインメモリからデータを取得するようメインメモリに接続可能であり、
    少なくともキャッシュヒット率とキャッシュアクセス頻度のいずれかに基づきキャッシュペナルティを計算し、
    計算結果に対応してソフトウェアによって呼び出されるキャッシュメモリ領域のパラメータを再構成することを特徴とするキャッシュメモリ実装方法。
  10. 請求項9に記載のキャッシュメモリ実装方法において、前記プロセッサは、アプリケーションプログラムインタフェースのコードを実行することによってキャッシュメモリ領域を少なくともひとつ含むようにローカルメモリを構成することを特徴とするキャッシュメモリ実装方法。
  11. 請求項9または10に記載のキャッシュメモリ実装方法において、ソフトウェアによって呼び出されるキャッシュメモリ領域のパラメータは、
    a.ソフトウェアによって呼び出される少なくともひとつのキャッシュメモリ領域に含むべきキャッシュラインの数
    b.キャッシュラインのサイズ
    c.前記データがリード/ライトされるメインメモリの特定領域
    d.各リード/ライトサイクルでメインメモリからリードし、またはメインメモリにライトするデータのデータサイズ
    e.キャッシュライン置換の方針
    のいずれかを含むことを特徴とするキャッシュメモリ実装方法。
  12. ハードウェアキャッシュメモリではないローカルメモリを有するプロセッサに、
    ソフトウェアによって呼び出されるキャッシュメモリ領域を少なくともひとつ含むように該ローカルメモリを構成する処理、
    少なくともキャッシュヒット率とキャッシュアクセス頻度のいずれかに基づきキャッシュペナルティを計算する処理、
    計算結果に対応してソフトウェアによって呼び出されるキャッシュメモリ領域のパラメータを再構成する処理を実行せしめるプログラムを格納したことを特徴とする記憶媒体。
  13. 請求項12に記載の記憶媒体において、ソフトウェアによって呼び出されるキャッシュメモリ領域のパラメータは、
    a.ソフトウェアによって呼び出される少なくともひとつのキャッシュメモリ領域に含むべきキャッシュラインの数
    b.キャッシュラインのサイズ
    c.データがリード/ライトされるメインメモリの特定領域
    d.各リード/ライトサイクルでメインメモリからリードし、またはメインメモリにライトするデータのデータサイズ
    e.キャッシュライン置換の方針
    のいずれかを含むことを特徴とする記憶媒体。
  14. ハードウェアで実装されたキャッシュメモリに接続され、メインメモリに接続されることが可能なプロセッサであって、メインメモリからキャッシュメモリへデータを格納するよう動作可能な少なくともひとつの主プロセッサと、
    それぞれが前記少なくともひとつの主プロセッサと接続され、メインメモリに接続されることが可能な副プロセッサであって、メインメモリから少なくともデータの一部を取得するよう動作可能な複数の副プロセッサと、
    ハードウェアキャッシュメモリではなく、それぞれの副プロセッサに対応してオンチップで配置され、各副プロセッサによって使用するデータを格納するよう副プロセッサに接続可能なローカルメモリと、
    を備え、各副プロセッサは、ソフトウェアによって呼び出されるキャッシュメモリ領域を少なくともひとつ含むように各ローカルメモリを構成することを特徴とするキャッシュメモリ実装装置。
  15. 請求項14に記載のキャッシュメモリ実装装置において、各副プロセッサのローカルメモリにそれぞれ対応する対するDMAC(ダイレクト・メモリ・アクセス・コントローラ)をさらに備えることを特徴とするキャッシュメモリ実装装置。
  16. 請求項14に記載のキャッシュメモリ実装装置において、前記副プロセッサは、アプリケーションプログラムインタフェイスのコードを実行することによってキャッシュメモリ領域を少なくともひとつ含むようにローカルメモリを構成することを特徴とするキャッシュメモリ実装装置。
  17. 請求項14に記載のキャッシュメモリ実装装置において、各副プロセッサは、同じ構造を有し、共通のアプリケーションプログラムインタフェイスのコードを実行することによって前記キャッシュメモリ領域を構成することを特徴とするキャッシュメモリ実装装置。
  18. 請求項14から17のいずれか1項に記載のキャッシュメモリ実装装置において、主プロセッサ、ハードウェアキャッシュメモリ、副プロセッサおよびローカルメモリが共通の半導体チップ上に構成されたことを特徴とするキャッシュメモリ実装装置。
  19. 請求項18に記載のキャッシュメモリ実装装置において、さらにメインメモリが前記半導体チップ上に構成されたことを特徴とするキャッシュメモリ実装装置。
  20. 請求項14から19のいずれか1項に記載のキャッシュメモリ実装装置において、各副プロセッサが、
    a.ソフトウェアによって呼び出される少なくともひとつのキャッシュメモリ領域に含むべきキャッシュラインの数
    b.キャッシュラインのサイズ
    c.前記データがリード/ライトされるメインメモリの特定領域
    d.各リード/ライトサイクルでメインメモリからリードし、またはメインメモリにライトするデータのデータサイズ
    e.キャッシュライン置換の方針
    のパラメータの少なくともいずれかを指定するよう動作することを特徴とするキャッシュメモリ実装装置。
  21. 請求項14に記載のキャッシュメモリ実装装置において、副プロセッサは、ソフトウェアによって呼び出される複数の独立したキャッシュメモリ領域を含むようローカルメモリを構成することを特徴とするキャッシュメモリ実装装置。
  22. 請求項14から21のいずれか1項に記載のキャッシュメモリ実装装置において、
    前記副プロセッサは、少なくともキャッシュヒット率とキャッシュアクセス頻度のいずれかに基づきキャッシュペナルティを計算し、
    計算結果に対応してソフトウェアによって呼び出されるキャッシュメモリ領域のパラメータを再構成することを特徴とするキャッシュメモリ実装装置。
  23. ハードウェアキャッシュメモリではないローカルメモリを有するプロセッサに、
    ソフトウェアによって呼び出されるキャッシュメモリ領域を少なくともひとつ含むように該ローカルメモリを構成する処理、
    少なくともキャッシュヒット率とキャッシュアクセス頻度のいずれかに基づきキャッシュペナルティを計算する処理、
    計算結果に対応してソフトウェアによって呼び出されるキャッシュメモリ領域のパラメータを再構成する処理を実行せしめることを特徴とするプログラム。
  24. データを記憶するよう動作可能なメインメモリと、
    それぞれメインメモリと接続されるよう動作可能であり、メインメモリから少なくとも前記データの一部を得るよう動作可能な複数のプロセッサと、
    ハードウェアキャッシュメモリではなく、それぞれプロセッサに対応してオンチップで配置され、プロセッサによって使用するデータを格納するようそれぞれのプロセッサに接続可能な複数のローカルメモリと、
    を備え、
    前記複数のプロセッサは、並列的に複数のアプリケーションを実行可能であり、
    前記複数のローカルメモリは、対応するプロセッサにおけるアプリケーションの実行内容に応じて、選択的にソフトウェアキャッシュメモリ領域が含まれるように構成されることを特徴とするキャッシュメモリシステム。
  25. データを記憶するよう動作可能なメインメモリと、
    それぞれメインメモリと接続されるよう動作可能であり、メインメモリから少なくとも前記データの一部を得るよう動作可能な複数のプロセッサと、
    ハードウェアキャッシュメモリではなく、それぞれプロセッサに対応してオンチップで配置され、プロセッサによって使用するデータを格納するようプロセッサに接続可能な複数のローカルメモリとを備え、
    前記複数のプロセッサは、並列的に複数のアプリケーションを実行可能なシステムにおいて、
    前記複数のプロセッサにおけるそれぞれのアプリケーションの実行内容に応じて、前記複数のローカルメモリに対して選択的にソフトウェアキャッシュを構成することを特徴とするキャッシュメモリ実装方法。
  26. データを記憶するよう動作可能なメインメモリと、
    それぞれメインメモリと接続されるよう動作可能であり、メインメモリから少なくとも前記データの一部を得るよう動作可能な複数のプロセッサと、
    ハードウェアキャッシュメモリではなく、それぞれプロセッサに対応してオンチップで配置され、プロセッサによって使用するデータを格納するようプロセッサに接続可能な複数のローカルメモリとを備え、
    前記複数のプロセッサは、並列的に複数のアプリケーションを実行可能なシステムにおいて、
    前記複数のプロセッサにおけるそれぞれのアプリケーションの実行内容に応じて、前記複数のローカルメモリに対して選択的にソフトウェアキャッシュを構成する処理をコンピュータに実行せしめることを特徴とするプログラム。
JP2005153848A 2004-05-28 2005-05-26 キャッシュメモリ実装方法および装置、キャッシュメモリシステム Active JP3802042B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US57544404P 2004-05-28 2004-05-28

Publications (2)

Publication Number Publication Date
JP2005339557A JP2005339557A (ja) 2005-12-08
JP3802042B2 true JP3802042B2 (ja) 2006-07-26

Family

ID=35451049

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005153848A Active JP3802042B2 (ja) 2004-05-28 2005-05-26 キャッシュメモリ実装方法および装置、キャッシュメモリシステム

Country Status (9)

Country Link
US (1) US7526608B2 (ja)
EP (1) EP1658564B1 (ja)
JP (1) JP3802042B2 (ja)
KR (1) KR100829287B1 (ja)
CN (1) CN100451996C (ja)
AT (1) ATE483202T1 (ja)
DE (1) DE602005023827D1 (ja)
TW (1) TWI264642B (ja)
WO (1) WO2005116839A1 (ja)

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7644239B2 (en) 2004-05-03 2010-01-05 Microsoft Corporation Non-volatile memory cache performance improvement
US7490197B2 (en) 2004-10-21 2009-02-10 Microsoft Corporation Using external memory devices to improve system performance
JP2006309338A (ja) * 2005-04-26 2006-11-09 Toshiba Corp データ変換器モジュール
JP4855710B2 (ja) * 2005-04-28 2012-01-18 株式会社東芝 ソフトウェアのプラグイン方法、および、アプリケーションプログラム
US8914557B2 (en) 2005-12-16 2014-12-16 Microsoft Corporation Optimizing write and wear performance for a memory
US7581064B1 (en) * 2006-04-24 2009-08-25 Vmware, Inc. Utilizing cache information to manage memory access and cache utilization
US7434002B1 (en) * 2006-04-24 2008-10-07 Vmware, Inc. Utilizing cache information to manage memory access and cache utilization
US20080005473A1 (en) * 2006-06-30 2008-01-03 Tong Chen Compiler assisted re-configurable software implemented cache
US8370575B2 (en) * 2006-09-07 2013-02-05 International Business Machines Corporation Optimized software cache lookup for SIMD architectures
US9176886B2 (en) * 2006-10-30 2015-11-03 Hewlett-Packard Development Company, L.P. Method and system for filling cache memory for cache memory initialization
US7711904B2 (en) * 2007-03-22 2010-05-04 International Business Machines Corporation System, method and computer program product for executing a cache replacement algorithm
US8631203B2 (en) * 2007-12-10 2014-01-14 Microsoft Corporation Management of external memory functioning as virtual cache
US8423989B2 (en) * 2008-05-02 2013-04-16 Synchonoss Technologies, Inc. Software parameter management
US8868844B2 (en) * 2008-06-25 2014-10-21 International Business Machines Corporation System and method for a software managed cache in a multiprocessing environment
US8819651B2 (en) * 2008-07-22 2014-08-26 International Business Machines Corporation Efficient software cache accessing with handle reuse
US9032151B2 (en) 2008-09-15 2015-05-12 Microsoft Technology Licensing, Llc Method and system for ensuring reliability of cache data and metadata subsequent to a reboot
US7953774B2 (en) 2008-09-19 2011-05-31 Microsoft Corporation Aggregation of write traffic to a data store
US8949529B2 (en) * 2009-12-30 2015-02-03 International Business Machines Corporation Customizing function behavior based on cache and scheduling parameters of a memory argument
JP5489884B2 (ja) * 2010-06-30 2014-05-14 インターナショナル・ビジネス・マシーンズ・コーポレーション 命令実行装置、命令実行方法、及び命令実行プログラム
US20120297256A1 (en) * 2011-05-20 2012-11-22 Qualcomm Incorporated Large Ram Cache
KR101257192B1 (ko) 2011-07-28 2013-04-22 손상훈 비닐하우스용 운반장치
US9158685B2 (en) 2012-09-11 2015-10-13 Apple Inc. System cache with cache hint control
EP2881918B1 (en) * 2013-12-06 2018-02-07 My Virtual Reality Software AS Method for visualizing three-dimensional data
JP6384375B2 (ja) * 2015-03-23 2018-09-05 富士通株式会社 情報処理装置、記憶装置制御方法、記憶装置制御プログラム及び情報処理システム
WO2018009240A2 (en) * 2015-11-12 2018-01-11 University Of Rochester Superconducting system architecture for high-performance energy-efficient cryogenic computing
US10936374B2 (en) * 2018-05-17 2021-03-02 International Business Machines Corporation Optimizing dynamic resource allocations for memory-dependent workloads in disaggregated data centers
US10601903B2 (en) 2018-05-17 2020-03-24 International Business Machines Corporation Optimizing dynamical resource allocations based on locality of resources in disaggregated data centers
US10893096B2 (en) 2018-05-17 2021-01-12 International Business Machines Corporation Optimizing dynamical resource allocations using a data heat map in disaggregated data centers
US11221886B2 (en) 2018-05-17 2022-01-11 International Business Machines Corporation Optimizing dynamical resource allocations for cache-friendly workloads in disaggregated data centers
US10977085B2 (en) 2018-05-17 2021-04-13 International Business Machines Corporation Optimizing dynamical resource allocations in disaggregated data centers
US10841367B2 (en) 2018-05-17 2020-11-17 International Business Machines Corporation Optimizing dynamical resource allocations for cache-dependent workloads in disaggregated data centers
US11330042B2 (en) 2018-05-17 2022-05-10 International Business Machines Corporation Optimizing dynamic resource allocations for storage-dependent workloads in disaggregated data centers
CN109118422B (zh) * 2018-07-10 2023-05-05 西安科技大学 一种嵌入式移动图形处理器的纹理Cache及处理方法
US20210311871A1 (en) 2020-04-06 2021-10-07 Samsung Electronics Co., Ltd. System and method for aggregating server memory
US20210374056A1 (en) * 2020-05-28 2021-12-02 Samsung Electronics Co., Ltd. Systems and methods for scalable and coherent memory devices

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0416767A3 (en) * 1989-09-08 1992-04-29 Digital Equipment Corporation Position independent code location system
EP0777183B1 (en) 1995-12-01 2002-07-31 Hewlett-Packard Company, A Delaware Corporation Computer cache system
US5966734A (en) * 1996-10-18 1999-10-12 Samsung Electronics Co., Ltd. Resizable and relocatable memory scratch pad as a cache slice
US6526491B2 (en) 2001-03-22 2003-02-25 Sony Corporation Entertainment Inc. Memory protection system and method for computer architecture for broadband networks
US6826662B2 (en) * 2001-03-22 2004-11-30 Sony Computer Entertainment Inc. System and method for data synchronization for a computer architecture for broadband networks
US6622208B2 (en) 2001-03-30 2003-09-16 Cirrus Logic, Inc. System and methods using a system-on-a-chip with soft cache
US6745295B2 (en) 2001-04-19 2004-06-01 International Business Machines Corporation Designing a cache with adaptive reconfiguration

Also Published As

Publication number Publication date
EP1658564A1 (en) 2006-05-24
JP2005339557A (ja) 2005-12-08
CN100451996C (zh) 2009-01-14
DE602005023827D1 (de) 2010-11-11
TW200609726A (en) 2006-03-16
EP1658564B1 (en) 2010-09-29
CN1806231A (zh) 2006-07-19
US20050268038A1 (en) 2005-12-01
EP1658564A4 (en) 2008-12-31
KR20060063977A (ko) 2006-06-12
WO2005116839A1 (en) 2005-12-08
KR100829287B1 (ko) 2008-05-13
TWI264642B (en) 2006-10-21
US7526608B2 (en) 2009-04-28
ATE483202T1 (de) 2010-10-15

Similar Documents

Publication Publication Date Title
JP3802042B2 (ja) キャッシュメモリ実装方法および装置、キャッシュメモリシステム
JP4386373B2 (ja) ロジカルパーティショニングされた処理環境におけるリソース管理のための方法および装置
JP4322259B2 (ja) マルチプロセッサシステムにおけるローカルメモリへのデータアクセスを同期化する方法および装置
JP4346612B2 (ja) 情報処理方法および装置
JP4243318B2 (ja) ソフトウェアとハードウエアで同時にキャッシュフィルする方法と装置
US7386687B2 (en) Methods and apparatus for managing a shared memory in a multi-processor system
JP4421561B2 (ja) ハイブリッドdmaキュー及びdmaテーブルのデータ処理方法、装置及びシステム
US7689784B2 (en) Methods and apparatus for dynamic linking program overlay
US7676683B2 (en) Method and system for rebooting a processor in a multi-processor system
KR100881810B1 (ko) 외부 장치로부터 프로세서의 메모리로의 주소 번역을 위한방법 및 기구
US20060179278A1 (en) Methods and apparatus for instruction set emulation
JP2006323824A (ja) プロセッサシステム内においてスタックを分離して管理する方法および装置
JP2006172468A (ja) システム内部のデータ転送を処理する装置および方法
JP2006260556A (ja) ラッチポイントを制御することにより、演算処理能力を改善する方法、装置ならびにシステム
JP4024271B2 (ja) マルチプロセッサシステムにおいて命令を処理するための方法と装置
US7788467B2 (en) Methods and apparatus for latency control in a multiprocessor system
JP2006286002A (ja) 分散型のマルチプロセッサシステム内において一貫性管理を行う方法、システムおよび装置
JP2006260555A (ja) 命令の従属関係検査の深度を利用して処理能力の改善するための方法および装置

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050906

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051107

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060307

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060412

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20060425

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060426

R150 Certificate of patent or registration of utility model

Ref document number: 3802042

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090512

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100512

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110512

Year of fee payment: 5

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110512

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120512

Year of fee payment: 6

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130512

Year of fee payment: 7

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140512

Year of fee payment: 8

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250