JP7308197B2 - アクセラレーテッド処理デバイスの帯域幅を増加させるための並列データ転送 - Google Patents

アクセラレーテッド処理デバイスの帯域幅を増加させるための並列データ転送 Download PDF

Info

Publication number
JP7308197B2
JP7308197B2 JP2020529503A JP2020529503A JP7308197B2 JP 7308197 B2 JP7308197 B2 JP 7308197B2 JP 2020529503 A JP2020529503 A JP 2020529503A JP 2020529503 A JP2020529503 A JP 2020529503A JP 7308197 B2 JP7308197 B2 JP 7308197B2
Authority
JP
Japan
Prior art keywords
data
processor
apd
interconnect bus
helper
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2020529503A
Other languages
English (en)
Other versions
JP2021507337A (ja
Inventor
アルシャド ラフマン サイド
アイ. ヴィズドス マイケル
シャミス レオニード
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ATI Technologies ULC
Original Assignee
ATI Technologies ULC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ATI Technologies ULC filed Critical ATI Technologies ULC
Publication of JP2021507337A publication Critical patent/JP2021507337A/ja
Application granted granted Critical
Publication of JP7308197B2 publication Critical patent/JP7308197B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1652Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4221Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17325Synchronisation; Hardware support therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Bus Control (AREA)
  • Multi Processors (AREA)
  • Advance Control (AREA)
  • Information Transfer Systems (AREA)

Description

(関連出願の相互参照)
本願は、2017年12月15日出願の米国特許出願第15/843,663号の利点を主張するものであり、この出願の内容は、本明細書に完全に記載されるかのように、言及することによって本明細書に組み込まれる
アクセラレーテッド処理デバイス(APD)は、グラフィックスのレンダリング等のタスクを実行するためのハードウェアを含む。いくつかのコンピュータシステムは、複数のAPDを含む。複数のAPDを含むことは、APDによって実行されるタスクを高速化することを目的としている。しかしながら、複数のAPDの存在を利用するように構成されたソフトウェアを設計することは複雑であるため、コンピュータシステムは、マルチAPDシステムの潜在能力を十分に活用してしない場合がある。
添付図面と併せて例として与えられる以下の説明から、より詳細な理解を得ることができる。
本開示の1つ以上の機能を実装することができる例示的なデバイスのブロック図である。 一例による、図1のデバイスの詳細を示す図である。 図2に示すグラフィックス処理パイプラインのさらなる詳細を示すブロック図である。 一例による、2つのAPD及びAPD相互接続を含む図1のシステムの構成を示す図である。 A~Cは、1つのAPDを利用して別のAPDの機能を改善するための例示的な技術を示す図である。 A~Bは、ヘルパーAPDを使用してデータをターゲットAPDに送信するための例示的な方法のフロー図である。
本明細書では、複数のアクセラレーテッド処理デバイス(APD)を有するシステムにおけるデータ転送を改善するための技術について説明する。このようなシステムでは、複数のAPDは、周辺コンポーネント相互接続エクスプレス(PCIe)等の一般的な相互接続ファブリックを介してプロセッサ(例えば、中央処理装置(CPU))に接続されている。各APDは、相互接続ファブリックの特定の部分(所定数のPCIeレーン等)でプロセッサに接続される。ファブリックの各部分は、最大帯域幅等の独自のデータ特性を有する(例えば、1つのAPDに接続された特定数のPCIeレーンは、特定の最大帯域幅を有する)。また、複数のAPDは、高速相互接続(AMDのチップ間グローバルメモリ相互接続(XGMI)等)を介して互いに接続されている。
特定のAPDでの作業は、相互接続ファブリックの割り当てられた部分(そのAPDに割り当てられたPCIe接続等)の速度によって制約を受ける可能性がある。より具体的には、APDでの作業を、PCIe接続を介してAPDに転送するよりも迅速に処理することが可能である。本明細書の技術は、マルチAPDシステムにおける1つ以上の他のAPDの連携を通じて、CPUからAPDへ及び/又はAPDからCPUへのデータ転送の有効帯域幅を増加させる。「ターゲット」APDへの書き込みの場合、本技術では、ターゲットAPDへの直接的なデータ送信と、1つ以上の他のAPD(「ヘルパー」APDとして指定される)を介したターゲットAPDへの間接的なデータ送信の両方を含む。次に、1つ以上のヘルパーAPDは、データを、高速APD間相互接続を介してターゲットAPDに送信する。ヘルパーAPDを介して「間接的に」転送されるデータは、直接転送に比べて、ターゲットAPDに転送される時間がより長くかかる可能性があるが、ターゲットAPDに対する全体的な有効帯域幅は、高速APD間相互接続のために増加する。「ソース」APDからの読み出し動作の場合、本技術は同様であるが、逆になる。より具体的には、本技術は、データを、ソースAPDからプロセッサへ直接送信することと、データを、1つ以上のヘルパーAPDを介して間接的に送信することと、を含む。「ソース」APD、すなわち、プロセッサ102からの読み出し動作に関わるAPDは、本明細書において「ターゲット」APDと呼ばれることもある。
図1は、本開示の1つ以上の機能を実装することができる例示的なデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、タブレットコンピュータ、又は、他のコンピューティングデバイスのうち何れかとすることができるが、これらに限定されない。デバイス100は、プロセッサ102と、メモリ104と、ストレージ106と、1つ以上の入力デバイス108と、1つ以上の出力デバイス110と、を含む。また、デバイス100は、1つ以上の入力ドライバ112及び1つ以上の出力ドライバ114を含む。何れも入力ドライバ112も、ハードウェア、ハードウェアとソフトウェアとの組み合わせ、又は、ソフトウェアとして具現化され、入力デバイス112を制御(例えば、動作を制御する、入力ドライバ112から入力を受信する、及び、入力ドライバにデータを提供する)する目的を果たす。同様に、何れの出力ドライバ114も、ハードウェア、ハードウェアとソフトウェアとの組み合わせ、又は、ソフトウェアとして具現化され、出力デバイス114を制御(例えば、動作を制御する、出力ドライバ114から入力を受信する、及び、出力ドライバにデータを提供する)する目的を果たす。図示及び説明するデバイス100は一例であり、図1に示されていない追加のコンポーネントを含むことができ、又は、図1に示す1つ以上のコンポーネントを省略することができることを理解されたい。
様々な代替例では、プロセッサ102は、中央処理装置(CPU)、グラフィックス処理ユニット(GPU)、同じダイ上に配置されたCPU及びGPU、又は、1つ以上のプロセッサコアを含み、各プロセッサコアは、CPU又はGPUとすることができる。様々な代替例では、メモリ104は、プロセッサ102と同じダイ上に配置されてもよいし、プロセッサ102とは別に配置されてもよい。メモリ104は、揮発性又は不揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)、ダイナミックRAM、キャッシュ等)を含む。
ストレージ106は、固定ストレージ又は取り外し可能なストレージ(例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク、フラッシュドライブ等)を含むが、これらに限定されない。入力デバイス108は、限定されないが、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロホン、加速度計、ジャイロスコープ、生体認証スキャナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信用の無線ローカルエリアネットワークカード)を含む。出力デバイス110は、限定されないが、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上のライト、アンテナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信用の無線ローカルエリアネットワークカード)を含む。
入力ドライバ112及び出力ドライバ114は、入力デバイス108及び出力デバイス110の各々とインタフェースし、これらを駆動するように構成された1つ以上のハードウェア、ソフトウェア及び/又はファームウェアコンポーネントを含む。入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信するのを可能にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信するのを可能にする。出力ドライバ114は、ディスプレイデバイス118に接続されたアクセラレーテッド処理デバイス(Accelerated Processing Device:APD)116を含む。ディスプレイデバイスは、いくつかの例では、物理ディスプレイデバイス、又は、リモートディスプレイプロトコルを使用して出力を表示するシミュレートされたデバイスである。APD116は、プロセッサ102から計算コマンド及びグラフィックスレンダリングコマンドを受け入れ、これらの計算コマンド及びグラフィックスレンダリングコマンドを処理して、ピクセル出力を表示のためにディスプレイデバイス118に提供し、及び/若しくは、メモリに記憶された計算結果等の他の出力を生成し、並びに/又は、メディア符号化及び復号化等の他の動作の結果を生成するように構成されている。特定のタイプのワークロードがAPD116によって実行されるものとして本明細書で説明するが、当業者は、他のタイプのワークロードがAPD116によって代替的又は追加的に実行可能であることを理解するであろう。以下より詳細に説明するように、APD116は、単一命令複数データ(single-instruction-multiple-data:SIMD)パラダイムに従って計算を実行するように構成された1つ以上の並列処理ユニットを含む。したがって、本明細書では、様々な機能がAPD116によって又はAPDと連動して実行されるものとし説明するが、様々な代替例では、APD116によって実行されるものとして説明する機能は、ホストプロセッサ(例えば、プロセッサ102)によって駆動されず、グラフィカル出力をディスプレイデバイス118に提供するように構成された、同様の機能を有する他のコンピューティングデバイスによって追加的又は代替的に実行される。例えば、SIMDパラダイムに従って処理タスクを実行する任意の処理システムが、本明細書で説明する機能を実行するように構成されてもよいことが企図される。或いは、SIMDパラダイムに従って処理タスクを実行しないコンピューティングシステムが、本明細書で説明する機能を実行することが企図される。
図2は、一例による、デバイス100及びAPD116の詳細を示す図である。プロセッサ102(図1)は、オペレーティングシステム120と、ドライバ122と、アプリケーション126と、を実行する。また、このプロセッサは、他のプロセッサを代替的又は追加的に実行してもよい。オペレーティングシステム120は、ハードウェアリソースの管理、サービス要求の処理、プロセス実行のスケジューリング及び制御、並びに、他の動作の実行等のデバイス100の様々な態様を制御する。APDドライバ122は、APD116の動作を制御し、グラフィックスレンダリングタスク又は他の作業等のタスクを、処理のためにAPD116に送信する。また、APDドライバ122は、APD116の処理コンポーネント(例えば、以下により詳細に説明するSIMDユニット138等)によって実行されるプログラムをコンパイルするジャストインタイムコンパイラを含む。
APD116は、グラフィックス操作及び非グラフィックス操作等のように、並列処理に適している選択された機能のためのコマンド及びプログラムを実行する。APD116は、ピクセル演算、幾何学的計算等のグラフィックスパイプライン操作を実行し、プロセッサ102から受信したコマンドに基づいて画像をディスプレイデバイス118にレンダリングするのに使用することができる。また、APD116は、プロセッサ102から受信したコマンドに基づいて、ビデオ、物理シミュレーション、計算流体力学又は他のタスクに関連する操作等のように、グラフィックス操作に直接関連しない計算処理操作を実行する。
APD116は、1つ以上のシェーダエンジン131を含む。シェーダエンジンの各々は、1つ以上の計算ユニット132を含み、計算ユニットは、プロセッサ102(又は、別のユニット)の要求時にSIMDパラダイムに従って並列に動作を実行するように構成された1つ以上のSIMDユニット138を含む。SIMDパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有することによって同じプログラムを実行するが、異なるデータを用いて当該プログラムを実行することができるパラダイムである。一例では、各SIMDユニット138は、16のレーンを含む。各レーンは、SIMDユニット138内の他のレーンと同時に同じ命令を実行するが、異なるデータを用いて当該命令を実行することができる。全てのレーンが所定の命令を実行する必要がない場合、予測によってレーンをオフに切り替えることができる。また、予測を使用して、分岐した制御フローを有するプログラムを実行することもできる。具体的には、制御フローが、個々のレーンによって実行された計算に基づく条件付き分岐又は他の命令を有するプログラムの場合、現在実行されていない制御フローパスに対応するレーンの予測及び異なる制御フローパスの連続実行により、任意の制御フローが可能になる。
計算ユニット132における実行の基本単位は、ワークアイテムである。各ワークアイテムは、特定のレーンで並列に実行されるプログラムの単一のインスタンス化を表す。ワークアイテムは、単一のSIMDユニット138上で「ウェーブフロント(wavefront)」として同時に(又は、部分的に同時であって部分的に順次に)実行することができる。1つ以上のウェーブフロントは、同じプログラムを実行するように指定されたワークアイテムの集合を含む「ワークグループ」に含まれる。ワークグループを構成するウェーブフロントの各々を実行することによって、ワークグループを実行することができる。代替例では、ウェーブフロントは、単一のSIMDユニット138又は異なるSIMDユニット138上で実行される。ウェーブフロントは、単一のSIMDユニット138上で同時に(又は、擬似的に同時に)実行可能なワークアイテムの最大の集合と考えることができる。「擬似的に同時」な実行は、SIMDユニット138のレーン数よりも多いウェーブフロントの場合に行われる。このような状況では、ウェーブフロントは、複数のサイクルに亘って実行され、ワークアイテムの異なる集合が異なるサイクルで実行される。APDスケジューラ136は、計算ユニット132及びSIMDユニット138上で様々なワークグループ及びウェーブフロントのスケジューリングに関連する動作を実行するように構成されている。
計算ユニット132によってもたらされる並列性は、ピクセル値計算、頂点変換及び他のグラフィックス動作等のグラフィックス関連動作に適している。したがって、場合によっては、プロセッサ102からグラフィックス処理コマンドを受け入れるグラフィックス処理パイプライン134は、計算タスクを、並列実行のために計算ユニット132に提供する。
また、計算ユニット132は、グラフィックスに関連しないか、グラフィックス処理パイプライン134の「通常」の動作(例えば、グラフィックス処理パイプライン134の動作のために実行される処理を補うために実行されるカスタム動作)の一部として実行されない計算タスクを実行するために使用される。プロセッサ102上で実行されるアプリケーション126又は他のソフトウェアは、このような計算タスクを定義するプログラムを、実行のためにAPD116に送信する。
図3は、図2に示すグラフィックス処理パイプライン134のさらなる詳細を示すブロック図である。グラフィックス処理パイプライン134は、各々がグラフィックス処理パイプライン134の特定の機能を実行するステージを含む。各ステージは、プログラム可能な計算ユニット132で実行されるシェーダプログラムとして部分的若しくは完全に実装され、又は、計算ユニット132の外部の固定機能のプログラム不可能なハードウェアとして部分的若しくは完全に実装される。
入力アセンブラステージ302は、ユーザが充填したバッファ(例えば、プロセッサ102によって実行されるアプリケーション126等のソフトウェアの要求によって充填されたバッファ)からプリミティブデータを読み出し、当該データを、パイプラインの残りの部分によって使用されるプリミティブにアセンブルする。入力アセンブラステージ302は、ユーザが充填したバッファに含まれるプリミティブデータに基づいて、異なるタイプのプリミティブを生成することができる。入力アセンブラステージ302は、パイプラインの残りの部分で使用するために、アセンブルされたプリミティブをフォーマットする。
頂点シェーダステージ304は、入力アセンブラステージ302によってアセンブルされたプリミティブの頂点を処理する。頂点シェーダステージ304は、変換、スキニング、モーフィング及び頂点毎のライティング等の様々な頂点毎の操作を実行する。変換操作は、頂点の座標を変換するための様々な操作を含む。これらの操作は、頂点座標を変更するモデリング変換、ビュー変換、投影変換、パースペクティブ分割及びビューポート変換等のうち1つ以上と、座標以外の属性を変更する他の操作と、を含む。
頂点シェーダステージ304は、1つ以上の計算ユニット132で実行される頂点シェーダプログラムとして部分的又は完全に実装される。頂点シェーダプログラムは、プロセッサ102によって提供され、コンピュータプログラマによって事前に書き込まれたプログラムに基づいている。ドライバ122は、このようなコンピュータプログラムをコンパイルして、計算ユニット132での実行に適したフォーマットを有する頂点シェーダプログラムを生成する。
ハルシェーダステージ306、テッセレータステージ308及びドメインシェーダステージ310は、連携してテッセレーションを実行する。テッセレーションは、プリミティブを細分化することによって、単純なプリミティブをより複雑なプリミティブに変換する。ハルシェーダステージ306は、入力プリミティブに基づいてテッセレーション用のパッチを生成する。テッセレータステージ308は、パッチのサンプルのセットを生成する。ドメインシェーダステージ310は、パッチのサンプルに対応する頂点の頂点位置を計算する。ハルシェーダステージ306及びドメインシェーダステージ310は、頂点シェーダステージ304と同様に、ドライバ122によってコンパイルされる計算ユニット132上で実行されるシェーダプログラムとして実装することができる。
ジオメトリシェーダステージ312は、プリミティブ毎に頂点操作を実行する。ジオメトリシェーダステージ312によって、例えば、ポイントスプライト展開、動的パーティクルシステム操作、ファーフィン(fur-fin)生成、シャドウボリューム生成、キューブマップへのシングルパスレンダリング、プリミティブ毎のマテリアルスワップ、プリミティブ毎のマテリアル設定等の操作を含む、様々な異なるタイプの操作を実行することができる。場合によっては、ドライバ122によってコンパイルされ、計算ユニット132上で実行されるジオメトリシェーダプログラムは、ジオメトリシェーダステージ312の操作を実行する。
ラスタライザステージ314は、ラスタライザステージ314の上流で生成された単純なプリミティブ(三角形)を受け入れてラスタライズする。ラスタライズは、何れのスクリーンピクセル(又は、サブピクセルのサンプル)が特定のプリミティブによってカバーされるかを決定することから構成されている。ラスタライズは、固定機能のハードウェアによって実行される。
ピクセルシェーダステージ316は、上流で生成されたプリミティブ及びラスタライズの結果に基づいて、スクリーンピクセルの出力値を計算する。ピクセルシェーダステージ316は、テクスチャメモリからテクスチャを適用してもよい。ピクセルシェーダステージ316の操作は、ドライバ122によってコンパイルされ、計算ユニット132で実行されるピクセルシェーダプログラムによって実行される。
出力マージャステージ318は、ピクセルシェーダステージ316からの出力を受け入れ、これらの出力をフレームバッファ内に結合(マージ)し、zテスト及びアルファブレンディング等の操作を実行することによって、スクリーンピクセルの最終色を決定する。
いくつかのコンピュータシステム100は、表示用の画像をレンダリングするように協働することができる複数のAPD116を含む。協働の一部には、複数のAPD116間でデータを送信することが含まれる。専用リンク(例えば、AMDのチップ間グローバルメモリ相互接続(XGMI))は、複数のAPD116間の高速相互通信を提供する。
図4は、一例による、2つのAPD116(APD116(1)及びAPD116(2))と、APD相互接続410と、を含むシステム100の構成を示す図である。APD116(1)は、相互接続バス404(1)を介してプロセッサ102に接続されている。APD116(2)は、同様に、相互接続バス404(2)を介してプロセッサ102に接続されている。いくつかの例では、相互接続バスは、APD116(1)が、APD116(2)とは異なるPCIeレーンに接続されたPCIeバスである。相互接続バス404(1)は、相互接続バス404(2)とは独立してデータを伝える。これは、相互接続バス404(1)の帯域幅が、相互接続バス404(2)を介したデータ転送によって消費されず、相互接続バス404(2)の帯域幅が、相互接続バス404(1)を介したデータ転送によって消費されないことを意味する。
本明細書の他の箇所で説明するように、APD相互接続410は、APD116間のデータ転送リンクを提供する。様々な例では、APD相互接続410を使用して、画像をレンダリングするために、又は、三次元グラフィックスレンダリングとは無関係な目的等の他の目的のためにデータを転送する。APD相互接続410を介して転送されるデータは、ピクセルデータ、ジオメトリデータ、又は、画像をレンダリングするため若しくは非グラフィックス関連作業等の他の作業を実行するための他のデータ等のデータを含む。いくつかの例では、APD相互接続410は、このようなデータの高速転送を可能にするために、相互接続バス404よりも広い帯域幅を有する。
各APD116は、メモリ406と、メモリコントローラ408と、を含む。各メモリ406は、各APD116にとって「ローカル」であり、これにより、当該各APDに関連するローカルメモリである。いくつかの実施形態では、APD116に関連するメモリ406は、当該APD116の一般的なデータストアとして機能し、当該APD116に特に関連しないメモリ(メモリ104等)と比較して有利なアクセスタイミング特性を提供する。このようなメモリ406は、通常、計算ユニット132、グラフィックス処理パイプライン134及び/又はAPD116内の他の要素に関するデータを記憶する。また、各APD116は、メモリコントローラ408を含む。とりわけ、メモリコントローラ408は、APD相互接続410と相互接続バス404との両方に亘って、メモリ406及びAPD116内の他の要素へのメモリアクセスを制御する。
メモリコントローラ408が制御するトランザクションの1つのタイプは、関連するAPD116のローカルメモリ406にマッピングされたシステムメモリアドレスを指定するメモリアクセスである。システムアドレスがローカルメモリ406にマッピングされることは、メモリコントローラ408が、システムアドレスに向けられたトランザクションを、ローカルメモリ406に関連するデバイスにルーティングすることを意味する。一例では、メモリコントローラ408は、APD116にマッピングされたシステムメモリアドレス空間の「アパーチャ」又は一部を示すレジスタセットを含み、当該アパーチャ内のシステムメモリアドレスを指定するメモリトランザクションをAPD116にルーティングすることが相互接続バス404に「分かる」ようにすることによって、このようなメモリトランザクションを制御する。メモリコントローラ408は、システムメモリのアドレスをローカルメモリ406のローカルメモリアドレスにマッピングする内部マッピングも含む。
メモリコントローラ408は、APD116(「第1」APD116)にマッピングされたシステムメモリ内のアドレスを、異なるAPD116(「第2」APD116)のローカルメモリ406にマッピングするように指定することができる。例えば、PCIe構成レジスタは、APD116に「属する」システムメモリのアパーチャを指定することができ、同時に、メモリコントローラ408は、当該アパーチャ内のアドレスの少なくとも一部の、第2APD116のローカルメモリ406へのマッピングを含むことができる。この場合、第1APD116(例えば、APD116(1))が、第2APD116(例えば、APD116(2))にマッピングされたアドレスに向けたデータを受信したことに応じて、第1APD116(例えば、APD116(1))は、当該データを第2APD116(例えば、APD116(2))に転送する。いくつかの実装では、この転送は、APD相互接続410を介して行われる。
APD116(例えば、APD116(1))のメモリコントローラ408をプログラムして、APD相互接続410を介して他のAPD116(例えば、APD116(2))にデータを転送することも可能である。より具体的には、プロセッサ102は、所定のメモリアドレスに向けたデータを受信すると転送を実行するようにメモリコントローラ408(例えば、メモリコントローラ408(1))を構成する構成データ及び/又はコンピュータ命令を送信する。このように構成された場合、APD116(例えば、APD116(1))が、当該APD116(例えば、APD116(1))に関連するローカルメモリ406(例えば、ローカルメモリ406(1))内のかかる所定のメモリアドレスにマッピングされたデータを受信したことに応じて、当該データが、当該ローカルメモリ406(例えば、ローカルメモリ406(1))に書き込まれる。このAPD116(例えば、APD116(1))に関連するメモリコントローラ408(例えば、メモリコントローラ408(1))は、このローカルメモリ406(例えば、ローカルメモリ406(1))に書き込まれたデータを、APD相互接続410を介して他のAPD116(例えば、APD116(2))にコピーする。他のAPD116(例えば、APD116(2))は、このデータを、他のAPD116(例えば、APD116(2))に関連するローカルメモリ406(例えば、ローカルメモリ406(2))に書き込む。
なお、上記の動作は逆方向に行われてもよい。換言すれば、APD116がプロセッサ102にデータを送信することが当然可能である。このような転送は、例えば、プロセッサ102へのデータ転送を要求する、APD116による書き込み要求に応じて、又は、プロセッサ102へのデータ転送を要求する、プロセッサ102による読み出し要求に応じて行われる。また、APD116からプロセッサ102への転送は、1つ以上の他のAPD116を中継として使用することができる。APDは、他の方向の転送(プロセッサ102による「書き込み」)と同様に、このような転送(プロセッサ102による「読み出し」)のための中継として使用されるように構成することができる。より具体的には、APD116を、読み出しに応じて、このようなデータをプロセッサ102に中継するように構成された中継APD116のメモリに書き込むためのデータを転送するように構成することができる。或いは、APD116は、中継APD116にマッピングされたメモリアドレスに書き込むように構成されており、このような中継APD116は、書き込まれたアドレスをプロセッサ102のシステムメモリにマッピングするように構成されている。
本明細書で説明するように、APD116は、プロセッサ102からコマンドを受信し、これらのコマンドを処理する。いくつかの例では、これらのコマンドの一部は、三次元オブジェクトを画像にレンダリングして画面上に表示するためのコマンドを含む。また、プロセッサ102は、他のタイプのコマンドをAPD116に送信してもよい。いくつかの動作モードでは、画像をレンダリングして画面に表示するように、2つ以上のAPD116が協働する。画像をレンダリングする作業を分割するための様々なオプション(個々の画像をレンダリングする作業を異なるAPD116間で分割すること、異なるフレーム全体を異なるAPD116に割り当てること、又は、他の技術を含む)が存在する。他の例では、各APD116は、別のAPD116によって実行される作業とは無関係の少なくとも一部の作業を実行し、及び/又は、1つ以上のAPD116は、3Dグラフィックスとは無関係(すなわち、レンダリング作業とは無関係)な作業を実行する。
コンピュータシステム内に2つ以上のAPD116が存在するにもかかわらず、コンピュータシステム上で実行されるソフトウェアは、複数のAPD116を利用するように設計されていなくてもよい。一例では、アプリケーションは、レンダリングコマンド(及び/又は、計算シェーダを実行するためのコマンド等の他のタイプのコマンド)と処理用のデータとを単一のAPD116に転送するように書き込まれる。開発者がリソースを欠いているか、複数のAPD116を利用するようにアプリケーションを構成するためにリソースを消費することを望まないために、アプリケーションがこのように書き込まれる場合がある。或る量の作業のためにAPD116が使用されている状況においても、システム内に存在する2つ以上のAPD116は、各相互接続バス404上で異なる量の帯域幅を消費することができる。例えば、第1APD116上の作業が相互接続バス404の帯域幅によって制約される一方で、第2APD116(及び/又は、第3APD、第4APD等のAPD116)上の作業が相互接続バス404の帯域幅によって制約されないことは、第2APD116に関連する相互接続バス404上に予備の帯域幅が存在することを意味する。
理由にかかわらず、1つのAPD116に接続された相互接続バス404の帯域幅が十分に利用されない一方で、別のAPD116に接続された相互接続バス404がより利用されるか、十分に利用される可能性がある。このように、1つのAPD116を利用して別のAPD116の能力を向上させるための技術を図5A~図5Cに示す。具体的には、図5B~図5Cは、「ヘルパー」APD116が、高速APD相互接続410を利用して「ターゲット」APD116へのデータの送信を支援する技術を示している。単一の「ヘルパー」APD116が示されているが、本明細書で説明する技術は、「ターゲット」APD116の有効帯域幅を増加させるために複数のヘルパーAPD116を使用するシステムに拡張されてもよいことに留意されたい。例示目的として、さらには説明を簡単にするために、図5A~図5Cに示す動作は、大量のデータセット(データ転送1とデータ転送2との累積)が処理用のターゲットAPDに転送され、APD処理が、全てのデータを受信した場合にのみ処理を開始することができる動作である。しかしながら、プロセッサ102とAPD116との間の有効帯域幅を増加させるために本明細書で説明する技術は、このようなシナリオに限定されず、ヘルパーAPDが利用可能な(すなわち、予備の帯域幅を有する)任意の時点において使用可能であることを理解されたい。
図5Aは、ヘルパーAPD116がターゲットAPD116を支援するように使用されないタイミング図500を示す。より具体的には、タイミング図500は、タイミング行510を示す。タイミング行510は、図5AにおいてAPD0とラベル付けされた第1APD116によって実行される3つの動作を示している(ヘルパーAPDのタイミング行は、図5Aに示されていない)。データ転送1とラベル付けされた第1動作は、プロセッサ102から第1APD116への第1データセットの転送に対応する。この第1データ転送は、帯域幅等の相互接続バス404のデータ転送特性やデータ量によって決定される一定の時間を要する。データ転送2とラベル付けされた第2データ転送も行われる。データ転送2は、プロセッサ102から第1APD116への第2データセットの転送に対応する。データ転送1の間に実質的に全てのデータ伝送リソース(例えば、帯域幅)が消費されるので、データ転送2は、データ転送1が実質的に完了するまで待機してから開始する。一例では、相互接続バス404は、PCIe接続の1つ以上のレーンを含み、データ転送1は、相互接続バス404に含まれるPCIeレーンの全てに亘って行われる。したがって、この相互接続バスは、データ転送2に利用することができない。APD処理は、データ転送2の右側に示されている。これは、APD処理がデータ転送2の後に行われることを示す。換言すれば、APD処理は、データ転送2が完了するまで開始されない。その前にAPD処理を開始することも当然可能である。しかしながら、図5Aは、データ転送が順次行われ、したがって、データ転送1及びデータ転送2の両方のデータ転送に必要な最小時間が存在することを示す。
図5Bは、データが2つのAPD116の各々に転送され、次に、一方のAPD116が、受信したデータを、高速APD相互接続410を介して他方のAPD116に転送する例示的な技術のタイミング図530である。一方のAPD116は、「ターゲットAPD」と呼ばれ、「APD0」として示されており、作業(データを必要とするレンダリング作業等)を実行するようにアプリケーションによって指定されたAPDである。他方のAPD116は、「ヘルパーAPD」と呼ばれ、「APD1」として示されており、作業実行用のターゲットAPDへのデータの転送を支援するように指定されたAPDである。
図5Bの技術では、プロセッサ102は、重複する期間においてデータをAPD0及びAPD1の両方に送信する。より具体的には、アプリケーション126は、(例えば、ドライバ122によって提供されるアプリケーションプログラミングインタフェースの関数を呼び出すことによって)処理用のターゲットAPDに送信するためのコマンド及びデータをドライバ122に提供する。アプリケーション126は、コマンド及びデータを処理するために複数のAPD116が使用されることを指定しているわけではない。これに応じて、ドライバ122は、データをヘルパーAPD及びターゲットAPDの両方に転送し、ヘルパーAPDが受信したデータをターゲットAPDに転送するようにヘルパーAPDを構成する。具体的には、ドライバ122は、アプリケーション126が指定したデータ及びコマンドを2つ(又は、関係しているAPDの数に応じてより多くの)の部分に分割し、一方の部分をターゲットAPDに送信し、他方の部分をヘルパーAPD(又は、存在する場合には、他の複数の部分を複数のヘルパーAPD)に送信する。ヘルパーAPD(又は、複数存在する場合には複数のAPD)は、その他方の部分を、APD相互接続410を介してターゲットAPDに送信する。
図5Bでは、本技術は、ヘルパーAPDのローカルメモリ406にデータを書き込むことと、次いで、(例えば、メモリコントローラ408によって)ヘルパーAPDのローカルメモリからターゲットAPDにデータをコピーすることと、を含む。このコピーを実行するために、ドライバ122は、プロセッサ102からデータを受信したことに応じて、ヘルパーAPDが当該データをターゲットAPDにコピーするようにヘルパーAPDを構成する。様々な例では、ドライバ122は、ヘルパーAPD内の構成レジスタを構成することによって、ファームウェア命令を送信することによって、又は、任意の他の技術的に実現可能な方法によって、ヘルパーAPDをこのように構成する。
行540に示すように、データ転送1は、第1時間中に行われる。データ転送1は、データを、相互接続バス404を介してターゲットAPDであるAPD0に転送することを含む。また、行550に示すように、データ転送1が行われる第1時間と重複する期間においてデータ転送2が行われる。第1時間と重複する期間は、データ転送1の少なくとも一部がデータ転送2と同時に行われることを意味する。いくつかの例では、データ転送1の大部分がデータ転送2と時間的に重複する。一例では、ドライバ122は、ターゲットAPDに転送するように指定されたデータを略半分に分割する。この場合、2つのAPDの相互接続バス404が同様の送信特性(例えば、同様の帯域幅等)を有すると仮定すると、略半分に分割されたデータを送信するための時間は、ほぼ等しい。
2つの異なるAPD116に接続された相互接続バス404が独立しているので、1つの相互接続バス404上で消費される帯域幅が別の相互接続バス404上の帯域幅を全く消費しないという意味で、ターゲットAPD及びヘルパーAPDの両方に対してデータ転送が独立且つ同時に行われてもよいことに留意されたい。換言すれば、プロセッサ102は、プロセッサ102が第2データをヘルパーAPDに送信するのと同時に、第1データをターゲットAPDに送信する。したがって、図5Aに示すデータの直列転送が行われない。当然のことながら、ヘルパーAPDに送信されるデータは、依然としてターゲットAPDに転送されなければならない。しかしながら、これは、APD相互接続410を介して行われる。APD相互接続410上のデータ転送速度が相互接続バス404上のデータ転送速度よりも速い場合、図5Bの技術では、ターゲットAPDに転送されるデータとヘルパーAPDに転送されるデータとの両方を転送するのに必要な合計時間は、図5Aの技術において両方のデータを転送するのに必要な合計時間よりも短い。
図5Cは、データが2つのAPD116の各々に転送され、次に、1つのAPD116が、受信したデータを他のAPD116に転送する別の例示的な技術のタイミング図5Cである。図5Bと同様に、図5Cの説明では、プロセッサ102からのデータを受信し処理するAPD116が「ターゲットAPD」と呼ばれ、このAPDは、図5CにおいてAPD0として示されている。また、図5Cの説明では、ターゲットAPDへのデータの転送を支援するAPD116が「ヘルパーAPD」と呼ばれ、図5CにおいてAPD1として示されている。
図5Bの技術と同様に、図5Cの技術では、アプリケーション126は、(例えば、ドライバ122によって提供されるアプリケーションプログラミングインタフェースの関数を呼び出すことによって)処理のためにターゲットAPDに送信するために、コマンド及びデータをドライバ122に提供する。アプリケーション126は、コマンド及びデータを処理するために複数のAPD116が使用されることを指定しない。これに応じて、ドライバ122は、データをヘルパーAPD及びターゲットAPDの両方に転送し、ヘルパーAPDが受信したデータをターゲットAPDに転送するようにヘルパーAPD116を構成する。より具体的には、ドライバ122は、アプリケーション126が指定したデータ及びコマンドを2つの(又は、関係しているAPDの数に応じてより多くの)部分に分割し、一方の部分をターゲットAPDに送信し、他方の部分をヘルパーAPDに(又は、存在する場合には、他の複数の部分を複数のヘルパーAPDに)送信する。ヘルパーAPD(又は、複数存在する場合には複数のAPD)は、他の部分を、APD相互接続410を介してターゲットAPDに送信する。
しかしながら、図5Bの技術とは異なり、図5Cの技術では、ヘルパーAPDのローカルメモリ406にデータを書き込む代わりに、ヘルパーAPDのメモリコントローラ408は、プロセッサ102から受信したデータをターゲットAPDに転送する。この転送を実行するために、ドライバ122は、プロセッサ102からデータを受信したことに応じて、ヘルパーAPDが当該データをターゲットAPDに転送するようにヘルパーAPDを構成する。より具体的には、ドライバ122は、特定のシステムメモリアドレスがターゲットAPDのローカルメモリ406内のメモリ位置にマッピングされるようにヘルパーAPDのメモリコントローラ408を構成する。このマッピングにより、特定のメモリアドレスに向けたデータをヘルパーAPD116が受信すると、メモリコントローラ408は、当該データをヘルパーAPDに転送して、当該データを、特定のメモリアドレスがマッピングされた位置においてターゲットAPDのローカルメモリ406に書き込む。様々な例では、ドライバ122は、ヘルパーAPD内の構成レジスタを構成することによって、ファームウェア命令を送信することによって、又は、他の技術的に実現可能な方法で、上述したようにデータを転送するようにヘルパーAPDを構成する。
行570に示すように、データ転送1は、第1時間中に行われる。データ転送1は、データを、相互接続バス404を介してターゲットAPDであるAPD0に転送することを含む。また、行580に示すように、データ転送2は、データ転送1が行われる第1時間と重複する期間に行われる。「重複する」という用語は、上述した図5Bの技術と同様の意味を有する。一例では、ドライバ122は、データを略半分に分割し、各半分をヘルパーAPD及びターゲットAPDの異なるものに送信して、このようなデータがほぼ同時に並列に送信されるようにする。また、行570は、データ転送1及びデータ転送2が行われる期間の後に、転送されたデータのAPD処理が開始されることを示す。図5Bの技術と同様に、図5Cの技術では、データ1及びデータの直列伝送が行われない。これは、これらの2つのデータブロックが、重複する期間において2つの異なる相互接続バス404を介して転送されるためである。
図5Bには、「XGMI」セクション(APD1からAPD0へのデータのコピーを表す)が、ある程度の時間を消費するものとして示されているが、図5Cには、対応する時間消費の動作が示されていないことに留意されたい。この相違は、一般に、アドレスをAPD0のローカルメモリ406にマッピングすることによるAPD1からAPD0へのデータの転送が、かかる転送動作が図5Bのコピー動作よりも著しく少ないオーバーヘッドに関連しているので、消費する時間が短くなり、オーバーヘッドが殆ど又は全くないことを示すことを意図している。より具体的には、図5Bのコピー動作は、2つの異なるメモリ動作に関連しており、データが最初にヘルパーAPDのローカルメモリ406に記憶され、その後、このようなデータを読み出してターゲットAPDに転送することを必要とする。図5Cの転送動作は、転送されたデータをターゲットAPDに送信する前に、当該データをヘルパーAPDのローカルメモリ406に記憶することを含まない。
所定のタイミングが図5A~5Cに示されているが、実際の動作では、当該タイミングが必ずしも示されているように見えないことに留意されたい。具体的には、データをパイプライン方式でAPDに「ロール(roll)」してもよい。これは、APD処理及びデータ転送が、重複した期間で行われ得ることを意味する。また、データが、重複した期間においてターゲットAPD及びヘルパーAPDに転送されることが示されているが、データは、重複した期間において転送されない可能性もある。したがって、図5A~図5Cは、正確なタイミングシーケンスを示すことを意図していない。むしろ、これらの図は、複数の相互接続バス404を使用して、1つの相互接続バス404のみが使用される場合よりも速い速度でAPDの「クラスタ」又は「集合」にデータを転送することが可能であることを示すことを意図している。さらに、これらの図は、APDの「クラスタ」又は「集合」が、APD相互接続410を利用して、受信したデータを処理のためにターゲットAPDに送信することができることを示すことを意図している。APD116に接続された高速APD相互接続410が相互接続バス404よりも高速であるため、データの作業を実行するターゲットAPDへのプロセッサ102からのデータ転送に必要な合計時間を、複数の相互接続バス410に亘る並列転送を利用しない状況と比較して、短縮することができる。
図5B又は図5Cの何れにおいても、一実施例では、相互接続バス404の各々は、複数のPCIeレーンである。データが、別のAPDを使用せずに、これらのPCIeレーンを介して1つのAPDのみに転送された場合、当該データの転送時間は、PCIeレーンの帯域幅によって制限される。両方のAPDにデータを送信することにより、追加のPCIe帯域幅がデータ転送に利用される。ヘルパーAPDに転送されるデータは、ターゲットAPDに転送される必要があるが、この転送は、相互接続バス404よりも高速なAPD相互接続410(これもまた、AMDのXGMIインタフェース又はAPD116間でデータを転送することができる任意の他のインタフェースタイプであってもよい)を介して行われる。したがって、データをターゲットAPDに転送するのに要する合計時間は、ヘルパーAPDを使用しない構成と比較して短縮される。
図6Aは、一例による、ヘルパーAPDを使用して、データを、処理するためにターゲットAPDに送信する方法600のフロー図である。図1~図5Cに関して説明したシステムについて説明するが、技術的に実現可能な順序で方法600のステップを実行するように構成された任意のシステムが、本開示の範囲に含まれることを理解されたい。
図示したように、方法600は、ステップ602で開始する。ここで、(例えば、ドライバ122によって指示されるように)プロセッサ102は、データをターゲットAPD116に転送する。上述したように、この転送は、APD116とプロセッサ102との間に接続された相互接続バス404を使用して行われる。いくつかの実施形態では、相互接続バス404は、1つ以上のPCIeレーンを含み、相互接続バス404を介して転送可能な単位時間当たりのデータ容量を決定する特有の帯域幅を有する。いくつかの実施形態では、ターゲットAPDへのデータ転送は、メモリアドレスをターゲットとして指定することによって実行される。この場合、メモリアドレスは、ターゲットAPDのローカルメモリ406のメモリアドレスにマッピングされる。次いで、データフローが、相互接続バス404を介してローカルメモリ406に送信される。
ステップ604において、(先と同様に、例えば、ドライバ122の指示で)プロセッサ102は、データをヘルパーAPDに転送する。上述したように、この転送は、ステップ602の転送と部分的又は完全に同時に行われてもよい。また、この転送も、相互接続バス404を介して行われる。ステップ604の転送により、データが、ヘルパーAPDのローカルメモリ406に記憶される。
ステップ606において、ヘルパーAPDは、受信したデータを、高速APD相互接続410を介してターゲットAPDにコピーする。ステップ608において、ターゲットAPDは、直接的に、及び、ヘルパーAPDを介して間接的にプロセッサ102から受信したデータを用いて作業を実行する。
図6Bは、別の例による、ヘルパーAPDを使用して、データを、処理するためにターゲットAPDに送信する方法650のフロー図である。図1~図5Cに関して説明したシステムについて説明するが、技術的に実現可能な順序で方法650のステップを実行するように構成された任意のシステムが、本開示の範囲に含まれることを理解されたい。
図示したように、方法650は、ステップ652で開始する。ここで、(例えば、ドライバ122によって指示されるように)プロセッサ102は、データをターゲットAPD116に転送する。上述したように、この転送は、APD116とプロセッサ102との間に接続された相互接続バス404を使用して行われる。いくつかの実施形態では、相互接続バス404は、1つ以上のPCIeレーンを含み、相互接続バス404を介して転送可能な単位時間当たりのデータ容量を決定する特有の帯域幅を有する。いくつかの実施形態では、ターゲットAPDへのデータ転送は、メモリアドレスをターゲットとして指定することによって実行される。この場合、メモリアドレスは、ターゲットAPDのローカルメモリ406のメモリアドレスにマッピングされる。次いで、データフローが、相互接続バス404を介してローカルメモリ406に送信される。
ステップ654において、(先と同様に、例えば、ドライバ122の指示で)プロセッサ102は、データをヘルパーAPDに転送する。上述したように、この転送は、ステップ602の転送と部分的又は完全に同時に行われてもよい。また、この転送も、相互接続バス404を介して行われる。ステップ604の伝送では、データが、ヘルパーAPDのローカルメモリ406に記憶されない。これは、ヘルパーAPDが、メモリアドレスがターゲットAPDのローカルメモリ406にマッピングされるように書き込まれることによって、データをターゲットAPDに転送するように構成されているためである。
ステップ656において、ヘルパーAPDは、受信したデータを、高速APD相互接続410を介してターゲットAPDに転送する。ステップ658において、ターゲットAPDは、直接的に、及び、ヘルパーAPDを介して間接的にプロセッサ102から受信したデータを用いて作業を実行する。
いくつかの実施形態では、図5B及び図5C(同様に、図6A及び図6B)の両方の技術の何れか又は両方において、ドライバ122は、ヘルパーAPDに接続された相互接続バス404の帯域幅使用を監視し、ヘルパーAPDを都合良く使用して、監視に基づいてターゲットAPDにデータを転送する。例えば、ドライバ122は、ヘルパーAPDに接続された相互接続バス404上で或る帯域幅が利用可能であることを検出したことに応じて、ターゲットAPDへのデータをヘルパーAPDに送信し、その後、ターゲットAPDに送信する(コピートゥワイス技術によるものか、転送技術によるものかを問わない)。帯域幅が利用可能でない場合、ドライバ122は、この動作を実行しない。より多くの帯域幅が利用可能になるにつれて、ドライバ122は、ターゲットAPDへの送信のために、より多くのデータをヘルパーAPDに送信してもよく、利用可能な帯域幅がより少ないことを検出したことに応じて、ヘルパーAPDに送信されるデータ量を減少させてもよい。ヘルパーAPDの利用可能な帯域幅を都合良く使用して、ターゲットAPDの有効帯域幅を増加させる技術は、読み出し、書き込み又は双方向転送のために使用されてもよい。また、本明細書では、2つのAPD116、すなわちヘルパーAPD及びターゲットAPDを含むものとして説明されているが、本技術は、3つ以上のAPD116と共に使用することができ、この場合、複数のAPD116は、単一のターゲットAPDに対する「ヘルパー」として機能する。また、いかなる特定のAPD116も、ヘルパーAPD又はターゲットAPDとして静的に指定される必要はない。一例では、ドライバ122は、相互接続バス404全体の帯域幅を監視する。一例では、ドライバ122が、書き込まれるか読み出されるデータが存在するターゲット/ソースAPDへのAPD相互接続410の接続を有する特定のAPD116との相互接続バス404上に予備帯域幅が存在することを検出した場合、ドライバ122は、予備帯域幅を有する相互接続バス404及び当該相互接続バス404に関連するヘルパーAPDを介して、ターゲット/ソースAPDへの当該データの少なくとも一部の書き込み又は読み出しを行う。このように、ドライバ122は、予備帯域幅を有する複数のヘルパーAPDを使用して、データを転送することができる。
本明細書で提供される開示では、ソースとしてのプロセッサ(例えば、プロセッサ102)から宛先としての「ターゲットAPD」にデータを転送することについて様々な言及がなされる。したがって、本明細書で説明する技術は、プロセッサからAPD116にデータを書き込むために使用される。本明細書で説明する技術は、APD116からデータを読み出すためにも使用することができる。読み出しの場合、上記の技術は逆になる。より具体的には、APD116とプロセッサ102との間の直接接続以外の経路を使用してAPD116からデータを読み出すために、プロセッサ102は、データを読み出す要求をターゲットAPD116に送信する。次に、ターゲットAPD116は、本明細書の他の箇所で説明した技術と一致する方法で、ヘルパーAPD116を介して、要求されたデータの少なくとも一部をプロセッサ102に間接的に送信する。より具体的には、ヘルパーAPD116は、受信したデータを、図6Aに示す技術に類似する方法で、ソースAPD116から、プロセッサ102に関連するメモリ(例えば、システムメモリ104)にコピーするか、又は、受信したデータを、図6Bに示す技術に類似する方法で、ソースAP116から、プロセッサに関連するメモリ(例えば、システムメモリ104)に転送するように構成されてもよい。上記の方法によるデータの読み出し及び書き込みは、同時に行われてもよいし、非同時に行われてもよい。
また、本明細書で提供される技術は、一例として本明細書で説明するAPD116を使用して実行されるものとして説明されているが、本技術は、APD116以外のデバイスによって実行されるように拡張されてもよい。本技術は、本明細書で説明する技術に従ってデータを転送することができる任意のデバイスによって使用されてもよい。
本明細書で説明する技術の何れにおいても、プロセッサ102からターゲットAPD116に、又は、ソースAPD116からプロセッサ102に転送されるデータは、単一のバッファ又は複数のバッファから生じてもよい。一例では、「単一のバッファ」は、特定の動作又は関連する動作のセットの結果が配置されるメモリの単一の連続する部分を意味する。したがって、複数のバッファは、互いに連続してもよいし、連続しなくてもよく、複数のタイプの動作の結果として生成されたデータを記憶するメモリの複数の異なる部分、又は、単一のタイプの動作によって生成された異なるタイプのデータを記憶するメモリの複数の異なる部分を意味する。異なるAPDに並列にデータを送信する方法を決定する際に、ドライバ122は、ターゲットAPDに送信するために異なるバッファから異なるAPDにデータを送信してもよいし、個々のバッファを分割し、分割されたバッファの異なる部分を、異なるAPDを介してターゲットAPDに送信してもよい。APDへの送信として説明したが、上記のデータ分割技術は、読み出し動作にも適用される。換言すれば、ドライバ122は、ソースAPDを制御して、単一のバッファを、異なる経路を介して(例えば、相互接続バス404を介して直接的に、1つ以上のAPD相互接続410を介して間接的に)プロセッサ102に送信するために、複数の部分に分割してもよく、及び/又は、各バッファの完全性をソースAPDに維持させ、バッファを分割することなく、異なる経路を介して(先と同様に、例えば、相互接続バス404を介して直接的に、1つ以上のAPD相互接続410を介して間接的に)データを異なるバッファからプロセッサ102に送信させてもよい。
バッファの分割に関して、ドライバ122は、バッファを分割するかどうかを決定するために、及び、分割されたバッファの異なる部分をどのように送信するかを決定するために、様々な要因のうち任意の要因を使用してもよい。具体的には、ドライバ122は、バッファの分割に関連するオーバーヘッドが大きすぎてバッファを分割できないと判別してもよく、この場合、バッファを分割しない。先と同様に、上述したように、ドライバ122は、様々なバス(例えば、相互接続バス404及びAPD相互接続410)上の予備帯域幅を監視して、使用する予備帯域幅を識別し、APDとプロセッサとの間の転送のための有効帯域幅を増加させる。
本明細書の開示に基づいて多くの変形が可能であることを理解されたい。機能及び要素は、特定の組み合わせで上述したように説明されているが、各機能又は要素は、他の機能や要素なしに単独で使用されてもよいし、他の機能や要素を伴って若しくは伴わずに様々な組み合わせで使用されてもよい。
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実施されてもよい。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ(DSP)、複数のマイクロプロセッサ、DSPコアに関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、任意の他のタイプの集積回路(IC)、及び/又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語(HDL)命令、及び、ネットリストを含む他の中間データ(このような命令はコンピュータ可読媒体に記憶され得る)の結果を使用して製造プロセスを構成することによって製造されてもよい。このような処理の結果は、本実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
本明細書で提供される方法又はフローチャートは、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア、ファームウェアにおいて実装されてもよい。非一時的なコンピュータ可読記憶媒体の例には、読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、光学媒体(CD-ROMディスク等)、デジタル多用途ディスク(DVD)等が含まれる。

