IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドの特許一覧

特表2024-545214ニアメモリコンピュート要素のコヒーレンスディレクトリコントローラオーバーヘッドを低減するための機構
<>
  • 特表-ニアメモリコンピュート要素のコヒーレンスディレクトリコントローラオーバーヘッドを低減するための機構 図1A
  • 特表-ニアメモリコンピュート要素のコヒーレンスディレクトリコントローラオーバーヘッドを低減するための機構 図1B
  • 特表-ニアメモリコンピュート要素のコヒーレンスディレクトリコントローラオーバーヘッドを低減するための機構 図2
  • 特表-ニアメモリコンピュート要素のコヒーレンスディレクトリコントローラオーバーヘッドを低減するための機構 図3A
  • 特表-ニアメモリコンピュート要素のコヒーレンスディレクトリコントローラオーバーヘッドを低減するための機構 図3B
  • 特表-ニアメモリコンピュート要素のコヒーレンスディレクトリコントローラオーバーヘッドを低減するための機構 図3C
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-12-05
(54)【発明の名称】ニアメモリコンピュート要素のコヒーレンスディレクトリコントローラオーバーヘッドを低減するための機構
(51)【国際特許分類】
   G06F 12/0817 20160101AFI20241128BHJP
   G06F 12/0804 20160101ALI20241128BHJP
   G06F 12/0808 20160101ALI20241128BHJP
   G06F 12/00 20060101ALI20241128BHJP
