(57)【特許請求の範囲】
【請求項１】
マルチコアプロセッサにおいてキャッシュ状態の移動を加速させるためのコンピュータによって実行される方法であって、
前記マルチコアプロセッサの第１のタイルから第２のタイルへの、前記第１のタイルにおける第１のコア上で実行するスレッドの移送をメモリ及びプロセッサを備えるコンピュータによって開始することであって、前記第１のタイルは第１のコアと第１のキャッシュを備え、前記第２のタイルは第２のコアと第２のキャッシュを備える、移送の開始と、 
前記マルチコアプロセッサにおける前記第１のタイルの第１のコアから前記第２のタイルへのスレッドの移送に基づいて、前記第１のキャッシュから第２のキャッシュへ移動されるブロックのブロックアドレスをコンピュータによって決定することであって、前記ブロックのブロックアドレスは前記第１のキャッシュのキャッシュ・タグ・アレイをスキャニングすることによって決定される、ブロックアドレスの決定と、 
前記マルチコアプロセッサにおける第３のタイルをコンピュータによって識別することであって、前記第３のタイルは前記第１のキャッシュから前記第２のキャッシュへ移動されるブロックのブロックアドレスに対応するディレクトリを備え、前記ディレクトリは前記第１のキャッシュがブロックを含み、前記第２のキャッシュが該ブロックを共有しないことを示すものである、第３のタイルの識別と、 
前記第１のキャッシュから第２のキャッシュへと移動されるブロックのブロックアドレスのリストと、前記ブロックが移動させられる第２のキャッシュの識別子とを含むメッセージを前記第１のタイルから前記第３のタイルへ送信することによって、前記第２のキャッシュが前記ブロックを共有することを反映するように前記ディレクトリをコンピュータによってアップデートすることと、 
前記第１のタイルにおいて、前記第３のタイルからのディレクトリがアップデートされたことを示す承認の受信に応答して、前記第１のタイルから前記第２のタイルへの前記スレッドの移送を完了させるために、前記第２のタイルにおける第２のキャッシュに、前記第１のタイルにおける第１のキャッシュから前記ブロックをコンピュータによって移動させること、
を包含する、方法。   
【請求項２】
前記第２のキャッシュが前記ブロックを共有することを反映するように前記ディレクトリをアップデートすることが、 
前記第３のタイルにおいて前記メッセージを受信したことに応答して、前記第２のキャッシュが前記ブロックアドレスのリストに含まれるブロックアドレスを共有することを反映するように前記ディレクトリをアップデートすること、 
をさらに包含する、請求項１に記載のコンピュータによって実行される方法。 
【請求項３】
前記第２のキャッシュが前記ブロックを共有することを反映するように前記ディレクトリをアップデートすることが、 前記第２のキャッシュが前記ブロックを含むことを反映するようにビットベクトルをコンピュータによってアップデートすることを包含し、前記ディレクトリは複数のビットを含むビットベクトルを備え、前記複数のビットのそれぞれが前記マルチコアプロセッサにおける複数のタイルのうちの対応するものと関連付けられ、前記ビットのそれぞれの値は対応する前記タイルが前記ブロックを含むキャッシュを含むか否かを特定する、請求項１に記載のコンピュータによって実行される方法。   
【請求項４】
前記第１のキャッシュから前記第２のキャッシュに前記ブロックを移動させることが、前記第２のキャッシュが前記ブロックを共有することを反映するようにディレクトリがアップデートされる前に、コンピュータによって前記第１のキャッシュから前記第２のキャッシュへ前記ブロックを移動することを含む、請求項１に記載のコンピュータによって実行される方法。
【請求項５】
前記第１のキャッシュから前記第２のキャッシュに前記ブロックを移動させることが、前記第２のキャッシュが前記ブロックを共有することを反映するようにディレクトリをアップデートするのと同時に、コンピュータによって前記第１のキャッシュから前記第２のキャッシュへ前記ブロックを移動することを含む、請求項１に記載のコンピュータによって実行される方法。
【請求項６】
前記第１のタイルにおいて前記ブロックうちの少なくとも１つに対するキャッシュの無効化若しくは介入リクエストを受信することであって、前記第１のタイルはさらに移動状態表を備えるものである、リクエストの受信と、 
第１の種類の移動動作が完了されたか否かをコンピュータによって決定することであって、前記ブロックが前記第１のキャッシュから第２のキャッシュに移動させられたことを前記移動状態表が示す時と、前記第２のキャッシュが前記ブロックを共有することを反映するように前記ディレクトリがアップデートされていない時に、前記第１の種類の移動動作が完了されるように決定されるものである、決定することと、 
前記第１の種類の移動動作が完了されたと決定したことに応答して、前記キャッシュの無効化または介入のリクエストのうちいずれかをコンピュータによって前記第１のキャッシュから前記第２のキャッシュに転送することと、
をさらに包含する、請求項５に記載のコンピュータによって実行される方法。
【請求項７】
前記第１のキャッシュから前記第２のキャッシュに前記ブロックを移動させることが、前記第１のキャッシュと前記第２のキャッシュとの間でコンピュータによって前記ブロックを複製することを包含する、請求項１に記載のコンピュータによって実行される方法。
【請求項８】
前記第１のキャッシュと前記第２のキャッシュとの間で前記ブロックを複製することが、前記ブロックのダーティエントリを取り除くために前記マルチコアプロセッサに結合されたメインメモリをコンピュータによってアップデートするための命令を送信することを包含する、請求項７に記載のコンピュータによって実行される方法。
【請求項９】
前記第１のキャッシュから前記第２のキャッシュに前記ブロックを移動させることが、
前記第１のキャッシュから前記第２のキャッシュに前記ブロックをコンピュータによって動かすことにより、前記第１のキャッシュにおける前記ブロックを無効化することと、
前記無効化されたブロックを反映するようにコンピュータによって前記ディレクトリをアップデートすることと
を包含する、請求項１に記載のコンピュータによって実行される方法。
【請求項１０】
前記第１のキャッシュから前記第２のキャッシュに前記ブロックを移動させることが、前記第１のキャッシュから前記第２のキャッシュに最近最も使用されたブロックの一部分をコンピュータによって移動させることを包含する、請求項１に記載のコンピュータによって実行される方法。
【請求項１１】
前記第１のキャッシュから前記第２のキャッシュに前記ブロックを移動させることが、最近最も使用されたブロックから最近最も使用されていないブロックという順序で前記ブロックをコンピュータによって移動させることを包含する、請求項１に記載のコンピュータによって実行される方法。
【請求項１２】
第１のコア、第１のキャッシュ及び第１のディレクトリを備える第１のタイルと、
第２のコア、第２のキャッシュ及び第２のディレクトリを備える第２のタイルと、
第３のコア、第３のキャッシュ及び第３のディレクトリを備える第３のタイルと
を備えるマルチコアプロセッサであって、
前記マルチコアプロセッサは、
前記第１のコア上で実行するスレッドの、前記第１のタイルから前記第２のタイルへの移送を開始することと、
前記マルチコアプロセッサにおける前記第１のタイルから前記第２のタイルにおける第２のコアへの前記第一のコアで実行されるスレッドの移送に基づいて、前記第１のキャッシュから前記第２のキャッシュに移動させられるブロックのブロックアドレスを決定することであって、前記ブロックのブロックアドレスは前記第１のキャッシュのキャッシュ・タグ・アレイをスキャニングすることによって決定される、ブロックアドレスの決定と、
前記第３のディレクトリが前記第１のキャッシュから第２のキャッシュへ移動されるブロックのブロックアドレスに対応することを識別することであって、前記第３のディレクトリは前記第１のキャッシュがブロックを含み、前記第２のキャッシュが該ブロックを共有しないことを示すものである、第３のディレクトリによる識別と、
前記第１のキャッシュから第２のキャッシュへと移動されるブロックのブロックアドレスのリストと、ブロックが移動させられる第２のキャッシュの識別子とを含むメッセージを前記第１のタイルから前記第３のタイルへ送信することによって、前記第２のキャッシュが前記ブロックを共有することを反映するように前記第３のディレクトリをアップデートすることと、
前記第１のタイルにおいて、前記第３のタイルからのディレクトリがアップデートされたことを示す承認の受信に応答して、前記第１のタイルから前記第２のタイルへの前記スレッドの移送を完了するために、前記第２のタイルにおける前記第２のキャッシュに、前記第１のタイルにおける前記第１のキャッシュから前記ブロックを移動させることと
を行うように構成される、マルチコアプロセッサ。
【請求項１３】
前記第２のキャッシュが前記ブロックを共有することを反映するように前記第３のディレクトリをアップデートするために、前記マルチコアプロセッサが、
前記第３のタイルにおける前記メッセージの受信に応答して、前記第２のキャッシュが前記ブロックアドレスのリストに含まれる前記ブロックアドレスを共有することを反映するように前記第３のディレクトリをアップデートすること
を行うように構成される、請求項１２に記載のマルチコアプロセッサ。
【請求項１４】
前記第２のキャッシュが前記ブロックを共有することを反映するように前記第３のディレクトリをアップデートするために、前記マルチコアプロセッサは前記第２のキャッシュが前記ブロックを含むことを反映するようにビットベクトルをアップデートするように構成され、前記第３のディレクトリは複数のビットを含むビットベクトルを備え、前記複数のビットのそれぞれは、前記マルチコアプロセッサにおける複数のタイルのうちの対応するものと関連付けられ、前記ビットのそれぞれの値は、前記タイルのうちの対応するものが前記ブロックを含むキャッシュを含むか否かを特定する、請求項１２に記載のマルチコアプロセッサ。
【請求項１５】
前記第１のキャッシュから前記第２のキャッシュに前記ブロックを移動させるために、前記マルチコアプロセッサは、前記第２のキャッシュが前記ブロックを共有することを反映するように前記第３のディレクトリがアップデートされる前に、前記第１のキャッシュから前記第２のキャッシュに前記ブロックを移動させるように構成される、請求項１２に記載のマルチコアプロセッサ。
【請求項１６】
前記第１のキャッシュから前記第２のキャッシュに前記ブロックを移動させるために、前記マルチコアプロセッサは、前記第２のキャッシュが前記ブロックを共有することを反映するように前記第３のディレクトリをアップデートするのと同時に、前記第１のキャッシュから前記第２のキャッシュに前記ブロックを移動させるように構成される、請求項１２に記載のマルチコアプロセッサ。
【請求項１７】
前記第１のタイルは前記第１のキャッシュからのキャッシュの移動と関連付けられる移動状態表をさらに備え、前記マルチコアプロセッサは、
前記第１のタイルにおいて前記ブロックのうちの少なくとも１つに対するキャッシュの無効化または介入のリクエストを受信することと、
第１の種類の移動動作が完了されたか否かを決定することであって、前記ブロックが前記第１のキャッシュから第２のキャッシュに移動させられたことを前記移動状態表が示す時と、前記第２のキャッシュが前記ブロックを共有することを反映するように前記第３のディレクトリがアップデートされていない時とに、前記第１の種類の移動動作は完了されるように決定される、決定することと、
前記第１の種類の移動動作が完了されたと決定したことに応答して、前記キャッシュの無効化または介入のリクエストのうちのいずれかを前記第１のタイルから前記第２のタイルに転送することと
を行うようにさらに構成される、請求項１２に記載のマルチコアプロセッサ。
【請求項１８】
前記第１のキャッシュから前記第２のキャッシュに前記ブロックを移動させるために、前記マルチコアプロセッサは、前記第１のキャッシュと前記第２のキャッシュとが前記ブロックを格納するように前記第１のキャッシュと前記第２のキャッシュとの間で前記ブロックを複製するように構成される、請求項１２に記載のマルチコアプロセッサ。
【請求項１９】
前記第１のキャッシュと前記第２のキャッシュとの間で前記ブロックを複製するために、前記マルチコアプロセッサは、前記ブロックにおけるダーティエントリを取り除くために前記マルチコアプロセッサに結合されたメインメモリをアップデートするための命令を送信するように構成される、請求項１８に記載のマルチコアプロセッサ。
【請求項２０】
前記第１のキャッシュから前記第２のキャッシュに前記ブロックを移動させるために、前記マルチコアプロセッサは、前記第２のキャッシュはブロックを格納し、前記第１のキャッシュはブロックを格納しないように前記第１のキャッシュから前記第２のキャッシュに前記ブロックを動かすようにさらに構成される、請求項１２に記載のマルチコアプロセッサ。
【請求項２１】
前記第１のキャッシュから前記第２のキャッシュに前記ブロックを移動させるために、前記マルチコアプロセッサは前記第１のキャッシュから前記第２のキャッシュに前記ブロックにおける最近最も使用されたブロックのうちの一部を移動させるように構成される、請求項１２に記載のマルチコアプロセッサ。
【請求項２２】
前記第１のキャッシュから前記第２のキャッシュに前記ブロックを移動させるために、前記マルチコアプロセッサは最近最も使用されたブロックから最近最も使用されていないブロックという順序で前記ブロックを移動させるように構成される、請求項１２に記載のマルチコアプロセッサ。
【請求項２３】
第１のコア、第１のキャッシュ及び第１のディレクトリを備える第１のタイルと、
第２のコア、第２のキャッシュ及び第２のディレクトリを備える第２のタイルと、
第３のコア、第３のキャッシュ及び第３のディレクトリを備える第３のタイルと、
第４のコア、第４のキャッシュ及び第４のディレクトリを備える第４のタイルと
を備えるマルチコアプロセッサであって、
前記マルチコアプロセッサは、
前記第１のコア上で実行するスレッドの、前記第１のタイルから前記第２のタイルへの移送を開始することと、
前記マルチコアプロセッサにおける前記第１のタイルから前記第２のタイルへの前記第１のコアで実行されるスレッドの移送に基づいて、前記第１のキャッシュから前記第２のキャッシュに移動させられる、第１のブロックのブロックアドレスの第１の組と第２のブロックのブロックアドレスの第２の組とを決定することと、
前記第３のディレクトリが前記第１のキャッシュから前記第２のキャッシュへ移動される第１のブロックのブロックアドレスの第１の組に対応することを識別することであって、前記第３のディレクトリは前記第１のキャッシュが第１のブロックを含み、前記第２のキャッシュが前記第１のブロックを共有しないことを示すものであることと、
前記第４のディレクトリが前記第１のキャッシュから前記第２のキャッシュへ移動させられる前記第２のブロックのブロックアドレスの第２の組に対応することを識別することであって、前記第４のディレクトリは前記第１のキャッシュが第２のブロックを含み、前記第２のキャッシュが前記第２のブロックを共有しないことを示すものであることと、
前記第１のキャッシュから第２のキャッシュへと移動されるブロックのブロックアドレスの第１のリストと、ブロックが移動させられる第２のキャッシュの識別子とを含むメッセージを前記第１のタイルから前記第３のタイルへ送信することによって前記第２のキャッシュが前記第１のブロックを共有することを反映するように前記第３のディレクトリをアップデートすることと、
前記第１のキャッシュから第２のキャッシュへと移送されるブロックのブロックアドレスの第２のリストと、ブロックが移動させられる第２のキャッシュの識別子とを含むメッセージを前記第１のタイルから前記第４のタイルへ送信することによって前記第２のキャッシュが前記第２のブロックを共有することを反映するように前記第４のディレクトリをアップデートすることと、
前記第１のタイルにおいて、前記第３および第４のタイルからのディレクトリがアップデートされたことを示す承認の受信に応答して、前記第１のタイルから前記第２のタイルへの前記スレッドの移送を完了するために、前記第２のキャッシュに、前記第１のキャッシュから前記第１のブロックと前記第２のブロックとを移動させることと、
前記第２のコア上で前記スレッドを実行することと
を行うように構成される、マルチコアプロセッサ。
【発明の詳細な説明】
【背景技術】
【０００１】
特に断りがある場合でなければ、この節で記載される題材は本出願における特許請求の範囲に対する従来技術ではなく、この節で含まれることによって従来技術であるとは認められない。
【０００２】
ますます多くのコアが単一のマルチコアチップの中に統合されるので、スレッド移送は、マルチコアチップの機能、性能、および／または温度を管理し改善するためにますます利用され得る。典型的なスレッド移送のシナリオにおいて、第１のコアがスレッドを実行し第１のキャッシュを利用してもよい。第１のコアがスレッドを実行すると、第１のキャッシュはメモリから読み出された要求されたデータで満たされ得る。第１のキャッシュが満たされた後で、第１のキャッシュがキャッシュヒットを生じさせ得ることにより、第１のコアが第１のキャッシュから要求されたデータを効率的に読み出すことが出来る。
【０００３】
スレッド移送の間、コントローラが第１のコアから第２のコアにスレッドを移送させることにより、第２のコアがスレッドの実行を引き継いでもよい。第２のコアは「冷たい」（すなわち、空の）第２のキャッシュを利用してもよい。結果として、第２のキャッシュがキャッシュヒットではなくキャッシュミスを生じさせることにより、要求されたデータが第２のキャッシュにおいて見つけられないことがあり得る。各キャッシュミスの後、要求されたデータは、マルチコアチップ上の、第１のキャッシュなどの別のキャッシュからオンデマンドでフェッチされてもよい。第２のキャッシュが「温まる」（すなわち、要求されたデータで満たされる）時に、第２のキャッシュはキャッシュヒットを経験し得る。しかしながら、オンデマンドのフェッチを通じて第２のキャッシュを温めることは、かなりの時間およびエネルギーの消費をもたらし得る。大きなキャッシュを満たす時や、頻繁なスレッド移送を実装するアーキテクチャにおいては、こうした消費は特に負担になり得る。
【発明の概要】
【０００４】
本開示はマルチコアプロセッサにおいてキャッシュ状態の移動を加速させるための技術を概略的に記載する。例示的なマルチコアプロセッサは第１のタイルと第２のタイルと第３のタイルとを含んでもよい。マルチコアプロセッサは、キャッシュ状態の移動が加速され得る方法を行うように構成されてもよい。いくつかの例示的な方法においては、マルチコアプロセッサの第１のタイルにおける第１のコア上で実行するスレッドの、マルチコアプロセッサにおける第１のタイルから第２のタイルへの移送を開始することを含んでもよく、前記第１のタイルは第１のコアと第１のキャッシュとを備え、第２のタイルは第２のコアと第２のキャッシュとを備える。例示的な方法は、第１のキャッシュから第２のキャッシュに移動させられるブロックのブロックアドレスを決定することと、マルチコアプロセッサにおける第３のタイルを識別することとをさらに含んでもよく、前記第３のタイルはブロックアドレスに対応するディレクトリを備える。例示的な方法はまた、第２のキャッシュがブロックを共有することを反映するようにディレクトリをアップデートすることと、第１のタイルから第２のタイルへのスレッドの移送を完了させるために効果的な第２のタイルにおける第２のキャッシュに第１のタイルにおける第１のキャッシュからブロックを移動させることとを含んでもよい。
【０００５】
本開示はまた一部のマルチコアプロセッサを概略的に記載する。例示的なマルチコアプロセッサは、第１のタイルと第２のタイルと第３のタイルとを含んでもよい。第１のタイルは第１のコアと第１のキャッシュと第１のディレクトリとを含んでもよい。第２のタイルは第２のコアと第２のキャッシュと第２のディレクトリとを含んでもよい。第３のタイルは第３のコアと第３のキャッシュと第３のディレクトリとを含んでもよい。マルチコアプロセッサは、第１のタイルにおける第１のコア上で実行するスレッドの第１のタイルから第２のタイルへの移送を開始するように構成されてもよい。マルチコアプロセッサはまた第１のキャッシュから第２のキャッシュに移動させられるブロックのブロックアドレスを決定し、ディレクトリがブロックアドレスと対応することを識別するように構成されてもよい。マルチコアプロセッサは第２のキャッシュがブロックを共有することを反映するようにディレクトリをアップデートするよう、さらに構成されてもよい。マルチコアプロセッサはまた第１のタイルから第２のタイルへのスレッドの移送を完了させるために効果的な第２のタイルにおける第２のキャッシュに第１のタイルにおける第１のキャッシュからブロックを移動させるように構成されてもよい。
【０００６】
本開示はまたマルチコアプロセッサを概略的に記載する。一部の例示的なマルチコアプロセッサは第１のタイルと第２のタイルと第３のタイルと第４のタイルとを含んでもよい。第１のタイルは第１のコアと第１のキャッシュと第１のディレクトリとを含んでもよい。第２のタイルは第２のコアと第２のキャッシュと第２のディレクトリとを含んでもよい。第３のタイルは第３のコアと第３のキャッシュと第３のディレクトリとを含んでもよい。第４のタイルは第４のコアと第４のキャッシュと第４のディレクトリとを含んでもよい。マルチコアプロセッサは、第１のコア上で実行するスレッドの、第１のタイルから第２のタイルへの移送を開始するように構成されてもよい。マルチコアプロセッサはまた、第１のキャッシュから第２のキャッシュに移動させられる、第１のブロックのブロックアドレスの第１の組と第２のブロックのブロックアドレスの第２の組とを決定するように構成されてもよい。マルチコアプロセッサはさらに、第３のディレクトリがブロックアドレスの第１の組に対応することを識別するように構成されてもよく、第４のディレクトリがブロックアドレスの第２の組に対応することを識別してもよい。マルチコアプロセッサはまた、第２のキャッシュが第１のブロックを共有することを反映するように第３のディレクトリをアップデートするように構成されてもよく、第２のキャッシュが第２のブロックを共有することを反映するように第４のディレクトリをアップデートしてもよい。マルチコアプロセッサは、第１のタイルから第２のタイルへのスレッドの移送を完了するために効果的な第２のキャッシュに第１のキャッシュから第１のブロックと第２のブロックとを移動させるように構成されてもよい。マルチコアプロセッサはまた、第２のコア上でスレッドを実行するように構成されてもよい。
【０００７】
上記の要約は単なる例示であり、あらゆる意味で限定することを意図していない。上で記載された、例示的な態様、例示的な実施形態、および例示的な特徴に加えて、さらなる態様、さらなる実施形態、およびさらなる特徴が、添付の図面や以下の詳細な記載を参照して明らかになる。
【図面の簡単な説明】
【０００８】
本開示の上記の特徴や他の特徴は、添付の図面と共に、以下の記載や添付の特許請求の範囲からさらに完全に明らかになる。これらの図面は本開示に従ったいくつかの実施形態を描くだけであるので、本発明の範囲を限定すると考えられるべきではないことが理解でき、本開示は添付の図面の使用を通じてさらなる具体例や詳細と共に記載される。
【図１】キャッシュ状態の移動を加速させるように適合された例示的なディレクトリベースのマルチコアアーキテクチャを例示する機能的構成図である。
【図２】所与のブロックアドレスに対応するブロックを格納するキャッシュのうちの１つ以上を示すように適合された例示的なビットベクトルを例示する機能的構成図である。
【図３】所与のタイルから移動させられた各ブロックに対して、ディレクトリの状態やタイルの状態を示すレコードを維持するように適合された例示的なディレクトリベースのマルチコアアーキテクチャを例示する機能的構成図である。
【図４】マルチコアアーキテクチャにおいてキャッシュ状態の移動を加速させるための例示的なプロセスを例示する流れ図である。
【図５】例示的なコンピュータ計算システムを例示する構成図である。
【図６】コンピュータプログラム製品を例示する概略図であり、全てのコンピュータプログラム製品が、提示された少なくとも一部の実施形態に従って構成されている。
【発明を実施するための形態】
【０００９】
以下の詳細な記載において、本明細書の一部分を形成する添付の図面に参照が行われる。図面においては、特に断りがない限りは、同様な記号は典型的には同様な構成要素を識別する。詳細な記載、図面、および特許請求の範囲において記載された例示的な実施形態は限定とは考えられない。本明細書において提示される発明の精神や範囲を逸脱することなく、他の実施形態が利用されたり他の変更が行われたりしてもよい。本明細書において概略的に記載されると共に図面に例示されたような、本開示の態様が幅広い異なる構成で構成されたり置換されたり組み合わされたり分離されたり設計されたりすることが出来ることが容易に理解され、これらすべてが本明細書において明確に企図される。
【００１０】
本開示は、特に、スレッド移送の間またはスレッド移送の後に適切なキャッシュ間でキャッシュ状態を移動させるように適合されたディレクトリベースのマルチコアアーキテクチャに関する。例示的な例において、マルチコアプロセッサは第１のタイルと第２のタイルと第３のタイルとを含んでもよい。第１のタイルは、第１のコアと、関連する第１のキャッシュと、第１のディレクトリとを含んでもよい。第２のタイルは、第２のコアと、関連する第２のキャッシュと、第２のディレクトリとを含んでもよい。第３のタイルは、第３のコアと、関連する第３のキャッシュと、第３のディレクトリとを含んでもよい。第１のコアはスレッドを実行するように構成されてもよい。第１のコアがスレッドを実行すると、第１のキャッシュがメモリから引き出されたデータで満たされ得る。データは１つ以上のブロックアドレスと関連付けられてもよい。この例において、これらのブロックアドレスは第３のディレクトリに対応してもよい。すなわち、第３のディレクトリは、ブロックアドレスに対応するデータが第１のキャッシュにおいて見つけられることを示し得る。
【００１１】
コントローラが第１のタイルから第２のタイルにスレッドを移送するように構成されてもよい。この方法で、第２のコアがスレッドの実行を第１のコアから引き継ぐことが出来る。コントローラはまた、第１のキャッシュに格納されたデータと関連付けられるブロックアドレスを決定し、ブロックアドレスに対応するディレクトリを識別するように構成されてもよい。この例において、第３のディレクトリがブロックアドレスに対応してもよい。結果として、コントローラは、第２のキャッシュがデータを含むことを反映するように第３のディレクトリをアップデートするように構成されてもよい。コントローラはまた第１のキャッシュから第２のキャッシュにデータを移動させるように構成されてもよい。第２のコアがスレッドを実行した時に、第１のキャッシュ内のデータが第２のキャッシュに移動させられているので、第２のキャッシュはキャッシュヒットを生じさせることが出来る。
【００１２】
ここで図１を参照すると、機能的構成図が、本明細書において提示される少なくとも一部の実施形態に従って、キャッシュ状態の移動を加速させるように適合される例示的なディレクトリベースのマルチコアアーキテクチャ１００を例示する。アーキテクチャ１００はタイルＡ１０４Ａ、タイルＢ１０４Ｂ、タイルＣ１０４Ｃ及びタイルＤ１０４Ｄを含む複数のタイルを含んでもよい。タイル１０４Ａ〜１０４Ｄはコア１０６Ａ〜１０６Ｄ、キャッシュ１０８Ａ〜１０８Ｄ及びディレクトリ１１０Ａ〜１１０Ｄを含んでもよい。タイル１０４Ａ〜１０４Ｄは、まとめて、または概略的にタイル１０４と呼ばれてもよい。コア１０６Ａ〜１０６Ｄは、まとめてコア１０６と呼ばれてもよい。キャッシュ１０８Ａ〜１０８Ｄは、まとめて、または概略的にキャッシュ１０８と呼ばれてもよい。ディレクトリ１１０Ａ〜１１０Ｄは、まとめて、または概略的にディレクトリ１１０と呼ばれてもよい。図１に例示された例において、アーキテクチャ１００は１６個のタイル１０４を含んでもよい。他の実施形態において、アーキテクチャ１００は、任意の適切な数のタイルを含んでもよく、および／またはキャッシュを共有するタイルにおいて任意の適切な数のコアを含んでもよい。
【００１３】
コア１０６、キャッシュ１０８及びディレクトリ１１０のそれぞれが、タイル１０４のうちの１つに対応してもよい。タイル１０４はコントローラ１１２Ａ〜１１２Ｄをさらに含んでもよい。コントローラ１１２Ａ〜１１２Ｄは、まとめて、または概略的にコントローラ１１２と呼ばれてもよい。コントローラ１１２はそれぞれのキャッシュ１０８とそれぞれのディレクトリ１１０とにおける動作を行うためだけでなく、タイル１０４間の通信を可能にするように構成されてもよい。他の実施形態において、タイル１０４のうちの１つ以上が、それぞれ別個のキャッシュコントローラやディレクトリコントローラなどの複数のコントローラを含んでもよい。
【００１４】
ディレクトリ１１０はそれぞれ、ブロックアドレスに対応するブロックを保存するキャッシュ１０８のうちの１つ以上にブロックアドレスをマッピングするように構成されてもよい。ディレクトリ１１０のそれぞれが、例えば、様々な連続したアドレスなどの一組のブロックアドレスと関連付けられてもよい。他の実装において、ディレクトリ１１０のそれぞれに割り振られたブロックアドレスは、非連続的であってもよい（例えば、様々な粒度でインターリーブされてもよい）。一群のブロックアドレスがディレクトリ１１０の間で等しく割り当てられてもよい。例えば、ディレクトリ１１０Ａが第１の範囲の連続したブロックアドレスと関連付けられてもよく、ディレクトリ１１０Ｂが第２の範囲の連続したブロックアドレスと関連付けられてもよい、などである。ディレクトリ１１０とブロックアドレスとの間のマッピングは固定されても可変であってもよい。さらに、ディレクトリ１１０間のマッピングは、コントローラ１１２によって知られても、適切なソースからコントローラ１１２によって引き出されてもよい。
【００１５】
一部の実施形態において、ディレクトリ１１０のそれぞれが、複数のビットベクトルを含んでもよく、各複数のビットベクトルは、それぞれの組のブロックアドレスのうちの１つに対応する。ビットベクトルの例示的な例が図２に示され、図２は以下でさらに詳細に記載される。各ビットベクトルはキャッシュ１０８の数に対応する多数のビットを格納するように構成されてもよい。例えば、各ビットベクトルは１６個のビットを格納するように構成されてもよく、各ビットは１６個のキャッシュ（例えば、図１のキャッシュ１０８）のうちの１つに対応する。１６個のビットのうちのそれぞれが、少なくとも２つのビット値のうちの１つで構成されてもよい。第１のビット値（例えば、論理的「１」）は、対応するキャッシュが、ビットベクトルと関連付けられるブロックアドレスに対応するブロックを格納することを示してもよい。第２のビット値（論理的「０」）は、対応するキャッシュが、ビットベクトルと関連付けられるブロックアドレスに対応するブロックを格納しないことを示してもよい。様々な他の実施形態が、コアース・ビット・ベクトル、リミテッドポインタ、またはスパースディレクトリなどの他の適切なディレクトリフォーマットに依存してもよい。
【００１６】
第１の例示的な実装において、タイルＤ１０４ＤはコアＤ１０６Ｄを通じてスレッドを実行するように構成されてもよい。スレッドを実行する間に、コアＤ１０６Ｄはメモリ（図示せず）からデータを引き出し、キャッシュＤ１０８Ｄ上にデータを格納してもよい。コントローラＤ１１２Ｄは、タイルＤ１０４ＤからタイルＡ１０４Ａにスレッドを移送することで、次に、コアＡ１０４Ａがスレッドを実行し得るよう、適合されても良い。キャッシュＡ１０８Ａは最初は冷たいことがあり得るので、キャッシュＡ１０８Ａは、スレッドの実行の間に、要求されたデータに対するキャッシュミスをもたらし得る。各キャッシュミスに応答して、コントローラＡ１１２Ａは、要求されたデータのブロックアドレスにマッピングされるディレクトリを決定するように構成されてもよい。先に記載された通り、様々なブロックアドレスとそれぞれのディレクトリ１１０と間のマッピングは、コントローラ１１２によって知られるか、または適切なソースから引き出されるかであり得る。
【００１７】
この第１の例において、コントローラＡ１１２Ａは、ディレクトリＣ１１０Ｃが、要求されたデータのブロックアドレスをマッピングすることを決定してもよい。結果として、コントローラＡ１１２Ａは、ブロックアドレスに対応するブロックを格納するキャッシュに対するコントローラＣ１１２Ｃをクエリするように適合されてもよい。ディレクトリＣ１１０Ｃは、ブロックアドレスに対応するブロックを格納するキャッシュを識別するビットベクトルを含んでもよい。この第１の例において、ディレクトリＣ１１０Ｃは、キャッシュＣ１０８Ｃがブロックアドレスに対応するブロックを格納することを識別してもよい。したがって、コントローラＣ１１２Ｃは、ディレクトリＣ１１０Ｃを読み取り、キャッシュＣ１０８Ｃからブロックを引き出し、コントローラＡ１１２Ａにブロックを提供することによってクエリに応答するように構成されてもよい。次に、コントローラＡ１１２ＡがキャッシュＡ１０８Ａにブロックを格納してもよい。
【００１８】
上記の第１の例において、ブロックアドレスにマッピングされたディレクトリと、それぞれのブロックを格納するキャッシュとが同じタイル内に含まれる。第１の例は、タイルＡ１０４Ａとタイル１０４Ｃとを含む比較的ストレートフォワードな２ホップのコヒーレンストランザクションを例示するが、要求されたデータを格納するキャッシュはディレクトリと同じタイルには滅多に存在しない。すなわち、要求されたデータを格納するキャッシュは、典型的には、以下の別の例で例示されるように、ディレクトリとは異なるタイルに存在する。これらの場合のうちの多くにおいて、要求されたデータはタイルに含まれるキャッシュで見つけられ、そのタイルからスレッドが移送させられる。
【００１９】
第２の例の実装において、コントローラＡ１１２Ａは、ディレクトリＢ１１０Ｂが、要求されたデータのブロックアドレスをマッピングすることを決定するように構成されてもよい。結果として、コントローラＡ１１２Ａはブロックアドレスに対応するブロックを格納するキャッシュに関してコントローラＢ１１２Ｂをクエリするように適合されてもよい。ディレクトリＢ１１０Ｂはブロックアドレスに対応するブロックを格納するキャッシュを識別するビットベクトルを含んでもよい。この第２の例において、ディレクトリＢ１１０ＢはキャッシュＤ１０８Ｄがブロックアドレスに対応するブロックを格納することを識別してもよい。したがって、コントローラＢ１１２ＢはコントローラＤ１１２Ｄにクエリを転送するように適合されてもよい。コントローラＤ１１２ＤはキャッシュＤ１０８ＤからコントローラＡ１１２Ａにブロックを提供することによってクエリに応答してもよい。次に、コントローラＡ１１２Ａはキャッシュ１０８Ａにブロックを格納してもよい。
【００２０】
第１の例に記載された２ホップのコヒーレントトランザクションとは対照的に、第２の例は、タイルＡ１０４Ａ、タイルＢ１０４Ｂ及びタイルＤ１０４Ｄの間の３ホップのコヒーレントトランザクションを含む。特にキャッシュＡ１０８Ａが冷たい時に、キャッシュＡ１０８Ａが多くのキャッシュミスを生じさせ得るので、３ホップのトランザクションは費用がかかり得る。さらに、各トランザクションは逐次化されてもよいが、これもまた非常に費用がかかり得る。すなわち、多くの場合において、データは同じソース（例えば、第２の例のキャッシュＤ１０８Ｄ）から引き出される場合であっても、コントローラＡ１１２Ａは、各キャッシュミス後に、要求されたデータに対して別個のクエリを開始するように適合されてもよい。上記の第１および第２の例示的な実装に関する様々な欠点に対処する第３の例示的な実装がここで記載される。
【００２１】
第３の例示的な実装において、コントローラＤ１１２ＤがタイルＤ１０４ＤからタイルＡ１０４Ａへのスレッドの移送を開始するように構成された時には、コントローラＤ１１２ＤはまたキャッシュＤ１０８Ｄに格納されたブロックに対するブロックアドレスを決定するように構成されてもよい。コントローラＤ１１２ＤはキャッシュＤ１０８Ｄのキャッシュ・タグ・アレイ（図示せず）をスキャニングすることによってキャッシュＤ１０８Ｄに格納されたブロックに対するブロックアドレスを決定するように適合されてもよい。キャッシュＤ１０８Ｄに格納されたブロックのブロックアドレスを決定する際、コントローラＤ１１２Ｄはブロックアドレスにマッピングするディレクトリを決定するように適合されてもよい。
【００２２】
この第３の例において、コントローラＤ１１２Ｄは、ディレクトリＢ１１０ＢとディレクトリＣ１１０Ｃとがブロックアドレスの第１の組とブロックアドレスの第２の組とのそれぞれにマッピングすることを決定するように構成されてもよい。結果として、コントローラＤ１１２Ｄは、タイルＡ１０４Ａがブロックアドレスの第１の組に対応するブロックのシェアラであることを示すよう、ディレクトリＢ１１０ＢをアップデートするようにコントローラＢ１１２Ｂに命令するべく適合されてもよい。コントローラＢ１１２Ｂはブロックアドレスの第１の組に対応するビットベクトル内でキャッシュＡ１０８Ａに対応するビットのビット値を変えることによってディレクトリＢ１１０Ｂをアップデートするように適合されてもよい。コントローラＤ１１２ＤはまたタイルＡ１０４Ａがブロックアドレスの第２の組に対応するブロックのシェアラであることを示すよう、ディレクトリＣ１１０ＣをアップデートするべくコントローラＣ１１２Ｃに命令するように構成されてもよい。コントローラＣ１１２Ｃはブロックアドレスの第２の組に対応するビットベクトル内でキャッシュＡ１０８Ａに対応するビットのビット値を変えることによってディレクトリＣ１１０Ｃをアップデートするように構成されてもよい。
【００２３】
一部の実施形態において、コントローラＤ１１２Ｄは、単一のメッセージを送信することによってタイルＡ１０４Ａがブロックアドレスの第１の組に対応するブロックのシェアラであることを示すよう、ディレクトリＢ１１０ＢをアップデートするべくコントローラＢ１１２Ｂに命令するように適合されてもよい。コントローラＤ１１２Ｄはまた、単一のメッセージを送信することによってタイルＡ１０４Ａがブロックアドレスの第２の組に対応するブロックのシェアラであることを示すよう、ディレクトリＣ１１０ＣをアップデートするべくコントローラＣ１１２Ｃに命令するように適合されてもよい。例えば、メッセージはブロックアドレスのリストと、ブロックが移動させられる、キャッシュＡ１０８Ａなどのキャッシュの識別子とを含んでもよい。複数のブロックアドレスを含む単一のメッセージを送信することによって、コントローラ１１２は、キャッシュで取り損なわれたブロックアドレス毎に別個のメッセージが送信されるオンデマンドのフェッチと比較して、関連するディレクトリをより効率的にアップデートすることが出来る。
【００２４】
コントローラＢ１１２Ｂが、タイルＡ１０４Ａがブロックのシェアラであることを示すようにディレクトリＢ１１０Ｂをアップデートする時には、コントローラＢ１１２Ｂは第１のディレクトリの承認メッセージをコントローラＤ１１２Ｄに送信するように適合されてもよい。第１のディレクトリの承認メッセージは、ディレクトリＢ１１０Ｂが首尾よくアップデートされたこと、または将来行われる次のアップデートのために待ち行列に入れられたことを示してもよい。コントローラＤ１１２Ｄが、タイルＡ１０４Ａがブロックのシェアラであることを示すようにディレクトリＤ１１０Ｄをアップデートする時には、コントローラＤ１１２Ｄは第２のディレクトリの承認メッセージをコントローラＤ１１２Ｄに送信するように適合されてもよい。第２のディレクトリの承認メッセージは、ディレクトリＣ１１０Ｃが首尾よくアップデートされたこと、または将来行われる次のアップデートのために待ち行列に入れられたことを示してもよい。
【００２５】
関連するディレクトリの承認を受信する際、コントローラＤ１１２ＤはキャッシュＤ１０８ＤからキャッシュＡ１０８Ａへのブロックの移動を開始するように適合されてもよい。コントローラＡ１１２ＡがキャッシュＡ１０８Ａへのブロックの移動を完了した時には、コントローラＡ１１２Ａはキャッシュの承認をコントローラＤ１１２Ｄに送信するように構成されてもよい。キャッシュの承認は、ブロックが首尾よく移動させられたこと、またはキャッシュＡ１０８Ａにおける最終的な配置のために待ち行列に入れられたことを示してもよい。少なくとも１つのブロックが所与の時間にキャッシュＤ１０８ＤとキャッシュＡ１０８Ａとの間で移動させられてもよい。所与の時間に２つ以上のブロックを移動させることは、待ち時間、消費される帯域幅、および／または消費されるエネルギーを減少させる点で、アーキテクチャ１００においてさらなる効率性を提供し得る。共に移動させられるブロックはまたさらなる効率性のために圧縮されてもよい。
【００２６】
コントローラＤ１１２ＤがキャッシュＤ１０８ＤからキャッシュＡ１０８Ａにブロックを移動させる時には、コントローラＤ１１２ＤはキャッシュＤ１０８ＤからキャッシュＡ１０８Ａにブロックを複製しても動かしてもよい。コントローラＤ１１２ＤがキャッシュＤ１０８ＤからキャッシュＡ１０８Ａにブロックを複製する時には、ブロックはある程度の時間キャッシュＤ１０８ＤとキャッシュＡ１０８Ａとの両方に残ってもよい。例えば、コアＡ１０６Ａによるスレッドの実行が一時的でありコアＤ０１６Ｄにすぐに戻ることが見込まれる実装に対して複製が利用されてもよい。ブロックを複製する時に、コントローラＤ１１２Ｄはまたブロックのダーティエントリ（例えば、最近書き込まれたエントリ）を取り除くためにメイン・メモリ・コントローラに命令を送信してもよい。この方法で、キャッシュとメインメモリとにおけるブロックの複写が整合する。さらに、一部のコヒーレントプロトコルは、ブロックがキャッシュから取り戻されるまでメインメモリをアップデートすることなくダーティエントリがキャッシュに維持されることを可能にしてもよい。コントローラＤ１１２ＤがキャッシュＤ１０８ＤからキャッシュＡ１０８Ａにブロックを動かす時には、キャッシュＤ１０８Ｄのブロックが直ちに無効化されることにより、コアＤ１０６Ｄによって後に実行されうる他のスレッドに対して利用可能なキャッシュＤ１０８Ｄを作ってもよい。例えば、コアＡ１０６Ａによるスレッドの実行がより長い期間でありコアＤ１０６Ｄにすぐに戻ることが見込まれない実装のために、動かすことが利用されてもよい。
【００２７】
コントローラＤ１１２ＤがキャッシュＤ１０８ＤからキャッシュＡ１０８Ａにブロックを移動させる時には、コントローラＤ１１２ＤはキャッシュＤ１０８Ｄにおけるブロックのうちの一部または全部をキャッシュＡ１０８Ａに移動させてもよい。移動させられるブロックの数を制限することが、消費される帯域幅を減少させることが出来る。例えば、コントローラＤ１１２Ｄは最近最も使用された（「ＭＲＵ」）移動方針を実装することにより、適切な数のＭＲＵブロックだけがキャッシュＤ１０８ＤからキャッシュＡ１０８Ａに移動させられてもよい。ＭＲＵブロックの数はスレッドのアクセスパターン（例えば、スレッドの一時的な再使用行動）に基づいて決定されてもよい。
【００２８】
コントローラＤ１１２ＤがキャッシュＤ１０８ＤからキャッシュＡ１０８Ａにブロックを移動させる時には、コントローラＤ１１２Ｄが任意の適切な順序でブロックを移動させるように適合されてもよい。一部の実施形態において、コントローラＤ１１２Ｄはブロックのブロックアドレスに従って連続した順序でブロックを移動させるように構成されてもよい。一部の他の実施形態において、コントローラＤ１１２Ｄは最近最も使用されたものから最近最も使用されていないものという順序でブロックを移動させるように構成されてもよい。またさらに他の一部の実施形態において、コントローラＤ１１２Ｄはデータブロックを移動させる前に命令ブロックを移動させるように構成されてもよい。
【００２９】
一部の実施形態において上で記載された通り、コントローラＤ１１２Ｄはディレクトリの承認を受信した後にブロックの移動を開始するように適合されてもよい。一部の他の実施形態において、コントローラＤ１１２Ｄはディレクトリの承認を受信する前にブロックの移動を開始するように構成されてもよい。すなわち、コントローラＤ１１２Ｄはディレクトリをアップデートするのと同時にブロックを移動させてもよい。しかしながら、ディレクトリＢ１１０Ｂおよび／またはディレクトリＣ１１０Ｃが、キャッシュＡ１０８Ａがブロックを含むことを反映するようにアップデートされる前に、コントローラＡ１１２ＡがキャッシュＡ１０８Ａへのブロックの移動を完了した場合には、こうした手法はインコヒーレントキャッシュをもたらし得る。
【００３０】
無効化リクエストまたは介入リクエストが、対応するディレクトリに含まれる情報に基づいてブロックのシェアラにブロードキャストされてもよい。例えば、コントローラＤ１１２Ｄは、ディレクトリＢ１１０Ｂに含まれる情報に基づいてキャッシュＤ１０８Ｄに格納されたブロックに影響を与える無効化リクエストまたは介入リクエストを受信してもよい。しかしながら、ディレクトリＢ１１０Ｂがまだアップデートされていない場合には、ディレクトリＢ１１０ＢはキャッシュＤ１０８Ｄだけがブロックの複写を含むことを示してもよい。すなわち、ディレクトリＢ１１０Ｂは、キャッシュＡ１０８Ａもまたブロックの複写を含むことを示さないことがあり得る。結果として、ブロックが無効化または介入された時には、キャッシュＤ１０８Ｄにおけるブロックの複写がキャッシュＡ１０８Ａにおけるブロックの複写とは異なり得る。
【００３１】
キャッシュ間におけるこのインコヒーレンスの可能性に対処するために、タイルＤ１０４Ｄは、移動が開始されたが対応するディレクトリの承認がまだ受信されていないブロックのレコードを維持するように構成されてもよい。すなわち、レコードは、キャッシュＡ１０８Ａもまたブロックの複写を含むことを示してもよい。コントローラＤ１１２Ｄが無効化リクエストまたは介入リクエストを受信した時には、コントローラＤ１１２Ｄは、レコードに基づいて無効化リクエストまたは介入リクエストをコントローラＡ１１２Ａに転送するように適合されてもよい。この方法で、キャッシュＡ１０８Ａにおけるブロックの複写が状況に応じて無効化または介入され得る。様々な実施形態において、レコードが移動状態表（「ＴＳＴ」）で具体化されてもよく、移動状態表（「ＴＳＴ」）は図３を参照して以下でさらに詳細に記載される。
【００３２】
ここで図２を参照すると、機能的構成図が、本明細書において提示される少なくとも一部の実施形態に従って、所与のブロックアドレスに対応するブロックを格納するキャッシュ１０８のうちの１つ以上を示すように適合された例示的なビットベクトル２００を例示する。所与のディレクトリは複数のブロックアドレスに対応する複数のビットベクトルを含んでもよい。ビットベクトル２００は第１のビット２０２Ａ、第２のビット２０２Ｂ、第３のビット２０２Ｃ、第４のビット２０２Ｄ及びＮ番目のビット２０２Ｎを含んでもよい。第１のビット２０２Ａはマルチコアアークテクチャにおける第１のキャッシュに対応してもよい。第２のビット２０２Ｂはマルチコアアーキテクチャにおける第２のキャッシュに対応してもよい。第３のビット２０２Ｃはマルチコアアーキテクチャにおける第３のキャッシュに対応してもよい。第４のビット２０２Ｄはマルチコアアーキテクチャにおける第４のキャッシュに対応してもよい。Ｎ番目のビット２０２ＮはマルチコアアーキテクチャにおけるＮ番目のキャッシュに対応してもよい。また、スパースディレクトリ、リミテッドポインタ、またはコアースディレクトリなどの他のディレクトリフォーマットが利用されてもよい。
【００３３】
図２に例示された例において、論理的１ビットの値は、対応するキャッシュがブロックを格納することを示してもよく、論理的０ビットの値は、対応するキャッシュがブロックを格納しないことを示してもよい。したがって、第１のビット２０２ＡとＮ番目のビット２０２Ｎとにおける論理的１ビットの値は、第１のキャッシュとＮ番目のキャッシュとがブロックを共有することを示してもよい。ビットベクトル２００はマルチコアアーキテクチャにおけるキャッシュの数に対応する多数のビットを格納するように構成されてもよい。さらなるキャッシュがブロックを共有すると、および／またはキャッシュが無効化若しくは介入されると、ビットベクトル２００は、コヒーレントな状態と共に動的にアップデートされてもよい。
【００３４】
ここで図３を参照すると、機能的構成図が、本明細書において提示された少なくとも一部の実施形態に従って、所与のタイルから移動させられた各ブロックに対して、ディレクトリの状態とタイルの状態とを示すレコードを維持するように適合された例示的なディレクトリベースのマルチコアアーキテクチャ３００を例示する。アーキテクチャ３００は第１のタイル３０２Ａと第２のタイル３０２Ｂと第３のタイル３０２Ｃとを含み得る。第１のタイル３０２Ａは移動状態表（「ＴＳＴ」）３０４、コア３０６Ａ、キャッシュ３０８Ａ、ディレクトリ３１０Ａ及びコントローラ３１２Ａを含んでもよい。第２のタイル３０２Ｂと第３のタイル３０２Ｃとはそれぞれ、コア３０６Ｂ〜３０６Ｃ、キャッシュ３０８Ｂ〜３０８Ｃ、ディレクトリ３１０Ｂ〜３１０Ｃ及びコントローラ３１２Ｂ〜３１２Ｃを含んでもよい。
【００３５】
ＴＳＴ３０４は第１の列３１４Ａ、第２の列３１４Ｂ、第３の列３１４Ｃ及び第４の列３１４Ｄを含む複数の列を含むように構成されてもよい。列３１４Ａ〜３１４Ｄのそれぞれは、キャッシュ３０８Ａに格納されたブロックに対応してもよく、キャッシュ３０８Ａのために、コントローラ３１２Ａは別のタイル（例えば、タイル３０２Ｂ）にブロックの移動を開始し、対応するディレクトリをアップデートするためにさらに別のタイル（例えば、タイル３０２Ｃ）に命令を送信した。図３に例示された例において、第１の列３１４ＡはブロックＸに対応してもよく、第２の列３１４ＢはブロックＹに対応してもよい。さらに、第３の列３１４ＣはブロックＺに対応してもよく、第４の列３１４ＤはブロックＷに対応してもよい。ＴＳＴ３０４は、様々な実施形態に従って、キャッシュ３０８Ａのキャッシュ・タグ・アレイから分離されてもキャッシュ３０８Ａのキャッシュ・タグ・アレイと統合されてもよい。
【００３６】
ＴＳＴ３０４は第１のカラム３１８Ａ、第２のカラム３１８Ｂ並びに第３のカラム３１８Ｃを含む複数のカラムをさらに含んでもよい。第１のカラム３１８Ａでのテーブルエントリはブロック２１４Ａ〜２１４Ｄに対するブロックタグまたは他の適切な識別子を格納するように構成されてもよい。第２のカラム３１８Ｂでのテーブルエントリはディレクトリの状態に対応するビットを格納するように構成されてもよい。第３のカラム３１８Ｃでのテーブルエントリはタイルの状態に対応するビットを格納するように構成されてもよい。ディレクトリの状態は、所与のディレクトリが、コントローラ３１２Ａがディレクトリをアップデートするための命令を送信した後にアップデートされたか否かを示してもよい。所与のディレクトリは、コントローラ３１２Ａが対応するディレクトリの承認を受信した時に首尾よくアップデートされたと考慮されてもよい。タイルの状態は、所与のブロックの移動が完了したか否かを示してもよい。所与のブロックの移動は、コントローラ３１２Ａが対応するキャッシュの承認を受信した時に首尾よく完了したと考えられてもよい。アップデートされたディレクトリと、ブロックが移動させられるキャッシュとは、同じタイルに存在しても存在しなくてもよい。
【００３７】
図２に例示された例において、第２のカラム３１８Ｂ（すなわち、ディレクトリの状態のカラム）での論理的０ビットの値は、コントローラ３１２Ａが、ディレクトリ３１０Ｃをアップデートするためのメッセージをコントローラ３１２Ｃに送信したことを表してもよい。しかしながら、コントローラ３１２Ａは、ディレクトリ３１０Ｃが首尾よくアップデートされたことを示すディレクトリの承認をコントローラ３１２Ｃから受信していない。第２のカラム３１８Ｂでの論理的１ビットの値は、コントローラ３１２Ａがディレクトリの承認をコントローラ３１２Ｃから受信したことを表してもよい。第３のカラム３１８Ｃ（すなわち、タイルの状態のカラム）での論理的０ビットの値は、コントローラ３１２Ａがタイル３０２Ｂへの所与のブロックの移動を開始したことを表してもよい。しかしながら、コントローラ３１２Ａは、ブロックが首尾よく移動されたことを示すキャッシュの承認をコントローラ３１２Ｂから受信していない。第３のカラム３１８Ｃでの論理的１ビットの値は、コントローラ３１２Ａがキャッシュの承認をコントローラ３１２Ｂから受信したことを示してもよい。
【００３８】
ブロックＸに対応する第１の列３１４Ａ上のテーブルエントリは、ディレクトリの状態に対する論理的０ビットの値と、タイルの状態に対する論理的０の値とを含む。すなわち、コントローラ３１２ＡはブロックＸに関するディレクトリの承認またはキャッシュの承認をまだ受信していない。ブロックＹに対応する第２の列３１４Ｂ上のテーブルエントリは、ディレクトリの状態に対する論理的１ビットの値とタイルの状態に対する論理的０ビットの値とを含む。すなわち、コントローラ３１２Ａがディレクトリの承認を受信したが、ブロックＹに関するキャッシュの承認をまだ受信していない。
【００３９】
ブロックＺに対応する第３の列３１４Ｃ上のテーブルエントリは、ディレクトリの状態に対する論理的０ビットの値と、タイルの状態に対する論理的１ビットの値とを含む。すなわち、コントローラ３１２Ａはディレクトリの承認をまだ受信していないが、ブロックＺに関するキャッシュの承認を受信している。ブロックＷに対応する第４の列３１４Ｄ上のテーブルエントリは、ディレクトリの状態に対する論理的１ビットの値とタイル状態に対する論理的１ビットの値とを含む。すなわち、コントローラ３１２Ａはディレクトリの承認とキャッシュの承認とを受信する。ディレクトリのアップデートとキャッシュの移動との両方の完了により、続いて、ブロックＷがＴＳＴ３０４から除去される準備が出来る。
【００４０】
コントローラ３１２Ａは、無効化および／または介入のリクエストを維持（例えば、バッファリング）しコントローラ３１２Ｂに転送するか否かを決定するためにＴＳＴ３０４を利用するように構成されてもよい。ディレクトリの状態とタイルの状態との両方が論理的１ビットの値を有する時には、ディレクトリ３１０Ｃは、キャッシュ３０８Ｂが所与のブロックを共有することを適切に示してもよい。結果として、コントローラ３１２Ｂは、無効化および／または介入のあらゆるリクエストのブロードキャストを適切に受信してもよい。この場合、コントローラ３１２Ａは無効化および／または介入のリクエストを維持もコントローラ３１２Ｂに転送もしないように構成されてもよい。
【００４１】
ディレクトリの状態が論理的０ビットの値を有する時には、ディレクトリ３１０Ｃは、キャッシュ３０８Ｂが所与のブロックを共有することを適切に示さないこともあり得る。結果として、コントローラ３１２Ｂは無効化および／または介入のリクエストのブロードキャストを全く受信しないこともあり得る。この場合、コントローラ３１２Ａは無効化および／または介入のリクエストを維持してコントローラ３１２Ｂに転送するように構成されてもよい。タイルの状態が論理的１ビットの値である場合には、キャッシュ３０８Ｂはブロックを格納してもよい。この場合、コントローラ３１２Ａは無効化および／または介入のリクエストをコントローラ３１２Ｂに直ちに転送するように構成されてもよい。
【００４２】
タイルの状態が論理的０ビットの値である場合には、キャッシュ３０８Ｂがブロックを格納しないことがあり得る。この場合、コントローラ３１２Ａがキャッシュの承認を受信するまで、コントローラ３１２Ａはコントローラ３１２Ｂに無効化および／または介入のリクエストを転送するのを遅らせるように構成されてもよい。ディレクトリの状態が論理的１ビットの値であり、タイルの状態が論理的０ビットの値である時には、ディレクトリ３１０Ｃは適切にアップデートされてもよいが、キャッシュ３０８Ｂはブロックを格納しないこともあり得る。この場合、コントローラ３１２Ａがキャッシュの承認を受信した時には、コントローラ３１２Ａは無効化および／または介入のリクエストをコントローラ３１２Ｂに転送するように構成されてもよい。
【００４３】
ここで図４を参照すると、流れ図が、本発明において提示された少なくとも一部の実施形態に従ってマルチコアアーキテクチャにおいてキャッシュの状態の転送を加速させるように適合された例示的なプロセス４００を例示する。プロセス４００は、ブロック４０２〜４１０のうちの１つ以上によって例示されるような、様々な動作、機能、または作用を含んでもよい。動作は図４に示された連続した順序に厳密には従わないことがあり得る。例えば、２つの動作は互いに重ねられてもよい。
【００４４】
プロセス４００はブロック４０２（第１のタイルから第２のタイルにスレッドを移送させる）で開始してもよく、コントローラは第１のタイルから第２のタイルにスレッドを移送させるように構成されてもよい。移送の結果として、第２のタイルにおける第２のコアが第１のタイルにおける第１のコアからスレッドの実行を引き継ぐことが出来る。マルチコアプロセッサなどのマルチコアアーキテクチャは、第１のタイル、第２のタイル及び第３のタイルを含んでもよい。第１のタイルは第１のコア、第１のキャッシュ及び第１のディレクトリを含んでもよい。第２のタイルは第２のコア、第２のキャッシュ及び第２のディレクトリを含んでもよい。第３のタイルは第３のコア、第３のキャッシュ及び第３のディレクトリを含んでもよい。ブロック４０２にブロック４０４が続いてもよい。
【００４５】
ブロック４０４（第１のキャッシュから第２のキャッシュに移動させられるブロックのブロックアドレスを決定する）において、コントローラは第１のキャッシュから第２のキャッシュに転送されるブロックに関する１つ以上のブロックアドレスを決定するように構成されてもよい。一部の実施形態において、コントローラは第１のキャッシュと関連付けられるキャッシュ・タグ・アレイをスキャニングすることによって第１のキャッシュから第２のキャッシュに転送されるブロックのブロックアドレスを決定するように構成されてもよい。ブロック４０４にブロック４０６が続いてもよい。
【００４６】
ブロック４０６（ブロックアドレスに対応する、第３のタイルにおける第３のディレクトリを識別する）において、コントローラはブロックアドレスに対応する第３のディレクトリを識別するように構成されてもよい。様々なブロックアドレスとディレクトリとの間のマッピングは固定されても可変であってもよい。コントローラはマッピングを既知であってもよく（例えば、コントローラにハードコードされても）、又は適切なソース（例えば、メモリ、格納デバイス、データベースなど）からマッピングを引き出してもよい。ブロック４０６にブロック４０８が続いてもよい。
【００４７】
ブロック４０８（第２のキャッシュがブロックを共有することを反映するように第３のディレクトリをアップデートする）において、コントローラは第２のキャッシュが第１のキャッシュとブロックを共有することを反映するべく、第３のディレクトリをアップデートするように構成されてもよい。一部の実施形態において、コントローラはディレクトリをアップデートするために第３のタイルに命令を送信するように構成されてもよい。第３のタイルは第２のキャッシュに対応するビットのビット値を関連するビットベクトル内で変更することによってディレクトリを更新するように構成されてもよい。ブロック４０８にブロック４１０が続いてもよい。
【００４８】
ブロック４１０（第１のキャッシュから第２のキャッシュにブロックを移動させる）において、コントローラが第１のタイルから第２のタイルへのスレッドの移送を完了させるために効果的な第２のキャッシュに第１のキャッシュからブロックを移動させるように構成されてもよい。ブロック４１０の後で、プロセス４００は繰り返す（例えば、周期的に、連続的に、または必要に応じてオンデマンドで）か、または終了するかのいずれかであり得る。
【００４９】
図５は、本明細書において提示された少なくとも一部の実施形態を実装することが出来る例示的なコンピュータ計算システムのための例示的なコンピュータ・ハードウェア・アーキテクチャを示すコンピュータアーキテクチャの図である。図５はプロセッサ５１０とメモリ５２０、及び１つ以上のドライブ５３０とを含むコンピュータ５００を含む。コンピュータ５００は、従来のコンピュータシステム、内蔵制御コンピュータ、ラップトップ、もしくはサーバコンピュータ、モバイルデバイス、セットトップボックス、キオスク、車両情報システム、携帯電話、オーダメイド機械、または他のハードウェアプラットフォームとして実装されてもよい。
【００５０】
ドライブ５３０と、関連するコンピュータ格納媒体とは、コンピュータ５００に対するコンピュータ読み取り可能な命令、データ構造、プログラムモジュール、および他のデータの格納を提供する。ドライブ５３０は、オペレーティングシステム５４０、アプリケーションプログラム５５０、プログラムモジュール５６０及びデータベース５８０を含むことが出来る。プログラムモジュール５６０は制御モジュール５０５を含んでもよい。制御モジュール５０５は、上でより詳細に記載されたような（例えば、図１〜４のうちの１つ以上に関する先の記載を参照されたい）、キャッシュの状態の移動を加速させるためのプロセス４００を実行するように適合されてもよい。コンピュータ５００はユーザ入力デバイス５９０をさらに含み、ユーザ入力デバイス５９０を通してユーザはコマンドとデータとを入力してもよい。入力デバイスは、電子デジタイザ、マイク、キーボード及びマウス、トラックボール、またはタッチパッドと通常呼ばれるポインティングデバイスとを含むことが出来る。他の入力デバイスは、ジョイスティック、ゲームパッド、パラボラアンテナ、スキャナなどを含んでもよい。
【００５１】
これらの入力デバイスや他の入力デバイスはシステムバスに結合されるユーザ入力インタフェースを通じてプロセッサ５１０に結合されることが出来るが、パラレルポート、ゲームポート、またはユニバーサル・シリアル・バス（「ＵＳＢ」）などの他のインタフェースやバスの構造体に結合されてもよい。コンピュータ５００などのコンピュータはまた、スピーカなどの他の周辺出力デバイスを含んでもよく、その周辺出力デバイスは周辺出力インタフェース５９４などを通じて結合されてもよい。
【００５２】
コンピュータ５００はネットワークインタフェース５９６に結合された遠隔のコンピュータなどの１つ以上のコンピュータに対する論理接続を使用して、ネットワーク接続された環境において動作してもよい。遠隔のコンピュータはパーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、または他の共通ネットワークノードであってもよく、コンピュータ５００に関して上で記載された要素のうちの多くまたは全てを含むことが出来る。ネットワーク接続環境は、オフィス、企業のワイド・エリア・ネットワーク（「ＷＡＮ」）、ローカル・エリア・ネットワーク（「ＬＡＮ」）、イントラネット、およびインターネットにおいて一般的である。
【００５３】
ＬＡＮまたはＷＬＡＮのネットワーク接続環境において使用された時に、コンピュータ５００はネットワークインタフェース５９６またはアダプタを通じてＬＡＮに結合されてもよい。ＷＡＮネットワーク接続環境において使用される時に、コンピュータ５００は典型的には、インターネットまたはネットワーク５０８などのＷＡＮを通じて通信を確立するためのモデムや他の手段を含む。ＷＡＮは、インターネット、例示されたネットワーク５０８、様々な他のネットワーク、またはそれらの任意の組み合わせを含み得る。コンピュータ間の、通信リンク、リング、メッシュ、バス、クラウド、またはネットワークを確立する他のメカニズムが使用されてもよいことが理解される。
【００５４】
一部の実施形態に従って、コンピュータ５００はネットワーク接続環境に結合されてもよい。コンピュータ５００は、１つ以上の物理的なコンピュータ読み取り可能ストレージ媒体、ドライブ５３０に関連づけられた媒体又はその他のストレージデバイスを含んでもよい。システムバスはプロセッサ５１０がコードおよび／またはデータをコンピュータ読み取り可能な格納媒体に読み込んだり、コンピュータ読み取り可能な格納媒体から読み取ったりすることを可能にしてもよい。媒体は任意の適切な技術を使用して実装される格納要素の形態で装置を表してもよく、その任意の適切な技術は、半導体、磁気材料、光学的材料、電気格納装置、電気化学格納装置、またはその他任意のこうした格納技術を含むが、それらには限定されない。媒体は、ＲＡＭ、ＲＯＭ、フラッシュまたは他の種類の揮発性または不揮発性のメモリ技術として特徴付けられるメモリ５２０と関連付けられる構成要素を表してもよい。媒体はまた、格納ドライブ５３０として実装される格納装置または別の方法で実装される二次格納装置を表してもよい。ハードドライブの実装はソリッドステートとして特徴付けられてもよく、または磁気的に符号化された情報を格納する回転媒体を含んでもよい。
【００５５】
格納媒体は１つ以上のプログラムモジュール５６０を含んでもよい。プログラムモジュール５６０は、プロセッサ５１０にロードされて実行された時に、汎用コンピュータ計算システムを特定用途向けコンピュータ計算システムに転換するソフトウェア命令を含んでもよい。この記載全体を通じて詳述される通り、プログラムモジュール５６０は、様々な器具または技術を提供し得、その様々な器具または技術によって、コンピュータ５００は、本明細書において考察された、構成要素、論理フロー、および／またはデータ構造を使用して、全システムまたは全動作環境に関与する。
【００５６】
プロセッサ５１０は任意の数のトランジスタまたは他の回路要素から構築されてもよく、それらのトランジスタまたは他の回路要素は、個々に、またはまとめて任意の数の状態を呈してもよい。さらに具体的には、プロセッサ５１０は状態機械または有限状態機械として動作してもよい。こうした機械は、プログラムモジュール５６０内に含まれる実行可能な命令をロードすることによって、第２の機械または特定の機械に転換されてもよい。これらのコンピュータ実行可能な命令はプロセッサ５１０が状態間でどのように遷移するかを特定し、それによりプロセッサ５１０を構成するトランジスタまたは他の回路要素を第１の機械から第２の機械に転換することによってプロセッサ５１０を転換させてもよい。いずれかの機械の状態がまた、１つ以上の入力デバイス５９０、ネットワークインタフェース５９６、他の周辺機器、他のインタフェース、または１人以上のユーザまたは他の当事者から入力を受信することによって転換されてもよい。いずれかの機械が、プリンタ、スピーカ、ビデオディスプレイなどの様々な出力デバイスの状態や様々な物理的特性などを転換してもよい。
【００５７】
プログラムモジュール５６０を符号化はまた、格納媒体の物理的な構造を転換してもよい。物理的な構造の具体的な転換は、本記載の様々な実装において様々な要因に依存し得る。こうした要因の例は、一次格納装置または二次格納装置として特徴付けられる格納媒体を実装するために使用される技術などを含むが、それらには限定されない。例えば、格納媒体が半導体ベースのメモリとして実装される場合には、プログラムモジュール５６０は、ソフトウェアが半導体メモリ５２０内に符号化された時に半導体メモリ５２０の物理的状態を転換してもよい。例えば、ソフトウェアは、半導体メモリ５２０を構成する、トランジスタ、コンデンサ、または他のディスクリート回路要素の状態を転換してもよい。
【００５８】
別の例として、格納媒体はドライブ５３０などの磁気的技術または光学的技術を使用して実装されてもよい。こうした実装において、プログラムモジュール５６０は、ソフトウェアが磁気的媒体または光学的媒体内に符号化される時に、磁気的媒体または光学的媒体の物理的状態を転換してもよい。これらの転換は所与の磁気的媒体内の特定の場所の磁気的特性を変えることを含んでもよい。これらの転換はまた、所与の光学的媒体内の特定の場所の光学的特性を変えるためにそれらの場所の物理的特徴または特性を変えることを含んでもよい。物理的媒体の様々な他の転換が本記載の範囲や精神を逸脱することなく可能であることが理解されるべきである。
【００５９】
ここで図６を参照すると、図６は、本明細書において提示された少なくとも一部の実施形態に従って構成された、コンピュータ計算デバイス上でコンピュータプロセスを実行するためのコンピュータプログラムを含むコンピュータプログラム製品６００の部分図を例示する概略図である。例示的なコンピュータプログラム製品の例示的な実施形態が信号搬送媒体６０２を使用して提供され、６０４：マルチコアプロセッサにおける第１のタイルから第２のタイルに、第１のタイルにおける第１のコア上で実行するスレッドの移送を開始するための１つ以上の命令；第１のタイルにおける第１のキャッシュから第２のタイルにおける第２のキャッシュに移動されるブロックのブロックアドレスを決定するための１つ以上の命令；ブロックアドレスに対応するディレクトリを備える第３のタイルを識別するための１つ以上の命令；第２のキャッシュがブロックを共有することを反映するようにディレクトリをアップデートするための１つ以上の命令；または第１のキャッシュから第２のキャッシュにブロックを移動させるための１つ以上の命令、のうちの少なくとも１つの命令を含んでもよい。一部の実施形態において、１つ以上のコンピュータプログラム製品６００の信号搬送媒体６０２はコンピュータ読み取り可能な媒体６０６、記録可能な媒体６０８、および／または通信媒体６１０を含む。
【００６０】
本明細書に記載された発明は、コンピュータシステム上でのオペレーションシステムおよびアプリケーションプログラムの実行に関して実行するプログラムモジュールに関して概略的に提示されてきたが、当業者は他の実装が他の種類のプログラムモジュールと組み合わせて行われてもよいことを認識する。概して、プログラムモジュールは、特定のタスクを行うか、または特定の抽象データ種を実装する、ルーチン、プログラム、構成要素、データ構造、および他の種類の構造を含む。さらに、本明細書において記載された発明は、ハンドヘルドデバイス、マルチコア・プロセッサ・システム、マイクロプロセッサベースの消費者電子機器もしくはプログラマブル消費者電子機器、ミニコンピュータ、メインフレームコンピュータなどを含む他のコンピュータシステム構成と共に実施されてもよいことを当業者は理解する。
【００６１】
本開示は本出願において記載された特定の実施形態に関して制限されず、それらの実施形態は様々な態様の例示であることが意図される。当業者には理解される通り、多くの改変と変形とが本発明の精神と範囲とを逸脱することなく行われることが出来る。本明細書において列挙されたものに加えて、本開示の範囲内の、機能的に同等な方法や装置が、上の記載から当業者には明らかである。こうした改変や変形は添付の特許請求の範囲内に該当することを意図される。本開示は、こうした特許請求の範囲が権利を与えられる均等物の全範囲と共に、添付の特許請求の範囲の用語によってのみ制限される。本開示は、特定の方法、試薬、化合物、組成物、または生物学的システムに限定されず、それらは、当然変更することが出来ることを理解されたい。本明細書において使用される用語法は特定の実施形態を記載する目的のためだけであり、限定することを意図していないことも理解されたい。
【００６２】
本明細書における実質的に全ての複数形および／または単数形の用語の使用に関して、文脈および／または用途に適切である場合には、当業者は複数形から単数形および／または単数形から複数形に言い換えることが出来る。様々な単数形／複数形の置換が明確にする目的のために本明細書において明示的に述べられてもよい。
【００６３】
概して、本明細書において使用された用語、特に添付の特許請求の範囲（例えば、添付の特許請求の範囲の本文）において使用される用語は「開いた」用語（例えば、「含んでいる」という用語は「含んでいるが、それらには限定されない」と解釈されるべきであり、「有する」という用語は「少なくとも有する」と解釈されるべきであり、「含む」という用語は「含むが、それらには限定されない」と解釈されるべきであるなどである）と概略的に意図されることが当業者には理解される。導入された請求項の記載に関する特定の数字が意図される場合には、こうした意図がその請求項において明示的に記載されたことと、こうした記載が存在しない場合には、こうした意図が存在しないこととが当業者にはさらに理解される。例えば、理解を助けるために、以下の添付の特許請求の範囲は、請求項の記載を導入するために導入語句「少なくとも１つ」および「１つ以上」の使用を含んでもよい。しかしながら、同じ請求項が「１つ以上」または「少なくとも１つ」などの導入語句と「ａ」または「ａｎ」などの不定冠詞とを含む時であっても、こうした語句の使用は不定冠詞「ａ」または「ａｎ」による請求項の記載の導入が、たった１つのこうした記載を含む実施形態にこうした導入された請求項の記載を含むあらゆる特定の請求項を限定することを含意するように解釈されるべきではない（例えば、「ａ」および／または「ａｎ」は「少なくとも１つ」または「１つ以上」を意味すると解釈されるべきである）。請求項の記載を導入するために使用される定冠詞の使用の場合にも同様である。また、導入される請求項の記載の特定の数字が明示的に記載される場合であっても、こうした記載は少なくとも記載された数字を意味するように解釈されるべきであることを当業者は認識する（例えば、他の修飾語を伴わない「２つの記載」という単なる記載は、少なくとも２つの記載または２つ以上の記載を意味する）。さらに、「Ａ、Ｂ、およびＣなどのうちの少なくとも１つ」に対する慣例的な類似物が使用される例においては、概して、こうした構成は当業者がその慣例を理解する意味が意図される（例えば、「Ａ、Ｂ、およびＣのうちの少なくとも１つを有するシステム」は、Ａを単独で有するシステム、Ｂを単独で有するシステム、Ｃを単独で有するシステム、ＡとＢとを共に有するシステム、ＡとＣとを共に有するシステム、ＢとＣとを共に有するシステム、および／またはＡとＢとＣとを共に有するシステムなどを含むが、それらには限定されない）。「Ａ、Ｂ、またはＣなどのうちの少なくとも１つ」に対する慣例的な類似物が使用される例においては、概して、こうした構成は当業者がその慣例を理解する意味が意図される（例えば、「Ａ、Ｂ、またはＣのうちの少なくとも１つを有するシステム」は、Ａを単独で有するシステム、Ｂを単独で有するシステム、Ｃを単独で有するシステム、ＡとＢとを共に有するシステム、ＡとＣとを共に有するシステム、ＢとＣとを共に有するシステム、および／またはＡとＢとＣとを共に有するシステムなどを含むが、それらには限定されない）。詳細な説明、特許請求の範囲、または図面における２つ以上の代替用語を表す事実上全ての離接語および／または離接語句は、用語のうちの１つ、用語のうちのいずれか、または両方の用語を含む可能性を企図するように理解されるべきであることが当業者によってさらに理解される。例えば、「ＡまたはＢ」という語句は、「Ａ」もしくは「Ｂ」、または「ＡおよびＢ」の可能性を含むように理解される。
【００６４】
さらに、本開示の特徴または態様がマーカッシュ群で記載される場合、本開示もまた、マーカッシュ群により、マーカッシュ群に所属するもののうちの個々のものまたは部分群に関して記載されることを当業者は認識する。
【００６５】
当業者によって理解される通り、明細書を提供する点などのありとあらゆる目的のために、本明細書において記載された全範囲もまた、考えられるありとあらゆる部分範囲やその部分範囲の組み合わせを含む。列挙されたあらゆる範囲は、その同じ範囲が、少なくとも等しい、半分、三分の一部分、四分の一部分、五分の一部分、十分の一部分などに解体されることを充分に記載したり可能にしたりすると容易に認識されることが出来る。非限定的な例として、本明細書で考察された各範囲は、下側三分の一、中間三分の一、そして上側三分の一などに容易に分割されることが出来る。やはり当業者によって理解される通り、「まで」、「少なくとも」、「よりも多い」、「よりも少ない」などの全ての用語は、記載された数字を含み、上で考察された通りに、次に部分範囲に分解されることが出来る範囲を指す。最終的に、当業者には理解される通り、ある範囲は、それぞれの個々のものを含む。従って、例えば、１つ〜３つの要素を有する群は、１つ、２つ、または３つの要素を有する群を指す。同様に、１つ〜５つの要素を有する群は、１つ、２つ、３つ、４つ、５つの要素を有する群などを指す。
【００６６】
様々な態様と様々な実施形態とが本明細書において記載されてきたが、他の態様や実施形態が当業者には明らかである。本明細書において開示された様々な態様と様々な実施形態とは例示の目的のためであり、限定することを意図しておらず、真の範囲と精神とは以下の特許請求の範囲によって示される。
【図１】
0005603507.tif 000002
【図２】
0005603507.tif 000003
【図３】
0005603507.tif 000004
【図４】
0005603507.tif 000005
【図５】
0005603507.tif 000006
【図６】
0005603507.tif 000007