Claims (17)

  1. ターゲットデバイスのための第1データ及び第2データを送信する方法であって、
    プロセッサとターゲットデバイスとの間のデータ転送の要求を識別することであって、前記要求は、前記ターゲットデバイスと前記プロセッサとの間で転送するための前記第1データ及び前記第2データを指定する、ことと、
    前記要求に応じて、第1期間中に第1相互接続バスを介して、前記ターゲットデバイスと前記プロセッサとの間で前記第1データを送信することと、
    ヘルパーデバイスと前記プロセッサとの間の第2相互接続バスに予備帯域幅が存在することを識別することであって、前記第1相互接続バス及び前記第2相互接続バスの各々は最大帯域幅を有する、ことと、
    前記予備帯域幅が存在すると識別したことに応じて、第2期間中に前記第2相互接続バスを介して、前記ヘルパーデバイスと前記プロセッサとの間で前記第2データを送信し、前記ターゲットデバイスと前記ヘルパーデバイスとの間に接続されたデバイス相互接続を介して、前記ヘルパーデバイスと前記ターゲットデバイスとの間で前記第2データを送信することであって、前記第1相互接続バス上で転送されるデータは、前記第2相互接続バスの帯域幅を消費せず、前記第2相互接続バス上で転送されるデータは、前記第1相互接続バスの帯域幅を消費しない、ことと、を含む、
    方法。
  2. 前記デバイス相互接続は、前記第1相互接続バスの前記帯域幅及び前記第2相互接続バスの前記帯域幅の両方よりも高い帯域幅を有する、
    請求項1の方法。
  3. 前記ヘルパーデバイスと前記プロセッサとの間で前記第2データを送信することは、
    前記ヘルパーデバイスに関連するローカルメモリに前記第2データを書き込むことを含む、
    請求項1の方法。
  4. 前記ヘルパーデバイスと前記ターゲットデバイスとの間で前記第2データを送信することは、
    PD相互接続を介して、前記ターゲットデバイスに関連するローカルメモリに前記第2データをコピーすること、又は、
    前記プロセッサに関連するシステムメモリに前記第2データをコピーすることを含む、
    請求項の方法。
  5. 前記データ転送の要求は、メモリアドレスを指定し、
    前記ヘルパーデバイスと前記ターゲットデバイスとの間で前記第2データを送信することは、
    前記ヘルパーデバイスにおいて、前記メモリアドレスが、前記ターゲットデバイスのローカルメモリ又は前記プロセッサに関連するシステムメモリに関連するメモリアドレスにマッピングされていることを検出することと、
    前記検出したことに応じて、前記ヘルパーデバイス又は前記プロセッサに前記第2データを転送することと、を含む、
    請求項1の方法。
  6. 前記第1データ及び前記第2データは、前記第1データ及び前記第2データを複数のデバイスを用いてレンダリングするように構成されていないアプリケーションによって生成される、
    請求項1の方法。
  7. ライバによって、前記アプリケーションから前記第1データ及び前記第2データを受信することと、
    前記アプリケーションが、前記第1データ及び前記第2データを複数のデバイスにレンダリングするように構成されていないと判別したことに応じて、前記第1データを前記ターゲットデバイスに送信し、前記第2データを前記ヘルパーデバイスに送信し、前記第2のデータを前記ヘルパーデバイスから前記ターゲットデバイスに送信することと、を含む、
    請求項の方法。
  8. 前記第1相互接続バスは、周辺コンポーネント相互接続エクスプレス(PCIe)接続を含み、
    前記第2相互接続バスは、PCIe接続を含む、
    請求項1の方法。
  9. ターゲットデバイスのための第1データ及び第2データを送信するシステムであって、
    プロセッサと、
    第1相互接続バスを介して前記プロセッサに接続された前記ターゲットデバイスと、
    第2相互接続バスを介して前記プロセッサに接続されたヘルパーデバイスと、
    前記ターゲットデバイスと前記ヘルパーデバイスとの間に接続されたデバイス相互接続と、を備え、
    前記プロセッサは、
    前記プロセッサと前記ターゲットデバイスとの間のデータ転送の要求を識別することであって、前記要求は、前記ターゲットデバイスと前記プロセッサとの間で転送するための前記第1データ及び前記第2データを指定する、ことと、
    前記要求に応じて、第1期間中に前記第1相互接続バスを介して、前記ターゲットデバイスと前記プロセッサとの間で前記第1データを送信することと、
    前記第2相互接続バスに予備帯域幅が存在することを識別することであって、前記第1相互接続バス及び前記第2相互接続バスの各々は最大帯域幅を有する、ことと、
    前記予備帯域幅が存在すると識別したことに応じて、第2期間中に前記第2相互接続バスを介して、前記ヘルパーデバイスと前記プロセッサとの間で前記第2データを送信し、前記デバイス相互接続を介して、前記ヘルパーデバイスと前記ターゲットデバイスとの間で前記第2データを送信することであって、前記第1相互接続バス上で転送されるデータは、前記第2相互接続バスの帯域幅を消費せず、前記第2相互接続バス上で転送されるデータは、前記第1相互接続バスの帯域幅を消費しない、ことと、
    を行うように構成されている、
    システム。
  10. 前記デバイス相互接続は、前記第1相互接続バスの前記帯域幅及び前記第2相互接続バスの前記帯域幅の両方よりも高い帯域幅を有する、
    請求項のシステム。
  11. 前記プロセッサは、
    前記ヘルパーデバイスに関連するローカルメモリに前記第2データを書き込むことによって、前記ヘルパーデバイスと前記プロセッサとの間で前記第2データを送信するように構成されている、
    請求項のシステム。
  12. 前記プロセッサは、
    PD相互接続を介して、前記ターゲットデバイスに関連するローカルメモリに前記第2データをコピーすること、又は、
    前記プロセッサに関連するシステムメモリに前記第2データをコピーすることによって、
    前記ヘルパーデバイスと前記ターゲットデバイスとの間で前記第2データを送信するように構成されている、
    請求項11のシステム。
  13. 前記データ転送の要求は、メモリアドレスを指定し、
    前記プロセッサは、
    前記ヘルパーデバイスにおいて、前記メモリアドレスが、前記ターゲットデバイスのローカルメモリ又は前記プロセッサに関連するシステムメモリに関連するメモリアドレスにマッピングされていることを検出することと、
    前記検出したことに応じて、前記ヘルパーデバイス又は前記プロセッサに前記第2データを転送することと、によって、
    前記ヘルパーデバイスと前記ターゲットデバイスとの間で前記第2データを送信するように構成されている、
    請求項のシステム。
  14. 前記第1データ及び前記第2データは、前記第1データ及び前記第2データを複数のデバイスを用いてレンダリングするように構成されていないアプリケーションによって生成される、
    請求項のシステム。
  15. ドライバを備え、
    前記ドライバは、
    前記アプリケーションから前記第1データ及び前記第2データを受信することと、
    前記アプリケーションが、前記第1データ及び前記第2データを複数のデバイスにレンダリングするように構成されていないと判別したことに応じて、前記第1データを前記ターゲットデバイスに送信する動作と、前記第2データを前記ヘルパーデバイスに送信する動作と、前記第2データを前記ヘルパーデバイスから前記ターゲットデバイスに送信する動作と、を実行することと、
    を行うように構成されている、
    請求項14のシステム。
  16. 前記第1相互接続バスは、周辺コンポーネント相互接続エクスプレス(PCIe)接続を含み、
    前記第2相互接続バスは、PCIe接続を含む、
    請求項のシステム。
  17. ドライバのための命令を記憶するコンピュータ可読記憶媒体であって、
    前記命令は、プロセッサによって実行されると、
    前記プロセッサが、前記プロセッサとターゲットデバイスとの間のデータ転送の要求を識別することであって、前記要求は、前記ターゲットデバイスと前記プロセッサとの間で転送するための第1データ及び第2データを指定する、ことと、
    前記プロセッサが、前記要求に応じて、第1期間中に第1相互接続バスを介して、前記ターゲットデバイスと前記プロセッサとの間で前記第1データを送信することと、
    前記プロセッサが、ヘルパーデバイスと前記プロセッサとの間の第2相互接続バスに予備帯域幅が存在することを識別することであって、前記第1相互接続バス及び前記第2相互接続バスの各々は最大帯域幅を有する、ことと、
    前記プロセッサが、前記予備帯域幅が存在すると識別したことに応じて、第2期間中に前記第2相互接続バスを介して、前記ヘルパーデバイスと前記プロセッサとの間で前記第2データを送信し、前記ターゲットデバイスと前記ヘルパーデバイスとの間に接続されたデバイス相互接続を介して前記ヘルパーデバイスと前記ターゲットデバイスとの間で前記第2データを送信することであって、前記第1相互接続バス上で転送されるデータは、前記第2相互接続バスの帯域幅を消費せず、前記第2相互接続バス上で転送されるデータは、前記第1相互接続バスの帯域幅を消費しない、ことと、によって、
    前記ターゲットデバイスのための前記第1データ及び前記第2データを前記プロセッサに送信させる、
    コンピュータ可読記憶媒体。
