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

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

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

特表2024-524029メモリへの計算オフロードの副作用を低減するためのアプローチ
<>
  • 特表-メモリへの計算オフロードの副作用を低減するためのアプローチ 図1
  • 特表-メモリへの計算オフロードの副作用を低減するためのアプローチ 図2A
  • 特表-メモリへの計算オフロードの副作用を低減するためのアプローチ 図2B
  • 特表-メモリへの計算オフロードの副作用を低減するためのアプローチ 図2C
  • 特表-メモリへの計算オフロードの副作用を低減するためのアプローチ 図3
  • 特表-メモリへの計算オフロードの副作用を低減するためのアプローチ 図4
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-07-05
(54)【発明の名称】メモリへの計算オフロードの副作用を低減するためのアプローチ
(51)【国際特許分類】
   G06F 12/0862 20160101AFI20240628BHJP
   G06F 12/00 20060101ALI20240628BHJP
   G06F 12/0877 20160101ALI20240628BHJP
   G06F 12/084 20160101ALI20240628BHJP
【FI】
G06F12/0862 100
G06F12/00 560F
G06F12/0877 100
G06F12/084
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023575520
(86)(22)【出願日】2022-06-07
(85)【翻訳文提出日】2023-12-25
(86)【国際出願番号】 US2022032470
(87)【国際公開番号】W WO2023278104
(87)【国際公開日】2023-01-05
(31)【優先権主張番号】17/364,854
(32)【優先日】2021-06-30
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【弁理士】
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【弁理士】
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【弁理士】
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】シャイジーン アガ
(72)【発明者】
【氏名】ヌワン ジャヤセーナ
【テーマコード(参考)】
5B160
5B205
【Fターム(参考)】
5B160MM20
5B205JJ13
5B205KK14
5B205NN92
5B205QQ02
5B205UU31
(57)【要約】
計算をメモリにオフロードすることの望ましくない副作用をどのように低減するかという技術的問題に対する技術的解決策は、メモリ側処理の結果をプロセッサ側キャッシュにプリロードするために読み取りヒントを使用する。キャッシュコントローラは、メモリ側処理命令における読み取りヒントの識別に応じて、メモリ側処理の結果をプロセッサ側キャッシュにプリロードさせる。実施形態は、限定はしないが、キャッシュスラッシングレベルに基づいてプリロードを有効化又は無効化することと、メモリ側処理の結果又は結果の一部を特定の宛先キャッシュにプリロードすることと、優先順位及び/若しくは信頼度に基づく結果、並びに/又は、低データバス及び/若しくはコマンドバス利用期間中の結果をプリロードすることと、最後の記憶に関する考慮事項と、メモリ側処理結果が完了した後にプリロードが行われるのを保証するために、順序付け制約を実施することと、を含む。
【選択図】図4
【特許請求の範囲】
【請求項1】
キャッシュコントローラであって、
メモリ側処理結果の少なくとも一部がプロセッサによって読み取られると判定したことに応じて、前記メモリ側処理結果の少なくとも一部をプロセッサ側キャッシュにロードさせるように構成された処理ロジックを備える、
キャッシュコントローラ。
【請求項2】
前記処理ロジックは、前記メモリ側処理結果の少なくとも一部を、メモリ側処理コマンドによって指定された特定のプロセッサ側キャッシュにロードさせるように構成されている、
請求項1のキャッシュコントローラ。
【請求項3】
前記メモリ側処理結果の少なくとも一部は、前記メモリ側処理結果のサブセットであり、
前記メモリ側処理結果のサブセットは、メモリ側処理コマンドによって指定される、
請求項1のキャッシュコントローラ。
【請求項4】
前記メモリ側処理コマンドは、1つ以上のアドレス、データの最後のN個のユニット、又は、1つ以上のメモリ側処理ユニットを識別するデータのうち1つ以上によって、前記メモリ側処理結果のサブセットを指定する、
請求項3のキャッシュコントローラ。
【請求項5】
前記処理ロジックは、前記メモリ側処理結果の少なくとも一部が、前記キャッシュコントローラにおいてプログラムされたアドレス範囲にあることと、メモリ側処理コマンドが、前記メモリ側処理結果の少なくとも一部を前記プロセッサ側キャッシュにロードする必要があると指定することと、に基づいて、前記メモリ側処理結果の少なくとも一部がプロセッサによって読み取られると判定するように構成されている、
請求項1のキャッシュコントローラ。
【請求項6】
前記処理ロジックは、
前記メモリ側処理結果の少なくとも一部を前記プロセッサ側キャッシュにロードするための1つ以上のプリフェッチコマンドを生成及び記憶することと、
低データバス利用又は低コマンドバス利用期間中に前記1つ以上のプリフェッチコマンドを発行することと、
を行うように構成されている、
請求項1のキャッシュコントローラ。
【請求項7】
前記処理ロジックは、
前記メモリ側処理結果の少なくとも一部を前記プロセッサ側キャッシュにロードするための1つ以上のプリフェッチコマンドを生成及び記憶することと、
メモリ側処理コマンドによって指定された優先順位又は信頼度のうち1つ以上に基づいて、前記1つ以上のプリフェッチコマンドを発行することと、
を行うように構成されている、
請求項1のキャッシュコントローラ。
【請求項8】
前記処理ロジックは、
キャッシュスラッシングが現在存在するかどうかを検出し、キャッシュスラッシングが現在存在しない場合、前記メモリ側処理結果の少なくとも一部を前記プロセッサ側キャッシュにロードさせること、又は、
前記プロセッサ側キャッシュのキャッシュスラッシングの現在のレベルを判定し、前記プロセッサ側キャッシュのキャッシュスラッシングの現在のレベルがキャッシュスラッシング閾値を下回ることに応じて、前記メモリ側処理結果の少なくとも一部を前記プロセッサ側キャッシュにロードさせること、
のうち1つ以上を実行するように構成されている、
請求項1のキャッシュコントローラ。
【請求項9】
前記処理ロジックは、前記メモリ側処理結果の少なくとも一部が完了してメモリに記憶された後に、前記メモリ側処理結果の少なくとも一部が前記プロセッサ側キャッシュにロードされるのを保証するために、順序付け制約を実施するように構成されている、
請求項1のキャッシュコントローラ。
【請求項10】
メモリコントローラであって、
メモリ側処理結果の少なくとも一部がプロセッサによって読み取られると判定したことに応じて、前記メモリ側処理結果の少なくとも一部をプロセッサ側キャッシュにロードさせるように構成された処理ロジックを備える、
メモリコントローラ。
【請求項11】
前記処理ロジックは、前記メモリ側処理結果の少なくとも一部を、メモリ側処理コマンドによって指定された特定のプロセッサ側キャッシュにロードさせるように構成されている、
請求項10のメモリコントローラ。
【請求項12】
前記メモリ側処理結果の少なくとも一部は、前記メモリ側処理結果のサブセットであり、
前記メモリ側処理結果のサブセットは、メモリ側処理コマンドによって指定される、
請求項10のメモリコントローラ。
【請求項13】
前記メモリ側処理コマンドは、1つ以上のアドレス、データの最後のN個のユニット、又は、1つ以上のメモリ側処理ユニットを識別するデータのうち1つ以上によって、前記メモリ側処理結果のサブセットを指定する、
請求項12のメモリコントローラ。
【請求項14】
前記処理ロジックは、前記メモリ側処理結果の少なくとも一部が、前記メモリコントローラにおいてプログラムされたアドレス範囲にあることと、メモリ側処理コマンドが、前記メモリ側処理結果の少なくとも一部を前記プロセッサ側キャッシュにロードする必要があると指定することと、に基づいて、前記メモリ側処理結果の少なくとも一部がプロセッサによって読み取られると判定するように構成されている、
請求項10のメモリコントローラ。
【請求項15】
前記処理ロジックは、
前記メモリ側処理結果の少なくとも一部を前記プロセッサ側キャッシュにロードするための1つ以上のプリフェッチコマンドを生成及び記憶することと、
低データバス利用又は低コマンドバス利用期間中に前記1つ以上のプリフェッチコマンドを発行することと、
を行うように構成されている、
請求項10のメモリコントローラ。
【請求項16】
前記処理ロジックは、
前記メモリ側処理結果の少なくとも一部を前記プロセッサ側キャッシュにロードするための1つ以上のプリフェッチコマンドを生成及び記憶することと、
メモリ側処理コマンドによって指定された優先順位又は信頼度のうち1つ以上に基づいて、前記1つ以上のプリフェッチコマンドを発行することと、
を行うように構成されている、
請求項10のメモリコントローラ。
【請求項17】
前記処理ロジックは、
キャッシュスラッシングが現在存在するかどうかを検出し、キャッシュスラッシングが現在存在しない場合、前記メモリ側処理結果の少なくとも一部を前記プロセッサ側キャッシュにロードさせること、又は、
前記プロセッサ側キャッシュのキャッシュスラッシングの現在のレベルを判定し、前記プロセッサ側キャッシュのキャッシュスラッシングの現在のレベルがキャッシュスラッシング閾値を下回ることに応じて、前記メモリ側処理結果の少なくとも一部を前記プロセッサ側キャッシュにロードさせること、
のうち1つ以上を実行するように構成されている、
請求項10のメモリコントローラ。
【請求項18】
前記処理ロジックは、前記メモリ側処理結果の少なくとも一部が完了してメモリに記憶された後に、前記メモリ側処理結果の少なくとも一部が前記プロセッサ側キャッシュにロードされるのを保証するために、順序付け制約を実施するように構成されている、
請求項10のメモリコントローラ。
【請求項19】
方法であって、
キャッシュコントローラが、メモリ側処理結果の少なくとも一部がプロセッサによって読み取られると判定したことに応じて、前記メモリ側処理結果の少なくとも一部をプロセッサ側キャッシュにロードさせることを含む、
方法。
【請求項20】
前記キャッシュコントローラが、前記メモリ側処理結果の少なくとも一部を、メモリ側処理コマンドによって指定された特定のプロセッサ側キャッシュにロードさせることを含む、
請求項19の方法。
【発明の詳細な説明】
【背景技術】
【0001】
このセクションに記載されているアプローチは、遂行され得るアプローチであるが、必ずしも以前に着想又は遂行されたアプローチではない。したがって、別段の指示がない限り、このセクションに記載されたアプローチの何れも、単にこのセクションに含まれることによって、従来技術として適格であると仮定すべきではない。更に、このセクションに記載されたアプローチの何れも、単にこのセクションに含まれることによって、よく理解されている、日常的である、又は、従来的であると仮定すべきではない。
【0002】
計算スループットは、メモリ帯域幅よりも速くスケーリングするので、増大する計算容量にデータを供給し続けるために様々な技術が開発されてきた。プロセッシングインメモリ(Processing In Memory、PIM)は、タスクがメモリモジュール内で直接処理できるように、メモリモジュール内に処理能力を組み込む。ダイナミックランダムアクセスメモリ(Dynamic Random-Access Memory、DRAM)のコンテキストでは、例示的なPIM構成は、算術計算等のいくつかの計算がメモリに対してローカルに実行されることを可能にするベクトル計算要素及びローカルレジスタを含む。これにより、メモリコントローラが、メモリモジュールインターフェースにわたるデータ移動を必要とすることなく、複数のメモリモジュールにおけるローカル計算を並行して起動することが可能になり、これは、特にデータ集約的な作業負荷に対して性能を大幅に改善することができる。
【0003】
例えば、PIM技術を使用して計算をメモリにオフロードすることの技術的問題の1つは、データバストラフィック及びプロセッサ上の計算負荷を低減する一方で、望ましくない副作用(side effects)が存在し得ることである。これらは、プロセッサ側計算(processor-side computations)が、少なくともいくつかの状況での、他の状態で、PIMベースの計算が代わりにプロセッサによって実行された場合にプロセッサ側キャッシュにおいて利用可能なメモリに記憶されるPIMベースの計算の結果を使用する必要がある場合の、キャッシュフラッシュ及びキャッシュミスの数の増加の形でのコストの増加を含む。
【0004】
第1のプロセッサ側計算、その後に第1のプロセッサ側計算の結果を使用するPIMベースの計算、その後にPIMベースの計算の結果を使用する第2のプロセッサ側計算の例を考慮する。第1のプロセッサ側計算の結果は、PIMベースの計算を実行するPIM要素が利用できるように、メモリにフラッシュされなければならない。逆に、第2のプロセッサ側計算のために必要とされるPIMベースの計算の結果はメモリに記憶され、これはキャッシュミスにつながる。この例では、追加のキャッシュフラッシュ及びキャッシュミスのコストが、計算をPIM要素にオフロードすることの性能利益を低減又は相殺する。
【0005】
この問題に対する1つの技術的解決策は、例えば、グラフィックス処理ユニット(Graphics Processing Unit、GPU)コンテキストにおいてプリフェッチ機能/カーネルを起動すること、又は、中央処理ユニット(Central Processing Unit、CPU)コンテキストにおいてプリフェッチ命令を発行することによって、PIMベースの計算の結果をメモリからプロセッサ側キャッシュにプリロードすることである。しかしながら、この解決策は、GPUコンテキストにおける追加のカーネル起動及びCPUコンテキストにおけるプリフェッチ、並びに、クリティカルプロセッサパス上のプリロードのシリアル化に起因するレイテンシの増加を招くという欠点を有する。したがって、計算をメモリにオフロードすることの望ましくない副作用をどのように低減するかという技術的問題に対する技術的解決策が必要である。
【0006】
実施例は、添付の図面において限定としてではなく例として示され、同様の符号は同様の素子を指す。
【図面の簡単な説明】
【0007】
図1】マイクロプロセッサ及び処理イネーブルメモリを含む例示的なキャッシュアーキテクチャを示す図である。
図2A】ホストプロセッサ上で計算のセットを実行するための命令を示す図である。
図2B】スカラー和計算がメモリにオフロードされていることを除いて、図2Aと同じ計算のセットを実行するための命令を示す図である。
図2C】スカラー和計算をメモリにオフロードすることによって被るキャッシュミスを低減するために読み取りヒントが使用されることを除いて、スカラー和計算をメモリにオフロードして、図2Bと同じ計算セットを実行するための命令を示す図である。
図3】メモリ側処理結果の例示的な表を示す図である。
図4】読み取りヒントを使用してメモリベースの処理の副作用を低減するためのアプローチを示すフロー図である。
【発明を実施するための形態】
【0008】
以下の説明では、説明のために、実施形態の十分な理解を提供するための多くの具体的な詳細が記載される。しかしながら、これらの特定の詳細なしに実施形態を実現し得ることは当業者には明らかであろう。他の例では、実施形態を不必要に不明瞭にすることを避けるために、周知の構造及びデバイスがブロック図で示されている。
【0009】
I.概要
II.キャッシュアーキテクチャ
III.読み取りヒント
A.イントロダクション
B.メモリ側処理の結果をプリロードするための読み取りヒントを使用すること
C.改良及び拡張
1.特定のターゲットキャッシュへのプリロード
2.メモリ側計算結果の選択的プリロード
3.優先順位及び信頼度
4.キャッシュスラッシングに基づく任意選択のプリロード
5.きめの細かい(fine-grained)読み取りヒント及び最後の記憶に関する考慮事項
【0010】
(I.概要)
計算をメモリにオフロードすることの望ましくない副作用をどのように低減するかという技術的問題に対する技術的解決策は、メモリ側処理の結果をプロセッサ側キャッシュにプリロードするために読み取りヒントを使用する。本明細書で使用され、以下でより詳細に説明されるように、「読み取りヒント」という用語は、対応するメモリ側処理によって生成された結果がプロセッサによって読み取られるというメモリ側処理命令における指標を指す。キャッシュコントローラは、メモリ側処理命令における読み取りヒントの識別に応じて、メモリ側処理の結果をプロセッサ側キャッシュにプリロードさせる。
【0011】
技術的解決策は、データ集約的な計算がメモリにオフロードされることを可能にするが、計算をメモリにオフロードする場合に通常発生するキャッシュミスが低減される技術的利益を提供する。加えて、技術的解決策は、従来の解決策の欠点、すなわち、GPUコンテキストにおける追加のカーネル起動及びCPUコンテキストにおけるプリフェッチに起因するレイテンシの増加、並びに、クリティカルプロセッサパス上のプリロードのシリアル化に悩まされない。実施形態は、限定はしないが、キャッシュスラッシングレベルに基づいてプリロードを有効化又は無効化することと、メモリ側処理の結果を特定の宛先キャッシュにプリロードすることと、メモリ側処理結果の特定の部分をプリロードすることと、優先順位及び/又は信頼度に基づいて結果をプリロードすることと、低データバス及び/又はコマンドバス利用の期間中の結果をプリロードすることと、最後の記憶に関する考慮事項と、メモリ側処理結果が完了した後にプリロードが行われることを保証するために順序付け制約を実施することと、を含む。
【0012】
(II.キャッシュアーキテクチャ)
図1は、マイクロプロセッサ110と、処理イネーブルメモリ120と、を含む例示的なキャッシュアーキテクチャ100を示す。図1の例示的なキャッシュアーキテクチャ100は、マイクロプロセッサのコンテキストにおいて示され説明されるが、実施形態は、このコンテキストに限定されず、GPUコンテキストに適用可能である。図1のキャッシュアーキテクチャ100は、特定の実施形態に応じて、より少ない又は追加の要素を含むことができる。
【0013】
マイクロプロセッサ110は、説明のために「コア1」及び「コア2」として図1で識別される2つのコアを含むが、実施形態は、2つのコアを有する実施形態に限定されず、単一のコア又は3つ以上のコアを有する実施形態に適用可能である。各コアは、プライベートレベル1(L1)及びレベル2(L2)キャッシュを含み、2つのコアは、この例ではラストレベルキャッシュであるレベル3(L3)キャッシュを共有する。キャッシュL1、L2、L3の各々は、説明のために図示されていないキャッシュコントローラを含む。実施形態は、図1に示されたキャッシュ構造に限定されず、例えば、任意のタイプのわずかの又は追加のキャッシュを有するキャッシュ構造を含む任意のタイプのキャッシュ構造に適用可能である。加えて、マルチコアマイクロプロセッサは、概して、同じキャッシュ構造、すなわち、同じタイプ及びサイズのL1及びL2キャッシュを用いて実装されるが、実施形態は、このコンテキストに限定されず、異なるキャッシュ構造を有するコアに適用可能である。マイクロプロセッサ110は、特定の実施形態に応じて、例えばメモリコントローラ、算術論理演算ユニット(Arithmetic and Logical Unit、ALU)、バッファ、データ、アドレス、制御バス等のように、説明のために図に示されず又は本明細書で説明されない他の要素を含むことができる。
【0014】
処理イネーブルメモリ120は、1つ以上の処理要素と、オプションで、メモリ側処理を実行するためのローカルストレージと、を含むメモリである。処理イネーブルメモリ120の1つの非限定的な例は、1つ以上のプロセッサインメモリ(Processor-In-Memory、PIM)イネーブルダイナミックランダムアクセスメモリ(DRAM)メモリモジュールである。実施形態は、説明のために、PIMイネーブルメモリのコンテキストにおいて以下で説明されるが、実施形態は、この例に限定されず、処理イネーブルメモリのいかなるタイプでも適用可能である。
【0015】
(III.読み取りヒント)
(A.イントロダクション)
図2A図2Cは、計算をメモリにオフロードする副作用を低減するために読み取りヒントが使用される例示的な擬似コードを示す。図2Aは、ホストプロセッサ上で計算のセットを実行するための命令を示す。計算は、第1の畳み込み計算(Conv)、スカラー和計算(Scalar-sum)、及び、第2の畳み込み計算を含む。これらの特定の計算は、説明のために使用され、実施例は、任意のタイプ及び任意の数の関数又は計算に適用可能である。
【0016】
図2Aに示すように、第1の畳み込み計算の結果は、アレイBに記憶され、スカラー和計算で使用される。同様に、スカラー和計算の結果は、アレイDに記憶され、第2の畳み込み計算で使用される。第2の畳み込み計算の結果は、アレイEに記憶される。通常、アレイB、D、Eの少なくとも一部が、図1のL1、L2及び/又はL3キャッシュ等のプロセッサ側キャッシュに記憶されることが予想されるが、これは保証されない。キャッシュに記憶されるこれらのアレイの部分は、アレイB、D、Eのサイズ、利用可能なキャッシュのサイズ、使用される特定の追い出しアルゴリズム、例えば、最長時間未使用(least recently used)、最長頻度未使用(least frequently used)、先入れ先出し(first-in first-out)等の様々な要因に依存する。この例では、アレイBとアレイDの少なくとも一部がプロセッサ側キャッシュに記憶されており、アレイBとアレイDに記憶されている結果にアクセスする場合に、スカラー和と第2の畳み込み計算で少なくともいくつかのキャッシュヒットがあると想定されている。
【0017】
第1及び第2の畳み込み計算は計算集約的であるが、スカラー和計算はデータ集約的であり、これは、スカラー和計算を実行するために大量のメモリ帯域幅が必要とされることを意味する。3つの全ての計算は、GPU、CPU等のホストプロセッサによって実行することができるが、プロセッサにおいてスカラー和計算を実行するために必要とされる高いメモリ帯域幅がボトルネックになる可能性があるため、そうすることは非効率的である。
【0018】
図2Bは、スカラー和計算がメモリにオフロードされていること、すなわち、スカラー和計算がPIM等のメモリ側処理要素によって実行されることを除いて、図2Aと同じ計算セットを実行するための命令を示す。メモリ内でスカラー和計算を実行することは、図2Aにおけるように、スカラー和計算がプロセッサによって実行される場合にプロセッサに利用可能であるよりも、PIMが提供することができるより高いメモリ帯域幅の計算を利用する。しかしながら、上述したように、計算をメモリにオフロードすることにはいくつかの欠点がある。
【0019】
図2Bに示されるように、アレイBに記憶される第1の畳み込み計算の結果は、メモリ側処理要素がスカラー和計算を実行するために利用できるように、メモリにフラッシュされなければならない。加えて、アレイDのサブセットもプロセッサキャッシュ内にあると仮定すると、アレイDがPIM等のメモリ側処理要素によって更新される場合にホストキャッシュが無効なデータを記憶しないように、アレイDもメモリにフラッシュされなければならない。これは、アレイDがメモリに記憶され、何れのプロセッサ側キャッシュにも記憶されないので、第2の畳み込み計算がアレイD上でキャッシュミスを被ることを保証するという重大な欠点につながる。より具体的には、アレイDは、第2の畳み込み計算を実行するためにメモリからプロセッサ側キャッシュにロードされなければならない。これは、メモリ内でスカラー和計算を実行することによって提供される性能利益を少なくとも部分的に相殺する。
【0020】
(B.メモリ側処理の結果をプリロードするための読み取りヒントを使用すること)
図2Cは、スカラー和計算をメモリにオフロードすることによって被るキャッシュミスを低減するために読み取りヒントが使用されることを除いて、スカラー和計算をメモリにオフロードして、図2Bと同じ計算セットを実行するための命令を示す。一実施形態によれば、スカラー和計算をメモリにオフロードする命令、すなわち「PIM+:Scalar-sum(B+C->D)」は、スカラー和計算の結果が、例えば第2の畳み込み計算「Conv(D,w2->E)」を実行するためにホストプロセッサによって読み取られることを示す読み取りヒントを含み、擬似コード内の「+」は、PIM命令が読み取りヒントを含むことを示す。
【0021】
読み取りヒントは、メモリ内で実行される計算の結果がホストプロセッサによって読み取られることをキャッシュコントローラに示す任意の動作によって呼び出される。一実施形態によれば、読み取りヒントは、1つ以上の新たに追加されたビット、以前に未使用のビット値、以前に未使用のビット、又は、演算の符号化において、新たに追加されたビットと、以前に未使用のビット値と、未使用のビットと、の任意の組み合わせによって表される。例えば、コマンドプロトコルが余分な又は未使用のビットを含むことは、珍しいことではない。メモリ側処理要素を有するシステムは、以前の余分な又は未使用のビットのうち何れかを使用して、読み取りヒントを指定する。特定の未使用ビット値及び/又は読み取りヒントを示すために使用されるビットは、事前構成されたポリシー及び/又はランタイム条件によって、プロセッサ設計時に指定され得る。
【0022】
一実施形態によれば、プロセッサ側キャッシュコントローラでのコマンド処理ロジックは、メモリパイプラインでのメモリ側処理コマンドを検査して、あるビット値が読み取りヒントを示すかどうかを判定するように構成される。例えば、キャッシュコントローラは、PIMコマンドが検査によって読み取りヒントを含むと判定すると、ビットマスク等を適用する。キャッシュコントローラは、メモリ側処理コマンドが読み取りヒントを含むと判定すると、キャッシュコントローラは、メモリ側処理の結果が1つ以上のプロセッサ側キャッシュにプリロードされるようにする。一般的なケースでは、ラストレベルキャッシュコントローラは、読み取りヒントを検出し、メモリ側処理の結果をラストレベルキャッシュにプリロードさせる。代替的に、以下でより詳細に説明するように、他のキャッシュコントローラが、メモリ側処理の結果を他のキャッシュにプリロードさせる。本明細書で説明するように、GPU又はCPUの代わりにキャッシュコントローラにメモリ側処理の結果のプリロードを実行させることにより、GPUコンテキストにおける追加のカーネル起動及びCPUコンテキストにおけるプリフェッチに起因するレイテンシの増加、並びに、クリティカルプロセッサパス上のプリロードのシリアル化が回避される。
【0023】
一実施形態によれば、GPUが、図2Cの第2の畳み込み計算等のように、メモリ側計算の後に計算を実行しているGPUコンテキストでは、GPU内のキャッシュコントローラは、メモリ側処理の結果をGPUキャッシュにプリロードさせる。例えば、GPU内のキャッシュコントローラは、アレイD又はその一部をGPUキャッシュにロードさせる。例えば、アレイD内のデータが1000個のキャッシュブロックを占有すると仮定すると、キャッシュコントローラは、処理イネーブルメモリ120からGPUキャッシュにアレイDを読み取るために1000回のロードを実行する。
【0024】
別の実施形態によれば、プロセッサ又はコアがメモリ側処理計算の後に計算を実行しているCPUコンテキストでは、プロセッサ側キャッシュコントローラがメモリからデータをプリロードする。前の例では、L3キャッシュ用のキャッシュコントローラは、アレイDの1000個の値を処理イネーブルメモリ120からL3キャッシュにプリロードする。これにより、アレイDに記憶されるメモリ側処理の結果を、第2の畳み込み計算のためにプロセッサ側キャッシュにおいて利用可能にする。これは、キャッシュコントローラがメモリ側処理結果のプリロードを扱うので、GPUコンテキストにおける追加のカーネル起動及びCPUコンテキストにおけるプリフェッチに起因するコアレイテンシ、又は、クリティカルプロセッサパス上へのプリロードのシリアル化を増加することなく、利用可能なキャッシュ、アレイDのサイズ、及び、キャッシュを管理するために使用される特定のアルゴリズムに依存して、キャッシュミスの可能性を低減する技術的利益を提供する。このアプローチは、任意のプロセッサ側キャッシュコントローラ又はメモリコントローラによって実装され得る。
【0025】
このアプローチは、ソフトウェアデベロッパ及びコンパイラにきめの細かい制御を提供して、特定のメモリ側処理命令に読み取りヒントをマーク付けし、通常はメモリ側処理に関連するキャッシュミスを低減する。そのようなきめの細かい制御が必要でない状況、すなわち、命令ごとの制御が必要でない状況があり得る。一実施形態によれば、キャッシュコントローラ又はメモリコントローラは、メモリ側処理結果のプリロードが望まれる1つ以上のアドレス範囲でプログラムされる。キャッシュコントローラ又はメモリコントローラは、プログラムされた1つ以上のアドレス範囲内のアドレスに対するメモリ側処理の結果をプリロードする。
【0026】
一実施形態によれば、メモリ側処理結果のプリロードを実行するキャッシュコントローラ(又はメモリコントローラ)は、メモリ側処理結果が完了した後にプリロードが実行されることを保証するために、順序付け制約を実施する。これは、様々な機構を使用して達成することができる。1つのそのような機構は、2020年3月3日に出願された「Lightweight Memory Ordering Primitives」と題する米国特許出願公開第16/808,346号に記載されているようなメモリ中心順序付けプリミティブの使用であり、その米国特許出願公開の全ての内容は、あらゆる目的のためにその全体が参照により本明細書に組み込まれる。順序付けプリミティブを使用することにより、アレイDの任意の部分のプリロードが、アレイDのその部分に対するメモリ側計算が完了し、結果がメモリに記憶された後に行われることが保証される。
【0027】
一実施形態によれば、キャッシュコントローラは、プリフェッチコマンド等のプリロードを実行するためのコマンドをキューに記憶して、キャッシュコントローラが、他のメモリ側処理命令又はメモリロード/記憶動作との干渉を低減するようにコマンドの発行を管理することを可能にする。一例として、キャッシュコントローラは、アイドル期間中、すなわち、低データバス及び/又はコマンドバス利用の期間中に、他のメモリ側処理又は命令をロード/記憶することとの干渉を低減するために、キューからプリフェッチコマンドを発行する。キュー内のプリフェッチコマンドは、以下でより詳細に説明するように、優先順位及び信頼度に基づいて管理することもできる。
【0028】
(C.改良及び拡張)
読み取りヒントを使用して計算をメモリにオフロードすることの望ましくない副作用を低減するための本明細書で説明するアプローチは、追加の技術的利益を提供する様々な改良及び拡張を含む。
【0029】
(1.特定のターゲットキャッシュへのプリロード)
本明細書で上述した一般的なケースでは、ラストレベルキャッシュコントローラが、メモリ側計算の結果をラストレベルキャッシュにプリロードさせるが、実施形態はこのケースに限定されない。一実施形態によれば、メモリ側計算の結果は、プリロードを実行するキャッシュコントローラ又はメモリコントローラに直接対応しないキャッシュを含む任意のキャッシュにプリロードされる。
【0030】
この実施形態では、メモリ側処理命令は、ターゲットキャッシュ、すなわち、メモリ側処理の結果が記憶され得る宛先キャッシュを指定する。例えば、メモリ側処理命令における新たに追加されたビット、未使用ビット値及び/又は未使用ビットは、メモリ側処理の結果に対する宛先キャッシュを指定するために使用される。この例では、メモリ側処理命令で指定された宛先キャッシュに対応するキャッシュコントローラが、プリロードを実行する。ビット値及び/又はビットは、GPUの計算ユニットID、CPUのコアID、又は、キャッシュID等を制限なく指定する。メモリ側処理命令がGPUの計算ユニットID又はCPUのコアIDを指定する場合、対応するキャッシュコントローラは、メモリ側処理の結果を、対応するGPU又はCPUのプライベートキャッシュ、例えば、図1のコア1又はコア2のL1及び/又はL2キャッシュにプリロードさせる。一実施形態によれば、図1のL3キャッシュ等のラストレベルキャッシュは、異なる宛先がメモリ側処理命令によって指定されない限り、メモリ側処理の結果のデフォルト宛先である。この実施形態では、何れのキャッシュコントローラ又はメモリコントローラがプリロードを実行するかにかかわらず、メモリ側の処理結果がラストレベルキャッシュにプリロードされる。
【0031】
このアプローチは、メモリ側処理の結果を、結果のコンシューマにとって最も有益である位置にプリロードするという追加の技術的利益を提供する。例えば、図2Cにおいて、ホスト命令が図1のコア1によって実行されると仮定する。プログラマは、「PIM+:Scalar-sum(B+C->D)」命令の結果の宛先としてコア1を指定し、その結果が第2の畳み込み命令のためにキャッシュ内で利用可能になるようにする。次いで、このメモリ側計算の結果は、コア1のL1キャッシュ及び/又はL2キャッシュにプリロードされる。
【0032】
(2.メモリ側計算結果の選択的プリロード)
大量のデータを並列に処理するために、メモリ側処理コマンドが複数のメモリモジュールにブロードキャストされることは珍しいことではない。その結果、メモリ側処理の結果が複数のキャッシュブロックにまたがることがある。全てのキャッシュブロックが、後続のプロセッサ側計算において必要とされるデータを必ずしも搬送するわけではないので、全てのデータをプリロードすることは非効率的であり、キャッシュミスを増加させる可能性がある。更に、メモリ側計算の結果は、キャッシュのサイズを超えることがあり、メモリ側計算の出力全体をプリロードしようと試みることを無駄にする。
【0033】
一実施形態によれば、メモリ側処理命令は、プリロードされるメモリ側処理結果の1つ以上の部分を指定する。結果の部分は、1つ以上のアドレス範囲、ビットマスクが適用される1つ以上のビット値、あるいは、PIMイネーブルDRAMのコンテキストにおけるバンクID等のように、特定のアドレス又はメモリ側処理要素を指定するデータによって指定される。例えば、メモリ側処理命令は、プリロードされるメモリ側処理結果の1つ以上の部分に対応する1つ以上のビット値を含む。このアプローチは、最も関連するメモリ側処理結果にプリロードを集中させることによって、効率が改善され、キャッシュミスの可能性が低減されるという更なる技術的利益をもたらす。また、キャッシュコントローラキューに記憶されるプリフェッチ命令の数も減少する。プリロードされるデータ領域を指定するポリシーは、オペレーティングシステムを介して、又は、アプリケーションごとにプログラマによるアプリケーション命令を介して、メモリコントローラにおいて事前構成され得る。
【0034】
(3.優先順位及び信頼度)
本明細書で上述したように、キャッシュコントローラは、他のメモリ側処理命令及びプロセッサからの他のメモリ要求との干渉を低減するために、低データバス及び/又はコマンドバス利用の期間中にキューからプリフェッチコマンドを発行することができる。一実施形態によれば、キャッシュコントローラは、優先順位及び信頼度に基づいてキュー内のプリフェッチコマンドを管理する。優先順位に関して、対応するメモリ側処理結果のプリロードが使用されるメモリ側処理コマンドは、例えば、1つ以上の新しく追加された又は以前に使用されていないビット値又はビットを介して優先順位を指定する。キャッシュコントローラは、メモリ側処理コマンドで指定された優先順位を使用して、他のコマンドに対して対応するプリフェッチコマンドをいつ発行するか、すなわち、何れの順序でコマンドを発行するかを決定する。例えば、プリフェッチコマンドは、より高い優先順位を有する全てのコマンドが処理された後に発行される。
【0035】
本明細書で使用される「信頼度」は、メモリ側計算の結果が、メモリ側処理コマンドを発行した同じプロセッサによって読み取られる可能性を指す。メモリ側処理コマンドを発行した同じプロセッサがメモリ側処理の結果を読み取ることが知られているか、又は、非常に高いレベルの信頼性で知られている状況があり得る。この状況では、信頼度は高い。他の状況では、メモリ側処理の結果が、対応するメモリ側処理コマンドを発行した同じプロセッサによって読み取られることが、高い信頼度で知られない場合がある。例えば、メモリ側処理の結果は、メモリ側処理コマンドを発行したCPU又はGPUとは異なるCPU(又はコア)又はGPUによる後続の計算において使用され得る。加えて、いくつかの場合では、メモリ側計算の結果を消費する前に、メモリ側処理コマンドを発行した同じプロセッサによって他の何れの計算が実行され得るかが分からない場合があり、これにより、プリロードされた値が、使用される前にキャッシュから追い出される(エビクトされる)可能性がある。これらの場合、信頼度は低い。優先順位と同様に、信頼度は、新しく追加されたビット又は以前に使用されていないビット値及び/又はメモリ側処理コマンドのビットで指定することができる。
【0036】
一実施形態によれば、キャッシュコントローラは、信頼度を使用して、メモリ側処理結果のプリロードを呼び出すかどうかを決定する。例えば、メモリ側処理コマンドに対して指定された信頼度が指定されたレベルを満たす場合、メモリ側処理コマンドの結果のプリロードが有効にされ、結果がプロセッサ側キャッシュにプリロードされる。他方、信頼度が指定されたレベルを満たさない場合、例えば、指定されたレベル未満である場合、プリロードは、メモリシステムが閾値を上回るアイドルを示す場合にのみ使用されるか、又は、プリロードは、そのメモリ側処理コマンドに対して全く使用されない。メモリ側処理コマンドにおける優先順位及び/又は信頼度を指定する能力は、プリロードを実行するために生成される新しいプリフェッチ命令をキャッシュコントローラがどのように管理するかを制御するための追加の柔軟性をソフトウェアデベロッパに提供する。
【0037】
(4.キャッシュスラッシングに基づくオプションのプリロード)
いくつかの状況では、キャッシュされたデータは、それが使用される前にキャッシュから追い出され、「キャッシュスラッシング」として知られ、これは、キャッシュミスの数を増加させ、性能を低下させ得る。例えば、コンピューティングアーキテクチャは、追加のデータがキャッシュに持ち込まれるとキャッシュ内のLRUデータが追い出されることになる、最長時間未使用(Least Recently Used、LRU)追い出しポリシーを実装する。追い出されたデータが最終的に必要とされる場合、それはメモリからキャッシュにリロードされなければならず、これは性能に悪影響を及ぼす。また、これは、本明細書で説明されるアプローチを使用してキャッシュにプリロードされたメモリ側処理結果で行われてもよく、すなわち、読み取りヒントを使用してキャッシュにプリロードされたキャッシュされたメモリ側処理結果は、後続のプロセッサ側計算で使用される前にキャッシュから追い出される。
【0038】
一実施形態によれば、この技術的問題は、キャッシュスラッシング閾値を使用して、読み取りヒントを使用したメモリ側処理結果のプリロードを有効又は無効にする技術的解決策によって対処される。単純な場合、キャッシュコントローラは、キャッシュスラッシングが存在するかどうかを検出し、存在する場合、既存の有用なデータをキャッシュから追い出すことを回避するために、メモリ側の処理結果のプリロードを無効にする。代替的に、キャッシュコントローラは、キャッシュスラッシングのレベルを監視し、キャッシュスラッシング閾値と比較したキャッシュスラッシングのレベルに基づいて、メモリ側の処理結果のプリロードを有効又は無効にする。例えば、キャッシュスラッシングの現在のレベルがキャッシュスラッシング閾値を満たす場合、すなわち、キャッシュスラッシング閾値以下である場合、キャッシュスラッシングの現在のレベルは、存在しないか、又は、メモリ側処理結果のプリロードを可能にするのに十分に低い。この状況では、メモリ側処理結果をキャッシュにプリロードしても、既存の有用なデータがキャッシュから追い出されることはないと想定される。一方、キャッシュスラッシングの現在のレベルがキャッシュスラッシング閾値を満たさない場合、すなわち、キャッシュスラッシング閾値よりも大きい場合、キャッシュスラッシングの現在のレベルが高すぎ、既存の有用なデータがキャッシュから追い出されることを防止するために、メモリ側処理結果のプリロードが無効にされる。
【0039】
キャッシュスラッシングの現在のレベルは、プロセッサによって読み出される前に追い出されるキャッシュされたデータブロックの数をカウントするカウンタによって追跡することができる。カウンタは、指定された時間期間にわたる排除をカウントし、次いでリセットされる。代替的に、カウンタは、使用されていないデータブロックの追い出し時にインクリメントされ、使用されているプリロードされたデータブロックでデクリメントされる。現在のカウントはキャッシュスラッシング閾値と比較され、カウンタがキャッシュスラッシング閾値以下である場合、メモリ側処理結果のプリロードが有効にされる。現在のカウントがキャッシュスラッシング閾値よりも大きい場合、プリロードは無効にされる。現在のカウントとキャッシュスラッシング閾値との比較は、指定された時間に、周期的に、又は、指定されたイベントで実行することができる。キャッシュスラッシング閾値及びキャッシュスラッシングチェックがいつ実行されるかを判定する基準は、メモリコントローラにおいて、又は、オペレーティングシステムを介して、プログラマによってアプリケーションごとに事前構成され得る。
【0040】
一実施形態によれば、キャッシュスラッシングの現在のレベルに基づいてメモリ側処理結果のプリロードを有効又は無効にするために、アドレスベースのアプローチが使用される。この実施形態では、キャッシュコントローラは、アドレスによるキャッシュスラッシングのレベルを監視する、すなわち、指定されたアドレス又はアドレス範囲に関するキャッシュデータが使用される前に追い出されているかどうかを追跡することによって監視する。次いで、キャッシュコントローラは、閾値に基づいて、指定されたアドレス又はアドレス範囲についてのメモリ側処理結果のプリロードを有効又は無効にする。キャッシュスラッシングレベルに基づいて読み取りヒントを使用してメモリ側処理結果をプリロードすることを選択的に有効又は無効にすることは、プリロードが有用であり、システム性能を許容可能なレベル未満に低下させない場合にプリロードを使用し、現在のキャッシュスラッシングが高く、プリロードを有効にすることが有用でない、及び/又は、システム性能を許容可能なレベル未満に低下させる可能性が高い場合にプリロードを使用しないという技術的利益を提供する。
【0041】
(5.きめの細かい読み取りヒント及び最後の記憶に関する考慮事項)
メモリ側処理結果の特定の部分に対する読み取りヒントの使用を選択的に無効にすることが有益である状況がある。図3は、メモリ側処理結果の例示的なテーブル300を示す。この例では、メモリ側処理結果は、アレイDに記憶された図2Cのメモリ側スカラー和計算の結果を表し、ブロック等の16ユニットの空間を占有する。特定の実施形態において、16個のブロックのうち何れかを記憶するのに十分な利用可能なキャッシュしかないと仮定する。メモリ側処理結果の16ブロックの全てがキャッシュに連続的にプリロードされた場合、プリロード動作の完了後、ブロック0から開始して、各連続ブロックが前のブロックを上書きしているので、ブロック15のみがキャッシュに記憶される。第2の畳み込み演算がブロック0(ヘッド)から開始してブロック15(テール)に進む場合、ブロック15のみがキャッシュに記憶されるので、ブロック0~14についてキャッシュミスが生じる可能性がある。加えて、ブロック0~14をプリロードするために使用される計算リソースが無駄になる。
【0042】
一実施形態によれば、この技術的問題は、メモリ側処理命令が、プリロードされるメモリ側処理結果のブロックのラストN個を指定する能力によって対処される。この例では、図2Cのメモリ側スカラー和コマンドは、アレイDのラストブロック、すなわち、ブロック15がプリロードされることを指定する。ソフトウェアデベロッパ又はコンパイラは、利用可能なキャッシュのサイズ及びメモリ側処理結果のサイズを知っており、メモリ側処理命令におけるラストN個のブロック(又は、任意の他のデータ単位)を指定する。ラストN個のブロックは、例えば、ブロックID、又は、プリロードされるメモリ側処理結果の部分を識別する他の情報によって指定される。加えて、ソフトウェアデベロッパ又はコンパイラは、次の計算、例えば第2の畳み込み計算が逆の順序で、すなわち、ブロック15(テール)からブロック0(ヘッド)に実行されることを指定する。この技術的解決策は、使用される前にキャッシュから追い出されるメモリ側処理結果をプリロードするために使用される計算リソースを浪費することを回避する。また、この解決策は、キャッシュにプリロードされるメモリ側処理結果に対してキャッシュヒットが実現され得る可能性を高める。実施例は、メモリ側処理結果の部分のラストN個をプリロードするコンテキストで説明されているが、実施形態はこの例に限定されない。「最も頻繁に使用される」データ計算モデルを使用して、後続の計算のためにプリロードするのに最も有益であるメモリ側処理結果の部分を識別することができ、次いで、メモリ側処理命令は、メモリ側処理結果の識別された部分を指定する読み取りヒントで増補される。再び図3を参照すると、メモリ側処理コマンドは、ブロック5~7がプリロードされるべきであることを示す。
【0043】
本明細書で上述したように、キャッシュ又はメモリコントローラは、メモリ側処理結果のプリロードが望まれる1つ以上のアドレス範囲でプログラムされ得る。キャッシュコントローラ又はメモリコントローラは、プログラムされた1つ以上のアドレス範囲内のアドレスに対するメモリ側処理の結果をプリロードする。複数のメモリ側処理命令が処理結果をプログラムされたアドレス範囲に記憶する状況では、キャッシュ又はメモリコントローラは、プログラムされたアドレス範囲からデータをいつプリロードすべきかを知り得ない。この問題に対処するために、ソフトウェアデベロッパ又はコンパイラは、キャッシュ結果のプリロードが、プログラムされたアドレス範囲にメモリ側処理結果を記憶するラストのメモリ側処理命令のために使用されることを指定する。
【0044】
上述した改良及び拡張は、個別に又は任意の組み合わせで使用することができる。例えば、メモリ側処理結果全体を、ラストレベルキャッシュ等のデフォルトキャッシュ、又は、特定のターゲットキャッシュにプリロードし、次いで、優先順位、信頼度、又は、優先順位と信頼度の両方を使用してキャッシュコントローラによって管理することができる。別の例として、例えばアドレス、最後の記憶等によって指定されるメモリ側処理結果の部分は、最後のレベルキャッシュ等のデフォルトキャッシュ、又は、特定のターゲットキャッシュにプリロードされ、次いで、優先順位、信頼度、又は、優先順位と信頼度の両方を使用してキャッシュコントローラによって管理され得る。
【0045】
図4は、読み取りヒントを使用してメモリベースの処理の副作用を低減するためのアプローチを示すフロー図400である。この例では、キャッシュスラッシングに基づく任意選択のプリロードが有効にされていると仮定するが、このプロセス中の任意の時点で再評価することができる。
【0046】
ステップ402において、メモリ側処理コマンドが発行される。例えば、図2Cの「PIM+:Scalar-sum(B+C->D)」命令の処理によって、メモリ側処理コマンドがメモリパイプラインに発行され、図1のL3キャッシュのキャッシュコントローラによって受け取られる。
【0047】
ステップ404において、メモリ側処理コマンドが読み取りヒントを含むかどうかが判定される。例えば、L3キャッシュのためのキャッシュコントローラ、すなわち、ラストレベルキャッシュコントローラ等のキャッシュコントローラ又はメモリコントローラは、メモリ側処理コマンド内の1つ以上のビットを、検査し及び/又はビットマスクを適用し、その結果は、メモリ側処理コマンドが読み取りヒントを含むかどうかを示す。代替的に、キャッシュコントローラ又はメモリコントローラが、メモリ側処理結果のプリロードが望まれる1つ以上のアドレス範囲でプログラムされている場合、キャッシュコントローラ又はメモリコントローラは、メモリ側処理コマンドがプログラムされたアドレス範囲内のアドレスを指定するかどうかを判定する。例えば、L3キャッシュコントローラは、図2CのPIMコマンドにおけるアレイDの全て又はサブセットが、プログラムされた1つ以上のアドレス範囲内のアドレスに対するメモリ側処理のプリロード結果内にあるかどうかを判定する。
【0048】
ステップ406において、メモリ側処理結果をプリロードするために1つ以上のコマンドが生成される。例えば、キャッシュコントローラは、プリフェッチコマンドを生成して、アレイDをプロセッサ側キャッシュにロードする。プリフェッチコマンドは、メモリ側処理結果を記憶するための特定のターゲットキャッシュを指定することができ、及び/又は、メモリ側処理結果の1つ以上の部分を指定することができる。
【0049】
ステップ408において、コマンドは1つ以上のキューに記憶される。先の例を続けると、1000個のプリフェッチコマンドを生成したキャッシュコントローラは、それらをキャッシュコントローラによって管理される1つ以上のローカルキューに記憶する。
【0050】
ステップ410において、キャッシュコントローラは、キューに記憶されたコマンドを管理及び発行する。例えば、キャッシュコントローラは、メモリ側処理コマンドによって指定されるように、優先順位、信頼度、又は、優先順位及び信頼度の両方に基づいて、コマンドを管理及び発行する。これは、メモリ側処理結果をプリフェッチするためにコマンドが発行される前にメモリ側計算が完了することを保証するために、順序付け制約の実施に相応して実行される。
【0051】
ステップ412において、コマンドが処理され、メモリ側処理結果がプロセッサ側キャッシュにプリロードされる。例えば、プリフェッチコマンドが処理され、メモリ側処理結果又はその一部が、ラストレベルキャッシュ又はメモリ側処理コマンドにおいて指定された特定のターゲットキャッシュ等のプロセッサ側キャッシュにロードされる。
【0052】
計算をメモリにオフロードすることの望ましくない副作用を低減するために読み取りヒントを使用するための本明細書で説明されるアプローチは、任意のキャッシュコントローラ及び任意の数のキャッシュコントローラによって実装され得る。例えば、ラストレベルキャッシュコントローラは、メモリ側処理コマンドにおける読み取りヒントを認識し、メモリ側処理結果の結果又はその一部を、ラストレベルキャッシュコントローラに対応するラストレベルキャッシュ又は他のキャッシュを含むキャッシュにプリロードさせる機能を有するように構成される。代替的に、1つ以上の他のキャッシュコントローラ又は全てのキャッシュコントローラが、プリロード機能を有するように構成される。複数のキャッシュコントローラがプリロード機能を有するように構成される場合、競合及び/又は重複は、対応するキャッシュコントローラのみがプリフェッチを実行するように、メモリ側処理命令において特定の宛先キャッシュを指定することによって回避される。これは、ソフトウェアデベロッパ及びコンパイラが、どこでどのようにプリロードが実装されるかを決定するためのきめの細かい能力を提供する。例えば、コア1のL1キャッシュのためのキャッシュコントローラ及びラストレベルキャッシュL3のためのキャッシュコントローラが、プリロード機能を用いて構成されると仮定する。メモリ側処理命令が読み取りヒントを含むが、メモリ側処理結果の宛先キャッシュを指定しない場合、コア1のL1キャッシュのキャッシュコントローラはプリロードを実行せず、代わりにラストレベルキャッシュL3のキャッシュコントローラがプリロードを実行する。この例では、ラストレベルキャッシュコントローラが、プリロードを実行するためのデフォルトである。メモリ側処理命令がコア1のL1キャッシュ又はコア1のコアIDを指定する場合、コア1のL1キャッシュのためのキャッシュコントローラはプリロードを実行し、そしてラストレベルキャッシュL3のキャッシュコントローラはプリロードを実行しない。
図1
図2A
図2B
図2C
図3
図4
【手続補正書】
【提出日】2024-02-08
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
キャッシュコントローラであって、
メモリ側処理コマンドに対するビットマスクの適用に少なくとも基づいて、前記メモリ側処理コマンドのメモリ側処理結果の少なくとも一部をプロセッサ側キャッシュにロードさせるように構成されている
キャッシュコントローラ。
【請求項2】
前記キャッシュコントローラは、前記メモリ側処理結果の少なくとも一部を、前記メモリ側処理コマンドによって指定された特定のプロセッサ側キャッシュにロードさせるように構成されている、
請求項1のキャッシュコントローラ。
【請求項3】
前記キャッシュコントローラは、前記メモリ側処理結果の少なくとも一部が、前記キャッシュコントローラにおいてプログラムされたアドレス範囲にあることと、メモリ側処理コマンドが、前記メモリ側処理結果の少なくとも一部を前記プロセッサ側キャッシュにロードする必要があると指定することと、に基づいて、前記メモリ側処理結果の少なくとも一部がプロセッサによって読み取られると判定するように構成されている、
請求項1のキャッシュコントローラ。
【請求項4】
前記キャッシュコントローラは、
前記メモリ側処理結果の少なくとも一部を前記プロセッサ側キャッシュにロードするための1つ以上のプリフェッチコマンドを生成及び記憶することと、
メモリ側処理コマンドによって指定された優先順位又は信頼度のうち1つ以上に基づいて、前記1つ以上のプリフェッチコマンドを発行することと、
を行うように構成されている、
請求項1のキャッシュコントローラ。
【請求項5】
前記キャッシュコントローラは、前記メモリ側処理結果の少なくとも一部が完了してメモリに記憶された後に、前記メモリ側処理結果の少なくとも一部が前記プロセッサ側キャッシュにロードされるのを保証するために、順序付け制約を実施するように構成されている、
請求項1のキャッシュコントローラ。
【請求項6】
メモリコントローラであって、
メモリ側処理コマンドに対するビットマスクの適用に少なくとも基づいて、前記メモリ側処理コマンドのメモリ側処理結果の少なくとも一部をプロセッサ側キャッシュにロードさせるように構成されている
メモリコントローラ。
【請求項7】
前記メモリコントローラは、前記メモリ側処理結果の少なくとも一部を、前記メモリ側処理コマンドによって指定された特定のプロセッサ側キャッシュにロードさせるように構成されている、
請求項のメモリコントローラ。
【請求項8】
前記メモリ側処理結果の少なくとも一部は、前記メモリ側処理結果のサブセットであり、
前記メモリ側処理結果のサブセットは、メモリ側処理コマンドによって指定される、
請求項のメモリコントローラ。
【請求項9】
前記メモリコントローラは、前記メモリ側処理結果の少なくとも一部が、前記メモリコントローラにおいてプログラムされたアドレス範囲にあることと、メモリ側処理コマンドが、前記メモリ側処理結果の少なくとも一部を前記プロセッサ側キャッシュにロードする必要があると指定することと、に基づいて、前記メモリ側処理結果の少なくとも一部がプロセッサによって読み取られると判定するように構成されている、
請求項のメモリコントローラ。
【請求項10】
前記メモリコントローラは、
キャッシュスラッシングが現在存在するかどうかを検出し、キャッシュスラッシングが現在存在しない場合、前記メモリ側処理結果の少なくとも一部を前記プロセッサ側キャッシュにロードさせること、又は、
前記プロセッサ側キャッシュのキャッシュスラッシングの現在のレベルを判定し、前記プロセッサ側キャッシュのキャッシュスラッシングの現在のレベルがキャッシュスラッシング閾値を下回ることに応じて、前記メモリ側処理結果の少なくとも一部を前記プロセッサ側キャッシュにロードさせること、
のうち1つ以上を実行するように構成されている、
請求項のメモリコントローラ。
【請求項11】
前記メモリコントローラは、前記メモリ側処理結果の少なくとも一部が完了してメモリに記憶された後に、前記メモリ側処理結果の少なくとも一部が前記プロセッサ側キャッシュにロードされるのを保証するために、順序付け制約を実施するように構成されている、
請求項のメモリコントローラ。
【請求項12】
方法であって、
キャッシュコントローラが、メモリ側処理コマンドに対するビットマスクの適用に少なくとも基づいて、メモリ側処理結果の少なくとも一部をプロセッサ側キャッシュにロードさせることを含む、
方法。
【請求項13】
前記キャッシュコントローラが、前記メモリ側処理結果の少なくとも一部を、前記メモリ側処理コマンドによって指定された特定のプロセッサ側キャッシュにロードさせることを含む、
請求項12の方法。
【国際調査報告】