(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-09-27
(54)【発明の名称】キャッシュメモリと、ローカルデータストレージと、レジスタファイルとの間でストレージを共有する処理デバイス及び方法
(51)【国際特許分類】
G06F 9/38 20180101AFI20240919BHJP
G06F 12/084 20160101ALI20240919BHJP
G06F 9/30 20180101ALI20240919BHJP
【FI】
G06F9/38 370A
G06F12/084
G06F9/30 370
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024509013
(86)(22)【出願日】2022-07-13
(85)【翻訳文提出日】2024-03-11
(86)【国際出願番号】 US2022037026
(87)【国際公開番号】W WO2023033937
(87)【国際公開日】2023-03-09
(32)【優先日】2021-09-03
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】マキシム ヴィー. カザコフ
【テーマコード(参考)】
5B013
5B033
5B205
【Fターム(参考)】
5B013DD01
5B013DD03
5B033DB00
5B033DD09
5B205KK14
5B205KK22
5B205MM03
5B205UU32
(57)【要約】
複数のSIMDユニットを含む複数の計算ユニットを備える加速処理デバイスであって、各SIMDユニットがレジスタファイルを備える、加速処理デバイスが提供される。加速処理デバイスは、各SIMDユニットと通信するLDSを備える。加速処理デバイスは、各SIMDユニットと通信するキャッシュメモリの第1の部分と、計算ユニットによって共有されるメモリの第2のキャッシュ部分と、を備える。計算ユニットは、プログラムを実行するように構成されており、プログラムにおいて、SIMDユニットのレジスタファイル、キャッシュメモリの第1の部分及びLDSのうち少なくとも1つのストレージ部分が、レジスタファイル、キャッシュメモリの第1の部分及びLDSのうち別の一部として予約される。
【選択図】
図3
【特許請求の範囲】
【請求項1】
加速処理デバイスであって、
複数の計算ユニットと、
キャッシュメモリと、を備え、
各計算ユニットは、
レジスタファイルを備える複数の単一命令複数データ(SIMD)ユニットと、
各SIMDユニットと通信するローカルデータストレージ(LDS)と、を備え、
前記キャッシュメモリは、
前記複数の計算ユニットの前記複数のSIMDユニットの各々と通信する第1の部分と、前記複数の計算ユニットのうち2つ以上によって共有される第2の部分と、を備え、
前記複数の計算ユニットは、プログラムを実行するように構成されており、前記プログラムの実行中に、何れかのSIMDユニットの前記レジスタファイル、前記キャッシュメモリの第1の部分及び前記LDSのうち少なくとも1つのストレージ部分が、前記レジスタファイル、前記キャッシュメモリの第1の部分及び前記LDSのうち別の一部として予約される、
加速処理デバイス。
【請求項2】
前記ストレージ部分は、前記プログラムのコンパイル時に前記ストレージ部分をインスタンス化することによって、前記レジスタファイル、前記キャッシュメモリの第1の部分及び前記LDSのうち前記別の一部として予約される、
請求項1の処理デバイス。
【請求項3】
前記加速処理デバイスは、GPU、計算プロセッサ及び人工知能プロセッサのうち何れかである、
請求項1の処理デバイス。
【請求項4】
前記レジスタファイル、前記キャッシュメモリの第1の部分及び前記LDSのうち別の一部として予約される前記ストレージ部分は、実行される前記プログラムに基づいて決定される、
請求項1の処理デバイス。
【請求項5】
前記レジスタファイルの前記ストレージ部分は、前記キャッシュメモリの第1の部分の一部として予約され、
前記計算ユニットは、
前記レジスタファイルの別のストレージ部分のデータを使用して、前記プログラムの第1の部分を実行することと、
前記レジスタファイルの前記別のストレージ部分のデータを、前記キャッシュメモリの第1の部分の一部として予約された前記レジスタファイルの前記ストレージ部分に記憶することと、
前記キャッシュメモリの第1の部分の一部として予約された前記レジスタファイルの前記ストレージ部分のデータを、前記レジスタファイルの前記別のストレージ部分に再ロードして、前記プログラムの第2の部分を実行することと、
を行うように構成されている、
請求項1の処理デバイス。
【請求項6】
前記プログラムの前記第1の部分及び前記プログラムの前記第2の部分は、ウェーブフロントである、
請求項5の処理デバイス。
【請求項7】
前記レジスタファイルの前記ストレージ部分は、前記計算ユニットの他のSIMDユニットによって共有される、
請求項5の処理デバイス。
【請求項8】
前記ストレージ部分は、前記レジスタファイルのスタティックランダムアクセスメモリ(SRAM)の一部である、
請求項5の処理デバイス。
【請求項9】
前記レジスタファイルは、レジスタバンクを備え、
前記キャッシュメモリの第1の部分の一部として予約された前記レジスタファイルの前記ストレージ部分は、少なくとも1つのレジスタバンクを備える、
請求項1の処理デバイス。
【請求項10】
プログラムを実行する方法であって、
レジスタファイルの第1の部分のデータを使用して、加速処理デバイスの計算ユニットにおいて前記プログラムの第1の部分を実行することと、
前記レジスタファイルの前記第1の部分のデータを、第1のレベルキャッシュメモリの一部としてインスタンス化された前記レジスタファイルの第2の部分に記憶することと、
前記レジスタファイルの前記第2の部分に記憶されたデータを前記レジスタファイルの前記第1の部分に再ロードして、前記プログラムの第2の部分を実行することと、を含む、
方法。
【請求項11】
前記計算ユニットの第1の単一命令複数データ(SIMD)ユニットにおいて、前記プログラムの前記第1の部分及び前記プログラムの前記第2の部分を実行することを含む、
請求項10の方法。
【請求項12】
前記プログラムの前記第1の部分及び前記プログラムの前記第2の部分は、ウェーブフロントである、
請求項10の方法。
【請求項13】
前記レジスタファイルの前記第2の部分は、コンパイル時に前記第1のレベルキャッシュメモリの一部としてインスタンス化される、
請求項10の方法。
【請求項14】
前記レジスタファイルは、計算ユニットの単一命令複数データ(SIMD)ユニットの一部であり、
前記レジスタファイルの前記第2の部分は、前記計算ユニットの他のSIMDユニットによって共有される、
請求項10の方法。
【請求項15】
前記レジスタファイルの前記第2の部分のデータを前記他のSIMDユニットのうち何れかのレジスタファイルにロードすることを含む、
請求項14の方法。
【請求項16】
処理デバイスであって、
メモリと、
加速処理デバイスと、を備え、
前記加速処理デバイスは、
複数の計算ユニットと、
キャッシュメモリと、を備え、
各計算ユニットは、
レジスタファイルを備える複数の単一命令複数データ(SIMD)ユニットと、
各SIMDユニットと通信するローカルデータストレージ(LDS)と、を備え、
前記キャッシュメモリは、
各SIMDユニットと通信する第1のレベルと、前記複数の計算ユニット間で共有される第2のレベルと、を備え、
前記複数の計算ユニットは、プログラムを実行するように構成されており、前記プログラムにおいて、何れかのSIMDユニットの前記レジスタファイル、前記キャッシュメモリの第1のレベル及び前記LDSのうち少なくとも1つのストレージ部分が、前記レジスタファイル、前記キャッシュメモリの第1のレベル及び前記LDSのうち別の一部として予約される、
処理デバイス。
【請求項17】
前記レジスタファイルの前記ストレージ部分は、前記キャッシュメモリの第1のレベルの一部として予約され、
前記計算ユニットは、
前記レジスタファイルの別のストレージ部分のデータを使用して、前記プログラムの第1の部分を実行することと、
前記レジスタファイルの前記別のストレージ部分のデータを、前記キャッシュメモリの第1のレベルの一部として予約された前記レジスタファイルの前記ストレージ部分に記憶することと、
前記キャッシュメモリの第1のレベルの一部として予約された前記レジスタファイルの前記ストレージ部分のデータを、前記レジスタファイルの前記別のストレージ部分に再ロードして、前記プログラムの第2の部分を実行することと、
を行うように構成されている、
請求項16の処理デバイス。
【請求項18】
前記レジスタファイルの前記ストレージ部分と前記レジスタファイルの前記別のストレージ部分との間の第1の帯域幅は、前記レジスタファイルと前記キャッシュメモリの第2のレベルとの間の第2の帯域幅よりも大きい、
請求項17の処理デバイス。
【請求項19】
前記レジスタファイルの前記第2の部分のデータを前記他のSIMDユニットのうち何れかのレジスタファイルにロードすることを含む、
請求項16の処理デバイス。
【請求項20】
実行される前記プログラムに基づいて、前記レジスタファイル、前記キャッシュメモリの第1のレベル及び前記LDSのうち前記別の一部として予約される前記ストレージ部分の量を決定する中央処理ユニット(CPU)を備える、
請求項19の処理デバイス。
【発明の詳細な説明】
【技術分野】
【0001】
(関連出願の相互参照)
本願は、2021年9月3日に出願された米国特許出願第17/467,104号の利益を主張するものであり、その内容は、参照により本明細書に組み込まれる。
【背景技術】
【0002】
グラフィカル処理ユニット(graphical processing unit、GPU)、人工知能プロセッサ及び計算プロセッサ等の加速処理デバイス(accelerated processing device、APD)は、並列処理に適した動作(例えば、グラフィックス動作)の処理を加速するために使用される。GPUは、単一命令複数データ(single-instruction-multiple-data、SIMD)パラダイムに従って並列方式で動作を実施する複数のプロセッサコア(例えば、計算ユニット(compute unit、CU))を含む。
【0003】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解を得ることができる。
【図面の簡単な説明】
【0004】
【
図1】本開示の1つ以上の特徴が実装され得る例示的なデバイスのブロック図である。
【
図2】本開示の1つ以上の特徴を実装するための例示的な構成要素を示すブロック図である。
【
図3】本開示の1つ以上の特徴を実装するための
図2に示されるAPDのCUの例示的な構成要素を示すブロック図である。
【
図4】本開示の特徴による、特定のアプリケーションに基づいて共有ストレージのためにメモリブロックを区分する例示的な方法を示すフロー図である。
【
図5】本開示の特徴による、プログラムを実行する例示的な方法を示すフロー図である。
【発明を実施するための形態】
【0005】
GPUは、CUに加えて、異なるレベルのキャッシュ(例えば、レベル1キャッシュ(L1キャッシュ)及びレベル2キャッシュ(L2キャッシュ))を含む。各CUは、L1キャッシュ及びローカルデータストレージ(local data storage、LDS)を含む。L1キャッシュ及びLDSは、CUのSIMDユニット間で共有される。L1キャッシュは、GPUメモリの一部であり、レベル2キャッシュ(他のCUによって共有される)及びメインメモリを含む。
【0006】
一部の実施形態では、L1キャッシュストレージは、HWキャッシュロジックによって管理される。LDSストレージは、CU上で実行されるソフトウェアカーネルによって管理される。CUとL1キャッシュとの間の帯域幅は、CUとメモリの他の部分(例えば、L2キャッシュ及びメインメモリ)との間の帯域幅よりも大きいので、L1キャッシュは、CUによって頻繁にアクセスされたデータを記憶するために使用される。同様に、CUとLDSとの間の帯域幅は、CUのSIMDユニット間でデータを共有するために比較的大きい。L1キャッシュは、通常、16KB~32KBの範囲の容量を有する。LDSは、典型的には、GPUが準拠する規格(例えば、グラフィックス規格)によって定義される固定容量(例えば、64KB以上)を有する。
【0007】
L1キャッシュの容量を増加させることにより、L1キャッシュは、より頻繁にアクセスされたデータを記憶することができる。しかしながら、L1キャッシュ及びLDSの両方は、CU内のシリコン領域を占有する。したがって、L1キャッシュがより頻繁にアクセスされたデータを記憶することを可能にするためにL1キャッシュの容量を増加させることは、GPU内のL1キャッシュの領域も増加させる。
【0008】
いくつかの従来の加速プロセッサでは、L1キャッシュ及びLDSのデータストレージは、互いの間で共有される。例えば、LDSのより少ない記憶空間が使用されると判定された場合、LDSの64KBの一部(例えば、16KB)は、LDSによる使用のために予約されてもよく、LDSの64KBの残りの部分は、より頻繁にアクセスされたデータを記憶するためにL1キャッシュによって使用されてもよい。これらの従来の加速プロセッサは、総領域がより効率的に使用されることを可能にするが、いくつかのアプリケーションは、L1キャッシュの更に多くの記憶容量の使用から利益を得るであろう。
【0009】
プログラムの一部(例えば、命令のブロック)は、通常、ウェーブフロント(wavefronts)に分割され、ウェーブフロントの各々は、同じ制御フローパスに従う複数のワークアイテム又はスレッドを含む。レジスタファイルは、CUの各SIMDユニットに割り当てられ、ブロック内の各ウェーブフロントは、割り当てられたレジスタファイルを使用して、CUのSIMDユニット上でスケジュールされ、処理される。ウェーブフロントごとのレジスタファイルフットプリントのサイズ(すなわち、ウェーブフロントを処理するために割り当てられたレジスタの数)は、コンパイル時に判定される。ウェーブフロントごとのレジスタファイルフットプリントが低減される場合に、より多くのウェーブを並列に処理することができ、これは、処理されている他のウェーブフロントがメモリからのデータ(すなわち、メモリアクセス)を待っている間に、より多くのウェーブフロントをCUによって並列にスケジュール及び処理することができるので、全体的なレイテンシを低減することができる。ウェーブフロントごとのレジスタファイルフットプリントが増加すると、メモリアクセスの全体数が減少するが、より少ないウェーブフロントがCUによって並列に処理され得る。実行時に、ブロックのウェーブフロントは、ウェーブフロントごとに判定されたレジスタファイルフットプリントに従ってスケジュールされ、且つ、CUの異なるSIMDユニット上で並列に処理されるか、又は、同じSIMDユニット上で直列に処理される。
【0010】
CUのレジスタファイルの容量は、256KB~512KBの範囲である。すなわち、レジスタファイルの容量及びその領域は、L1キャッシュ及びLDSの容量及び領域よりも大きい。しかしながら、レジスタファイルのストレージは、GPU内で実行されるプログラムの異なる部分(例えば、ウェーブフロント)間で容易に共有されず、場合によっては、レジスタファイルが完全に占有されない。例えば、従来のアーキテクチャでは、レジスタファイルのスタティックランダムアクセスメモリ(static random access memory、SRAM)の部分は、SIMDユニット間で共有されない。したがって、プログラムの実行が、第1のSIMDユニットのレジスタ内のデータを第2のSIMDユニットに利用可能にすることを含む場合、第1のSIMDユニットは、最初に、LDS308、L1キャッシュ306又はメモリの別の部分にデータをプッシュし、次いで、そこから、データが第2のSIMDユニットによってアクセスされる。したがって、ウェーブフロントのスレッドは、メモリ(例えば、メインメモリ)を介して同じウェーブフロントの別のスレッドに間接的にアクセスすることができるが、データに直接アクセスするよりも長いレイテンシ期間を有する。しかしながら、ウェーブフロントのスレッドは、レジスタファイルを介して同じウェーブフロントの別のスレッドに直接アクセスすることができない。
【0011】
本開示の特徴は、L1キャッシュ、LDS及びレジスタファイルの組み合わされたストレージを共有することによって、プログラムの効率的な処理のためのデバイス及び方法を提供する。従来のアーキテクチャでは他のSIMDユニット138によって共有されないレジスタファイルのSRAMの部分は、L1キャッシュ及びLDSのために予約され、CUのSIMDユニット間で共有される。L1キャッシュ及びLDSのために予約されるレジスタファイルの部分の量又はサイズは、実行されるアプリケーションに基づく。すなわち、L1キャッシュ、LDS及びレジスタファイルの間の区分は、実行される特定のアプリケーションに合わせて調整される。例えば、実行されるアプリケーションが、大きいL1キャッシュ容量を要求するが、より大きいレジスタファイルを要求しないアプリケーションであると判定された場合に、レジスタファイルのより大きい部分が、追加のL1キャッシュストレージとして使用するために予約される。代替的に、実行されるアプリケーションが、より大きいレジスタファイルを要求するが、大きいL1キャッシュ容量又はLDSを要求しないアプリケーションであると判定された場合に、レジスタファイルのより小さい部分が、L1キャッシュ又はLDSのために予約されるか、又は、予約される部分がない。
【0012】
各々が、複数のSIMDユニットを含む複数の計算ユニットを備え、各SIMDユニットがレジスタファイルを備える、加速処理デバイスが提供される。また、加速処理デバイスは、SIMDユニットの各々と通信するLDSを備える。また、加速処理デバイスは、SIMDユニットの各々と通信するキャッシュメモリの第1の部分と、計算ユニットによって共有されるメモリの第2のキャッシュ部分と、を備える。計算ユニットは、プログラムを実行するように構成されており、プログラムにおいて、SIMDユニットのレジスタファイル、キャッシュメモリの第1の部分及びLDSのうち少なくとも1つのストレージ部分は、レジスタファイル、キャッシュメモリの第1の部分及びLDSのうち別の一部として予約される。
【0013】
プログラムを実行する方法が提供されており、この方法は、レジスタファイルの第1の部分内のデータを使用して、加速処理デバイスの計算ユニット内でプログラムの第1の部分を実行することと、レジスタファイルの第1の部分からのデータを、第1のレベルキャッシュメモリの一部としてインスタンス化されたレジスタファイルの第2の部分に記憶することと、レジスタファイルの第2の部分に記憶されたデータをレジスタファイルの第1の部分に再ロードして、プログラムの第2の部分を実行することと、を含む。
【0014】
加速処理デバイスを備える処理デバイスが提供される。加速処理デバイスは、メモリと、複数のSIMDユニットを含む複数の計算ユニットと、を備え、各SIMDユニットは、レジスタファイルを備える。また、加速処理デバイスは、SIMDユニットの各々と通信するLDSを備える。また、加速処理デバイスは、SIMDユニットの各々と通信する第1のレベルと、計算ユニット間で共有される第2のレベルと、を備えるキャッシュメモリを備える。計算ユニットは、プログラムを実行するように構成されており、プログラムにおいて、SIMDユニットのレジスタファイル、キャッシュメモリの第1のレベル及びLDSのうち少なくとも1つのストレージ部分は、レジスタファイル、キャッシュメモリの第1のレベル及びLDSのうち別の一部として予約される。
【0015】
図1は、本開示の1つ以上の特徴が実装され得る例示的なデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、又は、タブレットコンピュータを含み得る。デバイス100は、プロセッサ102、メモリ104、ストレージ106、1つ以上の入力デバイス108、及び、1つ以上の出力デバイス110を含む。また、デバイス100は、オプションで、入力ドライバ112及び出力ドライバ114を含み得る。デバイス100は、
図1に示されていない追加の構成要素を含み得ることを理解されたい。
【0016】
様々な代替例では、プロセッサ102は、中央処理ユニット(central processing unit、CPU)、GPU、同じダイ上に位置するCPU及びGPU、又は、1つ以上のプロセッサコアを含み、各プロセッサコアは、CPU又はGPUとすることができる。様々な代替例では、メモリ104は、プロセッサ102と同じダイ上に位置しているか、又は、プロセッサ102とは別に位置する。メモリ104は、揮発性又は不揮発性メモリ(例えば、ランダムアクセスメモリ(random access memory、RAM)、ダイナミックRAM(dynamic RAM、DRAM)、キャッシュ)を含む。
【0017】
ストレージ106は、固定又はリムーバブルストレージ(例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク、フラッシュドライブ)を含む。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、生体認証スキャナ、又は、ネットワーク接続(例えば、無線IEEE802シグナルの送信及び/又は受信のための無線ローカルエリアネットワークカード)を含むが、これらに限定されない。出力デバイス110は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上の光、アンテナ、又は、ネットワーク接続(例えば、無線IEEE802シグナルの送信及び/又は受信のための無線ローカルエリアネットワークカード)を含むが、これらに限定されない。
【0018】
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信することを可能にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信することを可能にする。入力ドライバ112及び出力ドライバ114は、オプションの構成要素であること、並びに、デバイス100は、入力ドライバ112及び出力ドライバ114が存在しない場合に、同じ方式で動作することに留意されたい。出力ドライバ114は、表示デバイス118に連結されるAPD116を含む。APDは、プロセッサ102から計算コマンド及びグラフィックスレンダリングコマンドを受け入れて、それらの計算及びグラフィックスレンダリングコマンドを処理し、表示のために表示デバイス118にピクセル出力を提供するように構成されている。以下で更に詳細に説明するように、APD116は、SIMDパラダイムに従って計算を行うように構成された1つ以上の並列処理ユニットを含む。こうして、様々な機能は、本明細書では、APD116によって又はAPD116と併せて実行されるものとして説明されているが、様々な代替例では、APD116によって行われるものとして説明される機能は、ホストプロセッサ(例えば、プロセッサ102)によって駆動されず、表示デバイス118にグラフィック出力を提供するように構成された同様の能力を有する他のコンピューティングデバイスによって、追加的又は代替的に行われる。例えば、SIMDパラダイムに従って処理タスクを行う任意の処理システムが、本明細書に説明される機能を行うように構成され得ることが企図される。代替的に、SIMDパラダイムに従って処理タスクを行わないコンピューティングシステムが、本明細書に説明される機能を行うことが企図される。
【0019】
図2は、デバイス100のブロック図であり、APD116上での処理タスクの実行に関する追加の詳細を示している。プロセッサ102は、システムメモリ104内で、プロセッサ102による実行のための1つ以上の制御論理モジュールを維持する。制御論理モジュールは、オペレーティングシステム120、カーネルモードドライバ122、及び、アプリケーション126を含む。これらの制御論理モジュールは、プロセッサ102及びAPD116の動作の様々な特徴を制御する。例えば、オペレーティングシステム120は、ハードウェアと直接通信し、プロセッサ102上で実行される他のソフトウェアのためのハードウェアへのインターフェースを提供する。カーネルモードドライバ122は、例えば、プロセッサ102上で実行されるソフトウェア(例えば、アプリケーション126)にアプリケーションプログラミングインターフェース(application programming interface、「API」)を提供して、APD116の様々な機能にアクセスすることによって、APD116の動作を制御する。また、カーネルモードドライバ122は、APD116の処理構成要素(以下で更に詳細に説明されるSIMDユニット138等)によって実行するためのプログラムをコンパイルするジャストインタイムコンパイラを含む。
【0020】
APD116は、並列処理に適し得るグラフィック動作及び非グラフィック動作等の選択された機能のためのコマンド及びプログラムを実行する。APD116は、プロセッサ102から受信したコマンドに基づいて、ピクセル動作、幾何学計算及び表示デバイス118への画像のレンダリング等のグラフィックスパイプライン動作を実行するために使用することができる。また、APD116は、プロセッサ102から受信したコマンドに基づいて、ビデオ、物理シミュレーション、計算流体力学又は他のタスクに関連する動作等のように、グラフィックス動作に直接関連しない計算処理動作を実行する。
【0021】
APD116は、プロセッサ102の要求で、SIMDパラダイムに従って並列の方式で動作を行う1つ以上のSIMDユニット138を含む計算ユニット132を含む。SIMDパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有し、したがって同じプログラムを実行するが、そのプログラムを異なるデータで実行することができるものである。一例では、各SIMDユニット138は、16個のレーンを含み、各レーンは、SIMDユニット138内の他のレーンと同時に同じ命令を実行するが、その命令を異なるデータで実行することができる。レーンは、全てのレーンが所定の命令を実行する必要がない場合、予測でオフに切り替えることができる。また、予測は、分岐制御フローを有するプログラムを実行するために使用することができる。より具体的には、制御フローが個々のレーンによって行われる計算に基づいている条件付き分岐又は他の命令を有するプログラムについては、現在実行されていない制御フローパスに対応するレーンの予測及び異なる制御フローパスのシリアル実行が、任意の制御フローを可能にする。
【0022】
計算ユニット132内の実行の基本的単位は、ワークアイテムである。各ワークアイテムは、特定のレーンにおいて並列で実行されるプログラムの単一のインスタンス化を表す。ワークアイテムは、単一のSIMDユニット138上のウェーブフロントとして同時に実行され得る。1つ以上のウェーブフロントがワークグループに含まれ、これは、同じプログラムを実行するように指定されたワークアイテムの集合体を含む。ワークグループは、ワークグループを構成するウェーブフロントの各々を実行することによって実行され得る。代替例では、ウェーブフロントは、単一のSIMDユニット138上で連続して、又は、異なるSIMDユニット138上で部分的に若しくは完全に並列で実行される。ウェーブフロントは、単一のSIMDユニット138上で同時に実行され得るワークアイテムの最大集合体と考えることができる。したがって、プロセッサ102から受信されたコマンドが、プログラムが単一のSIMDユニット138上で同時に実行させることができない程度に特定のプログラムが並列化されるべきであることを示す場合、そのプログラムは、2つ以上のSIMDユニット138上に並列化されるか、又は、同じSIMDユニット138上で直列化される(又は必要に応じて並列化及び直列化の両方)ウェーブフロントに分けられる。スケジューラ136は、異なる計算ユニット132及びSIMDユニット138上の様々なウェーブフロントのスケジューリングに関連する動作を行う。
【0023】
計算ユニット132によって与えられる並列処理は、ピクセル値計算、頂点変換及び他のグラフィック動作等のグラフィック関連動作に好適である。したがって、場合によっては、プロセッサ102からのグラフィックス処理コマンドを受け入れるグラフィックスパイプライン134は、並列で実行するために計算タスクを計算ユニット132に提供する。
【0024】
また、計算ユニット132は、グラフィックに関連しないか、又は、グラフィックスパイプライン134の通常の動作の一部(例えば、グラフィックスパイプライン134の動作に対して行われる処理を補足するために行われたカスタム動作)として行われない計算タスクを行うために使用される。プロセッサ102上で実行されるアプリケーション126又は他のソフトウェアは、そのような計算タスクを定義するプログラムを、実行のためにAPD116に送信する。
【0025】
以下でより詳細に説明されるように、APD116は、L1キャッシュ、LDS及びレジスタファイルの組み合わされたストレージを共有するように構成されている。メモリブロック(すなわち、レジスタファイルのSRAM、LDS及びL1キャッシュ)のうち1つ以上の部分は、実行されるアプリケーションに基づいて、他のメモリブロックのうち1つ以上のために予約される(すなわち、インスタンス化される)。L1キャッシュ、LDS及びレジスタファイルの間の区分は、アプリケーションによるL1キャッシュ、LDS及びレジスタファイルの特定の使用に合わせて調整される。
【0026】
図3は、本開示の1つ以上の特徴を実装するための
図2に示されるAPD116のCU132の例示的な構成要素を示すブロック図である。説明を簡単にするために、APD116は、APD116の例であるGPUとして説明される。
【0027】
図3に示すように、計算ユニット132の各SIMDユニット138は、レジスタファイル302のバンク304を含む。
図3の例に示すように、各レジスタファイル302は、128KBの記憶容量を有し、各々が32KBの記憶容量を有する4つのバンク304を含む。
図3に示したSIMDユニット数及び各レジスタファイルのバンク数は、単なる一例である。本開示の特徴は、任意の数のSIMDユニットと任意の数のバンクを有するレジスタファイルとを有するCUを使用して実装され得る。加えて、
図3に示したレジスタファイル及びバンクの容量は、単なる一例である。本開示の特徴は、
図3に示されるものとは異なる容量で実装され得る。
【0028】
また、CU132は、相互接続310を通して4つのSIMDユニット138の各々と通信し、GPUの次のレベルのメモリ(例えば、L2キャッシュ、L3キャッシュ、メインメモリ)と通信するL1キャッシュ306を含む。したがって、任意のSIMDユニット138は、L1キャッシュ又はメモリの任意の他の部分からデータを要求することができる。
【0029】
LDS308は、相互接続312を使用して4つのSIMDユニット138の各々と通信しており、SIMDユニット138のうち何れかによってアクセス可能である。また、データを共有することができる。したがって、任意のSIMDユニット138は、データをLDS308にプッシュすることができ、別のSIMDユニット138は、そのデータをLDS308からプルすることができる。対照的に、従来のアーキテクチャでは、各SIMDユニット138のレジスタファイル302は、各SIMDユニット138に専用であり、他のSIMDユニット138によって共有されない。したがって、SIMDユニット138がデータを別のSIMDユニット138に利用可能にすることを望む場合、SIMDユニット138は、データをLDS308、L1キャッシュ306(又はより長いレイテンシをもたらすメモリの別の部分)にプッシュして、他のSIMDユニット138にアクセス可能にする。
【0030】
本開示の特徴は、典型的には他のSIMDユニット138によって共有されないレジスタファイルのSRAMの部分を、相互接続310を通してL1キャッシュ306のために、且つ、相互接続312を通してLDS308のために予約し、したがって、SIMDユニット138間で共有可能である。L1キャッシュ306及びLDS308のために予約されるレジスタファイルの部分の量又はサイズは、実行されるアプリケーションに基づく。
【0031】
3つのハードウェアブロックにわたって共有されることによって、記憶されたデータは、アプリケーションのためにより効率的に再使用される。アプリケーションがメモリブロック(すなわち、L1キャッシュ306、LDS308及びレジスタファイル302)のうち何れかのより多くの容量及び帯域幅を使用すると判定されると、他のメモリブロックのうち1つ以上の部分が、1つのメモリブロックのために予約される。例えば、アプリケーションが実行のためにより多くのレジスタを使用すると判定された場合に、L1キャッシュ306及び/又はLDS308の部分が、レジスタファイル302のために予約される。アプリケーションが実行のためにより多くのキャッシュメモリを使用すると判定された場合に、レジスタファイル302及び/又はLDS308の部分(例えば、1つ以上のバンク304)は、追加のL1キャッシュストレージとして使用するために予約される。アプリケーションがより多くのLDS容量を使用すると判定された場合に、レジスタファイル302及び/又はL1キャッシュ306の部分(例えば、1つ以上のバンク304)は、追加のLDSストレージとして使用するために予約される。すなわち、L1キャッシュ306、LDS308及びレジスタファイル302の間の区分は、実行される特定のアプリケーションに合わせて調整される。
【0032】
図4は、特定のアプリケーションに基づいて共有ストレージのためにメモリブロックをどのように区分するかを判定する例示的な方法400を示すフロー図である。
図4に示す例は、プログラムの部分をウェーブフロントとして記述している。しかしながら、本開示の特徴は、プログラムの他のタイプの部分を実行することによって実装され得る。
【0033】
図4に示す例は、実行されるアプリケーションの特定のユースケースに基づいてメモリブロックをどのように区分するかについての異なる判定(すなわち、決定d)を含む。
図4において決定が行われる順序は、単なる例である。本開示の特徴は、
図4に示される順序とは異なる順序で
図4に示される決定を行うことによって実装され得る。
図4に示す決定は網羅的なものではなく、アプリケーションをより効率的に実行するために、メモリブロックを区分する他の組み合わせを使用することができることを理解されたい。
【0034】
ブロック402に示すように、アプリケーションは、実行を開始する。アプリケーションは、例えば、グラフィックス動作と、並列処理に適する非グラフィックス動作と、を含むアプリケーションである。アプリケーションが実行される場合に、処理デバイス(例えば、CPU)は、メモリブロック(すなわち、レジスタファイル、L1キャッシュ及びLDS)をどのように区分するかを判定する。
【0035】
決定ブロック404に示されるように、方法400は、アプリケーションが非ゼロサイズのLDSを使用するかどうかを判定することを含む。ブロック404において、非ゼロサイズのLDSがプログラムを実行するために使用されると判定された場合(「はい」)、ブロック406において、レジスタファイルの一部が、LDSストアを含むように(すなわち、LDSにデータを記憶するように)予約される。次に、ブロック408で、アプリケーションによって指定されたL1キャッシュサイズに基づいて、レジスタファイルの一部がL1キャッシュのために予約される。
【0036】
ブロック404において、アプリケーションを実行するためにLDSストアが使用されていないと判定された場合(「いいえ」)、ブロック408において、LDSストアを含むようにレジスタファイルの一部を予約することなく、アプリケーションによって指定されたL1キャッシュサイズに基づいて、レジスタファイルの一部がL1キャッシュのために予約される。例えば、アプリケーションを実行するためにLDSストアが使用されない場合に、非ゼロサイズのLDSがプログラムを実行するために使用される場合よりも、レジスタファイルのより大きい部分がL1キャッシュのために予約され得る。
【0037】
ブロック408においてレジスタファイルの一部がL1キャッシュのために予約された後、ブロック410において、レジスタファイルの残り(すなわち、L1キャッシュ及び/又はLDSストアのために予約されていないレジスタ)が、ウェーブフロントを実行するために割り当てられる。
【0038】
L1キャッシュ及び/又はLDSストアのために予約されたレジスタファイルの部分のサイズ(レジスタの数)は、例えば、L1キャッシュ及び/又はLDSの容量及び帯域幅等の異なる要因に基づいて判定される。
【0039】
図5は、本開示の特徴による、プログラムを実行する例示的な方法500を示すフロー図である。
図5に示される方法500は、実行される特定のアプリケーションに基づいてL1キャッシュの一部としてCUのレジスタファイルの一部をインスタンス化する決定が行われる場合に、本開示の特徴に従ってプログラムを実行することの単なる一例である。実行される特定のアプリケーションに基づいてL1キャッシュの一部としてCUのレジスタファイルの一部をインスタンス化するためにメモリブロックをどのように区分するかについて異なる決定がなされる場合に、プログラムを実行する他の方法が、
図5に示される方法と同様に実施され得ることを理解されたい。
【0040】
図5に示す例は、プログラムの部分をウェーブフロントとして記述している。しかしながら、本開示の特徴は、プログラムの他のタイプの部分を実行することによって実装され得る。
【0041】
ブロック502に示されるように、方法500は、第1のウェーブフロントの実行を開始することを含む。すなわち、第1のウェーブフロントは、
図3に示すSIMDユニット138のうち何れかによって実行される。
【0042】
ブロック504に示されるように、方法500は、レジスタファイルの第1の部分にデータをロードすることを含む。すなわち、データは、
図3に示されるレジスタファイル302のうち何れかのレジスタにロードされる。例えば、データは、ALU(図示せず)によって使用され、レジスタファイルの第1の部分のレジスタにロードされたデータを使用して計算を実施し、ウェーブフロントを実行する。上述したように、この例では、CUのレジスタファイルの一部(すなわち、第2の部分)が、実行される特定のアプリケーションに基づいてL1キャッシュの一部としてインスタンス化される。例えば、アプリケーションは、実行のために大きいレジスタファイルを使用しないアプリケーションであると判定される。したがって、アプリケーションは、レジスタファイルの第2の部分によって追加のL1キャッシュ容量を生成することによって実行される。
【0043】
ブロック506に示すように、方法500は、レジスタファイルの第1の部分からのデータを、L1キャッシュの一部としてインスタンス化された(予約された)レジスタファイルの第2の部分に記憶することを含む。例えば、データは、第2のウェーブフロントを実行するためにレジスタファイルの第1の部分のスペースを解放するためのスピル動作の一部としてレジスタファイルの第2の部分に記憶される。
【0044】
ブロック508に示すように、方法500は、レジスタファイルの第2の部分からのデータをレジスタファイルの第1の部分に再ロードして、第2のウェーブフロントを実行することを含む。データ再ロードは、レジスタからレジスタへの転送を含み、これは、L1キャッシュからレジスタへの転送よりも広い帯域幅を有し、L2キャッシュ(又はメインメモリ)からレジスタへの転送よりもはるかに広い帯域幅を有する。これにより、レイテンシが低減される。
【0045】
追加的又は代替的に、レジスタファイルの第2の部分内のデータは、ブロック510において破線で示されるように、別のSIMDユニットのレジスタファイルの一部にロードされ得る。すなわち、レジスタファイルの第2の部分は、L1キャッシュの一部としてインスタンス化され、且つ、CUの他のSIMDユニットによって共有される。したがって、データは、レジスタとL2キャッシュとの間の転送よりも大きい帯域幅を有する同じCUのSIMDユニット間で転送され得る。したがって、メモリブロックの占有領域を増大させることなく、アプリケーションをより効率的に実行することができる。
【0046】
本明細書の開示に基づいて、多くの変形が可能であることを理解されたい。特徴及び要素が特定の組み合わせで上述されているが、各特徴又は要素は、他の特徴及び要素を用いずに単独で、又は、他の特徴及び要素を用いて若しくは用いずに様々な組み合わせで使用することができる。
【0047】
図において示され、及び/又は、本明細書に説明される様々な機能ユニット(プロセッサ102、入力ドライバ112、入力デバイス108、出力ドライバ114、出力デバイス110、加速処理デバイス116、割り当てられたレジスタ304、レジスタファイル302のレジスタキャッシュ306、及び、ALU308を含むが、これらに限定されない)は、汎用コンピュータ、プロセッサ若しくはプロセッサコアとして、又は、汎用コンピュータ、プロセッサ若しくはプロセッサコアによって実行可能な非一時的なコンピュータ可読記憶媒体若しくは別の記憶媒体に記憶されているプログラム、ソフトウェア若しくはファームウェアとして実装され得る。提供される方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実施することができる。好適なプロセッサとしては、例として、汎用プロセッサ、専用プロセッサ、従来型プロセッサ、デジタルシグナルプロセッサ(digital signal processor、DSP)、複数のマイクロプロセッサ、DSPコアと関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(Application Specific Integrated Circuit、ASIC)、フィールドプログラマブルゲートアレイ(Field Programmable Gate Array、FPGA)回路、任意の他のタイプの集積回路(integrated circuit、IC)、及び/又は、状態マシンが挙げられる。そのようなプロセッサは、処理されたハードウェア記述言語(hardware description language、HDL)命令及びネットリストを含む他の中間データ(コンピュータ可読媒体に記憶させることが可能な命令)の結果を使用して製造プロセスを構成することによって製造することができる。そのような処理の結果はマスクワークとすることができ、このマスクワークをその後の半導体製造プロセスにおいて使用して、本開示の特徴を実装するプロセッサを製造する。
【0048】
本明細書に提供される方法又はフローチャートは、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれるコンピュータプログラム、ソフトウェア又はファームウェアにおいて実装することができる。非一時的なコンピュータ可読記憶媒体の例としては、読み取り専用メモリ(read only memory、ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、磁気光学媒体、並びに、CD-ROMディスク及びデジタル多用途ディスク(digital versatile disk、DVD)等の光学媒体が挙げられる。
【国際調査報告】