JP2020529503A 2017-12-15 2018-09-27 アクセラレーテッド処理デバイスの帯域幅を増加させるための並列データ転送 Active JP7308197B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/843,663 US10672095B2 (en) 2017-12-15 2017-12-15 Parallel data transfer to increase bandwidth for accelerated processing devices
US15/843,663 2017-12-15
PCT/IB2018/057510 WO2019116116A1 (en) 2017-12-15 2018-09-27 Parallel data transfer to increase bandwidth for accelerated processing devices

Publications (2)

Publication Number Publication Date
JP2021507337A JP2021507337A (ja) 2021-02-22
JP7308197B2 true JP7308197B2 (ja) 2023-07-13

Family

ID=66814623

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020529503A Active JP7308197B2 (ja) 2017-12-15 2018-09-27 アクセラレーテッド処理デバイスの帯域幅を増加させるための並列データ転送

Country Status (6)

Country Link
US (2) US10672095B2 (ja)
EP (1) EP3724777A4 (ja)
JP (1) JP7308197B2 (ja)
KR (1) KR20200096767A (ja)
CN (1) CN111417936B (ja)
WO (1) WO2019116116A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10460513B2 (en) * 2016-09-22 2019-10-29 Advanced Micro Devices, Inc. Combined world-space pipeline shader stages

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090106569A1 (en) 2007-10-19 2009-04-23 Samsung Electronics Co., Ltd. Apparatus and method for controlling voltage and frequency in network on chip
JP2011516950A (ja) 2008-03-31 2011-05-26 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド ピアツーピア専用プロセッサのアーキテクチャ及び方法

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0418659A (ja) * 1990-05-11 1992-01-22 Sony Corp 並列処理装置
US5974496A (en) * 1997-01-02 1999-10-26 Ncr Corporation System for transferring diverse data objects between a mass storage device and a network via an internal bus on a network card
DE19906867C1 (de) * 1999-02-18 2000-07-06 Weidmueller Interface Verfahren und Vorrichtung zur seriellen Datenübertragung
US8037224B2 (en) * 2002-10-08 2011-10-11 Netlogic Microsystems, Inc. Delegating network processor operations to star topology serial bus interfaces
US6947051B2 (en) 2003-02-18 2005-09-20 Microsoft Corporation Video memory management
US8850141B2 (en) * 2003-07-15 2014-09-30 International Business Machines Corporation System and method for mirroring data
US9137179B2 (en) * 2006-07-26 2015-09-15 Hewlett-Packard Development Company, L.P. Memory-mapped buffers for network interface controllers
WO2010004474A2 (en) 2008-07-10 2010-01-14 Rocketic Technologies Ltd Efficient parallel computation of dependency problems
US8321900B2 (en) * 2009-12-12 2012-11-27 At&T Intellectual Property I, L.P. Limited chain relay with virtual peer for multimedia distribution
US8669990B2 (en) * 2009-12-31 2014-03-11 Intel Corporation Sharing resources between a CPU and GPU
US8797332B2 (en) * 2010-12-15 2014-08-05 Ati Technologies Ulc Device discovery and topology reporting in a combined CPU/GPU architecture system
CN103562882B (zh) * 2011-05-16 2016-10-12 甲骨文国际公司 用于提供消息传送应用程序接口的系统和方法
US9087409B2 (en) * 2012-03-01 2015-07-21 Qualcomm Incorporated Techniques for reducing memory access bandwidth in a graphics processing system based on destination alpha values
US20140040532A1 (en) * 2012-08-06 2014-02-06 Advanced Micro Devices, Inc. Stacked memory device with helper processor
US9009400B2 (en) * 2012-10-16 2015-04-14 Rambus Inc. Semiconductor memory systems with on-die data buffering
US20140254431A1 (en) * 2013-03-08 2014-09-11 Analog Devices Technology Advanced TDM Daisy-Chain Communication Systems and Devices
KR20140111486A (ko) * 2013-03-11 2014-09-19 삼성전자주식회사 단일 사용자를 위한 기기들의 협력에 기반하여 데이터를 전송하는 기지국, 마스터 기기, 슬레이브 기기 및 그 방법들
US20160162234A1 (en) * 2013-07-31 2016-06-09 Hewlett-Packard Development Company, L.P. Authorizing marking agent consumption at discovered printers
US9372500B2 (en) * 2014-02-27 2016-06-21 Applied Micro Circuits Corporation Generating a timeout signal based on a clock counter associated with a data request
US11310075B2 (en) * 2014-04-02 2022-04-19 Aten International Co., Ltd. Asymmetric duplex transmission device and switching system thereof
CN105992238B (zh) * 2015-01-30 2021-02-26 索尼公司 无线通信系统中的装置和方法
CN105117170A (zh) 2015-08-24 2015-12-02 浪潮(北京)电子信息产业有限公司 一种计算机系统架构
US9733978B2 (en) 2015-08-27 2017-08-15 Qualcomm Incorporated Data management for multiple processing units using data transfer costs
DE112017004230T5 (de) * 2016-08-25 2019-05-16 Analog Devices, Inc. Systeme und Techniken zur Fernbusfreigabe
CN109254826B (zh) * 2017-07-12 2024-02-06 超威半导体公司 虚拟化加速处理装置的挂起检测

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090106569A1 (en) 2007-10-19 2009-04-23 Samsung Electronics Co., Ltd. Apparatus and method for controlling voltage and frequency in network on chip
JP2011516950A (ja) 2008-03-31 2011-05-26 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド ピアツーピア専用プロセッサのアーキテクチャ及び方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
POTLURI, Sreeram et al.,Efficient Inter-node MPI Communication using GPUDirect RDMA for InfiniBand Clusters with NVIDIA GPUs,Proceedings of the 42nd International Conference on Parallel Processing,IEEE,2013年10月01日,pages80-89,https://ieeexplore.ieee.org/document/6687341

