(57)【要約】  効率的なガーベッジコレクションのためのシステムおよび方法。汎用中央処理装置（ＣＰＵ）は、世代別ガーベッジコレクション技法にしたがって、割り当てられたヒープを区分する。世代は、固定サイズカードに区分される。ＣＰＵは、アプリケーション実行中、直近のガーベッジコレクション以降の規定を満たしたダーティカードの表示をマーキングする。ＣＰＵが次のガーベッジコレクション開始条件が満たされたことを検出すると、ＣＰＵは、１つ以上のカードのルートアドレスの判定に対応する通知を特殊処理装置（ＳＰＵ）へ送信し、各カードのルートアドレスは、前記マーキングされた表示のうちの１つに対応する。ＳＰＵは、単一命令複数データ（ＳＩＭＤ）並列アーキテクチャを有し、グラフィックス処理装置（ＧＰＵ）であってもよい。ＳＰＵは、複数のカードルートアドレスを同時に演算するために、そのＳＩＭＤコアの並列アーキテクチャを利用することができる。次に、ＳＰＵは、ガーベッジコレクションアルゴリズムで使用されるこれらのアドレスをＣＰＵへ送信する。【選択図】図４
2013521570.tif 000002
【特許請求の範囲】
【請求項１】
処理ノードであって、
汎用中央処理装置（ＣＰＵ）と、
特殊処理装置（ＳＰＵ）と、
メモリと、を備え、
前記ＣＰＵは、前記メモリの一部に記憶されたデータオブジェクトが変更されたことを検出することに応答して、前記一部に対応する表示を記憶し、ガーベッジコレクション開始条件が満たされたことを検出することに応答して、通知を前記ＳＰＵへ送信するように構成され、
前記ＣＰＵから前記通知を受信することに応答して、前記ＳＰＵは、前記一部に対応するガーベッジコレクション前処理を実施するように構成される、処理ノード。
【請求項２】
前記ＣＰＵは、前記メモリを、各領域が複数のサブ領域を含み、前記一部が、前記サブ領域のうちの１つに対応する、複数の領域に分割するようにさらに構成され、
前記ＳＰＵは、各ルートアドレスが前記記憶された表示のうちの１つに対応する、複数のルートアドレスを演算するようにさらに構成される、請求項１に記載の処理ノード。
【請求項３】
前記ＳＰＵは、１つ以上の既定の収集可能領域内の到達可能なデータオブジェクトを識別するために、ガーベッジコレクションアルゴリズムによって使用される、前記演算されたルートアドレスを前記ＣＰＵへ送信するようにさらに構成される、請求項２に記載の処理ノード。
【請求項４】
前記ＣＰＵは、前記複数のサブ領域のうちの１つのサブ領域内に記憶されたデータオブジェクトが、前記１つ以上の既定の収集可能領域のうちの１つをポイントするポインタ値を含むことを検出することに応答して、前記サブ領域に対応する表示を記憶するようにさらに構成される、請求項３に記載の処理ノード。
【請求項５】
前記ＣＰＵは、前記ＳＰＵへの前記通知内で、前記記憶された表示と、前記記憶された表示に対応する１つ以上のサブ領域を含む前記複数の領域のうちの領域の基底アドレスとを送信するようにさらに構成される、請求項３に記載の処理ノード。
【請求項６】
前記ＳＰＵは、２つ以上の対応するサブ領域を検索するために、２つ以上の記憶された表示を並列読み出しし、  前記２つ以上の検索されたサブ領域の各々に対して、対応する基底アドレスに基づいて、１つのルートアドレスを並列演算するようにさらに構成される、請求項５に記載の処理ノード。
【請求項７】
前記ＳＰＵは、単一命令複数データ（ＳＩＭＤ）並列アーキテクチャを備える、請求項６に記載の処理ノード。
【請求項８】
前記ＳＰＵは、前記ＣＰＵの実行を停止する一時停止を発生させずに、前記複数のルートアドレスを演算する、請求項６に記載の処理ノード。
【請求項９】
ガーベッジコレクションのための方法であって、
汎用中央処理装置ＣＰＵが、メモリの一部に記憶されたデータオブジェクトが変更されたことを検出することに応答して、前記一部に対応する表示を記憶することと、
ガーベッジコレクション開始条件が満たされたことを検出することに応答して、前記ＣＰＵから特殊処理装置（ＳＰＵ）へ通知を送信することと、
前記ＳＰＵが、前記一部に対応するガーベッジコレクション前処理を実施することと、を含む、方法。
【請求項１０】
前記ＣＰＵが、前記メモリを、各領域が複数のサブ領域を含み、前記部分が、前記サブ領域のうちの１つに対応する、複数の領域に分割することと、
前記ＳＰＵが、各ルートアドレスが前記記憶された表示のうちの１つに対応する、複数のルートアドレスを演算することと、をさらに含む、請求項９に記載の方法。
【請求項１１】
１つ以上の既定の収集可能領域内の到達可能なデータオブジェクトを識別するために、ガーベッジコレクションアルゴリズムによって使用される、前記演算されたルートアドレスを前記ＣＰＵへ送信することをさらに含む、請求項１０に記載の方法。
【請求項１２】
前記複数のサブ領域のうちの１つのサブ領域内に記憶されたデータオブジェクトが、前記１つ以上の既定の収集可能領域のうちの１つをポイントするポインタ値を含むことを検出することに応答して、前記サブ領域に対応する表示を記憶することをさらに含む、請求項１１に記載の方法。
【請求項１３】
前記ＳＰＵへの前記通知内で、前記記憶された表示と、前記記憶された表示に対応する１つ以上のサブ領域を含む前記複数の領域のうちの領域の基底アドレスとを送信することをさらに含む、請求項１１に記載の方法。
【請求項１４】
２つ以上の対応するサブ領域を検索するために、２つ以上の記憶された表示を並列読み出しすることと、
前記２つ以上の検索されたサブ領域の各々に対して、対応する基底アドレスに基づいて、１つのルートアドレスを並列演算することと、をさらに含む、請求項１３に記載の方法。
【請求項１５】
前記複数の領域の各領域は、対応する記憶されたデータオブジェクトの年齢に対応し、前記１つ以上の既定の収集可能領域は、前記複数の領域のうちの最も若い領域である、請求項１３に記載の方法。
【請求項１６】
前記ガーベッジコレクション開始条件は、最も若いサブ領域が、既定の閾値よりも少ない空き空間を有するという条件を含む、請求項１５に記載の方法。
【請求項１７】
コンピューティングシステムであって、
汎用中央処理装置（ＣＰＵ）を備える第１の処理ノードと、
前記第１の処理ノードに連結されたメモリと、
特殊処理装置（ＳＰＵ）を備える第２の処理ノードと、を備え、
前記ＣＰＵは、前記メモリの一部に記憶されたデータオブジェクトが変更されたことを検出することに応答して、前記一部に対応する表示を記憶し、ガーベッジコレクション開始条件が満たされたことを検出することに応答して、通知を前記ＳＰＵへ送信するように構成され、
前記ＣＰＵから前記通知を受信することに応答して、前記ＳＰＵは、前記一部に対応するガーベッジコレクション前処理を実施するように構成される、コンピューティングシステム。
【請求項１８】
前記ＣＰＵは、前記メモリを、各領域が複数のサブ領域を含み、前記一部が、前記サブ領域のうちの１つに対応する、複数の領域に分割するようにさらに構成され、
前記ＳＰＵは、各ルートアドレスが前記記憶された表示のうちの１つに対応する、複数のルートアドレスを演算するようにさらに構成される、請求項１７に記載のコンピューティングシステム。
【請求項１９】
前記ＣＰＵは、前記複数のサブ領域のうちの１つのサブ領域内に記憶されたデータオブジェクトが、前記１つ以上の既定の収集可能領域のうちの１つをポイントするポインタ値を含むことを検出することに応答して、前記サブ領域に対応する表示を記憶するようにさらに構成される、請求項１８に記載のコンピューティングシステム。
【請求項２０】
前記ＣＰＵは、前記ＳＰＵへの前記通知内で、前記記憶された表示と、前記記憶された表示に対応する１つ以上のサブ領域を含む前記複数の領域のうちの領域の基底アドレスとを送信するようにさらに構成される、請求項１８に記載のコンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータシステムに関し、より具体的には、コンピュータのガーベッジコレクション機構に関する。
【背景技術】
【０００２】
ソフトウェアプログラマが、アルゴリズムまたはメソッドに従って作業を実施するようにアプリケーションを作成するとき、プログラマは、一時データおよび結果データを参照するために変数を利用することが多い。このデータは、データオブジェクトと呼ばれる場合もあり、コンピュータのメモリ内の空間が割り当てられることを必要とする。１つ以上のアプリケーションの実行中、データオブジェクトの割り当てに対して、割り当てられていない、または自由なコンピュータメモリの量が、最適レベル以下に減少する場合がある。空き空間の量のそのような減少は、システム性能を低下させる場合があり、最終的に、利用可能な空き空間が全く存在しなくなる場合がある。アプリケーション実行中、ガーベッジコレクションのような自動的なメモリ管理技法が使用される場合がある。ガーベッジコレクションは、十分な空き空間を維持し、メモリリークを識別して排除し、到達可能なデータオブジェクトの一部または全部を新しいメモリ領域にコピーし、必要に応じてデータオブジェクトに対する参照を更新する等を行う。
【０００３】
ガーベッジコレクションアルゴリズムは、それらの利点に伴う設計上のトレードオフを有する。例えば、ガーベッジコレクションアルゴリズムは一般的に、いくつかのステップを含み、比較的時間がかかる可能性がある。このため、コンピューティングシステムは、ガーベッジコレクションアルゴリズムがそのタスクを実施する間に一時停止に見舞われる可能性がある。ガーベッジコレクタがリアルタイム、またはアプリケーションの実行と同時に実行される場合、ガーベッジコレクションの一時停止の長さは、許容できない場合がある。加えて、アルゴリズムはその実行中にキャッシュ空間を利用する場合がある。キャッシュ空間を使用すると、アルゴリズムが終了した後、再びフェッチされなければならない有用な情報の消失が生じる可能性がある。
【０００４】
メモリ全体ではなく、メモリの一部でガーベッジコレクションのアルゴリズムのステップを実施することによって、ガーベッジコレクションに伴う一時停止時間が削減される。加えて、研究では、多数のソフトウェアアプリケーションにおいて、ほとんどのデータオブジェクトが短命であることが示されている。したがって、上記のガーベッジコレクションに伴う問題に対する１つの解決策として、最も若いデータオブジェクトを含むメモリの一部でガーベッジコレクションアルゴリズムを実行することが挙げられる。そのような１つの技法が世代別ガーベッジコレクションである。
【０００５】
ガーベッジコレクションが実行されると決定された時点で、ガーベッジコレクションが進行する前に、いくつかの前処理ステップが実施される。例えば、この時点で、より若いデータオブジェクトをポイントしているより古いデータオブジェクトのアドレスが演算される。このため、ガーベッジコレクションアルゴリズムは、これらのアドレスを使用して、全ての到達可能なデータオブジェクトを検索する。アドレスの数およびサイズが増加すると、アドレス演算のために使用される時間が増加し、世代別ガーベッジコレクション技法の利点を低減させる可能性がある。
【０００６】
上記に照らして、コンピュータのガーベッジコレクションを実施するための効率的な方法および機構が所望される。
【発明の概要】
【０００７】
効率的なガーベッジコレクションを実施するためのシステムおよび方法が考案される。
【０００８】
一実施形態において、処理ノードは、汎用中央処理装置（ＣＰＵ）と、特殊処理装置（ＳＰＵ）と、メモリとを含む。一実施形態において、ＳＰＵは、単一命令複数データ（ＳＩＭＤ）並列アーキテクチャを有し、グラフィックス処理装置（ＧＰＵ）であってもよい。ＣＰＵは、メモリ内部の割り当てられたヒープを複数の領域に分割するように動作する。多様な実施形態において、領域は年齢別に並べられる、または年齢別に識別可能である場合があり、これらは「世代」と呼ばれる場合がある。加えて、各領域は、複数のサブ領域、または「カード」を備える場合がある。いくつかの実施形態において、各カードは、１２８バイト、４ＫＢ仮想ページ等、固定サイズを有する。アプリケーション実行中、ＣＰＵは、潜在的な世代間参照としての資格を満たすカード内に記憶されたデータオブジェクトの変更を検出することに応答して、特定のカードに対応する表示をマーキングする。例えば、一実施形態において、データオブジェクト内に記憶されたポインタ値が、別の世代内に記憶されたデータオブジェクトをポイントするように変更される場合がある。別の実施形態において、対応する表示をマーキングすることは、ポインタ値が、最も若い世代内に記憶されたデータオブジェクトをポイントするように変更されるときに発生する。他の適用条件も可能であり考えられる。
【０００９】
多様な実施形態において、ＣＰＵは、最も若い世代が、既定の閾値より少ない自由メモリ空間を有する等、ガーベッジコレクション開始条件が満たされたことを検出することができる。ガーベッジコレクション開始条件が満たされたと判定することに応答して、ＣＰＵは、ＳＰＵが既定のガーベッジコレクション関連タスクを実施することを示す通知をＳＰＵへ送信する。一実施形態において、ＳＰＵは、各カードルートアドレスがマーキングされた表示のうちの１つに対応する、１つ以上のカードルートアドレスを判定する場合がある。ＳＰＵは、複数のカードルートアドレスを同時に演算するために、ＳＩＭＤコアの並列アーキテクチャを利用することができる。ＳＰＵがガーベッジコレクション関連タスクを実施する一方、ＣＰＵは、他のタスクの処理を継続することができる。したがって、カードルートアドレスは、ＣＰＵがガーベッジコレクションの一時停止を招くことなく、判定することができる。加えて、ＣＰＵのキャッシュサブシステムはこれらのタスクに必要とされない。したがって、システム全体の性能を向上することができる。多様な実施形態において、第１の処理ノードのＣＰＵは、上記の通知を、ネットワーク接続を介して、第２の処理ノード内に位置するＳＰＵへ送信することができる。ＳＰＵは、次いで、ＣＰＵを開放するために、上記のようにカードルートアドレスを判定することができる。
【００１０】
これらおよび他の実施形態は、以下の説明および図面を参照することにより、さらに理解されよう。
【図面の簡単な説明】
【００１１】
【図１】並列アーキテクチャを備える特殊処理装置を備える、例示的な処理ノードの一実施形態の概要ブロック図である。
【図２】プロセスアドレス空間の一実施形態の概要ブロック図である。
【図３】区分されたメモリの一実施形態の概要ブロック図である。
【図４】並列アーキテクチャを備える特殊処理装置を用いた効率的なガーベッジコレクションのための方法の一実施形態の流れ図である。
【図５】ガーベッジコレクションアルゴリズムで使用されるカードルートアドレスを演算するための方法の一実施形態の流れ図である。
【図６】汎用プロセッサコアの一実施形態の概要ブロック図である。
【図７】グラフィックスプロセッサコアの一実施形態の概要ブロック図である。
【図８】コンピューティングシステムの一実施形態の概要ブロック図である。
【００１２】
本発明は、多様な変更および代替形態を認めることができるが、具体的な実施形態が例として図面に示され、本明細書に詳細を説明する。しかしながら、図面およびその詳細説明は、本発明を開示される特定の形式に限定することを意図するものではなく、逆に、本発明が、添付の請求項によって定義される本発明の精神および範囲に該当する全ての変更、均等物、および代替形態を網羅することを理解されたい。
【発明を実施するための形態】
【００１３】
以下の説明において、本発明の完全な理解を提供するために、多数の具体的な詳細が記載される。しかしながら、当業者は、本発明がこれらの具体的な詳細なく実践され得ることを認識すべきである。いくつかの事例において、周知の回路、構造、および技法は、本発明を曖昧にすることを回避するため、詳細に示されていない。
【００１４】
図１を参照すると、並列アーキテクチャを備える特殊処理装置（ＳＰＵ）を備える、例示的な処理ノード１１０の一実施形態が示される。処理ノード１１０は、メモリコントローラ１２０と、インターフェースロジック１４０と、１つ以上のプロセッサコア１１２と対応するキャッシュメモリサブシステム１１４とを含む場合がある、１つ以上の処理装置１１５と、パケット処理ロジック１１６と、共有キャッシュメモリサブシステム１１８とを含むことができる。加えて、処理ノード１１０は、１つ以上の特殊処理装置（ＳＰＵ）１７０を含むことができる。ＳＰＵ１７０は、単一命令複数データ（ＳＩＭＤ）コア等、並列アーキテクチャを備える特殊プロセッサコア１７２を備えることができる。ＳＩＭＤコアの例として、グラフィックス処理装置（ＧＰＵ）、デジタル信号処理（ＤＳＰ）コア等が挙げられる。
【００１５】
一実施形態において、処理ノード１１０は、第２世代の汎用処理装置１１５（図示せず）に代わって、またはこれに加えて、グラフィックス処理装置（ＧＰＵ）として実装されるＳＰＵ１７０を含むことができる。ＧＰＵ１７０は、１つ以上のグラフィックプロセッサコア１７２と、データストレッジバッファ１７４とを含むことができる。ＧＰＵは、パーソナルコンピュータ、ワークステーション、またはビデオゲームコンソールのための専用グラフィックス描画デバイスであってもよい。一実施形態において、処理ノード１１０の図示された機能は、単一の集積回路上に組み込まれる。
【００１６】
プロセッサコア１１２は、既定の汎用命令セットに従って命令を実行するための回路を含む。例えば、ｘ８６命令セットアーキテクチャが選択される場合がある。代替として、Ａｌｐｈａ、ＰｏｗｅｒＰＣ、または任意の他の汎用命令セットアーキテクチャが選択されてもよい。一般的に、プロセッサコア１１２は、それぞれ、データおよび命令のためのキャッシュメモリサブシステム１１４にアクセスする。リクエストされたブロックがキャッシュメモリサブシステム１１４、または共有キャッシュメモリサブシステム１１８内に発見されない場合、読み出しリクエストが生成され、発見されていないブロックがマップされているノード内のメモリコントローラへ送信することができる。
【００１７】
最新のＧＰＵ１７０は、コンピュータグラフィックスの操作および表示に関して非常に効率的であり、それらの高度に並列な構造によって、広範囲の複雑なアルゴリズムに対して、処理装置１１５等、汎用中央処理装置（ＣＰＵ）よりも効率的になっている。ＧＰＵは一般的に、グラフィックスおよびビデオに必要な計算を実行し、ＣＰＵは、グラフィックス単独よりもさらに多いシステムプロセスのための計算を実行する。従来のＧＰＵ１７０は、画像描画アプリケーションにおいて高性能を達成するために、非常に広範な単独命令複数データ（ＳＩＭＤ）アーキテクチャを使用する。そのようなアプリケーションは一般に、多数のオブジェクト（頂点またはピクセル）上で、頂点シェーダまたはピクセルシェーダ等、同じプログラムを実行することを必要とする。各オブジェクトは他のオブジェクトと独立して処理されるが、同じシーケンスの動作が使用されるので、ＳＩＭＤアーキテクチャは、かなりの性能向上を実現する。
【００１８】
ＧＰＵ１７０において進歩したこととして、頂点およびテクスチャを操作することができるプログラムブルシェーダ、エイリアシングを削減するためのオーバーサンプリングおよび補間技法、ならびに非常に高精度の色空間に対するサポートが挙げられる。これらの演算の多くには、行列およびベクトル演算が関わる。したがって、ＧＰＵ１１９は、非グラフィック計算のためであると考えられてきた。
【００１９】
一実施形態において、メモリを管理するために、ＣＰＵは、世代別ガーベッジコレクション（ＧＣ）のためのアルゴリズムのステップを実行する。Ｈ．Ｌｉｅｂｅｒｍａｎ，ｅｔ  ａｌ．による、Ａ  Ｒｅａｌ−Ｔｉｍｅ  Ｇａｒｂａｇｅ  Ｃｏｌｌｅｃｔｏｒ  Ｂａｓｅｄ  ｏｎ  ｔｈｅ  Ｌｉｆｅｔｉｍｅ  ｏｆ  Ｏｂｊｅｃｔｓ（Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ  ｏｆ  ｔｈｅ  ＡＣＭ  ２６（６），１９８３，ｐｐ．４１９−４２９）を参照されたい。ＣＰＵ１１５は、世代別ガーベッジコレクションアルゴリズムを実行する前に、カードマーキング技法の前処理ステップを利用することができる。Ｐ．Ｗｉｌｓｏｎ，ｅｔ  ａｌ．による、Ａ  ｃａｒｄ−ｍａｒｋｉｎｇ  ｓｃｈｅｍｅ  ｆｏｒ  ｃｏｎｔｒｏｌｌｉｎｇ  ｉｎｔｅｒｇｅｎｅｒａｔｉｏｎａｌ  ｒｅｆｅｒｅｎｃｅｓ  ｉｎ  ｇｅｎｅｒａｔｉｏｎ−ｂａｓｅｄ  ＧＣ  ｏｎ  ｓｔｏｃｋ  ｈａｒｄｗａｒｅ（ＳＩＧＰＬＡＮ  Ｎｏｔｉｃｅｓ  ２４  （５），１９８９，ｐｐ．８７−９２）を参照されたい。ガーベッジコレクションの一時停止時間を短縮するために、アルゴリズムは、メモリ全体ではなく、メモリの一部上で実行することができる。一実施形態において、メモリ内の割り当てられたヒープは、領域に区分される場合がある。これらの領域は、「世代」と呼ばれる場合がある。一実施形態において、各世代は、内部に含まれるデータオブジェクトの年齢に対応する。一実施形態において、ガーベッジコレクションアルゴリズムは、最も若い世代のうちの１つ以上のみで実行する場合がある。そのような技法は、ガーベッジコレクションの一時停止時間およびガーベッジコレクション中のキャッシュの利用の両方を削減することができる。
【００２０】
１つ以上のより若い世代内部に位置する第１のデータオブジェクトは、より古い世代内の第２のデータオブジェクトによって参照される場合がある。このより古い世代は、１つ以上のより若い世代内部には含まれない。ガーベッジコレクションは、１つ以上のより若い世代上のみで実行されるので、この参照は見落とされる場合がある。そのような見落としが発生すると、より若い世代内部に位置する第１のデータオブジェクトは、誤って、到達不可能であると判定される場合がある。到達不可能であると判定されたデータオブジェクトは、メモリから削除される。したがって、より若い世代内のデータオブジェクトを参照する、より古い世代に位置する任意のデータオブジェクトのアドレスを決定するためにステップが実施される。これらのステップは、世代別ガーベッジコレクション技法の一部として実施され、さらに後述する。
【００２１】
一実施形態において、各世代は、サブ領域に区分される。これらのサブ領域は、「カード」と呼ばれる場合がある。一実施形態において、各カードは、内部に含まれるデータオブジェクトの年齢に対応する。一実施形態において、ガーベッジコレクションアルゴリズムは、最も若い世代内部に位置する各カード上で実行する場合がある。ガーベッジコレクションは、より古い世代内部のマーキングされたカード上だけで実行する場合がある。アプリケーション実行中、一実施形態において、カードは、カードが、１つ以上の最も若い世代内に位置する別のデータオブジェクトをポイントするデータオブジェクトを含むと判定されると、マーキングされる場合がある。別の実施形態では、カードは、カードが変更されたデータオブジェクトを含むと判定されるとマーキングされる場合がある。カードをマーキングするための他の条件が可能であり、考案される。一実施形態において、ガーベッジコレクションアルゴリズムを実行する前に実施された前処理ステップが、マーキングされたカードのアドレスを判定する。その後、アルゴリズム中で、より若い世代内のデータオブジェクトを参照する、より古い世代内に位置する任意のデータオブジェクトのアドレスを決定するためにステップが実施される。
【００２２】
図１を再び参照すると、一実施形態において、ＣＰＵ１１５が世代別ＧＣ開始条件を検出すると、ＣＰＵ１１５は、通知をＧＰＵ１７０へ送信する。通知を受信することに応答して、ＧＰＵ１７０は、アドレスを演算することができる。これらのアドレスは、より若い世代のカードへのポインタ値を記憶している可能性がある、より古い世代のカードに対応する可能性がある。これらのアドレスは、ルートアドレス、またはカードルートアドレスと呼ぶことができる。
【００２３】
上記のルートアドレスの演算は、高度に並列可能なタスクの場合がある。ＧＰＵ１７０は、ＣＰＵよりも効率的に高度に並列可能なタスクを実施することができる。加えて、ＧＰＵ１７０によって実施される作業は、ＣＰＵ１１５が１つ以上のソフトウェアアプリケーションの実行を継続する間に実施することができる。したがって、ルートアドレスを取得するために使用される演算ステップの実行は、ＧＣの一時停止を全く発生させない場合がある。前処理ステップでＧＣの一時停止が排除されると、システム全体の性能を向上することができる。これらの前処理ステップの実行のためのＣＰＵ１１５とＧＰＵ１７０との間のプロトコルの詳細は、以下に詳細に記載する。
【００２４】
一実施形態において、ＧＰＵ１７０は、ビデオカード上に位置する場合がある。別の実施形態において、ＧＰＵ１７０は、マザーボード上に統合される場合がある。また別の実施形態において、処理ノード１１０の図示された機能は、単一の集積回路上に組み込まれる場合がある。そのような実施形態において、ＣＰＵ１１５およびＧＰＵ１７０は、異なる設計中心からの独自のコアにすることができる。また、ＣＰＵ１７０は、処理ノード１１０から、インターフェース１４０を介してオフチップのメモリアクセスを実施するのではなく、メモリコントローラ１２０を介して、ローカルメモリ１１４および１１８ならびにメインメモリの両方に直接アクセスすることができるようになってもよい。この実施形態は、ＧＰＵ１７０のメモリアクセスのレイテンシを低下することができ、すなわち、より高い性能にすることができる。
【００２５】
図１の処理ノード１１０の構成要素を引き続き参照すると、キャッシュサブシステム１１４および１１８は、データのブロックを記憶するように構成された高速のキャッシュメモリを備えることができる。キャッシュメモリサブシステム１１４は、それぞれのプロセッサコア１１２内部に統合される場合がある。代替として、キャッシュメモリサブシステム１１４は、必要に応じて、バックサイドキャッシュ構成またはインライン構成においてプロセッサコア１１４に連結される場合がある。さらにまた、キャッシュメモリサブシステム１１４は、キャッシュの階層として実装される場合がある。（階層内部で）プロセッサコア１１２により近似して位置するキャッシュは、所望される場合、プロセッサコア１１２内に統合される場合がある。一実施形態において、キャッシュメモリサブシステム１１４は各々、Ｌ２キャッシュ構造を表し、共有キャッシュサブシステム１１８は、Ｌ３キャッシュ構造を表す。キャッシュメモリサブシステム１１４および共有キャッシュメモリサブシステム１１８の両方は、対応するキャッシュコントローラに連結されたキャッシュメモリを含むことができる。
【００２６】
一般に、パケット処理ロジック１１６は、処理ノード１１０が連結されるリンク上で受信されたパケットを制御するように応答し、プロセッサコア１１２および／またはキャッシュメモリサブシステム１１４に応答して制御パケットを生成し、サービスするためにメモリコントローラ１２０によって選択されたトランザクションに応答して、プローブコマンドおよび応答パケットを生成し、インターフェースロジック１４０を通して、ノード１１０が他のノードに対して中間ノードである、パケットをルーティングするように構成される。インターフェースロジック１４０は、パケットを受信し、このパケットをパケット処理ロジック１１６によって使用される内部クロックに同期化するためのロジックを含むことができる。
【００２７】
図２を参照すると、汎用プロセスアドレス空間２００の一実施形態が示される。最新のコンピューティングシステムは、多数のプロセスの間で少量の物理メモリを共有するために、仮想メモリを使用する。アドレス空間２００は、連続した仮想アドレス空間であってもよく、仮想アドレスと物理アドレスとの間のマッピングが、物理メモリまたはディスク内の値２１０〜２５０の位置を決定する。マルチプロセッサシステム上のオペレーティングシステムは、例えば、処理ノード１１０のリソースを反復して使用することができ、ソフトウェアアプリケーションのためのメモリの領域を割り当てることができる。ソフトウェアアプリケーションがコンパイルされると、アプリケーションは、複数のプロセスを含む場合がある。そのような実施形態において、各プロセスは、メモリの画像、またはアプリケーション実行前の命令およびデータのインスタンス等、その独自のリソースを所有する場合がある。また、各プロセスは、コード、データ、ならびに可能性としてヒープおよびスタックのアドレスを決定するアドレス空間等のプロセス特定情報、スタックポインタ、汎用および浮動小数点レジスタ、プログラムカウンタ等のデータおよび制御レジスタ内の変数、さらにｓｔｄｉｎ、ｓｔｄｏｕｔ等のオペレーティングシステム記述子、ならびにプロセッサ所有者およびプロセスの権限セット等のセキュリティ属性を含む場合がある。
【００２８】
一般的に、所定のソフトウェアアプリケーションの場合、オペレーティングシステムのカーネルが、アプリケーションのアドレス空間２００を設定し、アプリケーションのコード２１０をメモリにロードし、プログラムのためにスタック２５０を設定し、アプリケーションコード２１０内部の所定の場所に分岐し、アプリケーションコード２１０の実行を開始する。いくつかの実施形態において、実行を開始する前に、コード２１０およびデータ２２０のすべてが物理メモリに記憶される必要はない。ソフトウェアアプリケーションが命令セットアーキテクチャ（ＩＳＡ）をどのように使用するかは、コンパイラと上位のレベルの言語との相互作用によって影響される。例えば、ソフトウェアアプリケーション開発の場合、変数をどのように割り当て、どのようにアドレスを決定するか、ならびに変数を割り当てるために必要なレジスタの数を把握することが必要である。一実施形態では、静的データ２２０、スタック２５０、およびヒープ２３０がデータ割り当てを決定する。
【００２９】
静的データ２２０は、グローバル変数および定数等、静的に宣言されるオブジェクトを割り当てるために使用される場合がある。これらのオブジェクトの大部分は配列である場合がある。スタック２５０は、現在関与している関数内のローカル変数およびパラメータ等、配列ではなく、スカラー変数を割り当てるために使用される場合がある。スタック２５０は、それぞれ、プロシージャ呼び出しまたは戻り時に、増大および縮小する場合がある。ヒープ２３０は、ポインタを用いてアクセスされる動的オブジェクトを割り当てるために使用される場合があり、一般的に、スカラー変数ではない。ヒープ２３０は、文字列／リスト演算中に一時文字列またはリストの内容を記憶することによって文字列およびリストの内容をコピーする頻度を削減するために使用される場合がある。ヒープは、関数呼び出しの戻りによって影響を受けない。
【００３０】
以下は、スタック２５０およびヒープ２３０の使用を例示する、ソースコード内のメソッドの簡単な例である。
【００３１】
2013521570.tif 000003
【００３２】
上記の例では、Ｓｔｕｄｅｎｔｓと呼ばれるクラスがあり、Ｓｔｕｄｅｎｔｓクラスは、２つのｐｕｂｌｉｃフィールド、ｎａｍｅおよびｓｃｏｒｅを含む。Ｓｔｕｄｅｎｔｓクラスは、Ｃｌａｓｓｒｏｏｍメソッドによってアクセスされる。Ｃｌａｓｓｒｏｏｍメソッド内部で、Ｓｔｕｄｅｎｔｓ型のｊｅｆｆというオブジェクトが作成される。オブジェクトのｎａｍｅおよびｓｃｏｒｅフィールドが初期化される。一実施形態では、このコード例を実行後、スタック２５０は、例えば、図２のエントリ２５２ｊ内にＣｌａｓｓｒｏｏｍメソッドの呼び出しを含む。オブジェクトｊｅｆｆのエントリは、図２のエントリ２５２ｋに含まれる場合がある。オブジェクトｊｅｆｆは、値をポイントしない場合があり、そうではなく、ヒープ２３０のオブジェクト２３２ｈを参照する場合がある。オブジェクト２３２ｈは、クラス、または参照型である、Ｓｔｕｄｅｎｔｓオブジェクトを記憶する場合がある。オブジェクト２３２ｈのフィールド２３４ａは、ｎａｍｅフィールド値を記憶する場合があり、フィールド２３４ｂは、ｓｃｏｒｅフィールド値を記憶する場合がある。
【００３３】
Ｃｌａｓｓｒｏｏｍメソッドが実行を終了した後、このエントリは実行中または実行予定であるコードに関する情報だけを含むので、スタック２５０はエントリ２５２ｊをポップすることができる。この例では、実行するものは何も残っておらず、アプリケーション全体の一部のみを表す場合があるので、スタック２５０は、ここで、エントリ２５２ｊではなく、エントリ２５２ｉをポイントするように調整されたスタックポインタを有することができる。一方、ヒープは、オブジェクト２３２ｈのフィールド２３４ａおよび２３４ｂ内にデータを依然として含むことができる。
【００３４】
その後、ガーベッジコレクションアルゴリズムは、ヒープ２３０から、参照されていない（未使用の）データをクリアするために、実行される場合がある。例えば、上記のＳｔｕｄｅｎｔｓクラスは、もはや使用されていないため、オブジェクト２３２ｈから削除される場合がある。一実施形態において、ガーベッジコレクションアルゴリズムは、システムメモリをスキャンすること、全ての到達可能なデータオブジェクトのマーキングすること（再帰的検索を必要とする場合がある）、使用可能または到達可能ではないと判定されたデータオブジェクトを削除すること、およびメモリ内の連続した位置を占有するようにデータオブジェクトを移動することの動作のうちの１つ以上を含む。この最後のステップは、圧縮と呼ばれる場合がある。
【００３５】
上記の例では使用されないが、図２において、オブジェクト２３２ｂは、ヒープ２３０内のオブジェクト２３２ｇのポインタによって参照される。未使用のデータをクリアするために、ガーベッジコレクションが実行されると、ガーベッジコレクションアルゴリズムによって、有用なデータがメモリ内に残る。いくつかの実施形態において、ガーベッジコレクションアルゴリズムは、後でアプリケーションが使用するために保存されることが必要である、データオブジェクトのリストを作成する場合がある。このリストの作成は、ルート、またはルートアドレスを用いて開始する場合がある。ルートアドレスは、静的データ２２０内の静的グローバルポインタ、スタック２５０内のポインタ、およびＣＰＵのメモリアドレスによってポイントされる、ヒープ２３０内の任意のデータオブジェクトに対応することができる。ＧＣアルゴリズムによる再帰的検索中、オブジェクト２３２ｇは、到達可能であると判定される場合がある。オブジェクト２３２ｂは、一例では、オブジェクト２３２ｇ内のポインタによって参照されているため、到達可能の場合がある。到達可能なオブジェクトは、ルートアドレスによって検索されるオブジェクト、または以前に到達可能であると判定されたオブジェクトによって参照されるオブジェクトとして定義することができる。
【００３６】
一実施形態において、ガーベッジコレクションをサイクルで実施する、ガーベッジコレクションアルゴリズムが利用される。サイクルは、コレクタが、ストレージを回収することが必要であると判定すると（または通知されると）開始する。例えば、ガーベッジコレクションは、システムのメモリ残量が少なくなると、起動される場合がある。ガーベッジコレクションアルゴリズムは、ガーベッジ、またはアプリケーションによって今後アクセスされることがない、または再び変化することがないオブジェクトによって使用されたメモリを回収しようと試みる。構文上のガーベッジ（可能性としてプログラムが到達することができないデータオブジェクト）と、意味論的ガーベッジ（プログラムが今後実際に再び使用することがないデータオブジェクト）とが区別される場合がある。メモリにアクセスするソフトウェアスレッドは、ミューテータと呼ばれる場合がある。非常に広範囲の異なるガーベッジコレクション技法が開発されており、使用されてもよい。
【００３７】
いくつかの事例では、ガーベッジコレクションシステムは一般に、過剰な一時停止時間の問題により、様々な程度まで影響を及ぼしている。この問題は、ガーベッジコレクションがリアルタイム、すなわち、１つ以上のプロセッサ上で稼動している他のライブプログラムの実行と同時に実施されると発生する。例えば、システムが複数のミューテータスレッドと、単一のガーベッジコレクションスレッドとを含むと想定する。ミューテータがマルチメディアアプリケーションに使用されている場合、これらのスレッドは、所定の速度でムービー等のアプリケーションを表示することを必要とする場合がある。ＧＣによる一時停止時間が感知されることが許されない、いくつかの重要なアプリケーションの例として、オンライン株取引、電子商取引のアプリケーション、ならびにムービーおよびビデオゲーム等のマルチメディアアプリケーションが挙げられる。
【００３８】
ここで図３を参照すると、区分されたメモリ３００の一実施形態が示される。世代別ガーベッジコレクション（ＧＣ）は、世代３６０ａ、３６０ｂ、３６０ｃ等にパーティショニングされていてもよい、メモリ内の割り当てられたヒープ２３０を利用する場合がある。多様な実施形態において、オペレーティングシステムまたは他のソフトウェアは、パーティショニングを実施し、世代３６０ａ、３６０ｂ、および３６０ｃのサイズを決定することができる。加えて、世代３６０ａ、３６０ｂ、および３６０ｃの各々は、サブ領域にパーティショニングされる場合がある。これらのサブ領域は、カードと呼ばれる場合がある。例えば、世代３６０ａは、カード３５０ａ、３５０ｂ、３５０ｆ等にパーティショニングされる場合がある。一実施形態において、各カード３５０ａ、３５０ｂ、および３５０ｆは、１２８バイト、４キロバイト（ＫＢ）の仮想ページ、または他のサイズ等、同一の固定サイズを有する。
【００３９】
一実施形態において、ヒープ２３０内のカード３５０ａ〜３５０ｂの各々は、１つ以上のデータオブジェクトを記憶する。例えば、カード３５０ａは、データオブジェクト３２０ａ、３２０ｇ等を記憶する。１つのカードが１つのデータオブジェクトのみを記憶する場合があるが、一般的に、１つのカードは複数のデータオブジェクトを記憶する。カードルートアドレス３８０ａ、３８０ｂ、および３８０ｆは、対応するカード３５０ａ、３５０ｂ、および３５０ｆを検索するために使用することができる。世代およびカードに対応するメタデータがメモリに記憶されてもよい。このメタデータは、世代３６０ａ、３６０ｂ、および３６０ｃを検索するために使用される、世代の基底アドレス３７０ａ、３７０ｂ、および３７０ｃを含むことができる。加えて、このメタデータは、エントリ３１２ａ、３１２ｂ、３１２ｊ、３１２ｋ等を含む、カードテーブル３１０等のデータ構造を含むことができる。一実施形態において、カードテーブル３１０は、メモリ内の各カードに対して１つのエントリを含む場合がある。別の実施形態において、カードテーブル３１０は、最も若い世代を除き、各世代内の各カードに対して１つのエントリを含む場合がある。そのような実施形態において、最も若い世代は、最も若い世代内の各カードがＧＣアルゴリズム中に無条件でスキャンされる場合があるので、スキップされる場合がある。別の実施形態において、カードテーブル３１０は、ヒープ内の各カードに対して１つのエントリを含む場合がある。そのような実施形態では、カードテーブル３１０が非常に大きくなる。
【００４０】
一実施形態において、エントリ３１２ａ、３１２ｂ、３１２ｊ、および３１２ｋの各々は、単一のビットを含む。エントリ３１２ａ、３１２ｂ、３１２ｊ、および３１２ｋの各々内の単一ビットは、ソフトウェアアプリケーションを実行する際にプロセッサコア１１２によって設定されてもよい。一実施形態において、そのような単一ビットは、対応するカード内に記憶された対応するデータオブジェクトが変更されると設定される場合がある。別の実施形態において、そのような単一ビットは、対応するデータオブジェクト内のポインタ値が、別の世代に記憶されたデータオブジェクトをポイントするように変更されると、設定される場合がある。例えば、データオブジェクト３２０ｇ内のポインタ値が、世代３６０ｂのカード３５０ｇ内に記憶されたデータオブジェクトをポイントするように変更された場合、エントリ３１２ａ内の対応する単一ビットが設定される場合がある。また別の実施形態において、そのような単一ビットは、データオブジェクト内のポインタ値が、最も若い世代内に記憶されたデータオブジェクトをポイントするように変更されると、設定される場合がある。また別の実施形態において、そのような単一ビットは、データオブジェクト内のポインタ値が、ＧＣアルゴリズムの次の実行中に収集されると既定された複数の最も若い世代のうちの１つに記憶されたデータオブジェクトをポイントするように変更されると、設定される場合がある。カードテーブル３１０内の表示をマーキングするための他の条件も可能であり考えられる。
【００４１】
ストアチェック動作は、表示をマーキングするかどうかを判定するために、上記のステップを実施する。ストアチェック動作はまた、書き込みバリア動作とも呼ばれる場合がある。ストアチェック動作は、ストア動作がアプリケーション実行中にヒープにアクセスするときに対応する単一ビットを設定するかどうかを判定することができる。ストア動作は、ＧＣアルゴリズム中に後で使用されるポインタ値を作成することができる。いくつかのストア動作では、コンパイラは、ストアチェックが全く必要ないことを静的に認識することができる。例えば、アプリケーションが整数を記憶し、整数がヒープに割り当てられたオブジェクトではなく、直近値として実装される場合、ストアチェック動作は全く必要ない場合がある。しかしながら、一般的な事例では、ストアチェック動作は、ヒープにアクセスする各ストア動作に対して実行されてもよい。ストアは、アプリケーションで頻繁に発生する場合があるので、ストアチェック動作の効率的な実装は必須である場合がある。
【００４２】
オペレーティングシステムまたはプロセッサコア１１２に対応する他のソフトウェアは、ＧＣ開始条件を検出するように構成することができる。一実施形態において、ＧＣ開始条件は、最も若いカードが既定の閾値よりも少ない空き空間を有するという条件を含む。別の実施形態において、ＧＣ開始条件は、最も若い世代が既定の閾値よりも少ない空き空間を有するという条件を含む。また別の実施形態において、ＧＣ開始条件は、ヒープ全体が既定の閾値よりも少ない空き空間を有するという条件を含む。他の条件も可能であり考えられる。ＧＣ開始条件が検出されると、カードテーブル３１０は、マーキングされた表示または設定ビットを検出するためにスキャンすることができる。各設定ビットに対して、カードルートアドレスを演算することができる。
【００４３】
カードルートアドレスを演算するために、一実施形態では、カードテーブル３１０内の対応するエントリの位置が使用される場合がある。カードのサイズは、カードテーブル３１０内の対応する設定ビットのエントリ位置によって乗算される場合がある。得られた積は、世代の基底アドレスに加算されて、カードルートアドレスを決定することができる。例えば、カードは、１２８バイトのサイズを有する場合がある。カードテーブル３１０内のエントリ３１２ｊは、設定ビットを記憶する場合がある。エントリ３１２ｊは、カードテーブル３１０内の２０番目のビットの場合がある。２０のバイナリ値（例えば、ｂ１０１００）は、７つ位置を左方向へシフトされる場合がある。カードが１２８バイトのサイズ、または２７バイト境界上に整合された２７バイトを有するので、７つ位置をシフトすることが選択される。得られた積は、世代の基底アドレス３７０ａに加算することができる。
【００４４】
カードルートアドレス３８０を決定するための上記の動作は、並列化することができる動作である。したがって、単一命令複数データ（ＳＩＭＤ）コア等の並列アーキテクチャを備えるプロセッサを利用することが利点となる場合がある。ＳＩＭＤコアの例として、グラフィックス処理装置（ＧＰＵ）、およびデジタル信号処理（ＤＳＰ）コアが挙げられる。一実施形態において、プロセッサコア１１２がＧＣ開始条件を検出すると、コア１１２は、通知をＳＩＭＤコア１７２へ送信する場合がある。一実施形態において、通知は、カードテーブル３１０の位置に対応するメモリ内のアドレス、および１つ以上の世代の基底アドレスを含む場合がある。プロセッサコア１１２は、ＳＩＭＤコア１７２がカードルートアドレスを演算する間も１つ以上のソフトウェアアプリケーションの実行を継続することができ、それによって、ＧＣの一時停止時間を削減する。
【００４５】
ＣＰＵ、ＧＰＵ、ＤＳＰ等内部のコア１７２は、カードテーブル３１０内のマーキングされた表示および世代の基底アドレスの両方に基づいて、２つ以上のカードルートアドレスを同時に演算することができる。一実施形態において、コア１７２は、演算されたカードルートアドレスをプロセッサコア１１２へ直接送信することができる。別の実施形態では、コア１７２は、メモリ内のアドレスをプロセッサコア１１２へ送信することができ、アドレスは、演算されたカードルートアドレスを記憶する場所に対応する。プロセッサコア１１２が、カードルートアドレス値へのアクセスを取得すると、プロセッサコア１１２は、既定のＧＣアルゴリズムのステップの実行を開始することができる。例えば、プロセッサコア１１２は、演算されたカードルートアドレスに対応する変更された、またはダーティカード内の各データオブジェクトをスキャンする場合がある。プロセッサコア１１２は、少なくとも最も若い世代の到達可能なデータオブジェクトを判定するために、上述のようにこれらのデータオブジェクト内のポインタ値を追跡することができる。
【００４６】
ここで図４を参照すると、個別の特殊処理コアを用いてガーベッジコレクションを実施するための方法４００の一実施例が示される。説明を目的として、この実施形態および後述する方法の以降の実施形態内のステップはシーケンス順に示される。しかしながら、いくつかのステップは示されているのとは異なる順序で発生する場合、いくつかのステップは同時に実装される場合、いくつかのステップは他のステップと組み合わせる場合、いくつかのステップは別の実施形態にはない場合がある。
【００４７】
ブロック４０２で、オペレーティングシステムまたは他のソフトウェアは、ソフトウェアアプリケーションのためにアドレス空間を割り当てることができる。ステップ４０４で、割り当てられたヒープは、２つ以上の世代にパーティショニングすることができる。一実施形態において、世代は、対応するデータオブジェクトの年齢に対応する。加えて、各世代は、サブ領域、またはカードにパーティショニングすることができる。
【００４８】
ブロック４０６では、１つ以上のソフトウェアアプリケーションの命令が実行されている。ブロック４１０では、実行中、データオブジェクトはヒープに割り当てることができる。ログは、各割り当てられたデータオブジェクトの対応する情報を記憶するメモリ内に保持することができる。例えば、ログは、各割り当てられたデータオブジェクトに対するエントリを含む場合があり、エントリは、データオブジェクトの名前、アドレス、サイズ等を含む。一実施形態において、ソフトウェアアプリケーションを実行する汎用プロセッサがログを保持する場合がある。加えて、実行中、割り当てられたデータオブジェクト内に記憶された値を変更することができる。
【００４９】
ブロック４１２で、実行中に、割り当てられたデータオブジェクトに対する変更が既定の条件を満たすかどうかを判定することができる。一実施形態において、既定条件は、旧世代のデータオブジェクト内に記憶されたポインタ値が、最も若い世代に記憶されたデータオブジェクトをポイントするように変更されることを含む場合がある。そのような実施形態において、新しいポインタ値と既定のアドレス範囲との間の比較が実施される場合がある。アドレス範囲は、図３に示される世代３６０ａ、３６０ｂ、および３６０ｃ等の世代に対応する場合がある。一実施形態において、この比較は、各ストア動作で、ソフトウェアアプリケーションの実行中にヒープに対して実施される場合がある。この比較は、ストアチェック動作の一部の場合がある。カードマーキングに関する上述のような他の所定の条件も可能であり考えられる。
【００５０】
割り当てられたデータオブジェクトに対する変更が既定の条件を満たす場合（条件ブロック４１４）、ブロック４１６で、マーキングが実施される。一実施形態において、ストアチェック動作は、ヒープ内のデータオブジェクトに対する変更がマーキングの条件を満たすかの判定を実施する。ストアチェック動作は、新しいポインタ値と、ヒープ内の各世代のアドレス範囲との間の比較を少なくとも使用することができる。一実施形態において、対応する表示のマーキングは、カードテーブル３１０等のデータ構造に対応するビットを設定することを含む。一実施形態において、ストアチェック動作は、新しいポインタ値と、ヒープ内の各カードのアドレス範囲との間の比較を使用することもできる。これらの比較は、世代のアドレス範囲に対する比較と同時に実施されてもよい。
【００５１】
条件ブロック４０８において、ガーベッジコレクションを起動するかの判定を行うことができる。使用可能な自由なメモリの量（例えば、何らかの閾値に比較）、最も若い世代内で使用可能な自由なメモリの量、直近のガーベッジコレクション以降経過した時間の所定量等、このガーベッジコレクションをいつ開始すべきかを判定するために、異なる要件を使用することができる。ガーベッジコレクションを起動しないと判定された場合（条件ブロック４０８）、方法４００の制御フローはブロック４０６に戻る。ブロック４０６で、アプリケーションの命令の実行が継続する。ガーベッジコレクションを起動すると判定した場合（条件ブロック４０８）、ブロック４２０で、通知を特殊処理装置（ＳＰＵ）へ送信することができる。通知は、ＳＰＵが、図３に示されるアドレス３８０ａ、３８０ｂ、および３８０ｆ等、カードルートアドレスの演算を開始することを示すことができる。カードルートアドレスの演算は、直近のガーベッジコレクション以降、アプリケーション実行中に実施されたメモリ割り当ておよび変更更新に基づくことができる。例えば、ブロック４１６で発生したそれぞれマーキングされた表示に対して、１つのカードルートアドレスが演算される場合がある。一実施形態において、マーキングされた表示は、カードテーブル３１０内の設定ビットに対応する。
【００５２】
ブロック４２２で、ＳＰＵは、カードルートアドレスを決定するために演算を実施することができる。一実施形態において、演算は、前述のように、対応する基底アドレスに対するシフトおよび加算演算を含むことができる。その後、ＳＰＵは、カードルートアドレスをＣＰＵへ送信することができる。代替として、ＳＰＵは、カードルートアドレスを記憶するメモリ内の場所に対応するアドレスをＣＰＵへ送信することができる。ブロック４２４において、ＣＰＵは、演算されたカードルートアドレスを利用するＧＣアルゴリズムのステップを実施することができる。
【００５３】
ここで図５を参照すると、ガーベッジコレクションアルゴリズムで使用される、カードルートアドレスを演算するための方法５００の一実施形態が示される。方法４００と同様に、説明を目的として、この実施形態および後述する方法の以降の実施形態内のステップはシーケンス順に示される。しかしながら、いくつかのステップは、示されているのとは異なる順序で発生する場合、いくつかのステップは同時に実装される場合、いくつかのステップは他のステップと組み合わせる場合、いくつかのステップは別の実施形態にはない場合がある。
【００５４】
ブロック５０２で、ＧＣアルゴリズムのためにカードルートアドレスを演算するように、通知をＣＰＵからＳＰＵへ送信することができる。一実施形態において、ＣＰＵは、図３に示される世代基底アドレス３７０ａ、３７０ｂ、および３７０ｃ等の１つ以上の世代基底アドレスをＳＰＵへ送信することができる。加えて、ＣＰＵは、カードテーブル３１０等のデータ構造のアドレスをＳＰＵへ送信することができる。このデータ構造は、直近のガーベッジコレクション以降、アプリケーション実行中の任意の条件を満たす記憶された参照の表示を記憶することができる。ブロック５０４で、ＳＰＵは、カードテーブル３１０等、データ構造内に記憶された表示をスキャンするために、そのＳＩＭＤコアの並列アーキテクチャを利用することができる。このスキャン動作は、ヒープ内のどのサブ領域またはカードが、条件を満たす世代間参照を記憶しているかを判定することができる。ブロック５０６で、ＳＰＵは、複数のカードルートアドレスを同時に演算するために、そのＳＩＭＤコアの並列アーキテクチャを利用することができる。これらの演算は、ＣＰＵによるソフトウェアアプリケーションの実行中に一切停止を発生させることなく実施することができる。したがって、カードルートアドレスは、ガーベッジコレクションの一時停止時間を発生させずに、決定することができる。
【００５５】
ブロック５０８で、ＣＰＵは、ＳＰＵからカードルートアドレスを受信することができる。代替として、ＣＰＵは、カードルートアドレスを記憶するメモリ内の場所に対応する、１つ以上のアドレスを受信することができる。一実施形態において、ＣＰＵは、方法４００のブロック４１０で作成され、保持されたログを更新する。このログは、アプリケーション実行中にヒープ内にそれぞれ割り当てられたデータオブジェクトの対応する情報を記憶する。このログは、演算されたカードルートアドレスで更新される場合がある。ブロック５１０で、ＣＰＵは、ログ内に記憶された情報を利用して、既定のＧＣアルゴリズムのステップを実施することができる。
【００５６】
ガーベッジコレクションアルゴリズムの前処理ステップを実施するために、ＳＩＭＤコアの並列アーキテクチャを利用することが上記で説明された。一実施形態において、前処理ステップは、カードテーブルをスキャンすることと、対応するカードルートアドレスを演算することとを含む。ここで、汎用コアと並列アーキテクチャＳＩＭＤコアとの間の違いに関して詳細に説明する。最初に、汎用コアを説明する。図６は、順不同の実行を実施する汎用プロセッサコア６００の一実施形態を例示する。命令キャッシュ（ｉ−キャッシュ）および対応するトランスレーション・ルックアサイド・バッファ（ＴＬＢ）６０２は、命令にアクセスするために、ソフトウェアアプリケーションの命令およびアドレスを記憶することができる。命令フェッチ装置（ＩＦＵ）６０４は、ｉキャッシュが不足していない場合、クロックサイクルあたりの複数の命令をｉ−キャッシュ６０２からフェッチすることができる。ＩＦＵ６０４は、ｉＴＬＢ内のアドレスに比較される場合がある、ｉ−キャッシュ６０２でフェッチする次の命令のアドレスに対するポインタを保持する、プログラムカウンタを含むことができる。ＩＦＵ６０４はまた、後のパイプライン段階の実際の結果を判定する実行装置の前に、条件付命令の結果を予想するための分岐予測装置も含むことができる。
【００５７】
デコーダ装置６０６は、複数のフェッチされた命令のオプコード（Ｏｐｃｏｄｅ）を解読し、リザベーションステーション６０８内、およびロード／ストア装置６１４内で、並べ替えバッファ６１８等の順次リタイヤキュー内にエントリを割り当てることができる。リザベーションステーション６０８のエントリの割り当ては、ディスパッチとみなされる。リザベーションステーション６０８は、命令がそれぞれのオペランドが使用可能になるまで待機する、命令キューとして機能することができる。オペランドが使用可能で、ハードウェアリソースも使用可能であると、リザベーションステーション６０８から、整数および浮動小数点機能装置６１０またはロード／ストア装置６１４に対して、順不同に命令が発行される場合がある。ロードおよび記憶動作等のメモリアクセスは、ロード／ストア装置６１４に対して発行される。機能装置６１０は、加算、引算、乗算、除算、および平方根等の演算計算のための算術論理装置（ＡＬＵ）を含むことができる。ロジックは、条件付命令の結果を決定するために含まれる場合がある。ロード／ストア装置６１４は、メモリアクセス命令を実行するためのキューおよびロジックを含むことができる。また、ロード／ストア装置６１４には、ロード命令が、正しい最も若い記憶命令から転送されたデータを受信することを保証するために、検証ロジックが存在する場合がある。
【００５８】
ロード／ストア装置６１４は、メモリアクセスリクエスト６２２を、チップ上の１つ以上のレベルのデータキャッシュ（ｄキャッシュ）６１６へ送信することができる。各レベルのキャッシュは、メモリリクエスト６２２とのアドレス比較のために、それ独自のＴＬＢを有することができる。各レベルのキャッシュ６１６は、シリアルまたは並列様式で検索することができる。リクエストされたメモリラインがキャッシュ６１６の中に検出されない場合、メモリリクエスト６２２は、システムメモリオフチップ内のメモリラインにアクセスするために、メモリコントローラへ送信される。
【００５９】
機能装置６１０およびロード／ストア装置６１４からの結果は、共通のデータバス６１２上に提示することができる。結果は、並べ替えバッファ６１８に送信されてもよい。一実施形態において、並べ替えバッファ６１８は、プログラム順に従って命令の順次リタイヤを保証する、先入れ先出し（ＦＩＦＯ）の場合がある。ここで、その結果を受信する命令は、リタイヤすることがマーキングされる。命令がキューの先頭である場合、その結果がレジスタファイル６２０へ送信されている可能性がある。レジスタファイル６２０は、プロセッサコア６００の汎用レジスタのアーキテクチャ状態を保つことができる。次いで、並べ替えバッファ内の命令は、順次リタイヤすることができ、そのキューの先頭のポインタは、プログラム順の次の命令になるように調整することができる。
【００６０】
共通データバス６１２上の結果は、結果を待機している命令のオペランドに値を転送するために、リザベーションステーション６０８へ送信されてもよい。例えば、算術命令は、その前の算術命令の結果に依存するオペランドを有する場合、またはロード命令は、機能装置６１０内のアドレス生成装置（ＡＧＵ）によって計算されたアドレスを必要とする場合がある。これらの待機している命令がそのオペランドの値を有し、ハードウェアリソースが命令を実行するために使用可能である場合、リザベーションステーション６０８から、機能装置６１０またはロード／ストア装置６１４内の適切なリソースに対して、順不同に発行されてもよい。
【００６１】
コミットされない、またはリタイヤされていない、メモリアクセス命令は、ロード／ストア装置内にエントリを有する。インフライト、またはコミットされていない、ロード命令に対して最も若いコミットされていないより古い記憶命令から転送されたデータ値は、共通のデータバス１１２上に配置される、または単に、ロード／ストア装置６１４内部のロードバッファ内の適切なエントリへルーティングされる場合がある。コア６００等の汎用プロセッサコアは、単一命令複数データ（ＳＩＭＤ）アプリケーション等の高度に並列なアルゴリズムの命令を実行することができるが、ＳＩＭＤコア等の並列アーキテクチャを備える特殊処理コアよりも効率性が低い場合があることに注意されたい。並列アーキテクチャを備える特殊処理コアの例として、デジタル信号プロセッサ（ＤＳＰ）、グラフィックス処理装置（ＧＰＵ）等が挙げられる。
【００６２】
ここで図７を参照すると、グラフィックスプロセッサコア７００の一実施例のブロック図が示される。コア７００は、ＳＩＭＤコア内の並列アーキテクチャの一例である。ＤＳＰのコア等、他の例が可能であり、考案される。コア７００は、代替実施形態を派生するために、当業者によって変更されてもよい。この実施形態のブロックは、特定のレイアウトで示される。しかしながら、コア７００のレイアウトは、示されるものと異なる場合がある。他の実施形態において、いくつかのブロックは統合される場合、いくつかのブロックは、別のブロック内または個別の独立したブロック内に内部関数および回路を有する場合、いくつかの関数および回路は別の集積回路内に位置する場合がある。
【００６３】
示される実施形態において、コマンドおよびデータフェッチ装置７１０は、図１のコア１１２等、プロセッサコア上のグラフィックスドライバから、浮動小数点動作のための描画コマンドストリーム、状態情報、および形状データを受信することができる。いくつかの実施形態では、この情報を直接提供するのではなく、プロセッサコアは、この情報が記憶される、メモリ等のメモリ内の場所への参照を提供する場合がある。したがって、装置７１０は、特定の場所から情報を受信する。
【００６４】
描画コマンドストリーム、状態情報、および図形データは、シーンの形状、光、影、テクスチャ、運動、および／またはカメラパラメータを含む、所望の描画された画像を定義するために使用することができる。一実施形態において、形状データは、シーンに存在することができる、オブジェクト（例えば、机、木、人、または動物）のいくつかの定義を含む。オブジェクトをモデル化するためにプリミティブ（例えば、点、線、三角形および／または他の多角形）群が使用されてもよい。プリミティブは、これらの頂点への参照によって定義されてもよい。各頂点に対して、位置は、オブジェクト座標系内で指定することができ、モデル化されているオブジェクトに相対的な頂点の位置を表す。位置に加えて、各頂点は、それに関連する多様な他の属性を有することができる。他の頂点の属性の例として、頂点およびその関連の形状プリミティブの色、テクスチャ、透明度、光、影、およびアニメーション等、品質を判定するために使用されるスカラーまたはベクトル属性を挙げることができる。
【００６５】
シーン内のオブジェクトの管理は、状態管理オーバーヘッドを含むことができ、このオーバーヘッドは、作業が小さいバッチにグループ化される場合、増加する可能性がある。一実施形態において、装置７１０は、ＣＰＵ１１５等のホストＣＰＵから、グラフィックスドライバからの作業をオフロードする、プロセッサの場合がある。一般的に、グラフィックスドライバは、この管理のための作業を実施するが、次いで、処理装置１１５がこの作業を負担する。したがって、装置７１０の処理能力を強化することによって、グラフィックスドライバ、そして最終的に処理装置１１５のオーバーヘッド動作を軽減することができる。
【００６６】
次に、入力データアセンブラ７２０は、処理のためのデータを準備する。アセンブラ７２０によって実施される機能の３つの例として、頂点シェーダのための頂点アセンブリ、形状シェーダのための形状アセンブリ、ならびにピクセルシェーダのためのスキャン変換および補間を挙げることができる。各関数は、スレッドをディスパッチ装置７３０へ提出することができる。
【００６７】
一実施形態において、ディスパッチ装置７３０は、受信された作業負荷をスレッドに分割し、スレッドを、１つ以上のストリームコア７４２を含む、シェーダ配列７４０、および１つ以上のテクスチャ装置７５２を含む、機能装置７５０の間で最適に分散することができる。ディスパッチ装置７３０は、コア７４２内部のいくつかのストリーム処理装置７４４のアイドルの時期を決定し、これらに新しいタスクを割り当てる。
【００６８】
ストリーム処理アプリケーションは、適時および応答様式で大量のデータストリームを処理するという必要性によって特徴付けられる。そのようなアプリケーションは、ＧＰＵ上の浮動小数点装置等、複数の演算装置を使用する可能性があるが、これらの装置の間での割り当て、同期化、または通信を明示的に管理しない。ストリーム処理は、実施される可能性がある並列演算を制限することによって、並列ソフトウェアおよびハードウェアを簡素化することができる。所定のデータのセットである、ストリームは、ストリーム内の各要素に適用される一連の演算を有する場合がある。１つの演算がストリーム内の全ての要素に適用される、均一ストリーミングが典型的である。演算は通常パイプラインされ、ローカルのオンチップメモリが再使用されて、外部のメモリ大域幅を抑制する。
【００６９】
ストリーム抽象化はデータ依存性を明らかにし、したがって、コンパイラツールは、オンチップ管理タスクを完全に自動化かつ最適化することができる。ストリーム処理ハードウェアは、例えば、依存性が認識されると、実行時に直接メモリアクセス（ＤＭＡ）を起動するために、スコアボーディングを使用することができる。手動のＤＭＡ管理を排除することによって、ソフトウェアの複雑度を軽減し、ハードウェアキャッシュを排除することによって、算術論理装置（ＡＬＵ）等の演算装置専用ではない、ダイ領域の量を削減する。
【００７０】
ストリーム処理は、従来のデジタル信号処理（ＤＳＰ）またはＧＰＵタイプのアプリケーションで良好に機能するデータ中心モデルによって駆動される。ストリーム処理は、データベース等、無作為のデータアクセスが多い汎用処理には最適ではない。
【００７１】
一実施形態において、各ストリームコア７４２は、ＳＩＭＤコアであり、複数のストリーム処理装置（ＳＰＵ）７４４を含む。各ＳＰＵ７４４は、複数のＡＬＵを含むことができ、従って、シェーダ配列７４０は、大量の演算能力を有することができる。シェーダ配列７４０は、提供された状態情報によって選択されているプログラムを用いて、頂点データ上で頂点および／または形状シェーダプログラムを実行することができる。シェーダプログラムは、広範囲の頂点および他のデータ上で算術および論理演算を使用するアルゴリズムを実装することができ、プログラムは、条件付または分岐実行パス、ならびに直接および間接メモリアクセスを含む可能性がある。使用されるシェーダプログラムは、図１に示されるシステムメモリまたはバッファ１７４内に記憶される場合がある。シェーダプログラムは、当技術分野で周知の適切な描画コマンドおよび状態情報を介して、シェーダ配列７４０に対して識別される場合がある。
【００７２】
機能装置７５０は、視覚効果のためのピクセルシェーダプログラムの実行のために１つ以上のテクスチャ装置７５２を含む。一実施形態において、テクスチャ装置７５２は、ストリームコア７４２に連携しているので、シェーダ能力をさらに増大させることは、テクスチャ能力をさらに増大することに等しい。テクスチャ装置７５２は、プログラム実行中のデータストレージのためにキャッシュメモリサブシステム７５４を利用することができる。
【００７３】
図８を参照すると、コンピューティングシステム８００の一実施形態が示される。図１の回路部分に対応する回路部分は同じ番号で示される。コンピューティングシステム８００は、複数の処理ノード１１０ａ〜１１０ｄを含む。図８には４つのノードが示されるが、他の実施形態は、各々１つ以上のプロセッサコアを備える、異なる数のノードを含むことができる。本明細書に使用される場合、参照番号の次に文字が続いて参照される要素は、総称して、単独の数字によって参照される場合がある。例えば、処理ノード１１０ａ〜１１０ｄは、総称して、処理ノード１１０、またはノード１１０として参照される場合がある。各ノード１１０は、それぞれのメモリコントローラ１２０を介して、それぞれのメモリ１３０に連結されてもよい。加えて、各処理ノード１１０は、処理ノード１１０の他のノードと通信するために使用されるインターフェースロジック１４０を含むことができる。例えば、処理ノード１１０ａは、処理ノード１１０ｂおよび１１０ｃと通信するためのインターフェースロジック１４０ａを含む。同様に、処理ノード１１０ｂは、処理ノード１１０ａおよび１１０ｄと通信するためのインターフェースロジック１４０ｂを含む等となる。
【００７４】
図８の実施形態において、処理ノード１１０ｄは、インターフェースロジック１４０ｄを介して、入出力（Ｉ／Ｏ）デバイス１６０ａと通信するために連結され、Ｉ／Ｏデバイス１６０ａはさらに、第２のＩ／Ｏデバイス１６０ｂに連結される。他の処理ノードは、同様の様式で他のＩ／Ｏデバイスと通信することができる。代替として、処理ノードは、Ｉ／Ｏバスに連結される、Ｉ／Ｏブリッジと通信してもよい。
【００７５】
コンピューティングシステム８００は、ノード間通信のためにパケットベースのリンクを実装することができる。図示された実施形態において、リンクは、単一方向ラインの組として実装される。（例えば、ライン１５０ａは、処理ノード１１０ａから処理ノード１１０ｂへパケットを送信するために使用され、ライン１５０ｂは、処理ノード１１０ｂから処理ノード１１０ａへパケットを送信するために使用される）。他の組のライン１５０ｃ〜１５０ｈは、図８に示される他の処理ノード間でパケットを送信するために使用される。リンクは、処理ノード間の通信のためにキャッシュコヒーレント様式で、またはＩ／Ｏデバイス１６０ａ〜１６０ｂ（および所望に応じて追加のＩ／Ｏデバイス）間のデイジーチェーン構造として非コヒーレント様式で動作することができる。ある処理ノード１１０から別の処理ノードへ送信されるパケットは、１つ以上の中間ノードを通過することに注意されたい。例えば、処理ノード１１０ａによって、処理ノード１１０ｄへ送信されるパケットは、図８に示されるように、処理ノード１１０ｂまたは処理ノード１１０ｃのいずれかを通過する場合がある。任意の好適なルーティングアルゴリズムを使用することができる。コンピューティングシステム８００の他の実施形態は、図８に示される実施形態よりも多い、または少ない処理ノードを含むことができる。加えて、各処理ノードが、ポイントツーポイントネットワークを通じて、それぞれ他の処理ノードに連結されるという、他の実施形態が可能である。図示されたメモリコントローラおよびインターフェースロジックに加えて、各処理ノード１１０は、図１に示され前述したように、１つ以上のプロセッサと、関連キャッシュとを含むことができる。
【００７６】
メモリ１３０は、任意の好適な記憶装置を備えることができる。例えば、メモリ１３０は、１つ以上のＲＡＭＢＵＳ動的ランダムアクセスメモリ（ＤＲＡＭ）、同期ＤＲＡＭ（ＳＤＲＡＭ）、ＤＲＡＭ、静的ＲＡＭ等を備えることができる。コンピューティングシステム８００のアドレス空間は、メモリ１３０の間で分割される。各処理ノード１１０は、どのアドレスがどのメモリ１３０にマップされるか、したがって、特定のアドレスに対するメモリリクエストが、どの処理ノード１１０に対してルーティングされるべきかを決定するために使用されるメモリマップを含むことができる。一実施形態において、コンピューティングシステム８００内のアドレスに対するコヒーレンシポイントは、アドレスに対応するバイトを記憶するメモリに連結されたメモリコントローラ１２０である。メモリコントローラ１２０は、メモリ１３０にインターフェースするための制御回路を備えることができる。加えて、メモリコントローラ１２０は、メモリリクエストをキューするためのリクエストキューを含むことができる。
【００７７】
一般に、インターフェースロジック１４０は、リンクからパケットを受信するため、およびリンク上で送信されるパケットをバッファするためのバッファを備えることができる。コンピューティングシステム８００は、パケットを送信するために任意の好適なフロー制御機構を採用することができる。Ｉ／Ｏデバイス１６０は、任意の所望の周辺機器の例示である。例えば、Ｉ／Ｏデバイス１６０は、ネットワークインターフェースカード、ビデオアクセラレータ、オーディオカード、ハードまたはフロッピー（登録商標）ディスクドライブまたはドライブコントローラ、スモールコンピュータシステムインターフェース（ＳＣＳＩ）アダプタおよび電話カード、モデム、サウンドカード、ならびに汎用インターフェースバス（ＧＰＩＢ）またはフィールドバスインターフェースカード等の多様なデータ取得カードを備えることができる。
【００７８】
上記のように、各処理ノード１１０は、図１に示し、前述したように、１つ以上のプロセッサと、関連キャッシュとを含むことができる。各ノード１１０は、１つ以上の汎用プロセッサコア１１２を備えることができる。加えて、処理ノード１１０は、単一命令複数データ（ＳＩＭＤ）コア等の並列アーキテクチャを備える特殊プロセッサコア１７２を備えることができる。プロセッサコア１１２は、上述のＧＣアルゴリズムのステップを実行する前に、ルートアドレスを演算するためにＳＩＭＤコア１７２を利用することができる。代替として、例えば、ＳＩＭＤコア１７２のない、処理ノード１１０ａのプロセッサコア１１２は、ＳＩＭＤコア１７２を確かに備える、ノード１１０ｂ等の別のノードのＳＩＭＤコア１７２を利用することができる。そのような実施形態において、ノード１１０ａ内のプロセッサコア１１２が、ＧＣ開始条件が満たされたことを検出すると、コア１１２は、別のノード１１０ｂ内のＳＩＭＤコア１７２へ、ルートアドレスを演算するように通知を送信することができる。通知は、任意の選択されたノード間通信に含まれてもよい。
【００７９】
上記の実施形態は、ソフトウェアを含む場合があることに注意されたい。そのような実施形態において、本方法および／機構を実装するプログラム命令は、コンピュータ可読媒体上で伝達または記憶される場合がある。プログラム命令を記憶するように構成される多数の種類の媒体が使用可能であり、ハードディスク、フロッピー（登録商標）ディスク、ＣＤ−ＲＯＭ、ＤＶＤ、フラッシュメモリ、プログラム可能ＲＯＭ（ＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、および多様な他の形式の揮発性または不揮発性ストレージが挙げられる。
【００８０】
上記の実施形態はかなりの詳細にわたり記載したが、上記の開示が完全に理解されると、当業者には多数の変形および変更が明らかとなるであろう。以下の請求項は、そのような変形および変更全てに及ぶと解釈されることを目的する。
【図１】
2013521570.tif 000004
【図２】
2013521570.tif 000005
【図３】
2013521570.tif 000006
【図４】
2013521570.tif 000007
【図５】
2013521570.tif 000008
【図６】
2013521570.tif 000009
【図７】
2013521570.tif 000010
【図８】
2013521570.tif 000011
【手続補正書】
【提出日】平成24年11月15日(2012.11.15)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
処理ノードであって、
汎用中央処理装置（ＣＰＵ）と、
特殊処理装置（ＳＰＵ）と、
メモリと、を備え、
前記ＣＰＵは、前記メモリの一部に記憶されたデータオブジェクトが変更されたことを検出することに応答して、前記一部に対応する表示を記憶し、ガーベッジコレクション開始条件が満たされたことを検出することに応答して、通知を前記ＳＰＵへ送信するように構成され、
前記通知は、前記一部に対応する前記メモリの領域の前記記憶された表示および基底アドレスを含み、
前記ＣＰＵから前記通知を受信することに応答して、前記ＳＰＵは、各ルートアドレスが記憶された表示に対応する、複数のルートアドレスを演算し、１つ以上の既定の収集可能領域内の到達可能なデータオブジェクトを識別するために、ガーベッジコレクションアルゴリズムによって使用される、前記演算されたルートアドレスを前記ＣＰＵへ送信するように構成され、前記１つ以上の既定の収集可能領域は、前記複数の領域のうちの最も若い領域である、処理ノード。
【請求項２】
前記ＣＰＵは、前記メモリを、各領域が複数のサブ領域を含み、前記一部が、前記サブ領域のうちの１つに対応する、複数の領域に分割するようにさらに構成される、請求項１に記載の処理ノード。
【請求項３】
前記ＣＰＵは、前記複数のサブ領域のうちの１つのサブ領域内に記憶されたデータオブジェクトが、前記１つ以上の既定の収集可能領域のうちの１つをポイントするポインタ値を含むことを検出することに応答して、前記サブ領域に対応する表示を記憶するようにさらに構成される、請求項１に記載の処理ノード。
【請求項４】
前記ＳＰＵは、２つ以上の対応するサブ領域を検索するために、２つ以上の記憶された表示を並列読み出しし、前記２つ以上の検索されたサブ領域の各々に対して、対応する基底アドレスに基づいて、１つのルートアドレスを並列演算するようにさらに構成される、請求項１に記載の処理ノード。
【請求項５】
前記ＳＰＵは、単一命令複数データ（ＳＩＭＤ）並列アーキテクチャを備える、請求項４に記載の処理ノード。
【請求項６】
前記ＳＰＵは、前記ＣＰＵの実行を停止する一時停止を発生させずに、前記複数のルートアドレスを演算する、請求項４に記載の処理ノード。
【請求項７】
ガーベッジコレクションのための方法であって、
汎用中央処理装置（ＣＰＵ）が、メモリの一部に記憶されたデータオブジェクトが変更されたことを検出することに応答して、前記一部に対応する表示を記憶することと、
ガーベッジコレクション開始条件が満たされたことを検出することに応答して、前記一部に対応する前記メモリの領域の前記記憶された表示および基底アドレスを含む通知を前記ＣＰＵから特殊処理装置（ＳＰＵ）へ送信することと、
前記ＳＰＵが、各ルートアドレスが記憶された表示に対応する、複数のルートアドレスを演算し、前記ＳＰＵが、１つ以上の既定の収集可能領域内の到達可能なデータオブジェクトを識別するために、ガーベッジコレクションアルゴリズムによって使用される、前記演算されたルートアドレスを前記ＣＰＵへ送信することと、を含み、
前記１つ以上の既定の収集可能領域は、前記複数の領域のうちの最も若い領域である、方法。
【請求項８】
前記ＣＰＵが、前記メモリを、各領域が複数のサブ領域を含み、前記一部が、前記サブ領域のうちの１つに対応する、複数の領域に分割することをさらに含む、請求項７に記載の方法。
【請求項９】
前記複数のサブ領域のうちの１つのサブ領域内に記憶されたデータオブジェクトが、前記１つ以上の既定の収集可能領域のうちの１つをポイントするポインタ値を含むことを検出することに応答して、前記サブ領域に対応する表示を記憶することをさらに含む、請求項８に記載の方法。
【請求項１０】
２つ以上の対応するサブ領域を検索するために、２つ以上の記憶された表示を並列読み出しすることと、
前記２つ以上の検索されたサブ領域の各々に対して、対応する基底アドレスに基づいて、１つのルートアドレスを並列演算することと、をさらに含む、請求項７に記載の方法。
【請求項１１】
前記ガーベッジコレクション開始条件は、最も若いサブ領域が、既定の閾値よりも少ない空き空間を有するという条件を含む、請求項７に記載の方法。
【請求項１２】
コンピューティングシステムであって、
汎用中央処理装置（ＣＰＵ）を備える第１の処理ノードと、
前記第１の処理ノードに連結されたメモリと、
特殊処理装置（ＳＰＵ）を備える第２の処理ノードと、を備え、
前記ＣＰＵは、前記メモリの一部に記憶されたデータオブジェクトが変更されたことを検出することに応答して、前記一部に対応する表示を記憶し、
ガーベッジコレクション開始条件が満たされたことを検出することに応答して、通知を前記ＳＰＵへ送信するように構成され、前記通知は、前記一部に対応する前記メモリの領域の前記記憶された表示および基底アドレスを含み、
前記ＣＰＵから前記通知を受信することに応答して、前記ＳＰＵは、各ルートアドレスが記憶された表示に対応する、複数のルートアドレスを演算し、１つ以上の既定の収集可能領域内の到達可能なデータオブジェクトを識別するために、ガーベッジコレクションアルゴリズムによって使用される、前記演算されたルートアドレスを前記ＣＰＵへ送信するように構成され、前記１つ以上の既定の収集可能領域は、前記複数の領域のうちの最も若い領域である、コンピューティングシステム。
【請求項１３】
前記ＣＰＵは、前記メモリを、各領域が複数のサブ領域を含み、前記一部が、前記サブ領域のうちの１つに対応する、複数の領域に分割するようにさらに構成される、請求項１２に記載のコンピューティングシステム。
【請求項１４】
前記ＣＰＵは、前記複数のサブ領域のうちの１つのサブ領域内に記憶されたデータオブジェクトが、前記１つ以上の既定の収集可能領域のうちの１つをポイントするポインタ値を含むことを検出することに応答して、前記サブ領域に対応する表示を記憶するようにさらに構成される、請求項１３に記載のコンピューティングシステム。
【国際調査報告】
2013521570.tif 000012
2013521570.tif 000013
2013521570.tif 000014