説明

ガーベッジコレクションに対するCPUサポート

効率的なガーベッジコレクションのためのシステムおよび方法。汎用中央処理装置(CPU)は、世代別ガーベッジコレクション技法にしたがって、割り当てられたヒープを区分する。世代は、固定サイズカードに区分される。CPUは、アプリケーション実行中、直近のガーベッジコレクション以降の規定を満たしたダーティカードの表示をマーキングする。CPUが次のガーベッジコレクション開始条件が満たされたことを検出すると、CPUは、1つ以上のカードのルートアドレスの判定に対応する通知を特殊処理装置(SPU)へ送信し、各カードのルートアドレスは、前記マーキングされた表示のうちの1つに対応する。SPUは、単一命令複数データ(SIMD)並列アーキテクチャを有し、グラフィックス処理装置(GPU)であってもよい。SPUは、複数のカードルートアドレスを同時に演算するために、そのSIMDコアの並列アーキテクチャを利用することができる。次に、SPUは、ガーベッジコレクションアルゴリズムで使用されるこれらのアドレスをCPUへ送信する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータシステムに関し、より具体的には、コンピュータのガーベッジコレクション機構に関する。
【背景技術】
【0002】
ソフトウェアプログラマが、アルゴリズムまたはメソッドに従って作業を実施するようにアプリケーションを作成するとき、プログラマは、一時データおよび結果データを参照するために変数を利用することが多い。このデータは、データオブジェクトと呼ばれる場合もあり、コンピュータのメモリ内の空間が割り当てられることを必要とする。1つ以上のアプリケーションの実行中、データオブジェクトの割り当てに対して、割り当てられていない、または自由なコンピュータメモリの量が、最適レベル以下に減少する場合がある。空き空間の量のそのような減少は、システム性能を低下させる場合があり、最終的に、利用可能な空き空間が全く存在しなくなる場合がある。アプリケーション実行中、ガーベッジコレクションのような自動的なメモリ管理技法が使用される場合がある。ガーベッジコレクションは、十分な空き空間を維持し、メモリリークを識別して排除し、到達可能なデータオブジェクトの一部または全部を新しいメモリ領域にコピーし、必要に応じてデータオブジェクトに対する参照を更新する等を行う。
【0003】
ガーベッジコレクションアルゴリズムは、それらの利点に伴う設計上のトレードオフを有する。例えば、ガーベッジコレクションアルゴリズムは一般的に、いくつかのステップを含み、比較的時間がかかる可能性がある。このため、コンピューティングシステムは、ガーベッジコレクションアルゴリズムがそのタスクを実施する間に一時停止に見舞われる可能性がある。ガーベッジコレクタがリアルタイム、またはアプリケーションの実行と同時に実行される場合、ガーベッジコレクションの一時停止の長さは、許容できない場合がある。加えて、アルゴリズムはその実行中にキャッシュ空間を利用する場合がある。キャッシュ空間を使用すると、アルゴリズムが終了した後、再びフェッチされなければならない有用な情報の消失が生じる可能性がある。
【0004】
メモリ全体ではなく、メモリの一部でガーベッジコレクションのアルゴリズムのステップを実施することによって、ガーベッジコレクションに伴う一時停止時間が削減される。加えて、研究では、多数のソフトウェアアプリケーションにおいて、ほとんどのデータオブジェクトが短命であることが示されている。したがって、上記のガーベッジコレクションに伴う問題に対する1つの解決策として、最も若いデータオブジェクトを含むメモリの一部でガーベッジコレクションアルゴリズムを実行することが挙げられる。そのような1つの技法が世代別ガーベッジコレクションである。
【0005】
ガーベッジコレクションが実行されると決定された時点で、ガーベッジコレクションが進行する前に、いくつかの前処理ステップが実施される。例えば、この時点で、より若いデータオブジェクトをポイントしているより古いデータオブジェクトのアドレスが演算される。このため、ガーベッジコレクションアルゴリズムは、これらのアドレスを使用して、全ての到達可能なデータオブジェクトを検索する。アドレスの数およびサイズが増加すると、アドレス演算のために使用される時間が増加し、世代別ガーベッジコレクション技法の利点を低減させる可能性がある。
【0006】
上記に照らして、コンピュータのガーベッジコレクションを実施するための効率的な方法および機構が所望される。
【発明の概要】
【0007】
効率的なガーベッジコレクションを実施するためのシステムおよび方法が考案される。
【0008】
一実施形態において、処理ノードは、汎用中央処理装置(CPU)と、特殊処理装置(SPU)と、メモリとを含む。一実施形態において、SPUは、単一命令複数データ(SIMD)並列アーキテクチャを有し、グラフィックス処理装置(GPU)であってもよい。CPUは、メモリ内部の割り当てられたヒープを複数の領域に分割するように動作する。多様な実施形態において、領域は年齢別に並べられる、または年齢別に識別可能である場合があり、これらは「世代」と呼ばれる場合がある。加えて、各領域は、複数のサブ領域、または「カード」を備える場合がある。いくつかの実施形態において、各カードは、128バイト、4KB仮想ページ等、固定サイズを有する。アプリケーション実行中、CPUは、潜在的な世代間参照としての資格を満たすカード内に記憶されたデータオブジェクトの変更を検出することに応答して、特定のカードに対応する表示をマーキングする。例えば、一実施形態において、データオブジェクト内に記憶されたポインタ値が、別の世代内に記憶されたデータオブジェクトをポイントするように変更される場合がある。別の実施形態において、対応する表示をマーキングすることは、ポインタ値が、最も若い世代内に記憶されたデータオブジェクトをポイントするように変更されるときに発生する。他の適用条件も可能であり考えられる。
【0009】
多様な実施形態において、CPUは、最も若い世代が、既定の閾値より少ない自由メモリ空間を有する等、ガーベッジコレクション開始条件が満たされたことを検出することができる。ガーベッジコレクション開始条件が満たされたと判定することに応答して、CPUは、SPUが既定のガーベッジコレクション関連タスクを実施することを示す通知をSPUへ送信する。一実施形態において、SPUは、各カードルートアドレスがマーキングされた表示のうちの1つに対応する、1つ以上のカードルートアドレスを判定する場合がある。SPUは、複数のカードルートアドレスを同時に演算するために、SIMDコアの並列アーキテクチャを利用することができる。SPUがガーベッジコレクション関連タスクを実施する一方、CPUは、他のタスクの処理を継続することができる。したがって、カードルートアドレスは、CPUがガーベッジコレクションの一時停止を招くことなく、判定することができる。加えて、CPUのキャッシュサブシステムはこれらのタスクに必要とされない。したがって、システム全体の性能を向上することができる。多様な実施形態において、第1の処理ノードのCPUは、上記の通知を、ネットワーク接続を介して、第2の処理ノード内に位置するSPUへ送信することができる。SPUは、次いで、CPUを開放するために、上記のようにカードルートアドレスを判定することができる。
【0010】
これらおよび他の実施形態は、以下の説明および図面を参照することにより、さらに理解されよう。
【図面の簡単な説明】
【0011】
【図1】並列アーキテクチャを備える特殊処理装置を備える、例示的な処理ノードの一実施形態の概要ブロック図である。
【図2】プロセスアドレス空間の一実施形態の概要ブロック図である。
【図3】区分されたメモリの一実施形態の概要ブロック図である。
【図4】並列アーキテクチャを備える特殊処理装置を用いた効率的なガーベッジコレクションのための方法の一実施形態の流れ図である。
【図5】ガーベッジコレクションアルゴリズムで使用されるカードルートアドレスを演算するための方法の一実施形態の流れ図である。
【図6】汎用プロセッサコアの一実施形態の概要ブロック図である。
【図7】グラフィックスプロセッサコアの一実施形態の概要ブロック図である。
【図8】コンピューティングシステムの一実施形態の概要ブロック図である。
【0012】
本発明は、多様な変更および代替形態を認めることができるが、具体的な実施形態が例として図面に示され、本明細書に詳細を説明する。しかしながら、図面およびその詳細説明は、本発明を開示される特定の形式に限定することを意図するものではなく、逆に、本発明が、添付の請求項によって定義される本発明の精神および範囲に該当する全ての変更、均等物、および代替形態を網羅することを理解されたい。
【発明を実施するための形態】
【0013】
以下の説明において、本発明の完全な理解を提供するために、多数の具体的な詳細が記載される。しかしながら、当業者は、本発明がこれらの具体的な詳細なく実践され得ることを認識すべきである。いくつかの事例において、周知の回路、構造、および技法は、本発明を曖昧にすることを回避するため、詳細に示されていない。
【0014】
図1を参照すると、並列アーキテクチャを備える特殊処理装置(SPU)を備える、例示的な処理ノード110の一実施形態が示される。処理ノード110は、メモリコントローラ120と、インターフェースロジック140と、1つ以上のプロセッサコア112と対応するキャッシュメモリサブシステム114とを含む場合がある、1つ以上の処理装置115と、パケット処理ロジック116と、共有キャッシュメモリサブシステム118とを含むことができる。加えて、処理ノード110は、1つ以上の特殊処理装置(SPU)170を含むことができる。SPU170は、単一命令複数データ(SIMD)コア等、並列アーキテクチャを備える特殊プロセッサコア172を備えることができる。SIMDコアの例として、グラフィックス処理装置(GPU)、デジタル信号処理(DSP)コア等が挙げられる。
【0015】
一実施形態において、処理ノード110は、第2世代の汎用処理装置115(図示せず)に代わって、またはこれに加えて、グラフィックス処理装置(GPU)として実装されるSPU170を含むことができる。GPU170は、1つ以上のグラフィックプロセッサコア172と、データストレッジバッファ174とを含むことができる。GPUは、パーソナルコンピュータ、ワークステーション、またはビデオゲームコンソールのための専用グラフィックス描画デバイスであってもよい。一実施形態において、処理ノード110の図示された機能は、単一の集積回路上に組み込まれる。
【0016】
プロセッサコア112は、既定の汎用命令セットに従って命令を実行するための回路を含む。例えば、x86命令セットアーキテクチャが選択される場合がある。代替として、Alpha、PowerPC、または任意の他の汎用命令セットアーキテクチャが選択されてもよい。一般的に、プロセッサコア112は、それぞれ、データおよび命令のためのキャッシュメモリサブシステム114にアクセスする。リクエストされたブロックがキャッシュメモリサブシステム114、または共有キャッシュメモリサブシステム118内に発見されない場合、読み出しリクエストが生成され、発見されていないブロックがマップされているノード内のメモリコントローラへ送信することができる。
【0017】
最新のGPU170は、コンピュータグラフィックスの操作および表示に関して非常に効率的であり、それらの高度に並列な構造によって、広範囲の複雑なアルゴリズムに対して、処理装置115等、汎用中央処理装置(CPU)よりも効率的になっている。GPUは一般的に、グラフィックスおよびビデオに必要な計算を実行し、CPUは、グラフィックス単独よりもさらに多いシステムプロセスのための計算を実行する。従来のGPU170は、画像描画アプリケーションにおいて高性能を達成するために、非常に広範な単独命令複数データ(SIMD)アーキテクチャを使用する。そのようなアプリケーションは一般に、多数のオブジェクト(頂点またはピクセル)上で、頂点シェーダまたはピクセルシェーダ等、同じプログラムを実行することを必要とする。各オブジェクトは他のオブジェクトと独立して処理されるが、同じシーケンスの動作が使用されるので、SIMDアーキテクチャは、かなりの性能向上を実現する。
【0018】
GPU170において進歩したこととして、頂点およびテクスチャを操作することができるプログラムブルシェーダ、エイリアシングを削減するためのオーバーサンプリングおよび補間技法、ならびに非常に高精度の色空間に対するサポートが挙げられる。これらの演算の多くには、行列およびベクトル演算が関わる。したがって、GPU119は、非グラフィック計算のためであると考えられてきた。
【0019】
一実施形態において、メモリを管理するために、CPUは、世代別ガーベッジコレクション(GC)のためのアルゴリズムのステップを実行する。H.Lieberman,et al.による、A Real−Time Garbage Collector Based on the Lifetime of Objects(Communications of the ACM 26(6),1983,pp.419−429)を参照されたい。CPU115は、世代別ガーベッジコレクションアルゴリズムを実行する前に、カードマーキング技法の前処理ステップを利用することができる。P.Wilson,et al.による、A card−marking scheme for controlling intergenerational references in generation−based GC on stock hardware(SIGPLAN Notices 24 (5),1989,pp.87−92)を参照されたい。ガーベッジコレクションの一時停止時間を短縮するために、アルゴリズムは、メモリ全体ではなく、メモリの一部上で実行することができる。一実施形態において、メモリ内の割り当てられたヒープは、領域に区分される場合がある。これらの領域は、「世代」と呼ばれる場合がある。一実施形態において、各世代は、内部に含まれるデータオブジェクトの年齢に対応する。一実施形態において、ガーベッジコレクションアルゴリズムは、最も若い世代のうちの1つ以上のみで実行する場合がある。そのような技法は、ガーベッジコレクションの一時停止時間およびガーベッジコレクション中のキャッシュの利用の両方を削減することができる。
【0020】
1つ以上のより若い世代内部に位置する第1のデータオブジェクトは、より古い世代内の第2のデータオブジェクトによって参照される場合がある。このより古い世代は、1つ以上のより若い世代内部には含まれない。ガーベッジコレクションは、1つ以上のより若い世代上のみで実行されるので、この参照は見落とされる場合がある。そのような見落としが発生すると、より若い世代内部に位置する第1のデータオブジェクトは、誤って、到達不可能であると判定される場合がある。到達不可能であると判定されたデータオブジェクトは、メモリから削除される。したがって、より若い世代内のデータオブジェクトを参照する、より古い世代に位置する任意のデータオブジェクトのアドレスを決定するためにステップが実施される。これらのステップは、世代別ガーベッジコレクション技法の一部として実施され、さらに後述する。
【0021】
一実施形態において、各世代は、サブ領域に区分される。これらのサブ領域は、「カード」と呼ばれる場合がある。一実施形態において、各カードは、内部に含まれるデータオブジェクトの年齢に対応する。一実施形態において、ガーベッジコレクションアルゴリズムは、最も若い世代内部に位置する各カード上で実行する場合がある。ガーベッジコレクションは、より古い世代内部のマーキングされたカード上だけで実行する場合がある。アプリケーション実行中、一実施形態において、カードは、カードが、1つ以上の最も若い世代内に位置する別のデータオブジェクトをポイントするデータオブジェクトを含むと判定されると、マーキングされる場合がある。別の実施形態では、カードは、カードが変更されたデータオブジェクトを含むと判定されるとマーキングされる場合がある。カードをマーキングするための他の条件が可能であり、考案される。一実施形態において、ガーベッジコレクションアルゴリズムを実行する前に実施された前処理ステップが、マーキングされたカードのアドレスを判定する。その後、アルゴリズム中で、より若い世代内のデータオブジェクトを参照する、より古い世代内に位置する任意のデータオブジェクトのアドレスを決定するためにステップが実施される。
【0022】
図1を再び参照すると、一実施形態において、CPU115が世代別GC開始条件を検出すると、CPU115は、通知をGPU170へ送信する。通知を受信することに応答して、GPU170は、アドレスを演算することができる。これらのアドレスは、より若い世代のカードへのポインタ値を記憶している可能性がある、より古い世代のカードに対応する可能性がある。これらのアドレスは、ルートアドレス、またはカードルートアドレスと呼ぶことができる。
【0023】
上記のルートアドレスの演算は、高度に並列可能なタスクの場合がある。GPU170は、CPUよりも効率的に高度に並列可能なタスクを実施することができる。加えて、GPU170によって実施される作業は、CPU115が1つ以上のソフトウェアアプリケーションの実行を継続する間に実施することができる。したがって、ルートアドレスを取得するために使用される演算ステップの実行は、GCの一時停止を全く発生させない場合がある。前処理ステップでGCの一時停止が排除されると、システム全体の性能を向上することができる。これらの前処理ステップの実行のためのCPU115とGPU170との間のプロトコルの詳細は、以下に詳細に記載する。
【0024】
一実施形態において、GPU170は、ビデオカード上に位置する場合がある。別の実施形態において、GPU170は、マザーボード上に統合される場合がある。また別の実施形態において、処理ノード110の図示された機能は、単一の集積回路上に組み込まれる場合がある。そのような実施形態において、CPU115およびGPU170は、異なる設計中心からの独自のコアにすることができる。また、CPU170は、処理ノード110から、インターフェース140を介してオフチップのメモリアクセスを実施するのではなく、メモリコントローラ120を介して、ローカルメモリ114および118ならびにメインメモリの両方に直接アクセスすることができるようになってもよい。この実施形態は、GPU170のメモリアクセスのレイテンシを低下することができ、すなわち、より高い性能にすることができる。
【0025】
図1の処理ノード110の構成要素を引き続き参照すると、キャッシュサブシステム114および118は、データのブロックを記憶するように構成された高速のキャッシュメモリを備えることができる。キャッシュメモリサブシステム114は、それぞれのプロセッサコア112内部に統合される場合がある。代替として、キャッシュメモリサブシステム114は、必要に応じて、バックサイドキャッシュ構成またはインライン構成においてプロセッサコア114に連結される場合がある。さらにまた、キャッシュメモリサブシステム114は、キャッシュの階層として実装される場合がある。(階層内部で)プロセッサコア112により近似して位置するキャッシュは、所望される場合、プロセッサコア112内に統合される場合がある。一実施形態において、キャッシュメモリサブシステム114は各々、L2キャッシュ構造を表し、共有キャッシュサブシステム118は、L3キャッシュ構造を表す。キャッシュメモリサブシステム114および共有キャッシュメモリサブシステム118の両方は、対応するキャッシュコントローラに連結されたキャッシュメモリを含むことができる。
【0026】
一般に、パケット処理ロジック116は、処理ノード110が連結されるリンク上で受信されたパケットを制御するように応答し、プロセッサコア112および/またはキャッシュメモリサブシステム114に応答して制御パケットを生成し、サービスするためにメモリコントローラ120によって選択されたトランザクションに応答して、プローブコマンドおよび応答パケットを生成し、インターフェースロジック140を通して、ノード110が他のノードに対して中間ノードである、パケットをルーティングするように構成される。インターフェースロジック140は、パケットを受信し、このパケットをパケット処理ロジック116によって使用される内部クロックに同期化するためのロジックを含むことができる。
【0027】
図2を参照すると、汎用プロセスアドレス空間200の一実施形態が示される。最新のコンピューティングシステムは、多数のプロセスの間で少量の物理メモリを共有するために、仮想メモリを使用する。アドレス空間200は、連続した仮想アドレス空間であってもよく、仮想アドレスと物理アドレスとの間のマッピングが、物理メモリまたはディスク内の値210〜250の位置を決定する。マルチプロセッサシステム上のオペレーティングシステムは、例えば、処理ノード110のリソースを反復して使用することができ、ソフトウェアアプリケーションのためのメモリの領域を割り当てることができる。ソフトウェアアプリケーションがコンパイルされると、アプリケーションは、複数のプロセスを含む場合がある。そのような実施形態において、各プロセスは、メモリの画像、またはアプリケーション実行前の命令およびデータのインスタンス等、その独自のリソースを所有する場合がある。また、各プロセスは、コード、データ、ならびに可能性としてヒープおよびスタックのアドレスを決定するアドレス空間等のプロセス特定情報、スタックポインタ、汎用および浮動小数点レジスタ、プログラムカウンタ等のデータおよび制御レジスタ内の変数、さらにstdin、stdout等のオペレーティングシステム記述子、ならびにプロセッサ所有者およびプロセスの権限セット等のセキュリティ属性を含む場合がある。
【0028】
一般的に、所定のソフトウェアアプリケーションの場合、オペレーティングシステムのカーネルが、アプリケーションのアドレス空間200を設定し、アプリケーションのコード210をメモリにロードし、プログラムのためにスタック250を設定し、アプリケーションコード210内部の所定の場所に分岐し、アプリケーションコード210の実行を開始する。いくつかの実施形態において、実行を開始する前に、コード210およびデータ220のすべてが物理メモリに記憶される必要はない。ソフトウェアアプリケーションが命令セットアーキテクチャ(ISA)をどのように使用するかは、コンパイラと上位のレベルの言語との相互作用によって影響される。例えば、ソフトウェアアプリケーション開発の場合、変数をどのように割り当て、どのようにアドレスを決定するか、ならびに変数を割り当てるために必要なレジスタの数を把握することが必要である。一実施形態では、静的データ220、スタック250、およびヒープ230がデータ割り当てを決定する。
【0029】
静的データ220は、グローバル変数および定数等、静的に宣言されるオブジェクトを割り当てるために使用される場合がある。これらのオブジェクトの大部分は配列である場合がある。スタック250は、現在関与している関数内のローカル変数およびパラメータ等、配列ではなく、スカラー変数を割り当てるために使用される場合がある。スタック250は、それぞれ、プロシージャ呼び出しまたは戻り時に、増大および縮小する場合がある。ヒープ230は、ポインタを用いてアクセスされる動的オブジェクトを割り当てるために使用される場合があり、一般的に、スカラー変数ではない。ヒープ230は、文字列/リスト演算中に一時文字列またはリストの内容を記憶することによって文字列およびリストの内容をコピーする頻度を削減するために使用される場合がある。ヒープは、関数呼び出しの戻りによって影響を受けない。
【0030】
以下は、スタック250およびヒープ230の使用を例示する、ソースコード内のメソッドの簡単な例である。
【0031】