【FI】
G06F12/0817
G06F12/0804 100
G06F12/0808
G06F12/00 560F
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024535346
(86)(22)【出願日】2022-12-01
(85)【翻訳文提出日】2024-06-26
(86)【国際出願番号】 US2022051580
(87)【国際公開番号】W WO2023121849
(87)【国際公開日】2023-06-29
(31)【優先権主張番号】17/561,112
(32)【優先日】2021-12-23
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【弁理士】
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【弁理士】
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【弁理士】
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ヴァルン アグラワール
(72)【発明者】
【氏名】ヤスコ エッカート
【テーマコード(参考)】
5B160
5B205
【Fターム(参考)】
5B160MM20
5B205KK14
5B205MM03
5B205NN45
5B205NN89
5B205PP03
5B205PP22
(57)【要約】
プロセッシングインメモリプローブフィルタ(PimPF)とも呼ばれる並列処理(PP)レベルコヒーレンスディレクトリがコヒーレンスディレクトリコントローラに追加される。コヒーレンスディレクトリコントローラが、ホストからのブロードキャストPIMコマンド又は複数のメモリバンクに並列に向けられたPIMコマンドを受信すると、PimPFは、コヒーレンスディレクトリコントローラ内で既存のシステムレベルディレクトリとは別のキャッシュコヒーレンスのためのディレクトリを維持することによって、PIMコマンドの処理を加速する。PimPFは、ブロードキャストPIMコマンドの影響を受けるメモリアドレスを定義するアドレスシグネチャに従ってディレクトリを維持する。レジスタへのPIMロードを加速する軽量実装と、レジスタへのPIMロード及びメモリへのPIMストアの両方を加速する重量実装と、を記載する。
【選択図】図3A
【特許請求の範囲】
【請求項1】
シグネチャによって特定される複数のメモリアドレスに対する並列処理(PP)コマンドを受信することと、
前記PPコマンドが前記複数のメモリアドレスから複数のニアメモリコンピュート要素へのロードであることに応じて、
前記シグネチャを使用して、第1のクエリをPPレベルコヒーレンスディレクトリに発行することと、
前記第1のクエリの結果がミスであることに応じて、
前記複数のメモリアドレスを使用して、第2のクエリをシステムレベルコヒーレンスディレクトリに発行することと、
前記第2のクエリの結果に基づいて、少なくとも1つのキャッシュから前記複数のメモリアドレスに第1のダーティデータをフラッシュすることと、
前記シグネチャによってインデックス付けされた第1のエントリであって、前記複数のメモリアドレスがクリーンであるかどうかを示す第1のエントリを、前記PPレベルコヒーレンスディレクトリに割り当てることと、
前記PPコマンドを、前記複数のニアメモリコンピュート要素上で並列実行するためにメモリコントローラに送信することと、を含む、
方法。
【請求項2】
前記第1のクエリの結果がヒットであることに応じて、
前記第1のクエリの結果にシグネチャクリーンビットが設定されていることに応じて、前記第2のクエリの発行を抑制することを含む、
請求項1の方法。
【請求項3】
前記第1のクエリの結果がヒットであり、且つ、前記複数のメモリアドレスのダーティなセットを示すことに応じて、
前記複数のメモリアドレスのダーティなセットを使用して、第5のクエリを前記システムレベルコヒーレンスディレクトリに発行することと、
前記第5のクエリの結果に基づいて、前記少なくとも1つのキャッシュから前記複数のメモリアドレスに第2のダーティデータをフラッシュすることと、
前記第2のダーティデータをフラッシュしたことに基づいて、前記PPレベルコヒーレンスディレクトリの前記第1のエントリを更新することと、を含む、
請求項1の方法。
【請求項4】
前記PPコマンドが前記複数のニアメモリコンピュート要素から前記複数のメモリアドレスへのストアであると判定したことに応じて、
前記シグネチャを使用して、第3のクエリを前記PPレベルコヒーレンスディレクトリに発行することと、
前記第3のクエリの結果に基づいて、前記複数のメモリアドレスを使用して、第4のクエリを前記システムレベルコヒーレンスディレクトリに発行することと、
前記第4のクエリの結果に基づいて、前記少なくとも1つのキャッシュから前記複数のメモリアドレスに第3のダーティデータをフラッシュすることと、
前記第4のクエリの結果に基づいて、前記少なくとも1つのキャッシュからのクリーンデータを無効化することと、
第2のエントリが未だ存在していないことに応じて、前記シグネチャによってインデックス付けされた前記第2のエントリを前記PPレベルコヒーレンスディレクトリに割り当てることと、
前記複数のメモリアドレスがキャッシュされていないことを示すように前記第2のエントリを更新することと、を含む、
請求項1の方法。
【請求項5】
前記第4のクエリを前記システムレベルコヒーレンスディレクトリに発行することは、前記PPレベルコヒーレンスディレクトリにおいてクリーン又はダーティと示されている前記複数のメモリアドレスの各々に対して行われる、
請求項4の方法。
【請求項6】
前記PPレベルコヒーレンスディレクトリ内の各エントリは、前記各エントリ内の関連するメモリアドレスが(1)クリーンであるか、又は、(2)ダーティであるかを示すシグネチャクリーンビットを含む、
請求項1の方法。
【請求項7】
前記PPレベルコヒーレンスディレクトリ内の各エントリは、前記各エントリ内の関連するメモリアドレスが(1)キャッシュされていないか、(2)クリーンであるか、又は、(3)ダーティであるかを示すデータ構造を含む、
請求項1の方法。
【請求項8】
前記データ構造は、前記関連するメモリアドレスの各々が、前記システムレベルコヒーレンスディレクトリの1つ以上の粒度レベルにおいて対応するエントリを有するかどうかを示す、
請求項7の方法。
【請求項9】
前記複数のニアメモリコンピュート要素は、インメモリコンピュート要素又はニアメモリコンピュート要素である、
請求項1の方法。
【請求項10】
前記複数のメモリアドレスは、選択されたメモリチャネルの複数のメモリバンクの同じメモリセルに対応する、
請求項1の方法。
【請求項11】
前記複数のメモリバンクは、前記選択されたメモリチャネルの全てのメモリバンクに対応する、
請求項10の方法。
【請求項12】
前記ダーティなセットは、前記複数のメモリアドレスのサブセットである、
請求項3の方法。
【請求項13】
請求項1~12の何れかの方法を行うように構成された処理ロジックを備える、
コヒーレンスディレクトリコントローラ。
【請求項14】
請求項1~12の何れかの方法を行うためにプロセッサによって実行可能な命令を含む、
コンピュータ可読記憶媒体。
【発明の詳細な説明】
【背景技術】
【0001】
このセクションに記載されているアプローチは、遂行され得るアプローチであるが、必ずしも以前に着想又は遂行されたアプローチではない。したがって、別段の指示がない限り、このセクションに記載されたアプローチの何れも、単にこのセクションに含まれることによって、従来技術として適格であると仮定すべきではない。更に、このセクションに記載されたアプローチの何れも、単にこのセクションに含まれることによって、よく理解されている、日常的である、又は、従来的であると仮定すべきではない。
【0002】
計算スループットは、メモリ帯域幅よりも速くスケーリングするので、増大する計算容量にデータを供給し続けるために様々な技術が開発されてきた。プロセッシングインメモリ(Processing In Memory:PIM)では、タスクをメモリモジュール内で直接処理できるように、メモリモジュールに処理能力を組み込む。同様に、プロセッシングニアメモリ(Processing Near Memory:PNM)技術では、ホストプロセッサ又は他の遠隔コンピューティングユニットへのコストのかかるラウンドトリップ伝送(costly round-trip transmission)なしにタスクを処理することができるように、メモリモジュールの近くに処理能力を組み込む。本明細書で使用する場合、ニアメモリコンピュート要素又はプロセッシングニアメモリ(PNM)という用語は、インメモリコンピュート要素又はプロセッシングインメモリ(PIM)を指すこともあり、その逆もある。
【0003】
ダイナミックランダムアクセスメモリ(Dynamic Random-Access Memory:DRAM)のコンテキストでは、PIM構成の一例は、算術計算等のいくつかの計算をメモリ内でローカルに行うことができるようにするベクトルコンピュート要素及びローカルレジスタを含む。これにより、メモリコントローラが、メモリモジュールインターフェースをわたってデータを移動する必要なく、複数のメモリモジュールで並列にローカル計算をトリガできるようになり、それにより、特にデータ集約的なワークロードについて性能を大幅に改善することができる。
【0004】
PIM技術を使用して計算をメモリにオフロードすることの1つの技術的問題は、例えば、データバストラフィック及びプロセッサに対する計算負荷を低減する一方で、機能的な正確性を確保するために追加の工程を行わなければならないことである。これらの追加の工程には、あるニアメモリセントリックコマンドに対応するアドレスのデータを格納しているプロセッサ側キャッシュがあるかどうかを判定するためにコヒーレンスディレクトリコントローラでアドレスチェックを行い、次いで、特定されたデータがあればフラッシュ及び/又は無効化することが含まれる。より具体的には、ニアメモリセントリックコマンドによってアクセスされるアドレスのダーティデータをキャッシュが格納している場合、そのニアメモリセントリック動作が確実に最新版のデータについて動作するようにするために、そのダーティデータをキャッシュからメモリにフラッシュしなければならない。このデータを更新したニアメモリセントリックコマンドについてキャッシュがクリーンデータを格納している場合、その後に続くプロセッサ側のコンピュートセントリック動作がキャッシュからの古いデータを使用する代わりに、確実にメモリからニアメモリセントリック動作の結果を取り出すようにするために、そのクリーンデータを無効化しなければならない。
【0005】
PIM技術の使用による性能利益を最適化するために、メモリコントローラは、メモリチャネルの複数のターゲットバンクに並列にブロードキャストPIMコマンドを発行して、それらのターゲットバンクに、同じ個別のメモリセル(行、列)に対して同じ動作を行わせることができる。ただし、上述した機能的な正確性の要件に起因して、ブロードキャストPIMコマンドを進めるためには、その前に、コヒーレンスディレクトリコントローラにおいて、ブロードキャストPIMコマンドのターゲットである各メモリアドレスにルックアップクエリが必要になることがある。更に、メモリチャネルアドレスインターリーブ及びハードウェアベースのPIM実装の要件に起因して、メモリアドレスの各々は、個々のルックアップを必要とする個別のディレクトリエントリ内で参照されることがある。こうしたルックアップによって、特に、多数のブロードキャストPIMコマンドを生成する可能性のあるワークステーション及びデータセンタのワークロードにサービスを提供する際に、有意の処理ボトルネックが発生する可能性がある。
【0006】
したがって、ブロードキャストPIMコマンド又はPNMコマンドを処理する場合に、コヒーレンスディレクトリコントローラのオーバーヘッドをどのように低減するかという技術的問題の解決策の必要がある。
【0007】
実施例は、添付の図面において限定としてではなく例として示され、同様の符号は同様の素子を指す。
【図面の簡単な説明】
【0008】
図1A】コヒーレンスディレクトリコントローラ内にPIMプローブフィルタ(PimPF)を実装するためのシステムアーキテクチャの一例を示すブロック図である。
図1B図1Aによる例示的なメモリモジュールを示すブロック図である。
図2】PimPFディレクトリのための例示的なデータ構造を示すブロック図である。
図3A】オーバーヘッドを低減しながらブロードキャストPIM要求にサービスを提供するために、コヒーレンスディレクトリコントローラにPimPFを実装するためのアプローチを示すフロー図である。
図3B】オーバーヘッドを低減しながらブロードキャストPIM要求にサービスを提供するために、コヒーレンスディレクトリコントローラにPimPFを実装するためのアプローチを示すフロー図である。
図3C】オーバーヘッドを低減しながらブロードキャストPIM要求にサービスを提供するために、コヒーレンスディレクトリコントローラにPimPFを実装するためのアプローチを示すフロー図である。
【発明を実施するための形態】
【0009】
以下の説明では、説明の目的のために、実施形態の十分な理解を提供するための多くの具体的な詳細が記載される。しかしながら、これらの特定の詳細なしに実施形態を実現し得ることが当業者には明らかであろう。他の例では、実施形態を不必要に不明瞭にすることを避けるために、周知の構造及びデバイスがブロック図で示されている。
I.概要
II.アーキテクチャ
III.ブロードキャストPIMコマンド
IV.PimPFコヒーレンスディレクトリデータ構造
V.オーバーヘッドを低減するための、コヒーレンスディレクトリコントローラにおけるPimPFの使用
A.PIMロードにPimPFを使用する例示的なプロセス
B.PIMストアにPimPFを使用する例示的なプロセス
C.PimPFコヒーレンスディレクトリの維持
【0010】
(I.概要)
ニアメモリコンピュート要素のコヒーレンスディレクトリコントローラオーバーヘッドを低減するためのアプローチを提供する。このアプローチによれば、プロセッシングインメモリプローブフィルタ(Processing In-Memory Probe Filter:PimPF)とも呼ばれる並列処理(parallel processing:PP)レベルコヒーレンスディレクトリがコヒーレンスディレクトリコントローラに追加される。コヒーレンスディレクトリコントローラが、ホストからのブロードキャストPIMコマンド又は複数のメモリバンクに並列に向けられたPIMコマンドを受信すると、PimPFは、コヒーレンスディレクトリコントローラ内で既存のシステムレベルディレクトリとは別の、キャッシュコヒーレンスのためのディレクトリを維持することによって、そのPIMコマンドの処理を加速する。PimPFは、ブロードキャストPIMコマンドの影響を受けるメモリアドレスを定義するアドレスシグネチャに従ってディレクトリを維持する。PimPFは、1つ以上のシステムレベルディレクトリと共に使用することができる。PimPFの2つの実施形態、すなわち、レジスタへのPIMロードを加速する軽量実装(lightweight implementation)、並びに、レジスタへのPIMロード及びメモリへのPIMストアの両方を加速する重量実装(heavyweight implementation)について記載する。この技術的解決策は、ニアメモリコンピュータ要素を使用するブロードキャストPIMコマンドのためのシステムレベルコヒーレンスディレクトリルックアップの数を低減する。
【0011】
このアプローチは、様々な状況への幅広い適用可能性を有する。例えば、主としてPIMロードを発行するワークロードを処理する場合、軽量実装には、実装の簡略化及びメモリフットプリントの低減という利点がある。有意のPIMストアアクティビティも含むワークロードを処理する場合には、重量実装が好ましいことがある。更に、その個別のディレクトリのメモリ消費を、エントリの最大数を定義し、最も過去に使用された(least recently used:LRU)エントリ又は他の追い出し規則に従ってエントリを追い出すことによって制御することができる。既存のコヒーレンスディレクトリコントローラ内にPimPFを実装することによって、アーキテクチャの有意の変更を回避しながら、PIMに性能の改善をもたらすことができる。
【0012】
(II.アーキテクチャ)
図1Aは、コヒーレンスディレクトリコントローラ150内にPIMプローブフィルタ(PimPF)又はPPレベルコヒーレンスディレクトリ160を実装するための例示的なシステムアーキテクチャ100を示すブロック図である。コンピューティングデバイス110は、汎用マルチコアプロセッサ及びグラフィックス処理ユニット(GPU)等の1つ以上の処理ユニットを有する任意のワークステーション又はサーバによって実装される。図1Aにはプロセッサ120A及びプロセッサ120Bが示され、各々が対応するキャッシュ130A及び130Bを有する。キャッシュは、各々L1、L2、L3の3レベルのキャッシュ等の複数レベルのキャッシュを含んでもよい。複数の処理ユニットを全体的にホスト115と称してもよい。
【0013】
ホスト115は、PIMコマンドを、最終的にPIMコンピュートユニット190A及び190B上で実行されるように、データバス140を介して送信してもよい。その前に、機能的な正確性を確保するために、且つ、PIMコマンドを正しいメモリモジュール180A及び180Bにルーティングするために、メモリサブシステム145の構成要素が様々なタスクを行ってもよい。例えば、PIMコンピュートユニット190A及び190Bが確実に最新の正しいデータについて動作するように、コヒーレンスディレクトリコントローラ150がシステムレベルディレクトリ155上でルックアップを行ってもよい。システムレベルディレクトリ155が、キャッシュ130A又はキャッシュ130B内の任意のキャッシュラインがダーティであることを示す場合、読み出し動作の前に、PIMロードコマンド等によって、そのダーティデータをメモリバンク185A及び185Bにフラッシュすべきである。同様に、システムレベルディレクトリ155が、キャッシュ130A又はキャッシュ130B内に存在するデータがクリーンであり、且つ、メモリバンク185A及び185B内の対応するデータが例えばPIMストアコマンドによって更新されていることを示す場合、ホスト115が古いデータを使用して動作しないように、そのキャッシュエントリをキャッシュ130A及び130B内で無効化すべきである。
【0014】
上述したように、PIMコマンドは、複数のメモリアドレスに並列に影響を及ぼすことがあるので、各PIMコマンドについて、対応する数のルックアップがシステムレベルディレクトリ155で更に必要になることがある。ルックアップの数を低減するために、コヒーレンスディレクトリコントローラ150へとPPレベルコヒーレンスディレクトリ160が導入される。PPレベルコヒーレンスディレクトリ160は、PIMコマンドの粒度でキャッシュコヒーレンス状態を追跡する個別のディレクトリを維持し、PIMコマンドは、例えばメモリチャネルの1つ以上のメモリバンクをターゲットにすることがある。将来のPIMコマンドが受信され、以前に記録されたPIMコマンドと同じ範囲のアドレスをそのコマンドがターゲットとする場合、コヒーレンス状態は、全てのPIMコマンドの全てのアドレスについてシステムレベルディレクトリ155にクエリを行うのではなく、その個別のディレクトリから直接取り出すことができる。コヒーレンスディレクトリコントローラ150が機能的な正確性を確保できた後に、PIMコマンドを、PIMコンピュートユニット190A及び190Bに配信するためにメモリコントローラ170に渡すことができる。例えば、PIMロードは、メモリバンク185A及び185Bからレジスタ195A及び195Bにデータを取り出してもよく、PIMストアは、レジスタ195A及び195Bからメモリバンク185A及び185Bへとデータを格納してもよい。
【0015】
(III.ブロードキャストPIMコマンド)
図1Bは、図1Aによるメモリモジュール180Aを示すブロック図である。メモリバンク185Aは16個のメモリバンクを含み、各メモリバンクは2048個のメモリセルを含み、各メモリセルは32バイトのデータを収容し得る。簡潔さのため、各メモリバンクについてメモリセルは16個だけ示されている。メモリバンク、メモリセル、メモリモジュール、メモリチャネル等の具体的な量及びサイズは例示であり、適用例及びハードウェア要件に従って設定され得る。
【0016】
PIMコマンドが発行されると、メモリバンク185Aの1つ以上のバンク内の同じセルに並列に同じコマンドが適用され得る。例えば、PIMロードが発行されると、メモリバンク01~16から、網掛けされた同じメモリセル#4の内容が並列に取り出され、レジスタ195A内の対応するレジスタセット01~16に置かれ得る。この例は全ての利用可能なメモリバンクに対して動作するが、いくつかのPIMコマンドは、ビットマスク、ルックアップテーブル又は他の方法を使用して指定され得る選択されたメモリバンクに対して選択的に動作してもよい。PIMストア動作は、レジスタセット01~16からのデータをメモリバンク185Aのバンク01~16へと格納し得る。したがって、PIMロード及びPIMストアの何れも、機能的な正確性を確保するためのコヒーレンスディレクトリコントローラ150によるアクションを必要とし得る。他方で、PIM算術演算及び論理演算は、メモリバンク185Aにアクセスせずにレジスタセット01~16を使用して様々な算術論理演算を行うために、処理ユニット01~16を使用し得る。したがって、これらの算術演算及び論理演算は、機能的な正確性を確保するためのコヒーレンスディレクトリコントローラ150による任意のアクションを迂回し得る。
【0017】
(IV.PimPFコヒーレンスディレクトリデータ構造)
図2は、PimPFディレクトリのための例示的なデータ構造を示すブロック図である。メモリアドレス構成250は、メモリサブシステム145のアドレス空間を定義する。例えば、ビット0はメモリチャネルを定義し、すなわち、チャネル0/メモリモジュール180A又はチャネル1/メモリモジュール180Bを定義する。ビット1~4は、選択されたメモリチャネル内のメモリバンク、すなわちバンク01~16を定義する。ビット5~15はメモリセル、すなわちセル#0~2047を定義し、各セルは32バイトのデータを収容する。
【0018】
上述したように、PIMコマンドは、選択されたメモリチャネルの複数又は全てのメモリバンクにわたって適用され得る。したがって、あるPIMコマンドが適用される具体的なメモリアドレスは、あるシグネチャを使用して特定することができ、このシグネチャは、メモリチャネルビット及びメモリバンクビットを除外したメモリアドレス構成250のビットとすることができる。したがって、シグネチャからビット0~4を除外した結果、ビット5~15を得ることができる。例えば、ビット0(メモリチャネル)を0に設定し、ビット1~4(メモリバンク)を0000、0001から1111まで繰り返し、シグネチャからのビット5~15(メモリセル)を各メモリアドレスに付加することによって、16個のメモリアドレスをシグネチャから導出することができる。PIMコマンドがメモリバンクのサブセットに適用される場合は、この繰り返しには、全てのメモリバンクではなくサブセットのみが含まれ得る。
【0019】
あるPIMコマンドが適用されるメモリアドレスはシグネチャから導出できるので、PPレベルコヒーレンスディレクトリ260A~260B内のディレクトリには、シグネチャを使用して特定されるエントリが含まれる。PPレベルコヒーレンスディレクトリ260A~260B内でルックアップクエリが行われた場合、あるエントリが、シグネチャ列に従ってマッチするか、あるいは、マッチしない。PPレベルコヒーレンスディレクトリ260Aは、シグネチャの全メモリアドレスに対してシグネチャクリーンビットが指定される軽量実装を表し、PPレベルコヒーレンスディレクトリ260Bは、シグネチャによって特定される16個のメモリバンクの各々に対してコヒーレンス指示子、すなわち0/Not Cached(キャッシュされていない)、1/Clean(クリーン)及び2/Dirty(ダーティ)を、コヒーレンス指示子記号270によって示されるとおりに指定する重量実装を表す。このデータ構造は、例えば、各メモリバンクについて2ビット値を使用して表され得る。追加のビットが、例えば、そのメモリアドレスがシステムレベルディレクトリ155の1つ以上のディレクトリにおいて参照されているかどうかを示すために予約されていてもよく、これは、結果がミスであると分かった場合に不要なルックアップを回避するのに役立ち得る。以下で更に詳細に説明するとおり、PPレベルコヒーレンスディレクトリ260Bの粒度が高くなると、PIMストアは、システムレベルディレクトリ155へのルックアップが低減することからも恩恵を得られるようになる。
【0020】
(V.オーバーヘッドを低減するための、コヒーレンスディレクトリコントローラにおけるPimPFの使用)
(A.PIMロードにPimPFを使用する例示的なプロセス)
図3Aは、オーバーヘッドを低減しながらブロードキャストPIM要求にサービスを提供するために、コヒーレンスディレクトリコントローラ150内にPPレベルコヒーレンスディレクトリ160を実装するためのプロセス300を示すフロー図である。ステップ310で、図1Aを参照すると、PPレベルコヒーレンスディレクトリ160は、シグネチャによって特定される複数のメモリアドレスに対する並列処理(PP)コマンドを受信する。例えば、ホスト115のプロセッサ120A又は120B上で実行するプログラムは、メモリチャネル0に対するPIMコマンドをシグネチャと共にデータバス140を介して送信してもよい。図2で上述したように、シグネチャは、PIMコマンドを並列に適用するための複数のメモリバンクを特定してもよい。
【0021】
ステップ312で、PPレベルコヒーレンスディレクトリ160は、PPコマンドがPIMロードであるか、あるいは、PIMストアであるか判定する。この例では、PPコマンドはPIMロードに対応してもよく、したがって、プロセス300はステップ314に進む。PIMロードは、例えば、レジスタ195A~195Bへとロードするためにメモリバンク185A~185Bから値を読み出してもよい。いくつかの実施形態では、データをレジスタ195A~195Bへと格納せずにメモリバンク185A~185Bから直接ロードして処理するために、PIMコンピュートユニット190A~190BのためのPIMコマンドが発行されてもよい。
【0022】
ステップ314で、PPレベルコヒーレンスディレクトリ160はシグネチャを使用して、それ自体に第1のクエリを発行する。上述したように、PPレベルコヒーレンスディレクトリ160は、既存のシステムレベルディレクトリ155からは個別のコヒーレンスディレクトリを維持することができ、その個別のコヒーレンスディレクトリは、PPレベルコヒーレンスディレクトリ260A又は260Bと構造が類似しているように見えてもよい。過剰なルックアップを回避するために、システムレベルディレクトリ155にクエリを行う前に、先ず、利用可能なコヒーレンス情報があるか、PPレベルコヒーレンスディレクトリ160にクエリが行われる。
【0023】
ステップ316で、PPレベルコヒーレンスディレクトリ160は、第1のクエリの結果がヒットであるか、あるいは、ミスであるかを判定する。結果がヒットである場合、これは、マッチするエントリがPPレベルコヒーレンスディレクトリ160内で見つかったことを示し、図3Bに示すように、更なる処理ステップを行ってもよい。結果がミスである場合、これは、マッチするエントリがPPレベルコヒーレンスディレクトリ160内で見つからないことを示し、シグネチャに対する新しいエントリをPPレベルコヒーレンスディレクトリ160内に生成するために、ステップ318、320、322が行われる。
【0024】
ステップ318で、PPレベルコヒーレンスディレクトリ160は、複数のメモリアドレスを使用して、1つ以上の第2のクエリをシステムレベルディレクトリ155に発行する。上述したように、メモリインターリーブ及びハードウェア実装に起因して、複数のメモリアドレスは、複数の個別のルックアップ、又は、メモリチャネル内の16個のメモリバンクの例を使用する場合に16回のルックアップを必要とし得る。システムレベルディレクトリ155からの応答に基づいて、各メモリアドレスのコヒーレンス状態、例えばクリーンなのか、ダーティなのか又はキャッシュされていないのかが分かる。更に、キャッシュ130A及び/又はキャッシュ130B内の関連するキャッシュラインも特定され得る。
【0025】
ステップ320で、PPレベルコヒーレンスディレクトリ160は、第2のクエリの結果に基づいて、キャッシュ130A及び130Bのうち少なくとも1つから複数のメモリアドレスへと第1のダーティデータをフラッシュする。例えば、ステップ318でダーティとしてマークされた各メモリアドレスについて、PPレベルコヒーレンスディレクトリ160は、キャッシュ130A及び/又はキャッシュ130B内の対応するダーティキャッシュラインをフラッシュするようにホスト115に命令してもよい。フラッシュの結果、メモリバンク185A及び/又は185Bをキャッシュ130A及び130Bからの最新のデータで更新するメモリ書き込みコマンドがもたらされ得る。
【0026】
ステップ322で、PPレベルコヒーレンスディレクトリ160は、第1のエントリであって、その複数のメモリアドレスがクリーンであるかどうかを指示する第1のエントリを、それ自体の中に割り当てる。図2で説明したように、この指示子は、PPレベルコヒーレンスディレクトリ260Aに示されるようにシグネチャクリーンビットを使用することによって軽量であってもよく、あるいは、この指示子は、PPレベルコヒーレンスディレクトリ260Bに示されるように各メモリバンクについてのコヒーレンス指示子を使用することによって重量であってもよい。シグネチャクリーンビットはシグネチャ全体がクリーンであるのか(設定)のかキャッシュされていないのか(非設定)を示し、コヒーレンス指示子はシグネチャ内のメモリバンクの各々がクリーンであるか、ダーティであるか、あるいは、キャッシュされていないかを示す。第1のエントリが割り当てられた後は、同じシグネチャを使用する任意の将来のPIMコマンドがステップ316で結果がヒットとなり、それによって有利なことに、ステップ318、又は、システムレベルディレクトリ155へのクエリを回避することが可能になる。
【0027】
ステップ324でPPレベルコヒーレンスディレクトリ160はPPコマンド又はPIMロードを、PIMコンピュートユニット190A上での並列実行のためにメモリコントローラ170に送信する。このPPコマンドはPIMロードなので、これは、シグネチャによって特定されるメモリアドレスからのデータをメモリバンク185Aからレジスタ195Aへとロードすることに対応する。プロセス300のステップ324よりも前のステップで機能的な正確性が確保されるので、ステップ324は進行して、メモリバンク185Aから最新の正しいデータを読み出すことができる。
【0028】
ステップ322で既に記録されているものと同じシグネチャに対する新しいPPコマンドをホスト115が送信すると仮定する。プロセス300を繰り返すと、今回はステップ316の結果はミスではなくヒットとなり得る。図3Bのプロセス330を参照すると、ステップ340で、PPレベルコヒーレンスディレクトリ160は、第1のクエリの結果中にシグネチャクリーンビットが設定されているかどうかを判定する。このビットが設定されている場合、これは、シグネチャに対する全てのメモリアドレスがクリーンとしてマークされていることを示し、したがって、プロセス330は、ダーティデータをフラッシュする必要がないので、ステップ324に直接進むことができる。したがって、有利なことに、ステップ318を回避することができる。また、シグネチャクリーンビットは、あるシグネチャに対するコヒーレンス指示子が全て「クリーン」又は「キャッシュされていない」に設定されているかどうかを検査することによっても推測され得る。そうではなく、シグネチャクリーンビットが設定されていない、又は、少なくとも1つのコヒーレンス指示子がクリーンでない場合、これは、アドレスのダーティなセットが存在することを示し、プロセス330はステップ341に進む。
【0029】
ステップ341で、PPレベルコヒーレンスディレクトリ160は、複数のメモリアドレスのダーティなセットを使用して、1つ以上の第5のクエリをシステムレベルディレクトリ155に発行する。例えば、シグネチャクリーンビットが設定されていない場合、全てのアドレスのコヒーレンス状態は未知であり、したがって、ダーティなセットはシグネチャの16個のアドレス全てによって示される。別の例では、第1のクエリの結果は、PPレベルコヒーレンスディレクトリ260Bに示されるようにコヒーレンス指示子を含み得る。この場合、ダーティなセットは、第1のクエリの結果から、又は、ダーティを表すコヒーレンス指示子2でマークされたシグネチャのメモリアドレスを含めることによって、示され得る。ダーティなセットは、フラッシュためのキャッシュラインを判定するためにシステムレベルディレクトリ155にクエリされ得るが、それ以外の、クリーンとしてマークされているか、キャッシュされていないアドレスについては、システムレベルディレクトリ155へのクエリは省略され得る。したがって、ダーティなセットのみがクエリされるので、PPレベルコヒーレンスディレクトリ260Bによって提供される追加のメタデータによってシステムレベルディレクトリ155へのルックアップの数が低減され得ることに留意されたい。ダーティなセットがシグネチャ内のアドレスのサブセットである場合、それに応じて、システムレベルディレクトリ155に発行されるクエリは少なくなる。例えば、16個のメモリアドレスに関連するシグネチャのメタデータにおいてダーティとしてマークされているメモリアドレスが1つである場合、第5のクエリで発行されるクエリは1個であり、それによって、他のアドレスに対する15個のクエリが回避される。
【0030】
ステップ342で、PPレベルコヒーレンスディレクトリ160は、第5のクエリの結果に基づいて、キャッシュ130A及び130Bのうち少なくとも1つから第2のダーティデータをフラッシュする。例えば、第5のクエリの結果は、フラッシュを必要とするキャッシュラインを含んでもよく、そのようなアクションが行われ得る。
【0031】
ステップ344で、PPレベルコヒーレンスディレクトリ160は、それ自体の中の第1のエントリを、第2のダーティデータのフラッシュに基づいて更新する。例えば、シグネチャクリーンビットを使用する場合は、クリーンに設定され得る。メモリバンクについてのコヒーレンス指示子を使用する場合は、コヒーレンス指示子は、フラッシュされたアドレスがクリーンになるように更新されてもよい。ここで、プロセス330はステップ324に進み得る。
【0032】
(B.PIMストアにPimPFを使用する例示的なプロセス)
ホスト115から送信されたPPコマンドがPIMストアコマンドである例では、ステップ312は代わりに図3Cに進んでもよい。図3Cのプロセス350を参照すると、ステップ360で、PPレベルコヒーレンスディレクトリ160は、シグネチャを使用して、第3のクエリをそれ自体に発行する。ステップ360は、上述したステップ316と同様に行われてもよい。軽量実装を使用する場合は、無効化すべきキャッシュされたデータが存在するかどうかを判定するためにはPPレベルコヒーレンスディレクトリ160内の情報が不十分であり得るので、ステップ360はスキップされてもよく、したがって、当然、システムレベルディレクトリ155へのクエリが発生し得る。
【0033】
ステップ362で、PPレベルコヒーレンスディレクトリ160は、第3のクエリの結果に基づいて、複数のメモリアドレスを使用して、第4のクエリをシステムレベルディレクトリ155に発行する。ステップ360がスキップされ、第3のクエリからの結果が利用可能でない場合、複数のメモリアドレスの各々に対して第4のクエリが発行される。同様に、第3のクエリがミスである場合、利用可能な情報がないので、各メモリアドレスがルックアップされる。第3のクエリがヒットであり、且つ、重量実装を使用する場合、「キャッシュされていない」メモリアドレスはコヒーレンスの発行をトリガしないので、ルックアップする必要がない。このことにより、重量実装に必要な追加のメタデータストレージを代償にして、PIMストアのためのルックアップが低減される。したがって、「クリーン」又は「ダーティ」であるメモリアドレスがシステムレベルディレクトリ155を使用してルックアップされて、フラッシュ又は無効化のための具体的なキャッシュラインが判定され得る。
【0034】
ステップ364で、PPレベルコヒーレンスディレクトリ160は、第4のクエリの結果に基づいて、キャッシュ130A及び130Bのうち少なくとも1つから第3のダーティデータを複数のメモリアドレスへとフラッシュする。したがって、ダーティとして特定されたキャッシュラインは、キャッシュ130A及び130Bからフラッシュされ得る。
【0035】
ステップ366で、PPレベルコヒーレンスディレクトリ160は、第4のクエリの結果に基づいて、キャッシュ130A及び130Bのうち少なくとも1つからのクリーンデータを無効化する。したがって、クリーンとして特定されたキャッシュラインは、キャッシュ130A及び130Bにおいて無効化され得る。
【0036】
ステップ368で、PPレベルコヒーレンスディレクトリ160は、第2のエントリが未だ存在していない場合、シグネチャによってインデックス付けされた第2のエントリをそれ自体の中に割り当てる。第2のエントリが既に存在する場合、ステップ368はスキップされる。
【0037】
ステップ370で、PPレベルコヒーレンスディレクトリ160は、複数のメモリアドレスがキャッシュされていないことを示すように第2のエントリを更新する。PIMストアコマンドは複数のメモリアドレス内のデータを上書きするので、キャッシュは期限切れのデータを有することになり、したがって「キャッシュされていない」としてマークされる。軽量実装を使用する場合は、シグネチャクリーンビットが代わりに設定され得る。次いで、プロセス350はステップ324に進み得る。
【0038】
(C.PimPFコヒーレンスディレクトリの維持)
コヒーレンスディレクトリコントローラ150は、標準的なメモリロードコマンド/読み出し及びストアコマンド/書き込みコマンドも受信することがあるので、PPレベルコヒーレンスディレクトリ160内に個別のコヒーレンスディレクトリを維持する場合、これらのコマンドの影響も考慮すべきである。例えば、軽量実装を使用する場合、標準的なメモリストア動作を受信し、且つ、関連するメモリアドレスについてPimPFエントリが存在する場合、このエントリは、例えばエントリを追い出すことによって、関連するシグネチャクリーンビットをリセットすることによって、又は、関連するメモリアドレスに対するコヒーレンス指示子を調整することによって更新されるべきである。メモリ内のデータが修正されないので、PimPFに関しては標準的なメモリロード動作を無視することができる。更に、標準的なメモリ読み出し/書き込み動作は、キャッシュラインを追い出す可能性があるが、PimPF内で追跡されている任意のキャッシュラインを追い出しに応じて必ずしも更新しなくてもよい。
【0039】
重量実装を使用する場合、ホスト上のロード命令は、PimPFによって追跡されているキャッシュラインをフェッチし得る。したがって、ロード命令は、キャッシュラインが追跡されているかどうかを判定するためのPimPFへのクエリをトリガしてもよく、追跡されている場合、対応するメタデータ又はコヒーレンス指示子が「クリーン」に設定される。同様に、ホスト上のストア命令はメモリアドレス内のデータを修正し、したがって、ストア命令は、メモリアドレスを追跡しているエントリがあるか判定するためのPimPFへクエリをトリガしてもよく、対応するメタデータ又はコヒーレンス指示子が「ダーティ」に設定される。更に、標準的なメモリ読み出し/書き込み動作は、キャッシュラインを追い出す可能性があるが、PimPF内で追跡されている任意のキャッシュラインを追い出しに応じて必ずしも更新しなくてもよい。
図1A
図1B
図2
図3A
図3B
図3C
【国際調査報告】