Also Published As

Publication number Publication date
JP2021507337A (ja) 2021-02-22
US20190188822A1 (en) 2019-06-20
US10672095B2 (en) 2020-06-02
US20200258187A1 (en) 2020-08-13
CN111417936B (zh) 2024-06-04
EP3724777A4 (en) 2021-09-01
CN111417936A (zh) 2020-07-14
KR20200096767A (ko) 2020-08-13
US11276135B2 (en) 2022-03-15
WO2019116116A1 (en) 2019-06-20
EP3724777A1 (en) 2020-10-21

Similar Documents

Publication Publication Date Title
EP2791910B1 (en) Graphics processing unit with command processor
US11004258B2 (en) Combined world-space pipeline shader stages
JP7122396B2 (ja) グラフィックスパイプラインにおけるメモリ使用削減のためのコンパイラ支援技法
US20210026686A1 (en) Chiplet-integrated machine learning accelerators
US10915359B2 (en) Variable latency request arbitration
US11481256B2 (en) Task graph scheduling for workload processing
JP7308197B2 (ja) アクセラレーテッド処理デバイスの帯域幅を増加させるための並列データ転送
US20230205608A1 (en) Hardware supported split barrier
US20210374607A1 (en) Stacked dies for machine learning accelerator
US10832465B2 (en) Use of workgroups in pixel shader
US11656877B2 (en) Wavefront selection and execution

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210917

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220928

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20221011

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20230110

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230224

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20230620

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230703

R150 Certificate of patent or registration of utility model

Ref document number: 7308197

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150