【0032】
上記の例では、Studentsと呼ばれるクラスがあり、Studentsクラスは、2つのpublicフィールド、nameおよびscoreを含む。Studentsクラスは、Classroomメソッドによってアクセスされる。Classroomメソッド内部で、Students型のjeffというオブジェクトが作成される。オブジェクトのnameおよびscoreフィールドが初期化される。一実施形態では、このコード例を実行後、スタック250は、例えば、図2のエントリ252j内にClassroomメソッドの呼び出しを含む。オブジェクトjeffのエントリは、図2のエントリ252kに含まれる場合がある。オブジェクトjeffは、値をポイントしない場合があり、そうではなく、ヒープ230のオブジェクト232hを参照する場合がある。オブジェクト232hは、クラス、または参照型である、Studentsオブジェクトを記憶する場合がある。オブジェクト232hのフィールド234aは、nameフィールド値を記憶する場合があり、フィールド234bは、scoreフィールド値を記憶する場合がある。
【0033】
Classroomメソッドが実行を終了した後、このエントリは実行中または実行予定であるコードに関する情報だけを含むので、スタック250はエントリ252jをポップすることができる。この例では、実行するものは何も残っておらず、アプリケーション全体の一部のみを表す場合があるので、スタック250は、ここで、エントリ252jではなく、エントリ252iをポイントするように調整されたスタックポインタを有することができる。一方、ヒープは、オブジェクト232hのフィールド234aおよび234b内にデータを依然として含むことができる。
【0034】
その後、ガーベッジコレクションアルゴリズムは、ヒープ230から、参照されていない(未使用の)データをクリアするために、実行される場合がある。例えば、上記のStudentsクラスは、もはや使用されていないため、オブジェクト232hから削除される場合がある。一実施形態において、ガーベッジコレクションアルゴリズムは、システムメモリをスキャンすること、全ての到達可能なデータオブジェクトのマーキングすること(再帰的検索を必要とする場合がある)、使用可能または到達可能ではないと判定されたデータオブジェクトを削除すること、およびメモリ内の連続した位置を占有するようにデータオブジェクトを移動することの動作のうちの1つ以上を含む。この最後のステップは、圧縮と呼ばれる場合がある。
【0035】
上記の例では使用されないが、図2において、オブジェクト232bは、ヒープ230内のオブジェクト232gのポインタによって参照される。未使用のデータをクリアするために、ガーベッジコレクションが実行されると、ガーベッジコレクションアルゴリズムによって、有用なデータがメモリ内に残る。いくつかの実施形態において、ガーベッジコレクションアルゴリズムは、後でアプリケーションが使用するために保存されることが必要である、データオブジェクトのリストを作成する場合がある。このリストの作成は、ルート、またはルートアドレスを用いて開始する場合がある。ルートアドレスは、静的データ220内の静的グローバルポインタ、スタック250内のポインタ、およびCPUのメモリアドレスによってポイントされる、ヒープ230内の任意のデータオブジェクトに対応することができる。GCアルゴリズムによる再帰的検索中、オブジェクト232gは、到達可能であると判定される場合がある。オブジェクト232bは、一例では、オブジェクト232g内のポインタによって参照されているため、到達可能の場合がある。到達可能なオブジェクトは、ルートアドレスによって検索されるオブジェクト、または以前に到達可能であると判定されたオブジェクトによって参照されるオブジェクトとして定義することができる。
【0036】
一実施形態において、ガーベッジコレクションをサイクルで実施する、ガーベッジコレクションアルゴリズムが利用される。サイクルは、コレクタが、ストレージを回収することが必要であると判定すると(または通知されると)開始する。例えば、ガーベッジコレクションは、システムのメモリ残量が少なくなると、起動される場合がある。ガーベッジコレクションアルゴリズムは、ガーベッジ、またはアプリケーションによって今後アクセスされることがない、または再び変化することがないオブジェクトによって使用されたメモリを回収しようと試みる。構文上のガーベッジ(可能性としてプログラムが到達することができないデータオブジェクト)と、意味論的ガーベッジ(プログラムが今後実際に再び使用することがないデータオブジェクト)とが区別される場合がある。メモリにアクセスするソフトウェアスレッドは、ミューテータと呼ばれる場合がある。非常に広範囲の異なるガーベッジコレクション技法が開発されており、使用されてもよい。
【0037】
いくつかの事例では、ガーベッジコレクションシステムは一般に、過剰な一時停止時間の問題により、様々な程度まで影響を及ぼしている。この問題は、ガーベッジコレクションがリアルタイム、すなわち、1つ以上のプロセッサ上で稼動している他のライブプログラムの実行と同時に実施されると発生する。例えば、システムが複数のミューテータスレッドと、単一のガーベッジコレクションスレッドとを含むと想定する。ミューテータがマルチメディアアプリケーションに使用されている場合、これらのスレッドは、所定の速度でムービー等のアプリケーションを表示することを必要とする場合がある。GCによる一時停止時間が感知されることが許されない、いくつかの重要なアプリケーションの例として、オンライン株取引、電子商取引のアプリケーション、ならびにムービーおよびビデオゲーム等のマルチメディアアプリケーションが挙げられる。
【0038】
ここで図3を参照すると、区分されたメモリ300の一実施形態が示される。世代別ガーベッジコレクション(GC)は、世代360a、360b、360c等にパーティショニングされていてもよい、メモリ内の割り当てられたヒープ230を利用する場合がある。多様な実施形態において、オペレーティングシステムまたは他のソフトウェアは、パーティショニングを実施し、世代360a、360b、および360cのサイズを決定することができる。加えて、世代360a、360b、および360cの各々は、サブ領域にパーティショニングされる場合がある。これらのサブ領域は、カードと呼ばれる場合がある。例えば、世代360aは、カード350a、350b、350f等にパーティショニングされる場合がある。一実施形態において、各カード350a、350b、および350fは、128バイト、4キロバイト(KB)の仮想ページ、または他のサイズ等、同一の固定サイズを有する。
【0039】
一実施形態において、ヒープ230内のカード350a〜350bの各々は、1つ以上のデータオブジェクトを記憶する。例えば、カード350aは、データオブジェクト320a、320g等を記憶する。1つのカードが1つのデータオブジェクトのみを記憶する場合があるが、一般的に、1つのカードは複数のデータオブジェクトを記憶する。カードルートアドレス380a、380b、および380fは、対応するカード350a、350b、および350fを検索するために使用することができる。世代およびカードに対応するメタデータがメモリに記憶されてもよい。このメタデータは、世代360a、360b、および360cを検索するために使用される、世代の基底アドレス370a、370b、および370cを含むことができる。加えて、このメタデータは、エントリ312a、312b、312j、312k等を含む、カードテーブル310等のデータ構造を含むことができる。一実施形態において、カードテーブル310は、メモリ内の各カードに対して1つのエントリを含む場合がある。別の実施形態において、カードテーブル310は、最も若い世代を除き、各世代内の各カードに対して1つのエントリを含む場合がある。そのような実施形態において、最も若い世代は、最も若い世代内の各カードがGCアルゴリズム中に無条件でスキャンされる場合があるので、スキップされる場合がある。別の実施形態において、カードテーブル310は、ヒープ内の各カードに対して1つのエントリを含む場合がある。そのような実施形態では、カードテーブル310が非常に大きくなる。
【0040】
一実施形態において、エントリ312a、312b、312j、および312kの各々は、単一のビットを含む。エントリ312a、312b、312j、および312kの各々内の単一ビットは、ソフトウェアアプリケーションを実行する際にプロセッサコア112によって設定されてもよい。一実施形態において、そのような単一ビットは、対応するカード内に記憶された対応するデータオブジェクトが変更されると設定される場合がある。別の実施形態において、そのような単一ビットは、対応するデータオブジェクト内のポインタ値が、別の世代に記憶されたデータオブジェクトをポイントするように変更されると、設定される場合がある。例えば、データオブジェクト320g内のポインタ値が、世代360bのカード350g内に記憶されたデータオブジェクトをポイントするように変更された場合、エントリ312a内の対応する単一ビットが設定される場合がある。また別の実施形態において、そのような単一ビットは、データオブジェクト内のポインタ値が、最も若い世代内に記憶されたデータオブジェクトをポイントするように変更されると、設定される場合がある。また別の実施形態において、そのような単一ビットは、データオブジェクト内のポインタ値が、GCアルゴリズムの次の実行中に収集されると既定された複数の最も若い世代のうちの1つに記憶されたデータオブジェクトをポイントするように変更されると、設定される場合がある。カードテーブル310内の表示をマーキングするための他の条件も可能であり考えられる。
【0041】
ストアチェック動作は、表示をマーキングするかどうかを判定するために、上記のステップを実施する。ストアチェック動作はまた、書き込みバリア動作とも呼ばれる場合がある。ストアチェック動作は、ストア動作がアプリケーション実行中にヒープにアクセスするときに対応する単一ビットを設定するかどうかを判定することができる。ストア動作は、GCアルゴリズム中に後で使用されるポインタ値を作成することができる。いくつかのストア動作では、コンパイラは、ストアチェックが全く必要ないことを静的に認識することができる。例えば、アプリケーションが整数を記憶し、整数がヒープに割り当てられたオブジェクトではなく、直近値として実装される場合、ストアチェック動作は全く必要ない場合がある。しかしながら、一般的な事例では、ストアチェック動作は、ヒープにアクセスする各ストア動作に対して実行されてもよい。ストアは、アプリケーションで頻繁に発生する場合があるので、ストアチェック動作の効率的な実装は必須である場合がある。
【0042】
オペレーティングシステムまたはプロセッサコア112に対応する他のソフトウェアは、GC開始条件を検出するように構成することができる。一実施形態において、GC開始条件は、最も若いカードが既定の閾値よりも少ない空き空間を有するという条件を含む。別の実施形態において、GC開始条件は、最も若い世代が既定の閾値よりも少ない空き空間を有するという条件を含む。また別の実施形態において、GC開始条件は、ヒープ全体が既定の閾値よりも少ない空き空間を有するという条件を含む。他の条件も可能であり考えられる。GC開始条件が検出されると、カードテーブル310は、マーキングされた表示または設定ビットを検出するためにスキャンすることができる。各設定ビットに対して、カードルートアドレスを演算することができる。
【0043】
カードルートアドレスを演算するために、一実施形態では、カードテーブル310内の対応するエントリの位置が使用される場合がある。カードのサイズは、カードテーブル310内の対応する設定ビットのエントリ位置によって乗算される場合がある。得られた積は、世代の基底アドレスに加算されて、カードルートアドレスを決定することができる。例えば、カードは、128バイトのサイズを有する場合がある。カードテーブル310内のエントリ312jは、設定ビットを記憶する場合がある。エントリ312jは、カードテーブル310内の20番目のビットの場合がある。20のバイナリ値(例えば、b10100)は、7つ位置を左方向へシフトされる場合がある。カードが128バイトのサイズ、または2バイト境界上に整合された2バイトを有するので、7つ位置をシフトすることが選択される。得られた積は、世代の基底アドレス370aに加算することができる。
【0044】
カードルートアドレス380を決定するための上記の動作は、並列化することができる動作である。したがって、単一命令複数データ(SIMD)コア等の並列アーキテクチャを備えるプロセッサを利用することが利点となる場合がある。SIMDコアの例として、グラフィックス処理装置(GPU)、およびデジタル信号処理(DSP)コアが挙げられる。一実施形態において、プロセッサコア112がGC開始条件を検出すると、コア112は、通知をSIMDコア172へ送信する場合がある。一実施形態において、通知は、カードテーブル310の位置に対応するメモリ内のアドレス、および1つ以上の世代の基底アドレスを含む場合がある。プロセッサコア112は、SIMDコア172がカードルートアドレスを演算する間も1つ以上のソフトウェアアプリケーションの実行を継続することができ、それによって、GCの一時停止時間を削減する。
【0045】
CPU、GPU、DSP等内部のコア172は、カードテーブル310内のマーキングされた表示および世代の基底アドレスの両方に基づいて、2つ以上のカードルートアドレスを同時に演算することができる。一実施形態において、コア172は、演算されたカードルートアドレスをプロセッサコア112へ直接送信することができる。別の実施形態では、コア172は、メモリ内のアドレスをプロセッサコア112へ送信することができ、アドレスは、演算されたカードルートアドレスを記憶する場所に対応する。プロセッサコア112が、カードルートアドレス値へのアクセスを取得すると、プロセッサコア112は、既定のGCアルゴリズムのステップの実行を開始することができる。例えば、プロセッサコア112は、演算されたカードルートアドレスに対応する変更された、またはダーティカード内の各データオブジェクトをスキャンする場合がある。プロセッサコア112は、少なくとも最も若い世代の到達可能なデータオブジェクトを判定するために、上述のようにこれらのデータオブジェクト内のポインタ値を追跡することができる。
【0046】
ここで図4を参照すると、個別の特殊処理コアを用いてガーベッジコレクションを実施するための方法400の一実施例が示される。説明を目的として、この実施形態および後述する方法の以降の実施形態内のステップはシーケンス順に示される。しかしながら、いくつかのステップは示されているのとは異なる順序で発生する場合、いくつかのステップは同時に実装される場合、いくつかのステップは他のステップと組み合わせる場合、いくつかのステップは別の実施形態にはない場合がある。
【0047】
ブロック402で、オペレーティングシステムまたは他のソフトウェアは、ソフトウェアアプリケーションのためにアドレス空間を割り当てることができる。ステップ404で、割り当てられたヒープは、2つ以上の世代にパーティショニングすることができる。一実施形態において、世代は、対応するデータオブジェクトの年齢に対応する。加えて、各世代は、サブ領域、またはカードにパーティショニングすることができる。
【0048】
ブロック406では、1つ以上のソフトウェアアプリケーションの命令が実行されている。ブロック410では、実行中、データオブジェクトはヒープに割り当てることができる。ログは、各割り当てられたデータオブジェクトの対応する情報を記憶するメモリ内に保持することができる。例えば、ログは、各割り当てられたデータオブジェクトに対するエントリを含む場合があり、エントリは、データオブジェクトの名前、アドレス、サイズ等を含む。一実施形態において、ソフトウェアアプリケーションを実行する汎用プロセッサがログを保持する場合がある。加えて、実行中、割り当てられたデータオブジェクト内に記憶された値を変更することができる。
【0049】
ブロック412で、実行中に、割り当てられたデータオブジェクトに対する変更が既定の条件を満たすかどうかを判定することができる。一実施形態において、既定条件は、旧世代のデータオブジェクト内に記憶されたポインタ値が、最も若い世代に記憶されたデータオブジェクトをポイントするように変更されることを含む場合がある。そのような実施形態において、新しいポインタ値と既定のアドレス範囲との間の比較が実施される場合がある。アドレス範囲は、図3に示される世代360a、360b、および360c等の世代に対応する場合がある。一実施形態において、この比較は、各ストア動作で、ソフトウェアアプリケーションの実行中にヒープに対して実施される場合がある。この比較は、ストアチェック動作の一部の場合がある。カードマーキングに関する上述のような他の所定の条件も可能であり考えられる。
【0050】
割り当てられたデータオブジェクトに対する変更が既定の条件を満たす場合(条件ブロック414)、ブロック416で、マーキングが実施される。一実施形態において、ストアチェック動作は、ヒープ内のデータオブジェクトに対する変更がマーキングの条件を満たすかの判定を実施する。ストアチェック動作は、新しいポインタ値と、ヒープ内の各世代のアドレス範囲との間の比較を少なくとも使用することができる。一実施形態において、対応する表示のマーキングは、カードテーブル310等のデータ構造に対応するビットを設定することを含む。一実施形態において、ストアチェック動作は、新しいポインタ値と、ヒープ内の各カードのアドレス範囲との間の比較を使用することもできる。これらの比較は、世代のアドレス範囲に対する比較と同時に実施されてもよい。
【0051】
条件ブロック408において、ガーベッジコレクションを起動するかの判定を行うことができる。使用可能な自由なメモリの量(例えば、何らかの閾値に比較)、最も若い世代内で使用可能な自由なメモリの量、直近のガーベッジコレクション以降経過した時間の所定量等、このガーベッジコレクションをいつ開始すべきかを判定するために、異なる要件を使用することができる。ガーベッジコレクションを起動しないと判定された場合(条件ブロック408)、方法400の制御フローはブロック406に戻る。ブロック406で、アプリケーションの命令の実行が継続する。ガーベッジコレクションを起動すると判定した場合(条件ブロック408)、ブロック420で、通知を特殊処理装置(SPU)へ送信することができる。通知は、SPUが、図3に示されるアドレス380a、380b、および380f等、カードルートアドレスの演算を開始することを示すことができる。カードルートアドレスの演算は、直近のガーベッジコレクション以降、アプリケーション実行中に実施されたメモリ割り当ておよび変更更新に基づくことができる。例えば、ブロック416で発生したそれぞれマーキングされた表示に対して、1つのカードルートアドレスが演算される場合がある。一実施形態において、マーキングされた表示は、カードテーブル310内の設定ビットに対応する。
【0052】
ブロック422で、SPUは、カードルートアドレスを決定するために演算を実施することができる。一実施形態において、演算は、前述のように、対応する基底アドレスに対するシフトおよび加算演算を含むことができる。その後、SPUは、カードルートアドレスをCPUへ送信することができる。代替として、SPUは、カードルートアドレスを記憶するメモリ内の場所に対応するアドレスをCPUへ送信することができる。ブロック424において、CPUは、演算されたカードルートアドレスを利用するGCアルゴリズムのステップを実施することができる。
【0053】
ここで図5を参照すると、ガーベッジコレクションアルゴリズムで使用される、カードルートアドレスを演算するための方法500の一実施形態が示される。方法400と同様に、説明を目的として、この実施形態および後述する方法の以降の実施形態内のステップはシーケンス順に示される。しかしながら、いくつかのステップは、示されているのとは異なる順序で発生する場合、いくつかのステップは同時に実装される場合、いくつかのステップは他のステップと組み合わせる場合、いくつかのステップは別の実施形態にはない場合がある。
【0054】
ブロック502で、GCアルゴリズムのためにカードルートアドレスを演算するように、通知をCPUからSPUへ送信することができる。一実施形態において、CPUは、図3に示される世代基底アドレス370a、370b、および370c等の1つ以上の世代基底アドレスをSPUへ送信することができる。加えて、CPUは、カードテーブル310等のデータ構造のアドレスをSPUへ送信することができる。このデータ構造は、直近のガーベッジコレクション以降、アプリケーション実行中の任意の条件を満たす記憶された参照の表示を記憶することができる。ブロック504で、SPUは、カードテーブル310等、データ構造内に記憶された表示をスキャンするために、そのSIMDコアの並列アーキテクチャを利用することができる。このスキャン動作は、ヒープ内のどのサブ領域またはカードが、条件を満たす世代間参照を記憶しているかを判定することができる。ブロック506で、SPUは、複数のカードルートアドレスを同時に演算するために、そのSIMDコアの並列アーキテクチャを利用することができる。これらの演算は、CPUによるソフトウェアアプリケーションの実行中に一切停止を発生させることなく実施することができる。したがって、カードルートアドレスは、ガーベッジコレクションの一時停止時間を発生させずに、決定することができる。
【0055】
ブロック508で、CPUは、SPUからカードルートアドレスを受信することができる。代替として、CPUは、カードルートアドレスを記憶するメモリ内の場所に対応する、1つ以上のアドレスを受信することができる。一実施形態において、CPUは、方法400のブロック410で作成され、保持されたログを更新する。このログは、アプリケーション実行中にヒープ内にそれぞれ割り当てられたデータオブジェクトの対応する情報を記憶する。このログは、演算されたカードルートアドレスで更新される場合がある。ブロック510で、CPUは、ログ内に記憶された情報を利用して、既定のGCアルゴリズムのステップを実施することができる。
【0056】
ガーベッジコレクションアルゴリズムの前処理ステップを実施するために、SIMDコアの並列アーキテクチャを利用することが上記で説明された。一実施形態において、前処理ステップは、カードテーブルをスキャンすることと、対応するカードルートアドレスを演算することとを含む。ここで、汎用コアと並列アーキテクチャSIMDコアとの間の違いに関して詳細に説明する。最初に、汎用コアを説明する。図6は、順不同の実行を実施する汎用プロセッサコア600の一実施形態を例示する。命令キャッシュ(i−キャッシュ)および対応するトランスレーション・ルックアサイド・バッファ(TLB)602は、命令にアクセスするために、ソフトウェアアプリケーションの命令およびアドレスを記憶することができる。命令フェッチ装置(IFU)604は、iキャッシュが不足していない場合、クロックサイクルあたりの複数の命令をi−キャッシュ602からフェッチすることができる。IFU604は、iTLB内のアドレスに比較される場合がある、i−キャッシュ602でフェッチする次の命令のアドレスに対するポインタを保持する、プログラムカウンタを含むことができる。IFU604はまた、後のパイプライン段階の実際の結果を判定する実行装置の前に、条件付命令の結果を予想するための分岐予測装置も含むことができる。
【0057】
デコーダ装置606は、複数のフェッチされた命令のオプコード(Opcode)を解読し、リザベーションステーション608内、およびロード/ストア装置614内で、並べ替えバッファ618等の順次リタイヤキュー内にエントリを割り当てることができる。リザベーションステーション608のエントリの割り当ては、ディスパッチとみなされる。リザベーションステーション608は、命令がそれぞれのオペランドが使用可能になるまで待機する、命令キューとして機能することができる。オペランドが使用可能で、ハードウェアリソースも使用可能であると、リザベーションステーション608から、整数および浮動小数点機能装置610またはロード/ストア装置614に対して、順不同に命令が発行される場合がある。ロードおよび記憶動作等のメモリアクセスは、ロード/ストア装置614に対して発行される。機能装置610は、加算、引算、乗算、除算、および平方根等の演算計算のための算術論理装置(ALU)を含むことができる。ロジックは、条件付命令の結果を決定するために含まれる場合がある。ロード/ストア装置614は、メモリアクセス命令を実行するためのキューおよびロジックを含むことができる。また、ロード/ストア装置614には、ロード命令が、正しい最も若い記憶命令から転送されたデータを受信することを保証するために、検証ロジックが存在する場合がある。
【0058】
ロード/ストア装置614は、メモリアクセスリクエスト622を、チップ上の1つ以上のレベルのデータキャッシュ(dキャッシュ)616へ送信することができる。各レベルのキャッシュは、メモリリクエスト622とのアドレス比較のために、それ独自のTLBを有することができる。各レベルのキャッシュ616は、シリアルまたは並列様式で検索することができる。リクエストされたメモリラインがキャッシュ616の中に検出されない場合、メモリリクエスト622は、システムメモリオフチップ内のメモリラインにアクセスするために、メモリコントローラへ送信される。
【0059】
機能装置610およびロード/ストア装置614からの結果は、共通のデータバス612上に提示することができる。結果は、並べ替えバッファ618に送信されてもよい。一実施形態において、並べ替えバッファ618は、プログラム順に従って命令の順次リタイヤを保証する、先入れ先出し(FIFO)の場合がある。ここで、その結果を受信する命令は、リタイヤすることがマーキングされる。命令がキューの先頭である場合、その結果がレジスタファイル620へ送信されている可能性がある。レジスタファイル620は、プロセッサコア600の汎用レジスタのアーキテクチャ状態を保つことができる。次いで、並べ替えバッファ内の命令は、順次リタイヤすることができ、そのキューの先頭のポインタは、プログラム順の次の命令になるように調整することができる。
【0060】
共通データバス612上の結果は、結果を待機している命令のオペランドに値を転送するために、リザベーションステーション608へ送信されてもよい。例えば、算術命令は、その前の算術命令の結果に依存するオペランドを有する場合、またはロード命令は、機能装置610内のアドレス生成装置(AGU)によって計算されたアドレスを必要とする場合がある。これらの待機している命令がそのオペランドの値を有し、ハードウェアリソースが命令を実行するために使用可能である場合、リザベーションステーション608から、機能装置610またはロード/ストア装置614内の適切なリソースに対して、順不同に発行されてもよい。
【0061】
コミットされない、またはリタイヤされていない、メモリアクセス命令は、ロード/ストア装置内にエントリを有する。インフライト、またはコミットされていない、ロード命令に対して最も若いコミットされていないより古い記憶命令から転送されたデータ値は、共通のデータバス112上に配置される、または単に、ロード/ストア装置614内部のロードバッファ内の適切なエントリへルーティングされる場合がある。コア600等の汎用プロセッサコアは、単一命令複数データ(SIMD)アプリケーション等の高度に並列なアルゴリズムの命令を実行することができるが、SIMDコア等の並列アーキテクチャを備える特殊処理コアよりも効率性が低い場合があることに注意されたい。並列アーキテクチャを備える特殊処理コアの例として、デジタル信号プロセッサ(DSP)、グラフィックス処理装置(GPU)等が挙げられる。
【0062】
ここで図7を参照すると、グラフィックスプロセッサコア700の一実施例のブロック図が示される。コア700は、SIMDコア内の並列アーキテクチャの一例である。DSPのコア等、他の例が可能であり、考案される。コア700は、代替実施形態を派生するために、当業者によって変更されてもよい。この実施形態のブロックは、特定のレイアウトで示される。しかしながら、コア700のレイアウトは、示されるものと異なる場合がある。他の実施形態において、いくつかのブロックは統合される場合、いくつかのブロックは、別のブロック内または個別の独立したブロック内に内部関数および回路を有する場合、いくつかの関数および回路は別の集積回路内に位置する場合がある。
【0063】
示される実施形態において、コマンドおよびデータフェッチ装置710は、図1のコア112等、プロセッサコア上のグラフィックスドライバから、浮動小数点動作のための描画コマンドストリーム、状態情報、および形状データを受信することができる。いくつかの実施形態では、この情報を直接提供するのではなく、プロセッサコアは、この情報が記憶される、メモリ等のメモリ内の場所への参照を提供する場合がある。したがって、装置710は、特定の場所から情報を受信する。
【0064】
描画コマンドストリーム、状態情報、および図形データは、シーンの形状、光、影、テクスチャ、運動、および/またはカメラパラメータを含む、所望の描画された画像を定義するために使用することができる。一実施形態において、形状データは、シーンに存在することができる、オブジェクト(例えば、机、木、人、または動物)のいくつかの定義を含む。オブジェクトをモデル化するためにプリミティブ(例えば、点、線、三角形および/または他の多角形)群が使用されてもよい。プリミティブは、これらの頂点への参照によって定義されてもよい。各頂点に対して、位置は、オブジェクト座標系内で指定することができ、モデル化されているオブジェクトに相対的な頂点の位置を表す。位置に加えて、各頂点は、それに関連する多様な他の属性を有することができる。他の頂点の属性の例として、頂点およびその関連の形状プリミティブの色、テクスチャ、透明度、光、影、およびアニメーション等、品質を判定するために使用されるスカラーまたはベクトル属性を挙げることができる。
【0065】
シーン内のオブジェクトの管理は、状態管理オーバーヘッドを含むことができ、このオーバーヘッドは、作業が小さいバッチにグループ化される場合、増加する可能性がある。一実施形態において、装置710は、CPU115等のホストCPUから、グラフィックスドライバからの作業をオフロードする、プロセッサの場合がある。一般的に、グラフィックスドライバは、この管理のための作業を実施するが、次いで、処理装置115がこの作業を負担する。したがって、装置710の処理能力を強化することによって、グラフィックスドライバ、そして最終的に処理装置115のオーバーヘッド動作を軽減することができる。
【0066】
次に、入力データアセンブラ720は、処理のためのデータを準備する。アセンブラ720によって実施される機能の3つの例として、頂点シェーダのための頂点アセンブリ、形状シェーダのための形状アセンブリ、ならびにピクセルシェーダのためのスキャン変換および補間を挙げることができる。各関数は、スレッドをディスパッチ装置730へ提出することができる。
【0067】
一実施形態において、ディスパッチ装置730は、受信された作業負荷をスレッドに分割し、スレッドを、1つ以上のストリームコア742を含む、シェーダ配列740、および1つ以上のテクスチャ装置752を含む、機能装置750の間で最適に分散することができる。ディスパッチ装置730は、コア742内部のいくつかのストリーム処理装置744のアイドルの時期を決定し、これらに新しいタスクを割り当てる。
【0068】
ストリーム処理アプリケーションは、適時および応答様式で大量のデータストリームを処理するという必要性によって特徴付けられる。そのようなアプリケーションは、GPU上の浮動小数点装置等、複数の演算装置を使用する可能性があるが、これらの装置の間での割り当て、同期化、または通信を明示的に管理しない。ストリーム処理は、実施される可能性がある並列演算を制限することによって、並列ソフトウェアおよびハードウェアを簡素化することができる。所定のデータのセットである、ストリームは、ストリーム内の各要素に適用される一連の演算を有する場合がある。1つの演算がストリーム内の全ての要素に適用される、均一ストリーミングが典型的である。演算は通常パイプラインされ、ローカルのオンチップメモリが再使用されて、外部のメモリ大域幅を抑制する。
【0069】
ストリーム抽象化はデータ依存性を明らかにし、したがって、コンパイラツールは、オンチップ管理タスクを完全に自動化かつ最適化することができる。ストリーム処理ハードウェアは、例えば、依存性が認識されると、実行時に直接メモリアクセス(DMA)を起動するために、スコアボーディングを使用することができる。手動のDMA管理を排除することによって、ソフトウェアの複雑度を軽減し、ハードウェアキャッシュを排除することによって、算術論理装置(ALU)等の演算装置専用ではない、ダイ領域の量を削減する。
【0070】
ストリーム処理は、従来のデジタル信号処理(DSP)またはGPUタイプのアプリケーションで良好に機能するデータ中心モデルによって駆動される。ストリーム処理は、データベース等、無作為のデータアクセスが多い汎用処理には最適ではない。
【0071】
一実施形態において、各ストリームコア742は、SIMDコアであり、複数のストリーム処理装置(SPU)744を含む。各SPU744は、複数のALUを含むことができ、従って、シェーダ配列740は、大量の演算能力を有することができる。シェーダ配列740は、提供された状態情報によって選択されているプログラムを用いて、頂点データ上で頂点および/または形状シェーダプログラムを実行することができる。シェーダプログラムは、広範囲の頂点および他のデータ上で算術および論理演算を使用するアルゴリズムを実装することができ、プログラムは、条件付または分岐実行パス、ならびに直接および間接メモリアクセスを含む可能性がある。使用されるシェーダプログラムは、図1に示されるシステムメモリまたはバッファ174内に記憶される場合がある。シェーダプログラムは、当技術分野で周知の適切な描画コマンドおよび状態情報を介して、シェーダ配列740に対して識別される場合がある。
【0072】
機能装置750は、視覚効果のためのピクセルシェーダプログラムの実行のために1つ以上のテクスチャ装置752を含む。一実施形態において、テクスチャ装置752は、ストリームコア742に連携しているので、シェーダ能力をさらに増大させることは、テクスチャ能力をさらに増大することに等しい。テクスチャ装置752は、プログラム実行中のデータストレージのためにキャッシュメモリサブシステム754を利用することができる。
【0073】
図8を参照すると、コンピューティングシステム800の一実施形態が示される。図1の回路部分に対応する回路部分は同じ番号で示される。コンピューティングシステム800は、複数の処理ノード110a〜110dを含む。図8には4つのノードが示されるが、他の実施形態は、各々1つ以上のプロセッサコアを備える、異なる数のノードを含むことができる。本明細書に使用される場合、参照番号の次に文字が続いて参照される要素は、総称して、単独の数字によって参照される場合がある。例えば、処理ノード110a〜110dは、総称して、処理ノード110、またはノード110として参照される場合がある。各ノード110は、それぞれのメモリコントローラ120を介して、それぞれのメモリ130に連結されてもよい。加えて、各処理ノード110は、処理ノード110の他のノードと通信するために使用されるインターフェースロジック140を含むことができる。例えば、処理ノード110aは、処理ノード110bおよび110cと通信するためのインターフェースロジック140aを含む。同様に、処理ノード110bは、処理ノード110aおよび110dと通信するためのインターフェースロジック140bを含む等となる。
【0074】
図8の実施形態において、処理ノード110dは、インターフェースロジック140dを介して、入出力(I/O)デバイス160aと通信するために連結され、I/Oデバイス160aはさらに、第2のI/Oデバイス160bに連結される。他の処理ノードは、同様の様式で他のI/Oデバイスと通信することができる。代替として、処理ノードは、I/Oバスに連結される、I/Oブリッジと通信してもよい。
【0075】
コンピューティングシステム800は、ノード間通信のためにパケットベースのリンクを実装することができる。図示された実施形態において、リンクは、単一方向ラインの組として実装される。(例えば、ライン150aは、処理ノード110aから処理ノード110bへパケットを送信するために使用され、ライン150bは、処理ノード110bから処理ノード110aへパケットを送信するために使用される)。他の組のライン150c〜150hは、図8に示される他の処理ノード間でパケットを送信するために使用される。リンクは、処理ノード間の通信のためにキャッシュコヒーレント様式で、またはI/Oデバイス160a〜160b(および所望に応じて追加のI/Oデバイス)間のデイジーチェーン構造として非コヒーレント様式で動作することができる。ある処理ノード110から別の処理ノードへ送信されるパケットは、1つ以上の中間ノードを通過することに注意されたい。例えば、処理ノード110aによって、処理ノード110dへ送信されるパケットは、図8に示されるように、処理ノード110bまたは処理ノード110cのいずれかを通過する場合がある。任意の好適なルーティングアルゴリズムを使用することができる。コンピューティングシステム800の他の実施形態は、図8に示される実施形態よりも多い、または少ない処理ノードを含むことができる。加えて、各処理ノードが、ポイントツーポイントネットワークを通じて、それぞれ他の処理ノードに連結されるという、他の実施形態が可能である。図示されたメモリコントローラおよびインターフェースロジックに加えて、各処理ノード110は、図1に示され前述したように、1つ以上のプロセッサと、関連キャッシュとを含むことができる。
【0076】
メモリ130は、任意の好適な記憶装置を備えることができる。例えば、メモリ130は、1つ以上のRAMBUS動的ランダムアクセスメモリ(DRAM)、同期DRAM(SDRAM)、DRAM、静的RAM等を備えることができる。コンピューティングシステム800のアドレス空間は、メモリ130の間で分割される。各処理ノード110は、どのアドレスがどのメモリ130にマップされるか、したがって、特定のアドレスに対するメモリリクエストが、どの処理ノード110に対してルーティングされるべきかを決定するために使用されるメモリマップを含むことができる。一実施形態において、コンピューティングシステム800内のアドレスに対するコヒーレンシポイントは、アドレスに対応するバイトを記憶するメモリに連結されたメモリコントローラ120である。メモリコントローラ120は、メモリ130にインターフェースするための制御回路を備えることができる。加えて、メモリコントローラ120は、メモリリクエストをキューするためのリクエストキューを含むことができる。
【0077】
一般に、インターフェースロジック140は、リンクからパケットを受信するため、およびリンク上で送信されるパケットをバッファするためのバッファを備えることができる。コンピューティングシステム800は、パケットを送信するために任意の好適なフロー制御機構を採用することができる。I/Oデバイス160は、任意の所望の周辺機器の例示である。例えば、I/Oデバイス160は、ネットワークインターフェースカード、ビデオアクセラレータ、オーディオカード、ハードまたはフロッピー(登録商標)ディスクドライブまたはドライブコントローラ、スモールコンピュータシステムインターフェース(SCSI)アダプタおよび電話カード、モデム、サウンドカード、ならびに汎用インターフェースバス(GPIB)またはフィールドバスインターフェースカード等の多様なデータ取得カードを備えることができる。
【0078】
上記のように、各処理ノード110は、図1に示し、前述したように、1つ以上のプロセッサと、関連キャッシュとを含むことができる。各ノード110は、1つ以上の汎用プロセッサコア112を備えることができる。加えて、処理ノード110は、単一命令複数データ(SIMD)コア等の並列アーキテクチャを備える特殊プロセッサコア172を備えることができる。プロセッサコア112は、上述のGCアルゴリズムのステップを実行する前に、ルートアドレスを演算するためにSIMDコア172を利用することができる。代替として、例えば、SIMDコア172のない、処理ノード110aのプロセッサコア112は、SIMDコア172を確かに備える、ノード110b等の別のノードのSIMDコア172を利用することができる。そのような実施形態において、ノード110a内のプロセッサコア112が、GC開始条件が満たされたことを検出すると、コア112は、別のノード110b内のSIMDコア172へ、ルートアドレスを演算するように通知を送信することができる。通知は、任意の選択されたノード間通信に含まれてもよい。
【0079】
上記の実施形態は、ソフトウェアを含む場合があることに注意されたい。そのような実施形態において、本方法および/機構を実装するプログラム命令は、コンピュータ可読媒体上で伝達または記憶される場合がある。プログラム命令を記憶するように構成される多数の種類の媒体が使用可能であり、ハードディスク、フロッピー(登録商標)ディスク、CD−ROM、DVD、フラッシュメモリ、プログラム可能ROM(PROM)、ランダムアクセスメモリ(RAM)、および多様な他の形式の揮発性または不揮発性ストレージが挙げられる。
【0080】
上記の実施形態はかなりの詳細にわたり記載したが、上記の開示が完全に理解されると、当業者には多数の変形および変更が明らかとなるであろう。以下の請求項は、そのような変形および変更全てに及ぶと解釈されることを目的する。

