(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-09-12
(54)【発明の名称】符号化イネーブルクロックゲータ
(51)【国際特許分類】
G11C 7/10 20060101AFI20240905BHJP
G06F 12/0895 20160101ALI20240905BHJP
【FI】
G11C7/10 240
G06F12/0895 108
G11C7/10 510
G11C7/10 415
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024516568
(86)(22)【出願日】2022-07-27
(85)【翻訳文提出日】2024-04-05
(86)【国際出願番号】 US2022038560
(87)【国際公開番号】W WO2023048821
(87)【国際公開日】2023-03-30
(32)【優先日】2021-09-24
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】パトリック ジェイ. シバーズ
【テーマコード(参考)】
5B205
【Fターム(参考)】
5B205NN64
5B205UU31
(57)【要約】
プロセッサ及びデータストレージ構造を含む処理デバイスが提供される。データストレージ構造は、複数のラインを含むデータストレージアレイを含む。各ラインは、データビットを記憶するように構成された少なくとも1つのAラッチと、クロックゲータと、を含む。データストレージ構造は、異なるクロックサイクルにわたって、複数のラインのうち何れかのラインの少なくとも1つのAラッチに書き込まれる異なるデータビットを記憶するように構成された書き込みデータBラッチを含む。データストレージ構造は、複数のラインのクロックゲータによって共有される複数の書き込みインデックスBラッチも含む。複数の書き込みインデックスBラッチは、異なるクロックサイクルにわたって、対応するデータビットが記憶されるラインにインデックスを付ける値を有するインデックスビットの組み合わせを記憶するように構成されている。
【選択図】
図3
【特許請求の範囲】
【請求項1】
プロセッサと、
データストレージ構造と、を備える処理デバイスであって、
前記データストレージ構造は、
複数のラインを含むデータストレージアレイであって、各ラインは、データビットを記憶するように構成された少なくとも1つのAラッチと、クロックゲータと、を含む、データストレージアレイと、
異なるクロックサイクルにわたって、前記複数のラインのうち何れかのラインの前記少なくとも1つのAラッチに書き込まれる異なるデータビットを記憶するように構成された書き込みデータBラッチと、
前記複数のラインの前記クロックゲータによって共有される複数の書き込みインデックスBラッチであって、前記異なるクロックサイクルにわたって、対応するデータビットが記憶されるラインにインデックスを付ける値を有するインデックスビットの組み合わせを記憶するように構成された複数の書き込みインデックスBラッチと、を備える、
処理デバイス。
【請求項2】
前記データストレージ構造内の前記書き込みインデックスBラッチの数は、前記ストレージアレイ内の各ラインにインデックスを付けるために使用されるインデックスビットの数に対応する、
請求項1の処理デバイス。
【請求項3】
前記対応するデータビットは各ラインに供給され、
前記インデックスビットの組み合わせの値によってインデックス付けされた前記ラインの前記少なくとも1つのAラッチは、前記対応するデータビットによって更新され、
前記インデックスビットの組み合わせによってインデックス付けされていない他のラインのAラッチに以前に記憶されたデータは維持される、
請求項1の処理デバイス。
【請求項4】
前記インデックスビットの組み合わせによってインデックス付けされた前記ラインの前記クロックゲータはイネーブルされ、
前記他のラインの各々の前記クロックゲータはイネーブルされない、
請求項3の処理デバイス。
【請求項5】
前記ラインの前記少なくとも1つのAラッチの更新されたデータは前記ラインから読み出され、
前記他のラインのAラッチに維持されたデータは前記他のラインから読み出される、
請求項4の処理デバイス。
【請求項6】
前記インデックスビットの組み合わせを復号するように構成されたデコーダを備え、
前記インデックスビットの復号された組み合わせによってインデックス付けされた前記ラインの前記クロックゲータはイネーブルされる、
請求項4の処理デバイス。
【請求項7】
前記プロセッサは、
前記ラインを前記対応するデータビットで更新するための命令を提供することと、
前記ラインにインデックスを付ける前記インデックスビットの組み合わせを復号するように前記デコーダを制御することと、
を行うように構成されている、
請求項6の処理デバイス。
【請求項8】
前記データストレージアレイの各ラインは1ビット幅であり、各ラインは、前記データビットを記憶するように構成された単一のAラッチを含む、
請求項1の処理デバイス。
【請求項9】
処理デバイスとともに使用するためのデータストレージ構造であって、
前記データストレージ構造は、
複数のラインを含むデータストレージアレイであって、各ラインは、データビットを記憶するように構成された少なくとも1つのAラッチと、クロックゲータと、を含む、データストレージアレイと、
異なるクロックサイクルにわたって、前記複数のラインのうち何れかのラインの前記少なくとも1つのAラッチに書き込まれる異なるデータビットを記憶するように構成された書き込みデータBラッチと、
前記複数のラインの前記クロックゲータによって共有される複数の書き込みインデックスBラッチであって、前記異なるクロックサイクルにわたって、対応するデータビットが記憶されるラインにインデックスを付ける値を有するインデックスビットの組み合わせを記憶するように構成された複数の書き込みインデックスBラッチと、を備える、
データストレージ構造。
【請求項10】
前記データストレージ構造内の前記書き込みインデックスBラッチの数は、前記ストレージアレイ内の各ラインにインデックスを付けるために使用されるインデックスビットの数に対応する、
請求項8のデータストレージ構造。
【請求項11】
前記対応するデータビットは各ラインに供給され、
前記インデックスビットの組み合わせの値によってインデックス付けされた前記ラインの前記少なくとも1つのAラッチは、前記対応するデータビットによって更新され、
前記インデックスビットの組み合わせによってインデックス付けされていない他のラインのAラッチに以前に記憶されたデータは維持される、
請求項9のデータストレージ構造。
【請求項12】
前記インデックスビットの組み合わせによってインデックス付けされた前記ラインの前記クロックゲータはイネーブルされ、
前記他のラインの各々の前記クロックゲータはイネーブルされない、
請求項11のデータストレージ構造。
【請求項13】
前記ラインの前記少なくとも1つのAラッチの更新されたデータは前記ラインから読み出され、
前記他のラインのAラッチに維持されたデータは前記他のラインから読み出される、
請求項12のデータストレージ構造。
【請求項14】
前記インデックスビットの組み合わせを復号するように構成されたデコーダを備え、
前記インデックスビットの復号された組み合わせによってインデックス付けされた前記ラインの前記クロックゲータはイネーブルされる、
請求項12のデータストレージ構造。
【請求項15】
前記ストレージアレイは、1ビット幅のラインアレイであり、各ラインは、前記データビットを記憶するように構成された単一のAラッチを含む、
請求項9のデータストレージ構造。
【請求項16】
データストレージアレイにアクセスする方法であって、
書き込みデータBラッチからストレージアレイの複数のラインの各々にデータビットを供給するステップであって、各ラインは、少なくとも1つのAラッチと、クロックゲータと、を含む、ステップと、
前記複数のラインの前記クロックゲータによって共有される書き込みインデックスBラッチ内のインデックスビットの組み合わせによってインデックス付けされた前記複数のラインのうち何れかのラインの前記クロックゲータをイネーブルするステップと、
前記インデックスビットの組み合わせの値によってインデックス付けされた前記ラインの前記少なくとも1つのAラッチを前記データビットで更新するステップと、
前記インデックスビットの組み合わせによってインデックス付けされていない他のラインの少なくとも1つのAラッチに以前に記憶されたデータを維持するステップと、を含む、
方法。
【請求項17】
前記ラインの前記少なくとも1つのAラッチにおいて更新された前記データビットを読み出すステップと、
前記他のラインのAラッチに維持されたデータを読み出すステップと、を含む、
請求項16の方法。
【請求項18】
前記インデックスビットの組み合わせを復号するステップと、
前記インデックスビットの復号された組み合わせによってインデックス付けされた前記ラインの前記クロックゲータをイネーブルにするステップと、を含む、
請求項16の方法。
【請求項19】
前記ラインを前記データビットで更新するための命令を提供するステップと、
前記ラインにインデックスを付ける前記インデックスビットの組み合わせを復号するステップを制御するステップと、を含む、
請求項16の方法。
【請求項20】
書き込みインデックスBラッチの数は、前記ストレージアレイ内の各ラインにインデックスを付けるために使用されるインデックスビットの数に対応する、
請求項16の方法。
【発明の詳細な説明】
【技術分野】
【0001】
(関連出願の相互参照)
本願は、2021年9月24日に出願された米国特許出願第17/485,178号(発明の名称「符号化イネーブルクロックゲータ」)の利益を主張し、参照により、本明細書に十分に記載されているように組み込まれる。
【背景技術】
【0002】
データストレージ構造は、処理デバイスにおける様々な機能のために使用される。データストレージアレイは、各々がアレイインデックスによって識別される値の集合を含むインデックス付き構造である。例えば、メモリ(例えば、メインメモリ、キャッシュメモリ)との間でデータを記憶し同期させるために、より広い(例えば、エントリ当たりのビット数がより多い)データストレージアレイが通常使用される。他の機能(例えば、データのスケジューリング、追跡及び測定)を実行するために、より幅の狭い(ライン当たりのビット数が少ない)データストレージアレイを使用することができる。例えば、プログラムの実行中に、1ビット幅のデータストレージアレイを使用して、各ビットが特定のエントリが有効であるか無効であるかを示すキャッシュの複数のエントリを追跡することができる。
【0003】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解を得ることができる。
【図面の簡単な説明】
【0004】
【
図1】本開示の1つ以上の特徴を実装することができる例示的なデバイスのブロック図である。
【
図2】本開示によるストレージ構造が提供され得る処理デバイスの異なる構成要素を示すブロック図である。
【
図3】本開示の特徴によるデータストレージ構造の例示的な記憶アレイへのアクセスを示す図である。
【
図4】本開示の特徴によるデータストレージアレイへの例示的なアクセス方法を示すフロー図である。
【発明を実施するための形態】
【0005】
従来のデータストレージアレイは、フリップフロップ等の論理回路のアレイを含み、各フリップフロップは、ライン(例えば、エントリ)のデータの単一ビットを記憶する。データの各ラインは、アレイの対応するラインに記憶される。データストレージアレイのサイズ(例えば、フリップフロップの数)は、アレイ内のラインの数及びアレイ内のラインの幅に応じて変化する。アレイ内の各ラインは、データの各ラインについて対応する数のビットのデータを記憶するために使用されるいくつかのフリップフロップを含む。例えば、100本の8ビット幅のデータラインを記憶するように構成された従来のデータストレージアレイは、800個のフリップフロップを含む。すなわち、各ラインは8個のフリップフロップを含み、ライン内の各フリップフロップはラインの8ビットのデータのうち何れかを記憶する。
【0006】
データのラインを記憶することに加えて、フリップフロップは、データの同期フローを制御するために使用される。クロックサイクルの遷移時に、フリップフロップは、記憶していたデータのビットを更新する(すなわち、データの新しいビットを記憶する)か又は保持する。例えば、従来のデータストレージアレイにおける各フリップフロップは、2つのラッチ(すなわち、Aラッチ及びBラッチ)を含む。Aラッチは、ラインのデータのビットを記憶するために使用される。Bラッチへの値入力は、クロックサイクルの遷移において、フリップフロップに記憶していたデータのビットを更新させるか又は保持させる。各Aラッチ及びBラッチは、デバイス内の物理的領域を占有する。Aラッチ及びBラッチの数によって占有される面積は、アレイのサイズが増大するにつれて増大する。
【0007】
しかし、アレイ内のBラッチの数は、各ラインに対して共通のBラッチを使用することによって減らすことができる。単一ラインのビットは、同時に(例えば、クロックサイクルの遷移時に)アレイに書き込まれ、アレイから読み出される。したがって、単一のBラッチを使用して、ラインのAラッチの各々に、クロックサイクルの遷移時にそれらのデータを変更又は保持させることができる。すなわち、ライン内の各Aラッチに対してBラッチを使用する代わりに、ライン内のデータは、ラインのAラッチの各々と通信する単一の共通Bラッチを使用して更新することができる。
【0008】
しかしながら、典型的には、データの少数のラインのみが同時に更新され、更新されていないストレージアレイのライン内のデータは、他のラインが更新されている間、維持されなければならない。ライン内のデータは、データを保持するためにマルチプレクサを使用することによって又はクロックゲータを使用することによって維持される。
【0009】
マルチプレクサは、ライン内のデータを維持するために使用することができるが、クロックゲータは、データを維持し、ストレージアレイを実装するためにマルチプレクサよりも占有面積が小さく、消費電力が少ないので、クロックゲータは、より効率的にデータを維持する。クロックゲータは、Aラッチ内のデータがクロックサイクルの遷移時に更新されるか保持されるかを制御するために使用される。クロックゲータは、2つの入力信号、すなわち、クロック信号及びイネーブル信号(すなわち、制御信号)を受け取る。イネーブル信号の値(例えば、0又は1)に依存して、クロック信号は、Aラッチに供給されるか又はAラッチに供給されない。例えば、クロックゲータは、クロック信号(すなわち、各クロックサイクルの遷移を示す)を連続的に受信する。クロックゲータへのイネーブル信号の値が1である場合、クロック信号がAラッチに供給され、Aラッチはデータの新しいビットを記憶するように更新される。クロックゲータへのイネーブル信号の値が0である場合、クロック信号がAラッチに供給されず、Aラッチに記憶されたデータのビットは維持される。
【0010】
従来のストレージアレイは、アレイ内の各ラインに共通クロックゲータを含む。したがって、単一のイネーブル信号を使用して、Aラッチ内のデータのラインがクロックサイクルの遷移時に更新されるか保持されるかを制御することができる。しかしながら、各クロックゲータは、Bラッチも使用する(すなわち、各クロックゲータは、上述したようにBラッチの領域を占有する)。すなわち、多数のBラッチが各ラインから除去される一方で、付加的なBラッチが各ラインのクロックゲータのためにストレージアレイの各ラインに追加される。理解され得るように、各ラインに対して共通クロックゲータ(すなわち、単一のBラッチ)を使用することは、ライン(すなわち、64ビット幅のライン)当たりのビット数が増加するにつれて、構造的により効率的になる。なぜなら、単一のBラッチが、ラインにおいて、各Aラッチに対して、より多数のBラッチを置換するために使用され得るからである。すなわち、より多くのBラッチ(より多くのAラッチに対応する)が単一の共通Bラッチによって置き換えられる場合、より多くのBラッチ面積が低減される。
【0011】
しかしながら、(アレイの同じ全体容量を維持しながら)ライン当たりのビット数を増加させることは、電力消費及びレイテンシの増加を引き起こし得る。例えば、場合によっては、ラインのビットの一部(すなわち、ラインの全てのビットではない)が同時に(例えば、クロック信号の遷移時に)更新される。ラインのビットの一部が更新されると、読み出し-修正-書き込み動作(read-modify-write operation)が実行される。すなわち、データのラインが読み出され、ラインのビットの一部が変更され、ラインは、ビットの変更された部分でアレイに書き戻される。読み出し-修正-書き込み動作は、動作を実行するためにより多くの電力が消費されるので、非効率的である。加えて、データは、変更され再書き込みされる前に最初に読み出されなければならないので、有用なデータを得るために読み出しを実行する代わりに、再書き込みをサポートするために読み出しを実行することによって、時間が非効率的に費やされる。理解され得るように、読み出し-修正-書き込み動作は、ライン当たりのビット数が増加するにつれて、より非効率的になる。例えば、2ビット幅のラインの一部(例えば、1ビット)が更新される場合、ラインの2ビットが読み出され、1ビットが更新され、2ビットがアレイに書き戻される。比較すると、更新される1ビットがより広いライン(例えば、8ビット幅のライン)の一部である場合、増加した数のビットがアレイから読み出され、アレイに再書き込みされる。すなわち、8ビットが読み出され、1ビットが更新され、8ビットがアレイに書き戻される。
【0012】
したがって、ライン当たりのビット数を増加させることは、(上述したように)構造的により効率的であるが、電力消費及びレイテンシに関しては、あまり効率的ではない。同様に、ライン当たりのビット数を減少させることは、電力消費及びレイテンシに関してより効率的であるが、構造的に効率的ではない。
【0013】
本開示の特徴は、各ラインのクロックゲータ間で共有される少数の共通書き込みインデックスBラッチを使用することによって、データストレージアレイに効率的にアクセスするための装置及び方法を含む。共通書き込みインデックスBラッチは、対応するラインに記憶されるデータをインデックス付けし、他のラインのクロック信号が他のラインのデータを維持することをイネーブルすることなく、対応するラインのクロック信号が対応するラインのデータを更新することをイネーブルするために使用される。
【0014】
本開示の特徴は、ライン当たりのビット数によってもたらされる構造的な非効率性を低減する。本開示の特徴は、ラインごとに任意の数のビット(すなわち、ラインごとに任意の数のAラッチ)を有するストレージアレイに効率的にアクセスすることができる。各ラインのクロックゲータ間で共有される少数の共通書き込みインデックスBラッチを使用することは、ライン当たりのビット数が小さい(例えば、1又は2)場合にストレージアレイにアクセスする場合の従来のストレージ構造(すなわち、各ラインに対して共通クロックゲータ及びBラッチを使用する)の構造的非効率性を低減する。また、構造的に非効率であることなくライン当たりのビット数を低減することができるので、本開示の特徴は、(ラッチによって占有される)全体的な面積を低減し、読み出し-修正-書き込み動作を実行する非効率性を低減する。
【0015】
プロセッサ及びデータストレージ構造を含む処理デバイスが開示される。データストレージ構造は、複数のラインを含むデータストレージアレイを含む。各ラインは、データビット及びクロックゲータを記憶するように構成された少なくとも1つのAラッチを含む。また、データストレージ構造は、異なるクロックサイクルにわたって、それぞれが複数のラインのうち何れかの少なくとも1つのAラッチに書き込まれる異なるデータビットを記憶するように構成された書き込みデータBラッチを含む。また、データストレージ構造は、複数のラインのクロックゲータによって共有される複数の書き込みインデックスBラッチを含む。複数の書き込みインデックスBラッチは、異なるクロックサイクルにわたって、対応するデータビットが記憶されるラインのうち何れかにインデックスを付ける値を有するインデックスビットの組み合わせを記憶するように構成されている。
【0016】
処理デバイスとともに使用するためのデータストレージ構造が開示され、このデータストレージ構造は、複数のラインを含むデータストレージアレイを含み、各ラインは、データビットを記憶するように構成された少なくとも1つのAラッチとクロックゲータとを含む。また、データストレージ構造は、異なるクロックサイクルにわたって、それぞれが複数のラインのうち何れかの少なくとも1つのAラッチに書き込まれる異なるデータビットを記憶するように構成された書き込みデータBラッチを含む。また、データストレージ構造は、複数のラインのクロックゲータによって共有され、異なるクロックサイクルにわたって、対応するデータビットが記憶されるラインのうち何れかにインデックスを付ける値を有するインデックスビットの組み合わせを記憶するように構成された複数の書き込みインデックスBラッチを含む。
【0017】
書き込みデータBラッチからストレージアレイの複数のラインの各々にデータビットを供給することを含む、データストレージアレイにアクセスする方法が開示される。各ラインは、少なくとも1つのAラッチ及びクロックゲータを含む。また、本方法は、ラインのクロックゲータによって共有される書き込みインデックスBラッチ内のインデックス付けされたビットの組み合わせによってインデックス付けされたラインのうち何れかのクロックゲータをイネーブルするステップと、インデックスビットの組み合わせの値によってインデックス付けされた1つのラインの少なくとも1つのAラッチをデータビットで更新するステップと、インデックスビットの組み合わせによってインデックス付けされていない他のラインの少なくとも1つのAラッチ内に以前に記憶されたデータを維持するステップと、を含む。
【0018】
図1は、本開示の1つ以上の特徴が実装され得る例示的なデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータを含み得る。デバイス100は、プロセッサ102、メモリ104、ストレージ106、1つ以上の入力デバイス108、及び、1つ以上の出力デバイス110を含む。また、デバイス100は、オプションで、入力ドライバ112及び出力ドライバ114を含み得る。デバイス100は、
図1に示されていない追加の構成要素を含み得ることを理解されたい。
【0019】
様々な代替例では、プロセッサ102は、中央処理ユニット(Central Processing Unit、CPU)、グラフィックス処理ユニット(Graphics Processing Unit、GPU)、同じダイ上に位置するCPU及びGPU、又は、1つ以上のプロセッサコアを含み、各プロセッサコアは、CPU又はGPUとすることができる。様々な代替例では、メモリ104は、プロセッサ102と同じダイ上に位置しているか、又は、プロセッサ102とは別に位置する。メモリ104は、揮発性又は不揮発性メモリ(例えば、ランダムアクセスメモリ(Random Access Memory、RAM)、ダイナミックRAM(Dynamic RAM、DRAM)、キャッシュ)を含む。
【0020】
ストレージ106は、固定又はリムーバブルストレージ(例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク、フラッシュドライブ)を含む。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、生体認証スキャナ、又は、ネットワーク接続(例えば、無線IEEE802シグナルの送信及び/又は受信のための無線ローカルエリアネットワークカード)を含むが、これらに限定されない。出力デバイス110は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上の光、アンテナ、又は、ネットワーク接続(例えば、無線IEEE802シグナルの送信及び/又は受信のための無線ローカルエリアネットワークカード)を含むが、これらに限定されない。
【0021】
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信することを可能にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信することを可能にする。入力ドライバ112及び出力ドライバ114は、オプションの構成要素であること、並びに、デバイス100は、入力ドライバ112及び出力ドライバ114が存在しない場合に、同じ方式で動作することに留意されたい。出力ドライバ114は、表示デバイス118に連結された加速処理デバイス(Accelerated Processing Device、「APD」)116を含む。APDは、プロセッサ102から計算コマンド及びグラフィックスレンダリングコマンドを受け入れて、それらの計算及びグラフィックスレンダリングコマンドを処理し、表示のために表示デバイス118にピクセル出力を提供するように構成されている。以下で更に詳細に説明するように、APD116は、単一命令複数データ(Single-Instruction-Multiple-Data、SIMD)パラダイムに従って計算を行うように構成された1つ以上の並列処理ユニットを含む。こうして、様々な機能は、本明細書では、APD116によって又はAPD116と併せて実行されるものとして説明されているが、様々な代替例では、APD116によって行われるものとして説明される機能は、ホストプロセッサ(例えば、プロセッサ102)によって駆動されず、表示デバイス118にグラフィック出力を提供するように構成された同様の能力を有する他のコンピューティングデバイスによって、追加的又は代替的に行われる。例えば、SIMDパラダイムに従って処理タスクを行う任意の処理システムが、本明細書に説明される機能を行うように構成され得ることが企図される。代替的に、SIMDパラダイムに従って処理タスクを行わないコンピューティングシステムが、本明細書に説明される機能を行うことが企図される。
【0022】
図2は、本開示による、ストレージ構造230が提供され得る処理デバイスの異なる構成要素を示すブロック図である。
図2に示されるいくつかの構成要素は、例えば、アクセラレーテッドプロセッサ(例えば、GPU)等のプロセッサの構成要素である。本開示の特徴は、CPU等の第1のタイプの1つ以上のプロセッサ、及び/又は、GPU等の第2のタイプの1つ以上のプロセッサによって実行することができる。
【0023】
本開示の特徴は、複数のレベルのうち何れかのキャッシュを使用して実装することができる。例えば、
図2に示されるように、構成要素は、複数のプロセッサコア204を含む。各コア204は、対応するレベル1キャッシュ214と通信し、対応するレベル1キャッシュ214を使用してデータを処理するように構成された、対応するレベル1キャッシュコントローラ218を含む。
【0024】
図2に更に示されるように、構成要素は、レベル2キャッシュ216と通信し、レベル2キャッシュ216を使用してデータを処理するように構成されたレベル2キャッシュコントローラ/プロセッサ220を含む。また、キャッシュコントローラ/プロセッサ220は、次のキャッシュレベル(より高いキャッシュレベル)と通信する。任意の数のNレベルキャッシュを使用することができる。Nレベルキャッシュ212(例えば、ラストレベルキャッシュ)等の次のレベルキャッシュ及びNレベルキャッシュコントローラ210は、同じダイ又は複数のダイ上に位置し得る、例えば、CPU又はGPU(図示せず)のキャッシュ等の複数のプロセッサのキャッシュと通信し、それらによって共有され得る。
【0025】
メモリコントローラ/プロセッサ208は、メモリ104(例えば、DRAM)、並びに、キャッシュコントローラ220及び218と通信する。
図2に示されるように、複数のクライアント206が、メモリコントローラ208と通信している。クライアント206が、メモリの部分が割り当てられることを要求する場合に、メモリコントローラ208は、クライアント206(例えば、ディスプレイクライアント)から要求を受信及びサービスし、キャッシュコントローラ220を介してキャッシュ216に、キャッシュコントローラ218を介してキャッシュ214にアクセスするように構成されている。メモリコントローラ/プロセッサ208は、クライアント206から要求を受信し、メモリを割り当て、1つ以上のキャッシュ(例えば、ラストレベルキャッシュ212)へのアクセスを制御し、本明細書で説明される様々な他の機能を行うように構成されている。例えば、メモリコントローラ/プロセッサ208は、1つ以上のクライアント206によるキャッシュアクセスを制御するように構成される。説明を簡略化するために、
図2は、単一のクライアント206を示している。しかしながら、メモリコントローラは、任意の数のクライアントから要求を受信するように構成されている。
【0026】
データストレージ構造は、処理デバイスの様々な異なる構成要素において実装され得る。例えば、
図2に示すように、データストレージ構造240は、プロセッサコア204において、メモリ104の一部として、又は、L1キャッシュ、L2キャッシュ若しくは任意のレベルキャッシュ等のキャッシュとして実装され得る。データストレージ構造を使用して、様々な機能を実行することができる。例えば、データを記憶し、メモリとの間でデータフローを同期させ、データをスケジューリングし、追跡し、測定する。例えば、プログラムの実行中に、1ビット幅のデータストレージアレイを使用して、各ビットが特定のエントリが有効であるか無効であるかを示すキャッシュの複数のエントリを追跡することができる。また、データストレージ構造は、インデックス付けされたストレージ構造へのランダムアクセスが実施される任意の機能を実行するために、デバイスの様々な場所で使用され得る。
【0027】
図3は、本開示の特徴によるデータストレージ構造230の例示的なストレージアレイ302へのアクセスを示す図である。
図3に示すように、データストレージアレイ302は、複数のライン(すなわち、ライン0~ラインN)を含む。本開示の特徴は、任意の数のラインを有するデータストレージアレイ302に対して実装され得る。各ラインは、複数のAラッチ304を含む。各ラインにおけるAラッチ304の数は、ラインの幅(すなわち、各ラインに格納され得るビット数)に依存する。本開示の特徴は、単一のAラッチを含む任意の数のAラッチを有するストレージアレイに対して実装され得る。各Aラッチ304は、ライン内の1ビットのデータを保持するように構成されている。
【0028】
また、ストレージアレイ302の各ラインは、単一のクロックゲータ306を含む。各クロックゲータ306は、2つの入力(すなわち、クロック入力及びイネーブル入力)と、ラインのAラッチ304の各々と通信する(例えば、電気的に接続される)出力と、を含む。各クロックゲータ306は、クロック信号(すなわち、各クロックサイクルの遷移を示す)を連続的に受信する。クロックゲータ306へのイネーブル信号の値が1である場合、クロック信号がラインのAラッチに供給され、Aラッチはデータの新しいビットを記憶するように更新される。クロックゲータ306へのイネーブル信号の値が0である場合、クロック信号がAラッチ304に供給されず、Aラッチに記憶されたデータのビットは維持される。
【0029】
また、ストレージ構造230は、書き込みデータ(WrData)Bラッチ308を含む。書き込みデータBラッチ308は、ストレージアレイ302内のAラッチ304の各々と通信する(例えば、電気的に接続される)。書き込みデータBラッチ308は、異なるクロックサイクルにわたって異なるデータビットを記憶するように構成されている。書き込みデータBラッチ308内の各データビットは、何れかのライン内の何れかのAラッチ304に書き込まれる。
【0030】
また、ストレージ構造230は、各々がインデックスビットを記憶するように構成された複数の書き込みインデックス(WrIndx)Bラッチ310を含む。書き込みインデックスBラッチ310は、ストレージアレイ302の各ライン内のクロックゲータ306の各々によって共有され、それと通信する。書き込みインデックスBラッチ310は、共に、異なるクロックサイクルにわたって、インデックスビットの異なる組み合わせを記憶する。インデックスビットの各組み合わせの値は、書き込みデータBラッチ308に同時に記憶された対応するデータビットが記憶されるデータストレージアレイ302のラインにインデックス付けするために(例えば、プロセッサによって)使用される。
【0031】
書き込みインデックスBラッチ310の数は、ストレージアレイ302内のラインの数に依存する。すなわち、ストレージ構造230内の書き込みインデックスBラッチの数は、ストレージアレイ302内のラインの各々にインデックスを付けるために使用されるインデックスビットの数に対応する。例えば、ストレージアレイ302が4つのラインを含む場合、2つの書き込みインデックスBラッチ310は、書き込みデータBラッチ308内の対応するデータビットが記憶される4つのラインのうち何れかにインデックスを付けるために2つのインデックスビットの組み合わせを記憶するために使用される(例えば、00は、ビットをライン0にインデックス付けし、01は、ビットをライン1にインデックス付けし、10は、ビットをライン2にインデックス付けし、11は、ビットをライン3にインデックス付けする)。ストレージアレイ302が8つのラインを含む場合、3つの書き込みインデックスBラッチ310が、8つのラインのうち何れかにインデックスを付けるために3つのインデックスビットの組み合わせを記憶するために使用される(例えば、000は、データビットをライン0にインデックス付けし、001は、データビットをライン1にインデックス付けする等)。
【0032】
書き込みインデックスBラッチ310内のデータのビットは、デコーダ312によって復号される。復号されたビットは、書き込みデータBラッチ308内のデータのビットが格納されるラインを示す。イネーブル信号(例えば、「1」の値)は、データのビットが記憶される対応するラインのクロックゲータ306に供給される。デコーダ312は、例えば、ハードウェアで実現される。また、デコーダ312は、ハードウェアとソフトウェア(例えば、デコーダ制御ビットの包含等のように、ハードウェアデコーダの挙動を修正するために使用されるソフトウェア)との組み合わせを使用して実装され得る。
【0033】
したがって、クロックサイクルの遷移時に、クロックゲータ306は、インデックスされたラインのAラッチ304にクロック信号を供給し、Aラッチ304は、次のクロックサイクルの遷移時に、ラインのAラッチ304内の更新されたビットがライン304から読み出されるように、データの新しいビットを記憶するように更新される。復号されたビットが、書き込みデータBラッチ308内のデータビットが記憶されるラインを示さない場合に、非イネーブル信号(例えば、「0」の値)が、対応するラインのクロックゲータ306に供給され、クロック信号は、そのラインに対してイネーブルされない。したがって、クロック信号がラインのAラッチ304に供給されず、Aラッチ304に記憶されたデータビットが維持される(すなわち、クロックサイクルの遷移時に、ラインのAラッチ304内の変更されていないビットがAラッチ304によって出力される)。
【0034】
図4は、本開示の特徴による、データストレージアレイへの例示的なアクセス方法400を示すフロー図である。方法400は、
図3に示される例示的なストレージ構造230とともに説明される。説明を簡単にするために、以下で説明する例示的な方法400では、各ラインは1ビット幅であり(すなわち、単一のAラッチ304を含む)、ストレージ構造230は、データをストレージアレイ302内の8ラインのデータのうち何れかにインデックス付けするために使用される3つの書き込みインデックスBラッチ310を含む。
【0035】
ブロック402及び404に示されるように、方法400は、ストレージアレイ302の何れかのラインに記憶されるデータビット(
図3においてX1として示される)を受信することと、ラインに記憶されるデータビットX1に対応するインデックスビット(
図3において0x0として示される)を受信することと、を含む。ブロック402及び404に示すプロセスは、
図4に示す順序で順次実行することができる。代替的に、ブロック402及び404は、逆の順序で順次実行されてもよいし、同時に実行されてもよい。
【0036】
例えば、プロセッサは、データストレージアレイ302の1つ以上のライン内のデータを更新する命令を与える。ストレージアレイ302の第1のライン(すなわち、ライン0)内のデータを更新する命令が発行されると、データビットX1(例えば、「1」の値を有する)が書き込みデータBラッチ308に供給され、3つのインデックスビット0x0(各ビットが「0」の値を有する)が3つの書き込みインデックスBラッチ310に供給され、各書き込みデータBラッチ308は、インデックスビットの組み合わせがライン0にインデックス付けする「000」の値を有するように何れかのインデックスビット0x0を記憶する。
【0037】
ブロック406に示すように、方法400は、データビットX1をストレージアレイ230の各ラインに供給することを含む。すなわち、データビット(「1」の値を有する)は、ストレージアレイ302内の各ラインのAラッチ304に伝搬される。
【0038】
ブロック408に示すように、インデックス付けされたビットが復号される。次に、ブロック410において、インデックスされたビットによって示されるラインのクロックゲータ306がイネーブルされる。すなわち、ライン0のクロックゲータ306がイネーブルされる。したがって、クロック信号がライン0のAラッチ304に供給され、ライン0のAラッチ304は、ブロック412に示すように、値「1」を有するデータビットX1で更新され、更新された値「1」がライン0から読み出される。
【0039】
ライン2~8は、値「1」を有するデータビットX1に対応するインデックスビット0x0によって示されていないので、ブロック414に示すように、データストレージアレイの他のライン(すなわち、ライン2~8)の各々におけるクロックゲータ306がイネーブルされない。したがって、クロック信号がライン2~8のAラッチ304に供給されず、ライン2~8のAラッチ304は維持される。ブロック416に示すように、ライン2~8のAラッチ内の変更されていないデータビットが読み出される。
【0040】
ブロック418に示すように、ストレージアレイ304の何れかのラインのデータを更新するために新しいビットが供給される場合、本方法はブロック402に戻る。例えば、ストレージアレイ302の最後のライン(すなわち、ライン8)内のデータをデータビット(「0」の値を有する)で更新するために同じ命令又は異なる命令が発行される場合、データビットが書き込みデータBラッチ308に供給され、「111」の値を有するインデックスビットの組み合わせが3つの書き込みインデックスBラッチ310に供給され、各書き込みデータBラッチ308は3つのインデックスビットのうち何れかを記憶する。ビットが再び復号され、ライン8のクロックゲータ306がイネーブルされる。クロック信号がライン8のAラッチ304に供給され、ライン8のAラッチ304は「0」の値を有するデータビットで更新される。他のライン(すなわち、ライン1~7)の各々におけるクロックゲータ306がイネーブルされず、クロック信号がライン1~7におけるAラッチ304に供給されず、ライン1~7のAラッチ304におけるデータビットが維持される。
【0041】
ストレージアレイ304の何れかのラインのデータを更新するために新しいビットが供給されない場合、本方法はブロック420で終了する。
【0042】
したがって、本開示の特徴は、ライン当たり任意の数のビット(すなわち、ライン当たり任意の数のAラッチ)を用いて実装され得るが、本開示の特徴は、ライン当たりのビット数が小さい(例えば、1又は2)場合であっても、ストレージアレイ302に効率的にアクセスすることができる。すなわち、例示的なストレージアレイ302は、ラインごとに共通のクロックゲータ及びBラッチを使用し、ラインごとにライン当たり少数のビットでデータストレージアレイにアクセスする従来のストレージ構造の構造的な非効率性を低減する。加えて、本開示の特徴は、電力消費及びレイテンシを低減する。
【0043】
本明細書の開示に基づいて、多くの変形が可能であることを理解されたい。特徴及び要素が特定の組み合わせで上述されているが、各特徴又は要素は、他の特徴及び要素を用いずに単独で、又は、他の特徴及び要素を用いて若しくは用いずに様々な組み合わせで使用することができる。
【0044】
図において示され及び/又は本明細書に説明される様々な機能ユニット(プロセッサ102、入力ドライバ112、入力デバイス108、出力ドライバ114、出力デバイス110、加速処理デバイス116、メモリコントローラ/プロセッサ208、並びにキャッシュコントローラ/プロセッサ210、218、220、並びに、ストレージ構造230を含むが、これらに限定されない)は、汎用コンピュータ、プロセッサ若しくはプロセッサコアとして、又は、汎用コンピュータ、プロセッサ若しくはプロセッサコアによって実行可能な非一時的なコンピュータ可読記憶媒体若しくは別の記憶媒体に記憶されているプログラム、ソフトウェア若しくはファームウェアとして実装され得る。提供される方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実装することができる。好適なプロセッサとしては、例として、汎用プロセッサ、専用プロセッサ、従来型プロセッサ、デジタルシグナルプロセッサ(Digital Signal Processor、DSP)、複数のマイクロプロセッサ、DSPコアと関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(Application Specific Integrated Circuit、ASIC)、フィールドプログラマブルゲートアレイ(Field Programmable Gate Array、FPGA)回路、任意の他のタイプの集積回路(Integrated Circuit、IC)、及び/又は、状態マシンが挙げられる。そのようなプロセッサは、処理されたハードウェア記述言語(Hardware Description Language、HDL)命令及びネットリストを含む他の中間データ(コンピュータ可読媒体に記憶させることが可能な命令)の結果を使用して製造プロセスを構成することによって製造することができる。そのような処理の結果はマスクワークとすることができ、このマスクワークをその後の半導体製造プロセスにおいて使用して、本開示の特徴を実装するプロセッサを製造する。
【0045】
本明細書に提供される方法又はフローチャートは、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれるコンピュータプログラム、ソフトウェア又はファームウェアにおいて実施することができる。非一時的なコンピュータ可読記憶媒体の例としては、読み取り専用メモリ(Read Only Memory、ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、磁気光学媒体、並びに、CD-ROMディスク及びデジタル多用途ディスク(Digital Versatile Disk、DVD)等の光学媒体が挙げられる。
【国際調査報告】