(57)【特許請求の範囲】
【請求項１】
複数のデータアイテムを移動させる方法であって、
第１のキャッシュが前記複数のデータアイテムを受信したという第１の指示を受信することと、
前記第１のキャッシュで受信された前記複数のデータアイテムに対する第２のキャッシュによる要求を受信することと、
前記第１のキャッシュが前記複数のデータアイテムを受信したときの時間を示す第１の情報を記憶することであって、前記第１の情報は、前記複数のデータアイテムの各々のアドレスを含む、ことと、
前記第２のキャッシュが前記複数のデータアイテムを要求したときの時間を示す第２の情報を記憶することであって、前記第２の情報は、前記複数のデータアイテムの各々の前記アドレスを含む、ことと、
前記複数のデータアイテムを前記第１のキャッシュから前記第２のキャッシュに移動させることと、
前記第１のキャッシュが前記複数のデータアイテムを受信したときから前記第２のキャッシュが前記複数のデータアイテムを要求したときまでの時間に対応する時間間隔を決定することと、
前記複数のデータアイテムが前記第２のキャッシュに移動された後に、前記第１のキャッシュが前記複数のデータアイテムを再度受信したという第２の指示を受信することと、
前記第２の指示に基づいて、前記第１のキャッシュが前記複数のデータアイテムを再度受信したときを示す情報を記憶することと、
前記時間間隔と、前記第１のキャッシュが前記複数のデータアイテムを再度受信したときと、に基づいて、前記複数のデータアイテムを前記第２のキャッシュに移動させることと、
を備える、方法。
【請求項２】
前記第１のキャッシュが前記複数のデータアイテムを再度受信したときから前記第２のキャッシュが前記複数のデータアイテムを再度要求したときまでの更なる時間に基づいて、前記時間間隔を更新することと、
更新された前記時間間隔と、前記第１のキャッシュが前記複数のデータアイテムを再度受信したときと、に基づいて、前記複数のデータアイテムを前記第２のキャッシュに移動させることと、
をさらに備える、請求項１に記載の方法。
【請求項３】
前記第２のキャッシュによる要求は、メモリ読み出し要求、メモリ読み出し／書き込み要求、同期メモリ読み出し要求、同期メモリ読み出し／書き込み要求、及び、カーネル完了信号のうち少なくとも１つである、請求項１に記載の方法。
【請求項４】
前記決定することは、
前記複数のデータアイテムのサブセットが前記第１のキャッシュ内で変更されたという第３の指示を受信することと、
前記第３の指示を受信したことに基づいて、前記複数のデータアイテムを前記第２のキャッシュに移動させることと、
をさらに備える、請求項１に記載の方法。
【請求項５】
前記第１のキャッシュは、第１の種類の第１のプロセッサと通信し、前記第２のキャッシュは、前記第１の種類の第１のプロセッサとは異なる第２の種類の第２のプロセッサと通信する、請求項１に記載の方法。
【請求項６】
複数のデータアイテムを移動させるための処理デバイスであって、
第１の種類の第１のプロセッサと通信する第１のキャッシュと、
第２の種類の第２のプロセッサと通信する第２のキャッシュと、
前記第１の種類の第１のプロセッサ及び前記第２の種類の第２のプロセッサと通信する通信検出器と、を備え、
前記通信検出器は、
前記第１のキャッシュが前記複数のデータアイテムを受信したという第１の指示を受信することと、
前記第１のキャッシュで受信された前記複数のデータアイテムに対する第２のキャッシュによる要求を受信することと、
前記第１のキャッシュが前記複数のデータアイテムを受信したときの時間を示す第１の情報を記憶することであって、前記第１の情報は、前記複数のデータアイテムの各々のアドレスを含む、ことと、
前記第２のキャッシュが前記複数のデータアイテムを要求したときの時間を示す第２の情報を記憶することであって、前記第２の情報は、前記複数のデータアイテムの各々の前記アドレスを含む、ことと、
前記複数のデータアイテムを前記第１のキャッシュから前記第２のキャッシュに移動させることと、
前記第１のキャッシュが前記複数のデータアイテムを受信したときから前記第２のキャッシュが前記複数のデータアイテムを要求したときまでの時間に対応する時間間隔を決定することと、
前記複数のデータアイテムが前記第２のキャッシュに移動された後に、前記第１のキャッシュが前記複数のデータアイテムを再度受信したという第２の指示を受信することと、
前記第２の指示に基づいて、前記第１のキャッシュが前記複数のデータアイテムを再度受信したときを示す情報を記憶することと、
前記時間間隔と、前記第１のキャッシュが前記複数のデータアイテムを再度受信したときと、に基づいて、前記複数のデータアイテムを前記第１のキャッシュから前記第２のキャッシュに移動させることと、
を行うように構成されている、処理デバイス。
【請求項７】
前記通信検出器は、
前記第１のキャッシュが前記複数のデータアイテムを再度受信したときから前記第２のキャッシュが前記複数のデータアイテムを再度要求したときまでの更なる時間に基づいて、前記時間間隔を更新することと、
更新された前記時間間隔と、前記第１のキャッシュが前記複数のデータアイテムを再度受信したときと、に基づいて、前記複数のデータアイテムを前記第２のキャッシュに移動させることと、
を行うようにさらに構成されている、請求項６に記載の処理デバイス。
【請求項８】
前記第２のキャッシュによる要求は、メモリ読み出し要求、メモリ読み出し／書き込み要求、同期メモリ読み出し要求、同期メモリ読み出し／書き込み要求、及び、カーネル完了信号のうち少なくとも１つである、請求項６に記載の処理デバイス。
【請求項９】
前記決定することは、
前記複数のデータアイテムのサブセットが前記第１のキャッシュ内で変更されたという第３の指示を受信することと、
前記第３の指示を受信したことに基づいて、前記複数のデータアイテムを前記第２のキャッシュに移動させることと、
をさらに備える、請求項６に記載の処理デバイス。
【請求項１０】
前記通信検出器は、
前記複数のデータアイテムの第１の部分を前記第２のキャッシュに移動させることと、
所定期間待機することと、
前記複数のデータアイテムの残りの部分を前記第２のキャッシュに移動させることと、
を行うようにさらに構成されている、請求項６に記載の処理デバイス。
【請求項１１】
前記第１のキャッシュが前記複数のデータアイテムを再度受信したときと、前記時間間隔と、に基づいて、前記第２のキャッシュがデータを要求する前に前記複数のデータアイテムを前記第１のキャッシュから前記第２のキャッシュに移動させること、
をさらに備える、請求項１に記載の方法。
【請求項１２】
前記第１のキャッシュが前記複数のデータアイテムを再度受信したときから前記時間間隔が経過したと判別することと、
前記時間間隔の経過後の期間内に前記複数のデータアイテムを前記第１のキャッシュから前記第２のキャッシュに移動させること、
をさらに備える、請求項１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１４年８月５日に出願された、米国特許出願第１４／４５２，０５８号の優先権を主張する。
【０００２】
本開示の実施形態は、概して、キャッシュへのデータの移動、特に、データが要求される前にヘテロジニアスプロセッサシステム内のキャッシュへ当該データを移動させることに関する。
【背景技術】
【０００３】
いくつかのシステムは、ヘテロジニアスプロセッサを有している。例えば、中央処理装置（ＣＰＵ）と複数のコア（以降、「ＣＰＵ」及び「コア」は区別なく使用され得る）とを有するシステムは、グラフィカルプロセシングユニット（ＧＰＵ）も含むことができ、ＧＰＵは、複数のコア（以降、「ＧＰＵ」及び「コア」は区別なく使用され得る）を含むことが多い。ＣＰＵ及びＧＰＵは、キャッシュを大抵含む同一のメモリを共有することができる。キャッシュは、メモリのより小さな部分であり、アクセスに要する時間がメインメモリより短く、大抵、１つ以上のプロセッサによってプライベートに使用される。メインメモリの一部は、ＣＰＵ及びＧＰＵのキャッシュにコピーされる。メインメモリの一部における複数のコピーを異なるプロセッサが使用するには、キャッシュとメインメモリとを互いに一致又は一貫させておくための方法が必要になる。ヘテロジニアスシステムでは、データは、大抵、例えばＣＰＵ等の第１のプロセッサタイプのキャッシュと、例えばＧＰＵ等の第２のプロセッサタイプのキャッシュとの間で移動される。
【発明の概要】
【課題を解決するための手段】
【０００４】
複数のデータアイテムを第１のキャッシュ又は第２のキャッシュに移動させる装置、コンピュータ可読媒体、集積回路及び方法を提供する。方法は、第１のキャッシュが複数のデータアイテムを要求したという指示を受信することを含む。方法は、第１のキャッシュが複数のデータアイテムを要求したことを示す情報を記憶することを含んでもよい。情報は、複数のデータアイテムの各々のアドレスを含んでもよい。方法は、記憶情報に少なくとも基づいて、複数のデータアイテムを第２のキャッシュに移動させることを決定することと、複数のデータアイテムを第２のキャッシュに移動させることと、を含んでもよい。方法は、第１のキャッシュが複数のデータアイテムを要求したという指示を受信することと、複数のデータアイテムを第２のキャッシュに移動させることと、の間の期間を決定することを含んでもよい。また、スクラッチパッドメモリが開示されている。
【０００５】
複数のデータアイテムを第１のキャッシュ又は第２のキャッシュに移動させるためのシステムが開示される。システムは、第１のキャッシュが複数のデータアイテムを要求したという指示を受信するように構成されている。システムは、第１のキャッシュが複数のデータアイテムを要求したことを示す情報を記憶するように構成されている。情報は、複数のデータアイテムの各々のアドレスを含んでもよい。システムは、記憶情報に少なくとも基づいて、複数のデータアイテムを第２のキャッシュに移動させると決定するように構成されている。システムは、複数のデータアイテムを第２のキャッシュに移動させるように構成されている。
【０００６】
複数のデータアイテムを第１のキャッシュ又は第２のキャッシュに移動させるための集積回路（ＩＣ）が開示される。ＩＣは、１つ以上のデータアイテムを、前記１つ以上のデータアイテムの各々に関連付けられたアドレスを用いて記憶するように構成されたスクラッチパッドメモリを含む。ＩＣは、１つ以上のデータアイテムを記憶するように構成された第１のキャッシュを含んでもよく、第１のキャッシュは、１つ以上のデータアイテムのうち何れかのデータアイテムをスクラッチパッドメモリにライトスルーするように構成されている。ＩＣは、１つ以上のデータアイテムを記憶するように構成された第２のキャッシュを含み、第２のキャッシュは、１つ以上のデータアイテムのうち何れかのデータアイテムをスクラッチパッドメモリにライトスルーするように構成されている。ＩＣは、データアイテムが第１のキャッシュに存在することに基づいて前記データアイテムが第２のキャッシュに関連付けられたプロセッサによって要求されるのを決定したことに基づいて、前記データアイテムをスクラッチパッドメモリから第２のキャッシュに移動させるように構成された通信検出器を含んでもよい。
【０００７】
より詳細な理解は、添付の図面と併せて一例として提供された以下の説明から得ることができる。
【図面の簡単な説明】
【０００８】
【図１】１つ以上の開示された実施形態を実装することができる例示的なデバイスのブロック図である。
【図２】いくつかの実施形態による、ヘテロジニアスプロセッサシステムにおけるキャッシュインジェクションのための装置の一実施例を示す概略図である。
【図３Ａ】いくつかの実施形態による、ＣＰＵが実行可能な例示的なコンピュータ疑似コードを概略的に示す図である。
【図３Ｂ】いくつかの実施形態による、ＧＰＵが実行可能な例示的なコンピュータ疑似コードを概略的に示す図である。
【図４Ａ】ＣＰＵ及びＧＰＵ間のデータの移動を概略的に示す図である。
【図４Ｂ】ＣＰＵ及びＧＰＵ間のデータの移動を概略的に示す図である。
【図５】ヘテロジニアスプロセッサシステムのキャッシュにデータを移動させる方法を示す図である。
【図６】ヘテロジニアスプロセッサシステムのキャッシュにデータを移動させるシステムを概略的に示す図である。
【発明を実施するための形態】
【０００９】
図１は、１つ以上の開示された実施形態を実装することができる例示的なデバイス１００のブロック図である。例示的なデバイス１００は、コンピュータ、ゲームデバイス、携帯型デバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータを含む。デバイス１００は、プロセッサ１０２と、メモリ１０４と、ストレージ１０６と、１つ以上の入力デバイス１０８と、１つ以上の出力デバイス１１０と、を含む。デバイス１００は、入力ドライバ１１２と、出力ドライバ１１４と、を任意に含む。デバイス１００は、図１に示されていない追加的な構成要素を含んでもよいことが理解されるであろう。
【００１０】
図示されたように、プロセッサ１０２は、異なる種類のプロセシングユニット（例えば、１つ以上のコア１３８を含む１つ以上の中央処理装置（ＣＰＵ）１２８（つまり、第１のプロセッサタイプ）と、１つ以上のコア１３４又はＧＰＵコアを含む１つ以上のグラフィックスプロセシングユニット（ＧＰＵ）１３０（つまり、第２のプロセッサタイプ））を含む。当業者に周知であるように、ＣＰＵ及びＧＰＵとは異なる種類のプロセッサが知られている。これらの他のプロセッサは、例えば、デジタルシグナルプロセッサ、アプリケーションプロセッサ等を含む。ＣＰＵ１２８及びＧＰＵ１３０は、同じウェハ上又は複数のウェハ上に配置されてもよい。ＧＰＵ１３０は、１つ以上のコア１３４を制御するコマンドプロセッサ（図示省略）を含んでもよい。各コア１３４は、単一命令複数データ（ＳＩＭＤ）プロセシング要素として動作する２つ以上のプロセシング要素（図示省略）を含んでもよい。
【００１１】
ＣＰＵ１２８は、１つ以上のコア１３８と、１つ以上のキャッシュ１４０と、を含む。ＧＰＵ１３０は、１つ以上のコア１３４と、１つ以上のキャッシュ１３６と、を含む。ＣＰＵ１２８及びＧＰＵ１３０は、同じウェハ上又は複数のウェハ上に配置されてもよい。各プロセッサコアは、ＣＰＵ１２８であってもよいし、ＧＰＵ１３０であってもよい。ＧＰＵ１３０は、１つ以上のコア１３４と、１つ以上のキャッシュ１３６と、を含む。ＧＰＵ１３０及びＣＰＵ１２８は、他の種類の計算ユニットであってもよい。いくつかの実施形態では、計算ユニットは、メモリ要求を生成するウェハの一部を含む。メモリ１０４は、プロセッサ１０２と同じウェハ上に配置されてもよいし、プロセッサ１０２とは別に配置されてもよい。メモリ１０４は、揮発性メモリ又は不揮発メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）又はキャッシュ）を含んでもよい。メモリ１０４は、１つ以上のメモリコントローラ１３２と、１つ以上のキャッシュ１２６と、を含む。メモリコントローラ１３２は、ＣＰＵと同じウェハ上又は別のウェハ上に配置されてもよい。キャッシュ１２６を、プロセッサ１０２に関連付けてもよいし、メモリ１０４に関連付けてもよい。キャッシュ１２６及びメモリ１０４は、キャッシュ１２６及びメモリ１０４に対してコヒーレンシを提供するための通信ライン（図示省略）を含む。キャッシュ１２６及びメモリ１０４は、以下に開示するキャッシュコヒーレンシを提供するためのディレクトリ（図示省略）を含む。いくつかの実施形態では、キャッシュ１２６は、コヒーレンシプロトコルのために構成されたコントローラ（図示省略）を含む。
【００１２】
ストレージ１０６は、固定又は取り外し可能なストレージ（例えば、ハードディスクドライブ、半導体ドライブ、光ディスク又はフラッシュドライブ）を含んでもよい。例示的な入力デバイス１０８は、キーボード、キーパッド、タッチ画面、タッチパッド、検出器、マイク、加速度計、ジャイロスコープ、生体スキャナ又はネットワーク接続（例えば、ワイヤレスＩＥＥＥ８０２信号の送信及び／若しくは受信のためのワイヤレスローカルエリアネットワークカード、又は、ブルートゥース（登録商標））を含む。例示的な出力デバイス１１０は、ディスプレイ、スピーカー、プリンタ、触覚フィードバックデバイス、１つ以上の光、アンテナ又はネットワーク接続（例えば、ワイヤレスＩＥＥＥ８０２信号の送信及び／若しくは受信のためのワイヤレスローカルエリアネットワークカード）を含む。
【００１３】
入力ドライバ１１２は、プロセッサ１０２及び入力デバイス１０８と通信し、プロセッサ１０２が入力デバイス１０８からの入力を受信することを可能にする。出力ドライバ１１４は、プロセッサ１０２及び出力デバイス１１０と通信し、プロセッサ１０２が出力デバイス１１０に対して出力を送信することを可能にする。入力ドライバ１１２及び出力ドライバ１１４は、任意の構成要素である。
【００１４】
図２は、いくつかの実施形態による、ヘテロジニアスプロセッサシステムにおけるキャッシュインジェクションのためのシステム２００の一実施例を示す概略図である。図２では、ＣＰＵ２１０と、ＧＰＵ２１２と、キャッシュ通信検出器２３０と、メモリテーブル２９０と、メモリトラフィック２８０と、メモリ２５０と、が示されている。通信検出器２３０は、メモリトラフィック２８０の少なくとも一部を監視しており、メモリトラフィック２８０に基づいて、データ２７０をＣＰＵ２１０のキャッシュ２１８又はＧＰＵ２１２のキャッシュ２２０に移動させるかどうかを決定する。
【００１５】
ＣＰＵ２１０は、キャッシュ２１８を含む。ＣＰＵ２１０は、例えばＣＰＵ１２８等の第１のプロセッサタイプのプロセシングユニットである。キャッシュ２１８は、ＣＰＵ２１０が使用するデータ２７０．２及び／又は命令３００．１（図３Ａ参照）を記憶するキャッシュ２１８である。ＣＰＵ２１０は、命令３００．１を実行する。命令３００．１は、データ２７０．２を処理するための命令を含んでもよい。命令３００．１は、図３Ａに示す疑似コード又は他の適切な命令に基づくものである。
【００１６】
ＧＰＵ２１２は、キャッシュ２２０を含む。ＧＰＵ２１２は、例えばＧＰＵ１３０等の第２のプロセッサタイプのプロセシングユニットである。キャッシュ２２０は、ＧＰＵ２１２が処理するデータ２７０．３及び／又は命令３００．２（図３Ｂ参照）を記憶するキャッシュ２２０である。ＧＰＵ２１２は、命令３００．２を実行する。命令３００．２は、データ２７０．３を処理するための命令を含んでもよい。命令３００．２は、図３Ｂに示す疑似コード又は他の適切な命令に基づくものであってもよい。
【００１７】
メモリテーブル２９０は、メモリエントリ２９２を含むテーブルである。メモリエントリ２９２は、アドレス２７２と、情報２９４と、を含む。メモリテーブル２９０は、メモリ２５０、又は、通信検出器２３０がアクセス可能な別の場所に記憶されている。例えば、通信検出器２３０は、メモリテーブル２９０又は他のデータを記憶するためのキャッシュ（図示省略）であって、通信検出器２３０に関連付けられたキャッシュを有してもよい。アドレス２７２は、メモリエントリ２９２のアドレスである。情報２９４は、メモリエントリ２９２に関する情報を含む。例えば、情報２９４は、アドレス２７２を有するメモリエントリ２９２がキャッシュ２１８にロードされたことを示す情報２９４等であってもよい。いくつかの実施形態では、情報２９４は、キャッシュ２１８とキャッシュ２２０との間でデータ２７０が移動した回数のカウンタを含む。いくつかの実施形態では、通信検出器２３０は、メモリテーブル２９０とは異なるデータ構造を用いる。
【００１８】
通信検出器２３０は、間隔２３２を決定及び／又は記憶する。いくつかの実施形態では、間隔２３２は、データ２７０がキャッシュ２１８にロードされたときと、データ２７０がキャッシュ２２０によって要求されたときとの間の時間の間隔（期間）２３２である。通信検出器２３０は、データ２７０を、ＣＰＵ２１０のキャッシュ２１８及び／又はＧＰＵ２１２のキャッシュ２２０に移動させるように構成されている。通信検出器２３０は、メモリトラフィック２８０を監視して、キャッシュ２１８及び／又はキャッシュ２２０がデータ２７０を要求する前に、ＣＰＵ２１０のキャッシュ２１８及び／又はＧＰＵ２１２のキャッシュ２２０がデータ２７０をいつ必要とするのかを予測する。通信検出器２３０は、メモリテーブル２９０をメンテナンスすることによって、メモリトラフィック２８０を監視する。通信検出器２３０は、メモリテーブル２９０内でメモリエントリ２９２をメンテナンスする。通信検出器２３０は、例えば、データ２７０がキャッシュ２１８、キャッシュ２２０の何れに現在存在しているのかに関する情報２９４等の情報２９４と、データ２７０がどれだけ頻繁に使用されているかについての指示と、アドレス２７２に関連付けられたデータ２７０をキャッシュ２１８、キャッシュ２２０に移動させるかどうかを通信検出器２３０が決定するのに有用となり得る他の情報と、をメンテナンスする。
【００１９】
通信検出器２３０は、ＣＰＵ２１０のキャッシュ２１８とＧＰＵ２１２のキャッシュ２２０との間のデータ２７０の動きを検出するように構成されている。通信検出器２３０は、データ２７０が、ＣＰＵ２１０のキャッシュ２１８からＧＰＵ２１２のキャッシュ２２０に移動されるときと、その逆のときと、の間の間隔２３２を決定し、決定した間隔２３２に基づいて、データをキャッシュ２１８に移動させる。例えば、通信検出器２３０は、メモリトラフィック２８０を監視して、メモリテーブル２９０をメンテナンスする。メモリテーブル２９０は、データ２７０がキャッシュ２１８にいつロードされたのかを示すメモリエントリ２９２を含んでもよい。そして、通信検出器２３０は、メモリトラフィック２８０を監視して、キャッシュ２２０がメモリエントリ２９２に対応するデータ２７０をいつ要求するのかを判断する。通信検出器２３０は、メモリエントリ２９２がキャッシュ２１８によって要求されたとき又はメモリエントリ２９２がキャッシュ２１８にロードされたときと、メモリエントリ２９２がキャッシュ２２０によって要求されたとき又はメモリエントリ２９２がキャッシュ２２０にロードされたときと、の間の間隔２３２を決定する。
【００２０】
データ２７０は、ＣＰＵ２１０のキャッシュ２１８と、ＧＰＵ２１２のキャッシュ２２０と、の間を移動してもよい。通信検出器２３０は、決定した間隔２３２を用いて、データ２７０をキャッシュ２１８，２２０のうち一方から他方にいつ移動させるのかを決定する。通信検出器２３０は、データ２７０をキャッシュ２１８，２２０にロードするためにコマンドをメモリ２５０に送信することによって、データ２７０をキャッシュ２１８に移動させる。
【００２１】
通信検出器２３０は、メモリ２５０、ＣＰＵ２１０及び／又はＧＰＵ２１２の一部として実装されてもよい。通信検出器２３０は、ソフトウェア、ファームウェア又は電子回路によって実装されてもよい。通信検出器２３０は、２つ以上の部分を用いて実装されてもよい。例えば、通信検出器２３０は、メモリ２５０に関連付けられた部分と、ＣＰＵ２１０に関連付けられた部分と、を有してもよい。通信検出器２３０は、一部が集積回路であって、一部がソフトウェア又はファームウェアであってもよい。
【００２２】
キャッシュ２１８，２２０は、ライトバックキャッシュであってもよい。キャッシュ２１８，２２０は、ライトスルーキャッシュであってもよい。キャッシュ２１８，２２０は、コヒーレントキャッシュシステムの一部であってもよい。
【００２３】
メモリ２５０は、ディレクトリと、他のキャッシュ（図示省略）と、を含む。メモリ２５０は、キャッシュ２１８，２２０がコヒーレントメモリシステムの一部であるセントラルメモリヒエラルキーの一部である。いくつかの実施形態では、メモリ２５０は、Ｌ３キャッシュである。メモリ２５０は、通信検出器２３０から命令を受けて、アドレス２７２を有するデータ２７０をキャッシュ２１８，２２０にロードする。メモリ２５０は、アドレス２７２によってアクセスされるデータ２７０から構成される。キャッシュ２１８，２２０は、コヒーレントアドレスシステムの一部であるか、又は、別のアドレスシステムを有する。
【００２４】
メモリトラフィック２８０は、メモリ２５０への命令を含む。例えば、メモリトラフィック２８０は、書き込み要求、読み出し要求、ライトバック要求等を含んでもよい。
【００２５】
いくつかの実施形態において、キャッシュ２１８とキャッシュ２２０との間には、ダイレクトメモリ接続が存在する。通信検出器２３０は、２つのキャッシュ２１８，２２０間のメモリトラフィック２８０を監視して、２つのキャッシュ２１８，２２０間でデータ２７０を移動させるコマンドを送信する。
【００２６】
図３Ａ及び図３Ｂは、いくつかの実施形態による、ＣＰＵ２１０及びＧＰＵ２１２が実行するコンピュータ疑似コードの例示的なブロックを概略的に示す図である。図４Ａ及び図４Ｂは、ＣＰＵ２１０とＧＰＵ２１２との間のデータの動きを概略的に示す図である。図３Ａ、図３Ｂ、図４Ａ及び図４Ｂを互いに関連させて説明する。ＣＰＵ２１０は、メモリ２５０内のスペースを「ｄａｔａ」のために割り当てる命令「ｄａｔａ＝ｍａｌｌｏｃ（．．．）」３０２を実行することによって開始する。「ｄａｔａ」は、例えば、数百万の数から成るアレイであってもよく、データ２７０．１〜データ２７０．Ｎとして記憶されている。続いて、ＣＰＵ２１０は、「ｉｎｉｔｉａｌｉｚｅ（ｄａｔａ）」３０３を実行する。ＣＰＵ２１０は、データを初期化するために、当該データをメモリ２５０からＣＰＵキャッシュ２１８に移動させることを要求する。このことは、図４Ａに例示されている。データ２７０．１〜データ２７０．Ｎは、ＣＰＵ２１０がデータ２７０．１〜データ２７０．Ｎを要求することによって、メモリ２５０からキャッシュ２１８に移動している。通信検出器２３０は、データ２７０を監視して、メモリテーブル２９０をメンテナンスする。例えば、通信検出器２３０は、データ２７０．１〜データ２７０．Ｎの各々に対するエントリを行って、情報２９４をデータ２７０に関連付ける。情報２９４は、ＣＰＵ２１０がデータ２７０．１〜データ２７０．Ｎを要求して、データ２７０．１〜データ２７０．Ｎが現在キャッシュ２１８内に存在する、という指示を含んでもよい。
【００２７】
ＣＰＵ２１０は、ＤＯループを開始する「ｄｏ｛」３０４に続く。次いで、ＣＰＵ２１０は、「ｋｅｒｎｅｌ＜＜＜ｂｌｏｃｋｓ，ｔｈｒｅａｄｓ＞＞＞（ｄａｔａ）」３０５を実行する。このコマンドでは、ＧＰＵ２１２に制御を渡す。ＧＰＵ２１２は、疑似コードの開始の指示である「ｋｅｒｎｅｌ（）｛」３５１を実行する。次に、ＧＰＵ２１２は、「ｐｒｏｃｅｓｓ（ｄａｔａ）」３５２を実行する。ＧＰＵ２１２は、例えば、データ２７０．１〜データ２７０．Ｎまでの数百万の数に対して計算を実行する。ＧＰＵ２１２は、キャッシュ２２０を共有する多くのプロセシング要素から構成されてもよい。ＧＰＵ２１２のキャッシュ２２０は、ＧＰＵ２１２がデータを処理するために、データ２７０．１〜データ２７０．Ｎを要求する。ＧＰＵ２１２がデータ２７０．１〜データ２７０．Ｎを要求したときにはデータ２７０．１〜データ２７０．Ｎがキャッシュ２２０に存在しないので、キャッシュ２２０は、データ２７０．１〜データ２７０．Ｎを要求する。データ２７０．１〜データ２７０．Ｎを、ＣＰＵ２１０のキャッシュ２１８からＧＰＵ２１２のキャッシュ２２０に移動させてもよい。例えば、メモリ２５０のディレクトリ（図示省略）は、データ２７０．１〜データ２７０．Ｎを解放する要求をキャッシュ２１８に送信し、その後、データ２７０．１〜データ２７０．Ｎをキャッシュ２２０に送信する。図４Ｂは、データ２７０．１〜データ２７０．Ｎが、ＧＰＵ２１２によって、ＣＰＵ２１０のキャッシュ２１８からＧＰＵ２１２のキャッシュ２２０に移動したことを示している。データ２７０．１〜データ２７０．Ｎの一部又は全てを、ＣＰＵ２１０のキャッシュ２１８からメモリ２５０に移動させ、その後、メモリ２５０からＧＰＵ２１２のキャッシュ２２０に移動させてもよい。通信検出器２３０は、データ２７０．１〜データ２７０．Ｎの動きを監視して、データ２７０．１〜データ２７０．ＮがＧＰＵ２１２のキャッシュ２２０に移動したことを情報２９４において示す。いくつかの実施形態では、通信検出器２３０は、間隔２３２を決定する。
【００２８】
ＧＰＵ２１２は、「｝」３５３を実行する。ここで、制御がＣＰＵ２１０に戻る。次に、ＣＰＵ２１０は、「ｒｅ−ｐｒｏｃｅｓｓｅｓ（ｄａｔａ）」３０６を実行する。ＣＰＵ２１０は、データ２７０．１〜データ２７０．Ｎを再処理するために、データ２７０．１〜データ２７０．Ｎを再度要求する。データ２７０．１〜データ２７０．Ｎは、ＧＰＵ２１２のキャッシュ２２０からＣＰＵ２１０のキャッシュ２１８に移動する。データ２７０．１〜データ２７０．Ｎは、図４Ａに例示した位置に戻されてもよい。通信検出器２３０は、データ２７０．１〜データ２７０．Ｎの動きを監視して、データ２７０．１〜データ２７０．ＮがＧＰＵ２１２のキャッシュ２２０からＣＰＵ２１０のキャッシュ２１８に移動したことを情報２９４において示す。
【００２９】
次いで、ＣＰＵ２１０は、「}ｗｈｉｌｅ（ｗｏｒｋ  ｌｅｆｔ）」３０７を実行する。いくつかの実施形態では、残りの作業が存在する場合には、ＣＰＵ２１０は、３０４に戻る。
【００３０】
ＣＰＵ２１０は、上述したように、ＤＯループの開始である「ｄｏ｛」３０４を実行する。ＣＰＵ２１０は、「ｋｅｒｎｅｌ＜＜＜ｂｌｏｃｋｓ，ｔｈｒｅａｄｓ＞＞＞（ｄａｔａ）」３０５を続ける。このコマンドでは、上述したように、ＧＰＵ２１２に制御を渡す。次に、ＧＰＵ２１２は、疑似コードの開始を示す「ｋｅｒｎｅｌ（）｛」３５１を実行する。ＧＰＵ２１２は、「ｐｒｏｃｅｓｓ（ｄａｔａ）」３５２を実行する。ＧＰＵ２１２は、例えば、上述したように、数百万の数に対して計算を実行する。ＧＰＵ２１２がデータを処理するために、ＧＰＵ２１２は、データ２７０．１〜データ２７０．Ｎを要求する。図４Ｂは、データ２７０．１〜データ２７０．Ｎがキャッシュ２１８からＧＰＵ２１２のキャッシュ２２０に移動したことを示している。
【００３１】
いくつかの実施形態では、通信検出器２３０は、ＣＰＵ２１０によるデータ２７０．１〜データ２７０．Ｎの処理と、ＧＰＵ２１２がデータ２７０．１〜データ２７０．Ｎの処理を開始可能であるとＧＰＵ２１２が示したことと、の間の間隔２３２を決定することによって、ＧＰＵ２１２がデータ２７０．１〜データ２７０．Ｎの処理を開始していることを検出する。通信検出器２３０は、データ２７０．１〜データ２７０．Ｎの動きを監視して、データ２７０．１〜データ２７０．ＮがＧＰＵ２１２のキャッシュ２２０に移動したことを情報２９４において示す。
【００３２】
ＧＰＵ２１２は、疑似コード３００．２の終了を示す「｝」３５３を実行する。制御は、ＣＰＵ２１０に戻る。次いで、ＣＰＵ２１０は、「ｒｅ−ｐｒｏｃｅｓｓｅｓ（ｄａｔａ）」３０６を実行する。通信検出器２３０は、データ２７０．１〜データ２７０．ＮをＣＰＵ２１０のキャッシュ２１８に移動させて、ＣＰＵ２１０がデータ２７０．１〜データ２７０．Ｎを要求したときには、データがＣＰＵ２１０のキャッシュ２１８に既に存在するようにしてもよい。いくつかの実施形態では、データ２７０．１〜データ２７０．Ｎの一部のみを「ｒｅ−ｐｒｏｃｅｓｓｅｓ（ｄａｔａ）」して、ＣＰＵ２１０のキャッシュ２１８に移動させる。
【００３３】
次に、ＣＰＵ２１０は、「ｐｏｓｔ−ｐｒｏｃｅｓｓ（ｄａｔａ）」３０８を実行する。ＣＰＵ２１０は、データ２７０．１〜データ２７０．Ｎの一部又は全てを処理する。いくつかの実施形態では、新たなデータ２７０が生成され、ＣＰＵ２１０によって処理されてもよい。通信検出器２３０は、ＣＰＵ２１０が３０８で処理するデータ２７０．１〜データ２７０．Ｎの一部又は全てを移動させてもよい。疑似コード３００．１は終了してもよい。疑似コード３００．１は、３０４に戻るように３０７でループし続けてもよく、この場合、データ２７０．１〜データ２７０．Ｎは、キャッシュ２１８（図４Ａ）とキャッシュ２２０（図４Ｂ）との間を行き来し続ける。通信検出器２３０は、メモリトラフィック２８０を監視し続けて、キャッシュ２１８，２２０間を行き来しているデータ２７０．１〜データ２７０．Ｎに基づいて、間隔２３２を改善する。また、通信検出器２３０は、メモリトラフィック２８０を監視し、他の指示に基づいて、データ２７０．１〜データ２７０．Ｎを他のキャッシュに移動させるように決定してもよい。例えば、通信検出器２３０は、異なるデータアイテム（図示省略）がキャッシュ２１８によって要求されたときに、ＣＰＵ２１０がデータ２７０．１〜データ２７０．Ｎの使用を終了することによって、データ２７０．１〜データ２７０．Ｎをキャッシュ２２０に移動させるべきである、と決定してもよい。
【００３４】
図５は、ヘテロジニアスプロセッサシステムのキャッシュにデータを移動させる方法５００を示す図である。方法５００は、開始５０２から始まる。方法５００は、続いて、第１のキャッシュが複数のデータアイテムを要求したという指示を受信する。例えば、図４Ａ及び図４Ｂを参照すると、ＣＰＵ２１０は、キャッシュ２１８に存在していないデータ２７０．１〜データ２７０．Ｎを要求してもよい。キャッシュ２１８は、メモリ２５０からのデータ２７０．１〜データ２７０．Ｎを要求する。通信検出器２３０は、キャッシュ２１８からメモリ２５０へのデータ２７０．１及びデータ２７０．Ｎの要求についてのメモリトラフィック２８０を検出する。
【００３５】
方法５００は、５０６にて、第１のキャッシュが１つ以上のデータアイテムを要求したことを示す情報を記憶する。例えば、通信検出器２３０は、データ２７０．１〜データ２７０．Ｎがキャッシュ２１８に移動したことをメモリテーブル２９０に記憶させる。通信検出器２３０は、データ２７０．１〜データ２７０．Ｎがキャッシュ２１８に移動した時間を記憶する。通信検出器２３０は、データ２１０が書き込まれたか否か等の他の情報２９４を記憶してもよい。いくつかの実施形態では、通信検出器２３０は、カーネル完了信号を監視して、記憶する。いくつかの実施形態では、データ２７０．１〜データ２７０．Ｎの一部又は全ては、キャッシュ２１８と、キャッシュ２２０と、の間を行き来する。通信検出器２３０は、データ２７０．１〜データ２７０．Ｎがキャッシュ２１８に移動したときと、データ２７０１．１〜データ２７０．Ｎがキャッシュ２２０に移動したときと、の時間の間隔（期間）２３２を決定してもよい。いくつかの実施形態では、通信検出器２３０は、同期メモリアクセスを監視することに基づいて間隔２３２を決定する。いくつかの実施形態では、通信検出器２３０は、同期メモリアクセスを監視することのみに基づいて間隔２３２を決定する。いくつかの実施形態では、通信検出器２３０は、カーネル完了信号を監視することに基づいて間隔２３２を決定する。
【００３６】
方法５００は、５０８にて、１つ以上のデータアイテムを第２のキャッシュに移動させることを決定する。例えば、通信検出器２３０は、間隔２３２に基づいて、データ２７０．１〜データ２７０．Ｎを移動させることを決定する。例えば、通信検出器２３０は、間隔２３２が発生したと判断して、間隔２３２の後にいくらかの期間待機し、その後、データ２７０．１〜データ２７０．Ｎを移動させることを決定する。通信検出器２３０は、キャッシュ２２０からのメモリトラフィック２８０が、データ２７０．１〜データ２７０．Ｎのうち何れかに対する要求を含んでいたと判断した後に、データ２７０．１〜データ２７０．Ｎを移動させることを決定してもよい。例えば、キャッシュ２２０は、データ２７０．１に対する要求を、２７０．１〜２７０．Ｎがキャッシュ２１８に存在しているときに行ってもよい。通信検出器２３０は、メモリトラフィック２８０を監視することと、キャッシュ２２０がデータ２７０．１を要求したという指示を受信したことと、に基づいて、データ２７０．２〜データ２７０．Ｎをキャッシュ２２０に移動させることを決定してもよい。通信検出器２３０は、カーネル完了信号に基づいて、データ２７０．２〜データ２７０．Ｎをキャッシュ２２０に移動させることを決定してもよい。例えば、通信検出器２３０は、データ２７０．２〜データ２７０．Ｎにアクセスするキャッシュ２２０内で実行しているカーネルからカーネル完了信号を受信したことを検出し、カーネル完了信号を受信したことに基づいて、データ２７０．２〜データ２７０．Ｎの少なくとも一部をキャッシュ２１８に移動させる。
【００３７】
通信検出器２３０は、メモリトラフィック２８０を監視して、データ２７０．１〜データ２７０．Ｎが書き戻されたときに、データ２７０．１〜データ２７０．Ｎをキャッシュ２２０に移動させるべきと決定してもよい。例えば、通信検出器２３０は、データ２７０．１〜データ２７０．１００が書き戻されたことを検出し、この決定に基づいて、データ２７０．１〜データ２７０．１００をキャッシュ２２０にロードしてもよい。
【００３８】
方法５００は、５１０にて、１つ以上のデータアイテムを第２のキャッシュに移動させる。例えば、通信検出器２３０は、メモリ２５０に対して、データ２７０．１〜データ２７０．Ｎをキャッシュ２２０にロードする要求を行う。いくつかの実施形態では、通信検出器２３０は、データ２７０．１〜データ２７０．Ｎの一部をキャッシュ２２０に移動させ、その後、データ２７０．１〜データ２７０．Ｎの第２の部分をキャッシュ２２０に移動させる。例えば、通信検出器２３０は、データ２７０．１〜データ２７０．１００をキャッシュ２２０に移動させ、その後、２７０．１０１〜２７０．２００をキャッシュ２２０に移動させる。通信検出器２３０は、ＧＰＵ２１２がキャッシュ２２０内にデータ２７０．１〜データ２７０．Ｎを必要とする時間の長さを予測することに基づいて、データ２７０．１〜データ２７０．Ｎを部分的に移動させてもよい。
【００３９】
図６は、ヘテロジニアスプロセッサシステムのキャッシュにデータを移動させる例示的なシステム６００を概略的に示す図である。システム６００は、スクラッチパッドメモリ６０２を含む。スクラッチパッドメモリ６０２は、アドレス６０４と、実データ６０６と、他の情報６０８と、を記憶するように構成されている。ＣＰＵ２１０及びＧＰＵ２１２は、データ２７０を各々のキャッシュ２１８，２２０に書き込むときに、いくつかの選択されたデータ２７０．１〜データ２７０．Ｎをスクラッチパッドメモリ６０２の実データ６０６にも書き込むように構成されている。データ２７０は、キャッシュ２１８，２２０と、スクラッチパッドメモリ６０２と、に存在してもよい。スクラッチパッドのデータ２７０は、通信検出器２３０がデータ２７０を移動させる前にオーナーキャッシュ２１８，２２０がデータ２７０に再度書き込んだ場合に、更新され得る。通信検出器２３０は、データ２７０．１〜データ２７０．Ｎをスクラッチパッドからキャッシュ２１８，２２０の何れか一方のキャッシュに移動させ、データ２７０．１〜データ２７０．Ｎが何れか他方のキャッシュ２１８，２２０によって使用されるとき、又は、「ｋｅｒｎｅｌ（）{」３５１が終了したときに、何れか他方のキャッシュ２１８，２２０のデータ２７０．１〜データ２７０．Ｎを無効にしてもよい。他の情報６０８は、キャッシュ２１８，２２０の何れのキャッシュがデータ６０６を所有しているのかと、データ６０６が有効か否かと、の指示を含んでもよい。
【００４０】
多くの変形が、本明細書の開示に基づいて可能である、ということを理解すべきである。上述したように、特徴及び要素を特定の組み合わせで説明したが、特徴又は要素の各々は、他の特徴及び要素なしに単体で使用してもよく、他の機能及び要素の有無にかかわらず様々な組み合わせで使用することができる。
【００４１】
提供された方法を、汎用コンピュータ、プロセッサ又はプロセッサコアで実装してもよい。適切なプロセッサは、一例として、汎用プロセッサ、グラフィックスプロセシングユニット（ＧＰＵ）、専用プロセッサ、従来のプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアに関連する１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特殊用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路、任意の他の種類の集積回路（ＩＣ）、及び／又は、状態機械を含む。（コンピュータ可読媒体に記憶可能な命令等の）処理されたハードウェア記述言語（ＨＤＬ）命令の結果と、ネットリストを含む他の中間データと、を用いた製造プロセスを構成することによって、かかるプロセッサを製造してもよい。かかる処理の結果は、マスクワークであってもよく、マスクワークは、後に半導体製造プロセスで用いられて、開示の実施形態の態様を実装するプロセッサを製造する。
【００４２】
本明細書で提供した方法又はフローチャートを、汎用コンピュータ又はプロセッサによる実行のためにコンピュータ可読ストレージ媒体に組み込まれたコンピュータプログラム、ソフトウェア又はファームウェアで実装することができる。いくつかの実施形態では、コンピュータ可読ストレージ媒体は、非一時的なコンピュータ可読ストレージ媒体である。コンピュータ可読ストレージ媒体の例としては、リードオンリーメモリ（ＲＯＭ）と、ランダムアクセスメモリ（ＲＡＭ）と、レジスタと、キャッシュメモリと、半導体メモリデバイスと、内蔵ハードディスク及び取り外し可能ディスク等の磁気媒体と、磁気光学媒体と、ＣＤ−ＲＯＭディスクなどの光媒体と、デジタル多用途ディスク（ＤＶＤ）と、が含まれる。
【図１】
0006453997.tif 000002
【図２】
0006453997.tif 000003
【図３Ａ】
0006453997.tif 000004
【図３Ｂ】
0006453997.tif 000005
【図４Ａ】
0006453997.tif 000006
【図４Ｂ】
0006453997.tif 000007
【図５】
0006453997.tif 000008
【図６】
0006453997.tif 000009