【特許請求の範囲】
【請求項1】
処理ノードであって、
汎用中央処理装置(CPU)と、
特殊処理装置(SPU)と、
メモリと、を備え、
前記CPUは、前記メモリの一部に記憶されたデータオブジェクトが変更されたことを検出することに応答して、前記一部に対応する表示を記憶し、ガーベッジコレクション開始条件が満たされたことを検出することに応答して、通知を前記SPUへ送信するように構成され、
前記CPUから前記通知を受信することに応答して、前記SPUは、前記一部に対応するガーベッジコレクション前処理を実施するように構成される、処理ノード。
【請求項2】
前記CPUは、前記メモリを、各領域が複数のサブ領域を含み、前記一部が、前記サブ領域のうちの1つに対応する、複数の領域に分割するようにさらに構成され、
前記SPUは、各ルートアドレスが前記記憶された表示のうちの1つに対応する、複数のルートアドレスを演算するようにさらに構成される、請求項1に記載の処理ノード。
【請求項3】
前記SPUは、1つ以上の既定の収集可能領域内の到達可能なデータオブジェクトを識別するために、ガーベッジコレクションアルゴリズムによって使用される、前記演算されたルートアドレスを前記CPUへ送信するようにさらに構成される、請求項2に記載の処理ノード。
【請求項4】
前記CPUは、前記複数のサブ領域のうちの1つのサブ領域内に記憶されたデータオブジェクトが、前記1つ以上の既定の収集可能領域のうちの1つをポイントするポインタ値を含むことを検出することに応答して、前記サブ領域に対応する表示を記憶するようにさらに構成される、請求項3に記載の処理ノード。
【請求項5】
前記CPUは、前記SPUへの前記通知内で、前記記憶された表示と、前記記憶された表示に対応する1つ以上のサブ領域を含む前記複数の領域のうちの領域の基底アドレスとを送信するようにさらに構成される、請求項3に記載の処理ノード。
【請求項6】
前記SPUは、2つ以上の対応するサブ領域を検索するために、2つ以上の記憶された表示を並列読み出しし、 前記2つ以上の検索されたサブ領域の各々に対して、対応する基底アドレスに基づいて、1つのルートアドレスを並列演算するようにさらに構成される、請求項5に記載の処理ノード。
【請求項7】
前記SPUは、単一命令複数データ(SIMD)並列アーキテクチャを備える、請求項6に記載の処理ノード。
【請求項8】
前記SPUは、前記CPUの実行を停止する一時停止を発生させずに、前記複数のルートアドレスを演算する、請求項6に記載の処理ノード。
【請求項9】
ガーベッジコレクションのための方法であって、
汎用中央処理装置CPUが、メモリの一部に記憶されたデータオブジェクトが変更されたことを検出することに応答して、前記一部に対応する表示を記憶することと、
ガーベッジコレクション開始条件が満たされたことを検出することに応答して、前記CPUから特殊処理装置(SPU)へ通知を送信することと、
前記SPUが、前記一部に対応するガーベッジコレクション前処理を実施することと、を含む、方法。
【請求項10】
前記CPUが、前記メモリを、各領域が複数のサブ領域を含み、前記部分が、前記サブ領域のうちの1つに対応する、複数の領域に分割することと、
前記SPUが、各ルートアドレスが前記記憶された表示のうちの1つに対応する、複数のルートアドレスを演算することと、をさらに含む、請求項9に記載の方法。
【請求項11】
1つ以上の既定の収集可能領域内の到達可能なデータオブジェクトを識別するために、ガーベッジコレクションアルゴリズムによって使用される、前記演算されたルートアドレスを前記CPUへ送信することをさらに含む、請求項10に記載の方法。
【請求項12】
前記複数のサブ領域のうちの1つのサブ領域内に記憶されたデータオブジェクトが、前記1つ以上の既定の収集可能領域のうちの1つをポイントするポインタ値を含むことを検出することに応答して、前記サブ領域に対応する表示を記憶することをさらに含む、請求項11に記載の方法。
【請求項13】
前記SPUへの前記通知内で、前記記憶された表示と、前記記憶された表示に対応する1つ以上のサブ領域を含む前記複数の領域のうちの領域の基底アドレスとを送信することをさらに含む、請求項11に記載の方法。
【請求項14】
2つ以上の対応するサブ領域を検索するために、2つ以上の記憶された表示を並列読み出しすることと、
前記2つ以上の検索されたサブ領域の各々に対して、対応する基底アドレスに基づいて、1つのルートアドレスを並列演算することと、をさらに含む、請求項13に記載の方法。
【請求項15】
前記複数の領域の各領域は、対応する記憶されたデータオブジェクトの年齢に対応し、前記1つ以上の既定の収集可能領域は、前記複数の領域のうちの最も若い領域である、請求項13に記載の方法。
【請求項16】
前記ガーベッジコレクション開始条件は、最も若いサブ領域が、既定の閾値よりも少ない空き空間を有するという条件を含む、請求項15に記載の方法。
【請求項17】
コンピューティングシステムであって、
汎用中央処理装置(CPU)を備える第1の処理ノードと、
前記第1の処理ノードに連結されたメモリと、
特殊処理装置(SPU)を備える第2の処理ノードと、を備え、
前記CPUは、前記メモリの一部に記憶されたデータオブジェクトが変更されたことを検出することに応答して、前記一部に対応する表示を記憶し、ガーベッジコレクション開始条件が満たされたことを検出することに応答して、通知を前記SPUへ送信するように構成され、
前記CPUから前記通知を受信することに応答して、前記SPUは、前記一部に対応するガーベッジコレクション前処理を実施するように構成される、コンピューティングシステム。
【請求項18】
前記CPUは、前記メモリを、各領域が複数のサブ領域を含み、前記一部が、前記サブ領域のうちの1つに対応する、複数の領域に分割するようにさらに構成され、
前記SPUは、各ルートアドレスが前記記憶された表示のうちの1つに対応する、複数のルートアドレスを演算するようにさらに構成される、請求項17に記載のコンピューティングシステム。
【請求項19】
前記CPUは、前記複数のサブ領域のうちの1つのサブ領域内に記憶されたデータオブジェクトが、前記1つ以上の既定の収集可能領域のうちの1つをポイントするポインタ値を含むことを検出することに応答して、前記サブ領域に対応する表示を記憶するようにさらに構成される、請求項18に記載のコンピューティングシステム。
【請求項20】
前記CPUは、前記SPUへの前記通知内で、前記記憶された表示と、前記記憶された表示に対応する1つ以上のサブ領域を含む前記複数の領域のうちの領域の基底アドレスとを送信するようにさらに構成される、請求項18に記載のコンピューティングシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公表番号】特表2013−521570(P2013−521570A)
【公表日】平成25年6月10日(2013.6.10)
【国際特許分類】
【出願番号】特願2012−556102(P2012−556102)
【出願日】平成23年2月22日(2011.2.22)
【国際出願番号】PCT/US2011/025779
【国際公開番号】WO2011/109191
【国際公開日】平成23年9月9日(2011.9.9)
【出願人】(591016172)アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド (439)
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
【Fターム(参考)】