JP2023518833A - ハードウェアアクセラレーションリソースを有効にするためのコンパイラ主導のタイル置換 - Google Patents
ハードウェアアクセラレーションリソースを有効にするためのコンパイラ主導のタイル置換 Download PDFInfo
- Publication number
- JP2023518833A JP2023518833A JP2022557656A JP2022557656A JP2023518833A JP 2023518833 A JP2023518833 A JP 2023518833A JP 2022557656 A JP2022557656 A JP 2022557656A JP 2022557656 A JP2022557656 A JP 2022557656A JP 2023518833 A JP2023518833 A JP 2023518833A
- Authority
- JP
- Japan
- Prior art keywords
- tensor
- compiler
- processing system
- dedicated hardware
- inner loop
- 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.)
- Pending
Links
- 238000012545 processing Methods 0.000 claims abstract description 101
- 238000000034 method Methods 0.000 claims description 37
- 239000011159 matrix material Substances 0.000 claims description 25
- 230000004044 response Effects 0.000 claims description 18
- 230000003213 activating effect Effects 0.000 claims description 2
- 230000002776 aggregation Effects 0.000 claims 1
- 238000004220 aggregation Methods 0.000 claims 1
- 238000000098 azimuthal photoelectron diffraction Methods 0.000 description 22
- 230000006870 function Effects 0.000 description 22
- 230000008901 benefit Effects 0.000 description 10
- 239000013598 vector Substances 0.000 description 10
- 238000004891 communication Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 9
- 238000010801 machine learning Methods 0.000 description 4
- 230000009466 transformation Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000011664 signaling Effects 0.000 description 2
- 238000000844 transformation Methods 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 230000002618 waking effect Effects 0.000 description 2
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 1
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 230000002730 additional effect Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 239000012530 fluid Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/451—Code distribution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4434—Reducing the memory space required by the program code
- G06F8/4435—Detection or removal of dead or redundant code
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Computing Systems (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
処理システム[100]は、テンソル操作に置換され得るタイル化可能なソースコード[202]の命令シーケンスを自動的に識別するコンパイラ[120]を含む。コンパイラは、専用ハードウェアアクセラレータ[124]を起動させるテンソル操作[208]によって識別された命令シーケンスを置換する拡張コード[406]を生成する。専用ハードウェアアクセラレータを起動させるテンソル操作によって命令を自動的に置換することにより、コンパイラは、高レベルのプログラミング言語を使用して、プログラマーにとって利用可能な専用ハードウェアアクセラレータを介して、達成可能な性能向上を行う。【選択図】図2
Description
現代のプロセッサアプリケーションは、多くの場合、ベクトル、マトリックス及び類似した構造の比較的複雑な操作を必要とする。例えば、ベクトル及びマトリックス操作は、グラフィック動作、デジタル信号処理アプリケーション、機械学習、ニューラルネットワークアプリケーション等において有用である。これらのアプリケーション及び動作の処理効率を高めるために、最新の処理システムは、中央処理ユニット(CPU)等の1つ以上の汎用プロセッサ、並びに、べクトル及び行列乗算等の比較的大きなデータのブロックのための特定型の処理に関する特殊なハードウェアである専用ハードウェアアクセラレータ(ハードウェアアクセラレータ又はshader intrinsicsとも呼ばれる)を含む1つ以上のグラフィック処理ユニット(GPU)を用いる。したがって、GPUは、グラフィックアプリケーション、並びに、ベクトル及びマトリックス操作を必要とするその他の動作をサポートし得る。
専用ハードウェアアクセラレータにおいて機能を実行するために、その機能は、処理システムCPUで実行されるアプリケーションプログラムによって起動される必要があるか又は呼び出される必要がある。したがって、アプリケーションプログラムのプログラマーは、アプリケーションプログラムに関数呼び出しを含む必要がある。典型的には、プログラマーは、機能がアプリケーションプログラムによって適切に呼び出されることを確実にするために、専用ハードウェアアクセラレータに関連するアプリケーションプログラムインターフェース(API)を用いる必要がある。例えば、場合によっては、プログラマーは、オープンコンピューティング言語(Open Computing Language、オープンシーエル,OpenCL)、Heterogeneous Computing Interface for Portability(HIP)、Vulkan、又はCompute Unified Device Architecture(クーダ,CUDA)等のカーネルプログラミング言語を用いて、専用ハードウェアアクセラレータの機能を適切に起動させる。しかしながら、このようなAPIは、通常、複雑であり、アプリケーションプログラムを準備及びデバッグするのに必要な専門知識及び時間を増加させる。例えば、APIは、典型的には、各機能呼び出しについて、対応する関数呼び出しが適切に起動され、かつ、実行されるサポートソースコードを含むように、プログラマーに要求する。これには、プログラマーが潜在的に複雑なAPIの広範な知識を有し、プログラミング及びデバッグ時間を増加させる必要がある。
本開示は、添付の図面を参照することによってより良好に理解され、その多くの特徴及び利点が当業者に明らかになる。異なる図面における同じ符号の使用は、類似又は同一のアイテムを示す。
処理システムは、メモリのブロックにアクセスするソースコードの命令シーケンスを自動的に識別し、処理システムの専用ハードウェアアクセラレータによって実行可能なテンソル操作で置換され得るコンパイラを含む。テンソル操作は、機械学習において一般的に使用される畳み込み又は汎用行列乗算(GEMM)等のベクトル又はマトリックス操作である。コンパイラは、専用ハードウェアアクセラレータを起動させるテンソル操作によって識別された命令シーケンスを置換する拡張コードを生成する。専用ハードウェアアクセラレータを起動させるテンソル操作によって命令を自動的に置換することにより、コンパイラは、低レベルのAPIの特殊な知識を必要とせずに、高レベルのプログラミング言語を使用して、プログラマーにとって利用可能な専用ハードウェアアクセラレータを介して、達成可能な性能向上を行う。
ソースコードのループが「タイル化可能(tileable)」であるという指標を受信したことに応じて(すなわち、特定の機能がブロック又は「タイル状」の様式でメモリにアクセスすることを示すことに応じて)、コンパイラは、処理システムの専用ハードウェアアクセラレータによって実行可能なテンソル操作のセットに一致するタイル化可能なソースコードの内側ループ(inner loops)を識別する。処理システムの専用ハードウェアアクセラレータによって実行可能なテンソル操作の次元及びデータ型(すなわち、単一の精度又は二重精度)と一致する内側ループを識別したことに応じて、コンパイラは、内側ループを一致するテンソル操作と自動的に置換する。いくつかの実施形態では、コンパイラは、コンパイラの外部の構成要素を呼び出して、コンパイラによって生成されたタイルに対するコードの一部が、テンソル操作で置換され得る命令シーケンスを含むかどうかを決定し、タイルについて生成されたコードの一部をテンソル操作で置換する。
「タイル」構成は、プログラマーによって使用され、特定のソースコード機能がタイル状の様式でメモリにアクセスすることを示し、したがって、コンパイラが最適化されたメモリアクセスを生成し、ブロッキングコードを登録することを可能にする。ループタイリングは、ループネストにおけるデータアクセスの空間的及び時間的局在性を利用するループ変換である。タイルループ変換は、データがブロックで又はタイルでアクセスされることを可能にし、タイルサイズは、変換のパラメータとして定義される。各ユーザに書き込まれたループは、内側ループ及び外側ループ(outer loops)のセットに変換される。タイルは、コンパイル時間に固定され、データサイズ及びキャッシュサイズに基づいて計算される特定のサイズを有するデータのブロックへの効率的なメモリアクセスを提供する。
コンパイラに信号を送り最適化されたメモリアクセスを生成するタイル構成を起動させることにより、プログラマーは、ループが特定の次元を有するタイルを含むことを示すプラグマ(例えば、「#pragma omp tile」)を含む(本明細書では、ループが「タイル化可能」であるという指標とも呼ばれる)。プラグマが、ループがタイル化可能であることを示すことに応じて、コンパイラは、タイルの内側ループを比較して、内側ループの何れかが、処理システムの専用ハードウェアアクセラレータによって実行可能なテンソル操作のセットの次元及びデータ型と一致するかどうかを決定する。処理システムの専用ハードウェアアクセラレータによって実行可能なテンソル操作の次元及びデータ型と一致する内側ループは、本明細書では「完全」なタイルと呼ばれる。処理システムの専用ハードウェアアクセラレータによって実行可能なテンソル操作の次元及びデータ型と一致しないタイルの内側ループは、本明細書では「不完全」又は「剰余」なタイルと呼ばれる。コンパイラは、一致するテンソル操作と完全なタイルを置換し、ハイレベルソースコードを使用したとしても処理性能を高める専用ハードウェアアクセラレータへのアクセスを容易にする。
図1は、いくつかの実施形態による処理システム100のブロック図である。処理システム100は、中央演算処理装置(CPU)102及び加速処理装置(APD)104を含む。種々の実施形態では、CPU102は、1つ以上の単一コアCPU又はマルチコアCPUを含む。種々の実施形態では、APD104は、従来のCPU、従来のグラフィック処理ユニット(GPU)及びこれらの組み合わせ等のリソースに関連して、加速された様式で、加速されたグラフィック処理タスク、データ並列タスク、ネストされたデータ並列タスクに関連する機能及び計算を行う、ハードウェア及び/又はソフトウェアの任意の協働する集まりを含む。図1の実施形態では、処理システム100は、CPU102とAPD104とを組み合わせて統一されたプログラミング及び実行環境を提供する単一のシリコンダイ又はパッケージ上に形成される。他の実施形態では、CPU102及びAPD104は、別々に形成され、同じ又は異なる基板上に取り付けられる。いくつかの実施形態では、処理システム100は、1つ以上の入力インターフェースと、不揮発性ストレージと、1つ以上の出力インターフェースと、ネットワークインターフェースと、1つ以上のディスプレイ又はディスプレイインターフェースと、を更に含む。処理システム100は、一般に、電子デバイスの代わりにタスクを実行するために、コンピュータプログラムの形態で編成された命令のセットを実行する。したがって、処理システム100は、デスクトップ又はラップトップコンピュータ、サーバ、スマートフォン、タブレット、ゲームコンソール等の種々の電子デバイスの何れかで使用され得る。
図1に示すように、処理システム100は、システムメモリ106と、オペレーションシステム108と、通信インフラストラクチャ110と、1つ以上のアプリケーション112と、を含む。システムメモリ106へのアクセスは、メモリ106に連結されたメモリコントローラ(図示省略)によって管理される。例えば、システムメモリ106から読み取るか又はシステムメモリ106に書き込むためのCPU102又は他のデバイスからの要求は、メモリコントローラによって管理される。いくつかの実施形態では、1つ以上のアプリケーション112は、CPU102においても実行される計算を行うための種々のプログラム又はコマンドを含む。CPU102は、APD104で処理するための選択されたコマンドを送信する。オペレーティングシステム108及び通信インフラストラクチャ110を、以下により詳細に説明する。処理システム100は、デバイスドライバ114及び入力/出力メモリ管理ユニット(IOMMU)116等のメモリ管理ユニットを更に含む。処理システム100の構成要素は、ハードコード化論理又はプログラマブル論理、ソフトウェア/ファームウェア命令を実行する1つ以上のプロセッサ、又は、これらの任意の組み合わせとして実装される。
処理システム100内で、システムメモリ106は、DRAM(図示省略)等の非永続的メモリを含む。種々の実施形態では、システムメモリ106は、処理論理命令、定数値、アプリケーション又は他の処理論理の一部の実行中の変数値、又は、他の所望の情報を記憶する。例えば、CPU102上の1つ以上の動作を実行するための制御論理の一部は、CPU102による動作のそれぞれの部分の実行中にシステムメモリ106内に存在する。実行中、それぞれのアプリケーション、オペレーティングシステム機能、処理論理コマンド、及び、システムソフトウェアは、システムメモリ106に存在する。オペレーティングシステム108を制御する制御論理コマンドは、一般に、実行中にシステムメモリ106内に存在する。いくつかの実施形態では、他のソフトウェアコマンド(例えば、デバイスドライバ114)は、処理システム100の実行中にシステムメモリ106内に存在する。
IOMMU116は、マルチコンテキストメモリ管理ユニットである。本発明で使用する場合、コンテキストは、カーネルが実行される環境と、同期及びメモリ管理が定義されるドメインと、を考慮している。コンテキストは、デバイスのセットと、それらのデバイスにアクセス可能なメモリと、対応するメモリプロパティと、メモリオブジェクト上のカーネル(複数可)又は動作の実行をスケジュールするために使用される1つ以上のコマンドキューと、を含む。IOMMU116には、APD104等のデバイスに関するメモリページアクセスのために、仮想アドレスから物理的アドレスへの変換を実行するための論理が含まれている。いくつかの実施形態では、IOMMU116は、変換ルックアサイドバッファ(TLB)118を含むか、又は、それへのアクセスを有する。TLB118は、一例として、コンテンツアドレス指定可能メモリ(CAM)で実装され、システムメモリ106内のデータについて、APD104によって行われた要求に対する論理(すなわち、仮想)メモリアドレスの物理的メモリアドレスへの変換を加速する。
種々の実施形態では、通信インフラストラクチャ110は、処理システム100の構成要素を相互接続する。通信インフラストラクチャ110は、周辺構成要素相互接続(PCI)バス、拡張PCI(PCI-E)バス、高度マイクロコントローラバスアーキテクチャ(AMBA)バス、高度グラフィックポート(AGP)、又は、他のこのような通信インフラストラクチャ及び相互接続のうち1つ以上を含む(図示省略)。いくつかの実施形態では、通信インフラストラクチャ110は、イーサネット(登録商標)ネットワーク又はアプリケーションのデータ転送速度要件を満たす任意の他の適切な物理的通信インフラストラクチャを含む。また、通信インフラストラクチャ110は、処理システム100の構成要素を含む、構成要素を相互接続するための機能を含む。
デバイスドライバ114等のドライバは、相互接続又は通信インフラストラクチャ110を介してデバイス(例えば、CPU102及びAPD104)と通信する。呼び出しプログラムがデバイスドライバ114内のルーチンを起動させる場合、デバイスドライバ114は、コマンドをデバイスに発行する。デバイスがデータをデバイスドライバ114に戻すと、デバイスドライバ114は、元の呼び出しプログラムのルーチンを起動させる。一般に、デバイスドライバは、任意の必要な非同期に依存するハードウェアインターフェースに必須の割り込み処理を提供するために、ハードウェア依存であり、動作システム固有である。いくつかの実施形態では、コンパイラ120は、デバイスドライバ114内に埋め込まれる。コンパイラ120は、処理システム100による実行に必要なプログラム命令にソースコードをコンパイルする。このようなコンパイル中、コンパイラ120は、コンパイルの種々の段階で命令をプログラムするように変換を適用する。他の実施形態では、コンパイラ120は、独立型アプリケーションである。いくつかの実施形態では、コンパイラ120は、CPU102又はAPD104によって実行され、したがって、CPU102又はAPD104は、本明細書に記載のコンパイラ120の動作を実行する。
CPU102は、制御プロセッサ、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、又は、デジタル信号プロセッサ(DSP)のうち1つ以上を含む(図示省略)。CPU102は、処理システム100の動作を制御する制御論理の少なくとも一部を実行する。例えば、種々の実施形態では、CPU102は、オペレーティングシステム108、1つ以上のアプリケーション112及びデバイスドライバ114を実行する。いくつかの実施形態では、CPU102は、1つ以上のアプリケーション112に関連する処理をCPU102やAPD104等の他の処理リソースに分配することによって、1つ以上のアプリケーション112の実行を開始及び制御する。
APD104は、並列処理に特に適しているグラフィック動作及びその他の動作等の選択された機能のためのコマンド及びプログラムを実行する。一般に、APD104は、画素動作、幾何計算及びディスプレイへの画像の提示等のグラフィックパイプライン動作を実行するために、又は、機械学習アクセラレータ、データフローエンジン、音声プロセッサ等として、頻繁に使用される。いくつかの実施形態では、APD104は、CPU102から受信したコマンド又は命令に基づいて、計算処理操作(例えば、機械学習、ビデオ動作、物理的シミュレーション、計算流体ダイナミクス等のように、グラフィックと無関係の動作)を実行する。例えば、いくつかのコマンドは、APD104の命令セットアーキテクチャ(ISA)で典型的に定義されていない特別な命令と見なされる。コマンドは、ディスパッチプロセッサ、コマンドプロセッサ又はネットワークコントローラ等の特別なプロセッサによって実行され得る。
種々の実施形態では、APD104は、1つ以上の単一命令を含む1つ以上の汎用処理コア122(例えば、SIMD実行モデルに従ってウェーブフロント(wavefront)内の他のスレッドの実行と同時にスレッドを実行する複数データ(SIMD)ユニット(図示省略))と、1つ以上のハードウェアアクセラレータ(加速装置)124と、を含む1つ以上の計算ユニットを含む。SIMD実行モデルは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有し、したがって、同じプログラムを実行するが、そのプログラムを異なるデータで実行することができるものである。APD104のいくつかの実施形態は、GPUを実装するために使用され、その場合、汎用処理コア122は、シェーダコア又はストリーミングマルチプロセッサ(SMX)と呼ばれる。APD104に実装される汎用処理コア122の数は、設計選択の問題である。
1つ以上の汎用処理コア122のそれぞれは、特定のワークアイテムのそれぞれのインスタンス生成を実行して、入力データを処理し、1つ以上の汎用処理コア122における実行の基本的なユニットは、ワークアイテム(例えば、スレッド)である。各ワークアイテムは、例えば、並列に実行されるコマンドによってデバイス上で起動されたカーネルの並列実行の集合体の単一のインスタンス生成を表す。ワークアイテムは、汎用処理コア122において実行されるワークグループの一部として1つ以上の処理要素によって実行され得る。
APD104は、単一のSIMDユニット上の「ウェーブフロント」として同時に実行されるスレッドのグループを含むワークアイテムを発行及び実行するGPUを含む。複数のウェーブフロントが「ワークグループ」に含まれるが、これは、同じプログラムを実行するように指定されたワークアイテムの集合体を含む。ワークグループは、ワークグループを構成するウェーブフロントのそれぞれを実行することによって実行される。いくつかの実施形態では、ウェーブフロントは、単一のSIMDユニット上で連続して、又は、異なるSIMDユニット上で部分的に若しくは完全に並列に実行される。他の実施形態では、ワークグループからの全てのウェーブフロントは、同じ汎用処理コア122で処理される。また、ウェーブフロントは、ワープ、ベクトル又はスレッドとも互換的に呼ばれる。いくつかの実施形態では、ウェーブフロントは、シェーダプログラムの並列実行のインスタンスを含むが、各ウェーブフロントは、SIMDパラダイム(例えば、複数のデータと同じ命令のストリームを実行する1つの命令制御ユニット)を用いて、単一のSIMDユニット124上で、インラインで同時に実行する複数のワークアイテムを含む。スケジューラ126は、異なる処理コア122及びSIMDユニット124上の種々のウェーブフロントのスケジューリング、並びに、APD104上の種々のタスクを調整するための他の動作の実行に関連する動作を実行する。
1つ以上の汎用処理コア122によって提供される並列性は、画素値計算、頂点変換、モザイク化、幾何学的シェーディング動作、及び、他のグラフィック動作等のグラフィック関連動作に適している。グラフィック処理パイプライン128は、CPU102からグラフィック処理コマンドを受け入れ、したがって、並列で実行するために、1つ以上の汎用処理コア122に計算タスクを提供する。画素処理及び他の並列計算動作等のいくつかのグラフィックパイプライン操作は、同じコマンドストリーム又は計算カーネルが入力データ要素のストリーム又はコレクションに対して実行されることを必要とする。同じ計算カーネルのそれぞれのインスタンス生成は、このようなデータ要素を並列に処理するために、1つ以上の汎用処理コア122における複数のSIMDユニット上で同時に実行される。本明細書で説明するように、例えば、計算カーネルは、プログラムで宣言され、APD汎用処理コア122上で実行される命令を含む関数である。この関数は、カーネル、シェーダ、シェーダプログラム又はプログラムとも呼ばれる。
各汎用処理コア122は、スカラ及び/又はベクトル浮動小数点ユニット、演算及び論理ユニット(ALU)等の1つ以上の処理要素を含む。種々の実施形態では、汎用処理コア122も、逆平方根単位及び正弦/余弦単位等の専用処理ユニット(図示省略)を含む。
ウェーブフロント内のワークアイテム(例えば、スレッド)は、その実行中にSIMDハードウェアレーン(以下、「SIMDレーン」と呼ばれる)上で実行される。一実施形態では、各SIMDユニットの処理要素は、それぞれが16個のレーンを含むアレイに配置されるが、各レーンは、SIMDユニットにおける他のレーンと同時に同じ命令を実行するが、異なるデータを用いてその命令を実行し、各ワークアイテムが実行中にレーンへとマッピングされ得る。いくつかの実施形態では、ウェーブフロントは、64のスレッドの群であり(したがって、ウェーブフロントの各スレッドは、0~63の範囲のレーンに割り当てられる)、これは、16レーン幅SIMDユニットを介して、4サイクルにわたって16個のスレッドの群で発行される。しかしながら、当業者は、本開示の範囲から逸脱することなく、ウェーブフロントの幅及びSIMDユニットが任意の構成又は数のスレッド(例えば、8、16、32、64等)を含むことを理解するであろう。
典型的なGPUプログラミング言語は、単一のスレッドの観点から書き込まれる。いくつかのこのような言語は、現在のスレッドが指定された異なるスレッドから値を読み込むべきであることを特定することを可能にする。いくつかの実施形態では、ソースコードは、読み取られるスレッドが現在のスレッドのIDから計算されるように書き込まれる。APD104は、スレッドデータ交換の特定のパターンを加速する機能を備えた専用ハードウェアアクセラレータ124を含む。例えば、ハードウェアアクセラレータ124のデータ並列プリミティブ(DPP)機能は、固定された次元ウェーブフロント内のスレッドがそれらのレジスタファイルを介して互いに通信することを可能にする(すなわち、ベクトル命令が完全スループットでクロスレーン読み取りを実行することを可能にすることによって、レーン間でデータを移動させる必要性を排除する)。いくつかの実施形態では、アクセラレータは、ウェーブフロントのスレッドが一緒に機能して、固定された次元でマトリックス命令を実行することを可能にする、(対応するXDLOP命令に応じて起動される)XDLOP機能を含む。プログラマーは、典型的には、次元Nのベクトル又はMによる次元Nのマトリックス等のアプリケーションドメインの次元におけるアルゴリズムを表現するので、C、C++、FORTRAN、OpenCL、HIP、CUDA等のプログラミングモデルでDPP及びXDLOP等の固定次元機構を表現することが困難である。これらのアプリケーション次元は、典型的には、DPP又はXDLOP命令の固定次元よりも大きい。更に、これらのアプリケーション次元は、典型的には、固定次元の倍数ではない。これらの違いにより、プログラマーにとって、専用ハードウェアアクセラレータ124の畳み込み又は汎用行列乗算動作(集合的に「テンソル操作」)等の高性能ベクトル又はマトリックス動作の特定のセットを利用することが困難になる。
したがって、コンパイラ120は、専用ハードウェアアクセラレータ124において実行され、かつ、記憶されたテンソル操作のうち何れかと置換され得る命令シーケンスを有するより効率的なメモリアクセス(すなわち、「タイル化可能」ソースコード)について、ブロック内のメモリにアクセスするソースコードの内側ループを識別するテンソル操作のセットを記憶する。コンパイラ120は、拡張コードを生成するために、内側ループ内の専用ハードウェアアクセラレータ(すなわち、「完全な」タイル)によって実行可能な記憶されたテンソル操作の次元及びデータ型に一致する内側ループを、テンソル操作によって置換する。拡張コードは、ハードウェアアクセラレータ124を起動させてテンソル操作を実行し、それによって、低レベルプログラミング言語の使用を必要とせずに、ハードウェアアクセラレータ124の高性能処理へのアクセスを可能にする。
いくつかの実施形態では、コンパイル中、コンパイラ120は、ソースコードについての関数呼び出しのカーネルのラッパ(wrapper)コード(図示省略)を生成する。ラッパコードは、カーネルがGPUで適切に呼び出され、実行されることを確実にすることによって、各カーネルのソースコードをサポートする。したがって、ラッパコードは、メモリ割り当て命令、データ転送命令、変数及びデータ構造の宣言、及び、GPUで呼び出され実行される各カーネルによって必要とされる他のコードを含み得る。コンパイラ120は、識別されたカーネルごとに1つ以上のソースコードテンプレートを識別及びコピーすることによって、ラッパコードを生成する。
一例を説明するために、いくつかの実施形態では、タイル化可能なソースコードの内側ループは、畳み込み又は汎用行列乗算(GEMM)へと実行するための命令を含む。例えば、コンパイラ120が、2つの単一精度16×16マトリックスを乗算するための命令シーケンスを含むタイル化可能なソースコードの内側ループをコンパイルする場合、コンパイラ120は、専用ハードウェアアクセラレータ124で実行可能な記憶されたテンソル操作のセットを検索する。コンパイラ120によって、記憶されたテンソル操作が、命令シーケンスの次元(16×16)及びデータ型(例えば、単一の精度)に一致する汎用行列乗算を実行するための集約命令(aggregate instruction)であると決定された場合、コンパイラ120は、命令シーケンスが一致するテンソル操作に置換された拡張コードを生成する。コンパイラは、拡張コードにラッパを含み、専用ハードウェアアクセラレータ124を起動させて一致するテンソル操作を実行し、それによって、専用ハードウェアアクセラレータ124の強化された処理能力を利用する。
図2は、いくつかの実施形態による、図1のコンパイラ120の動作例を示している。コンパイラに信号を送り最適化されたメモリアクセスを生成するタイル構成を起動させることにより、プログラマーは、ループが特定の次元を有するタイルを含むことを示す「タイル」プラグマ203(例えば、「#pragma omp tile」)を含む(本明細書では、ループが「タイル化可能」であるという指標とも呼ばれる)。時間201で、コンパイラ120は、ソースコード202がタイル化可能であることを示すタイルプラグマ203を受信することに応じて、ソースコード202を解析する。コンパイラ120は、コンパイラ生成ソースコード202の内側ループの命令シーケンスと、専用ハードウェアアクセラレータ124によって実行可能なテンソル操作のセットと、を比較する。コンパイラ120は、セット内のテンソル操作の次元及びデータ型と一致するソースコード202の各内側ループを「完全タイル」204として識別する。コンパイラ120は、不完全又は「剰余」タイル206として、セット内のテンソル操作の次元及びデータ型と一致しないソースコード202の内側ループを識別する。時間207で、コンパイラ120は、完全なタイル204を専用ハードウェアアクセラレータ124において実行されるテンソル操作208と置換して、剰余タイル206を汎用処理コア122において通常実行するように残す。
図3は、いくつかの実施形態による、ソースコードのループ内の完全なタイルの図1のコンパイラによる識別を示すブロック図である。コンパイラ120は、専用ハードウェアアクセラレータ124によって実行可能なテンソル操作を記憶するテンソルライブラリ322を含む。ソースコード202がタイル化可能である旨の指標を受信したことに応じて、コンパイラ120は、ソースコード202の内側ループを分析して、内側ループの命令シーケンスがテンソルライブラリ322に記憶された任意のテンソル操作と一致するかどうかを決定する。例示的な実施例では、テンソルライブラリ322は、16×16の汎用行列乗算(GEMM)動作315を実行するテンソル操作を含む。コンパイラ120は、ソースコード202の内側ループが、16×16の行列乗算動作305を実行するための命令シーケンスを含むと決定する。16×16の行列乗算動作305によって指定されたデータ型が16×16のGEMMテンソル操作315のデータ型と一致することを確認した後、コンパイラ120は、完全タイルとして16×16の行列乗算動作315を識別する。コンパイラ120は、テンソルライブラリ322に記憶された如何なるテンソル操作も不完全なタイルとして一致させないソースコード202の剰余動作310を識別する。
したがって、例えば、以下のユーザコードを与えると、Nは、コンパイル時間では知られない場合があり、Nは、16によって均一に分割されない場合がある。
#pragma omp tileサイズ(16、16、16)
for(i=0;i<N;i++)
for(j=0;j<N;j++)
for(k=0;k<N;k++)
C[i、j]+=A[i][k]*B[k][j]
#pragma omp tileサイズ(16、16、16)
for(i=0;i<N;i++)
for(j=0;j<N;j++)
for(k=0;k<N;k++)
C[i、j]+=A[i][k]*B[k][j]
内部で、コンパイラ120は、ループタイリング変換の結果として以下の等価コードを生成する。
#define TSIZE16
int rem=N%TSIZE;
int last_non_full_block=N;
if(rem)
last_non_full_block=N-rem;
for(int ii=0;ii<N;ii+=TSIZE)
for(int jj=0;jj<N;jj+=TSIZE)
for(int kk=0;kk<N;kk+=TSIZE){
if((ii==last_non_full_block)||
(jj==last_non_full_block)||
(kk==last_non_full_block)){
/*PARTIAL TILE */
for(int i=ii;i<(min(ii+TSIZE,N));i++)
for(int j=jj;j<(min(jj+TSIZE,N));j++)
for(int k=kk;k<(min(kk+TSIZE,N));k++)
C[i][j]+=A[i][k]*B[k][j];
}else{
/*MATRIX MULTIPLY FOR PERECT TILE OF TSIZExTSIZE*/
for(int i=ii;i<ii+TSIZE;i++)
for(int j=jj;j<jj+TSIZE;j++)
for(int k=kk;k<kk+TSIZE;k++)
C[i][j]+=A[i][k]*B[k][j];
}
}
#define TSIZE16
int rem=N%TSIZE;
int last_non_full_block=N;
if(rem)
last_non_full_block=N-rem;
for(int ii=0;ii<N;ii+=TSIZE)
for(int jj=0;jj<N;jj+=TSIZE)
for(int kk=0;kk<N;kk+=TSIZE){
if((ii==last_non_full_block)||
(jj==last_non_full_block)||
(kk==last_non_full_block)){
/*PARTIAL TILE */
for(int i=ii;i<(min(ii+TSIZE,N));i++)
for(int j=jj;j<(min(jj+TSIZE,N));j++)
for(int k=kk;k<(min(kk+TSIZE,N));k++)
C[i][j]+=A[i][k]*B[k][j];
}else{
/*MATRIX MULTIPLY FOR PERECT TILE OF TSIZExTSIZE*/
for(int i=ii;i<ii+TSIZE;i++)
for(int j=jj;j<jj+TSIZE;j++)
for(int k=kk;k<kk+TSIZE;k++)
C[i][j]+=A[i][k]*B[k][j];
}
}
次に、コンパイラ120は、識別された完全タイル(すなわち、非部分タイル)に対する行列乗算命令を置換する拡張コードを、関数「V_MFMA_F32_16X16X16F16_WRAPPER(A,B,C,ii,jj,kk)」で示される等価テンソル操作によって生成する。
#define TSIZE16
int rem=N%TSIZE;
int last_non_full_block=N;
if(rem)
last_non_full_block=N-rem;
for(int ii=0;ii<N;ii+=TSIZE)
for(int jj=0;jj<N;jj+=TSIZE)
for(int kk=0;kk<N;kk+=TSIZE){
if((ii==last_non_full_block)||
(jj==last_non_full_block)||
(kk==last_non_full_block)){
/*PARTIAL TILE*/
for(int i=ii;i<(min(ii+TSIZE,N));i++)
for(int j=jj;j<(min(jj+TSIZE,N));j++)
for(int k=kk;k<(min(kk+TSIZE,N));k++)
C[i][j]+=A[i][k]*B[k][j];
}else{
V_MFMA_F32_16X16X16F16_WRAPPER(A,B,C,ii,jj,kk);
}
}
#define TSIZE16
int rem=N%TSIZE;
int last_non_full_block=N;
if(rem)
last_non_full_block=N-rem;
for(int ii=0;ii<N;ii+=TSIZE)
for(int jj=0;jj<N;jj+=TSIZE)
for(int kk=0;kk<N;kk+=TSIZE){
if((ii==last_non_full_block)||
(jj==last_non_full_block)||
(kk==last_non_full_block)){
/*PARTIAL TILE*/
for(int i=ii;i<(min(ii+TSIZE,N));i++)
for(int j=jj;j<(min(jj+TSIZE,N));j++)
for(int k=kk;k<(min(kk+TSIZE,N));k++)
C[i][j]+=A[i][k]*B[k][j];
}else{
V_MFMA_F32_16X16X16F16_WRAPPER(A,B,C,ii,jj,kk);
}
}
図4は、いくつかの実施形態による、図1のコンパイラのブロック図である。図示した例では、コンパイラ105は、構文解析系420と、テンソルライブラリ322と、汎用ソーステンプレート424と、テンソルテンプレート426と、テンソル起動テンプレート428と、テンソルヘッダテンプレート430と、を含む。構文解析系420は、ハードコード化論理又はプログラマブル論理、ソフトウェア/ファームウェア命令を実行する1つ以上のプロセッサ、又は、これらの任意の組み合わせとして実装される。構文解析系420は、ソースコード202内のシンボルのストリングを分析して、GPUの機能呼び出しを識別する。いくつかの実施形態では、構文解析系420は、機能呼び出しを示すデータ構造(例えば、解析木又は他の階層構造)を構築し得る。
構文解析系420が機能呼び出しデータ構造を生成した後、コンパイラ120は、ソースコード202がタイル化可能であることを示す「タイル」プラグマ203をソースコード202において受信するが、コンパイラ120は、専用ハードウェアアクセラレータ124によって実行可能な任意のテンソル操作が、タイル化可能なソースコード202の内側ループの命令シーケンスの次元及びデータ型と一致するかどうかを決定するために、テンソルライブラリ322を検索する。いくつかの実施形態では、ソースコード202は、ソースコード202の内側ループがテンソルライブラリ322のテンソル操作の型と一致すること、例えば、汎用行列乗算を示す「intrinsic(gemm)」を示すヒント402を含む。コンパイラ120が、ソースコード202の内側ループが専用ハードウェアアクセラレータ124によって実行可能な型のテンソル操作と置換可能であることを示すヒント402を受信する場合、コンパイラ120は、ヒント402によって指定されたテンソルの型に対応するテンソル操作のサブセットのみを検索する。したがって、ヒント402の受信に応じて、コンパイラ120は、ソースコード202の内側ループの命令シーケンスの次元及びデータ型と、ヒント402によって指定されたテンソル操作の型に対応するテンソル操作のサブセットと、を比較する。
汎用ソーステンプレート424、テンソルソーステンプレート426、テンソル起動テンプレート428及びテンソルヘッダテンプレート430は、コンパイラ120によって識別された各テンソルのラッパコードを生成するために、ソースコードを記憶する。したがって、テンプレート426、428、430のそれぞれは、事前に準備されたテキスト、記号、又は、他の形式のソースコードを記憶するが、これは、コンパイルされた場合に、対応するテンソル操作をテンプレートに関連する専用ハードウェアアクセラレータ124において適切に実行することを可能にする。
一例を説明するために、いくつかの実施形態では、タイル化可能なソースコード202の内側ループは、畳み込み又は汎用行列乗算(GEMM)を含む。例えば、タイル化可能ソースコード202の内側ループは、2つの16×16マトリックスを乗算するための命令シーケンスを含み、プロダクトを第3の16×16マトリックスに追加し、倍精度データ型を使用して、結果を第3のマトリックスに記憶する。
C[i,j]+=A[i,j]*B[k,j]
C[i,j]+=A[i,j]*B[k,j]
コンパイラ120は、テンソルライブラリ322を検索し、テンソルライブラリ322が、命令シーケンスの次元及びデータ型と一致する汎用行列乗算を実行するための集約命令であるテンソル操作を含むことを決定する、すなわち、命令シーケンスが完全なタイルであると決定する。一致するテンソル操作記憶ソースコードに対応するテンプレート426、428、430は、それがコンパイル及び実行された場合に、これらの動作を実行して、専用ハードウェアアクセラレータ124が予測される結果を返すことを確実にする。
したがって、適切なテンプレートをラッパコードにコピーし、そのコードを拡張されコンパイラによって生成されたコード306の一部とするようにコンパイルすることによって、コンパイラ120は、アプリケーションファイル120がプログラマーによって予測通りに機能することを確実にする。更に、コンパイラ120は、ソースコード202の各完全タイルに対して適切なテンプレートを自動的に識別し、コピーする。これは、プログラマーが低レベルのプログラミング言語を学習して専用ハードウェアアクセラレータ124にアクセスすることを軽減し、専用ハードウェアアクセラレータ124の強化された性能を向上させながら全体的なプログラム時間及び労力を低減する。また、これは、プログラマーが本コードを1回書き込むことを可能にする。コンパイラ120又はテンソルライブラリ322の実装のみについて、ソースコード202が将来のハードウェア加速度ユニットを使用することを可能にするために変更を行う必要がある。一方、完全なタイルであると決定されていない(すなわち、不完全なタイル又は剰余タイルの場合)ソースコード202の部分について、コンパイラ120は、汎用処理コア122で実行されるコンパイラによって生成されたコード404を生成する。
動作中、ソースコード202及び「タイル」プラグマ203を受信することに応じて、コンパイラ120は、ソースコード202の内側ループの命令シーケンスを以下のように置換するために、テンソル操作のためのラッパコードを生成する。第1に、コンパイラ120は、汎用ソーステンプレート424、識別されたテンソルを実行するために必要なソースコードの汎用セットを含む。例えば、汎用ソースコードは、実行中に必要とされる再利用可能なサブルーチン及び定義されたデータ構造のリスト、及び、専用ハードウェアアクセラレータ124が利用可能であるかどうかをチェックするためのコードを有し得る。この汎用ソースコードは、アクセラレータ初期化プロセスの不必要な繰り返しを防止するために、機能に対して以前の呼び出しを追跡する。次に、識別された各テンソル操作について、コンパイラ120は、テンソルソーステンプレート426においてコードテンプレートを識別する。各テンソル初期化テンプレートは、対応するテンソルについて、テンソルが適切に呼び出されて実行されることを確実にするために必要なコードを含む。例えば、本テンプレートは、テンソル固有サブルーチン及びデータ構造を有し、各テンソル操作に必要とされる。
テンソル操作が最初の時間に呼び出されている場合、本コードは、テンソル固有のデータ構造を初期化する。また、本コードは、以前のコールがこれらのデータ構造を初期化して、データ構造を再初期化することを回避するかどうかを追跡する。コンパイラ120は、識別されたテンソルソーステンプレートをラッパコードにコピーしてカスタマイズする。コンパイラ120は、テンソル起動テンプレート428からラッパコードへとコピーするが、ソースコードは、テンソルを起動する必要がある。最後に、コンパイラ120は、テンソルヘッダテンプレート430からテンソル操作のヘッダを識別し、識別されたヘッダをヘッダファイルにコピーする。ヘッダファイルは、アプリケーションが、生成されたラッパを呼び出すために正しい引数のセットを使用することを確実にするために、拡張されコンパイラによって生成されたコード406のコンパイルに使用される。ヘッダファイルのフォーマットは、異なる型の主ソースコードによって変化し得る。
図5は、いくつかの実施形態による、図1の処理システムの専用ハードウェアアクセラレータにおいて実行可能なテンソル操作によってタイル化されたソースコードの内側ループを識別して置換するための方法を示すフロー図である。ブロック502において、コンパイラ120は、ソースコード202を受信する。ブロック504において、コンパイラ120は、ソースコード202がタイル化可能であることを示すタイルプラグマ203等の指標(例えば、「pragma omp tileサイズ(16、16、16)」)を受信する。いくつかの実施形態では、ブロック506において、コンパイラは、ソースコード202のタイルの内側ループが、専用ハードウェアアクセラレータ124において、実行可能な型のテンソル操作と置換可能であることを示すヒント302を受信したかどうかを決定する。ブロック406において、コンパイラが、ソースコード202のタイルの内側ループが専用ハードウェアアクセラレータ124において実行可能な型のテンソル操作と置換可能であることを示すヒント402を受信していないと決定した場合、本方法はブロック508に続く。ブロック508において、コンパイラ120は、ソースコード202の内側ループの命令シーケンスの次元及びデータ型と、専用ハードウェアアクセラレータ124で実行可能なテンソル操作のセットと、を比較する。次に、方法のフローは、ブロック512に続く。
ブロック506において、コンパイラが、ソースコード202のタイルの内側ループが専用ハードウェアアクセラレータ124において実行可能な型のテンソル操作と置換可能であることを示すヒント402を受信していると決定した場合(例えば、「固有(gemm)」)、本方法はブロック510に続く。ブロック510で、コンパイラ120は、ソースコード202のタイルの内側ループの命令シーケンスの次元及びデータ型と、その型によって指定されたテンソル操作のサブセットと、を比較する。次に、方法のフローは、ブロック512に戻る。
ブロック512において、コンパイラ120は、タイルの内側ループの命令シーケンスがテンソルライブラリ322に記憶されたテンソル操作のセットのテンソル操作と一致するかどうか(ブロック506において、ヒント402を受信していない場合)、又は、タイルの内側ループの命令シーケンスが、ヒント402によって示されるテンソル操作の型に対応するテンソル操作のサブセットのテンソル操作と一致するかどうか(ブロック506で、ヒント402を受信している場合)を決定する。ブロック512において、一致するとコンパイラ120が決定した場合、本方法のフローはブロック514に続く。ブロック514において、ソースコード202のタイルの内側ループが専用ハードウェアアクセラレータ124によって実行可能なテンソル操作と一致することに応じて(すなわち、完全なタイルの識別)、コンパイラ120は、内側ループの一致するシーケンスを一致するテンソル操作に置換するコードを生成する。次に、方法のフローは、ブロック518に続く。ブロック518で、コンパイラ120は、一致するテンソル操作を起動させるためにラッパコードを生成し、一致するテンソル操作は、専用ハードウェアアクセラレータ124において実行される。次に、方法のフローは、ブロック502に戻る。
ブロック512において、コンパイラ120が一致しないと決定した場合、又は、(その他の命令シーケンスが一致し、したがって完全なタイルを形成する一方で)一致しない内側ループの命令シーケンスがある場合、非一致命令シーケンスが「剰余」タイルとして識別され、本方法のフローは、ブロック516に続く。ブロック516において、コンパイラ120は、汎用プロセッサ122で実行される剰余タイルに関するコンパイラによって生成されたコードを生成する。次に、方法のフローは、ブロック502に戻る。
本明細書に開示されるように、いくつかの実施形態では、方法は、処理システムにおいてコンパイルされるソースコードがタイル化可能であるという指標を受信したことに応じて、複数のタイルを含むコンパイラによって生成されたコードが、処理システムの専用ハードウェアアクセラレータにおいて実行可能なテンソル操作によって置換され得るタイルについての命令シーケンスを含むかどうかを決定することと、命令シーケンスがテンソル操作によって置換され得ると決定したことに応じて、コンパイラによって生成されたコードの命令シーケンスをテンソル操作によって置換するコードを生成することと、を含む。一態様では、本方法は、処理システムの専用ハードウェアアクセラレータにおいてテンソル操作の実行を起動させるためにラッパを生成することを含む。別の態様では、コードを生成することは、内側ループの命令シーケンスの次元及びデータ型が、専用ハードウェアアクセラレータによって実行可能なテンソル操作の次元及びデータ型と一致することに応じて、タイルの内側ループを置換することを含む。
一態様では、本方法は、ソースコード内において、タイルの内側ループがテンソル操作の型によって置換可能であることを示すヒントを受信することと、ヒントを受信したことに応じて、かつ、内側ループの命令シーケンスの次元及びデータ型が、ヒントによって示される型のテンソル操作の次元及びデータ型と一致することに応じて、内側ループと、ヒントによって示されるテンソル操作の型と、を置換するコードを生成することと、を含む。別の態様では、本方法は、専用ハードウェアアクセラレータによって実行可能なテンソル操作の次元及びデータ型と一致しないタイルの内側ループの命令シーケンスを不完全なタイルとして識別することを含む。更に別の態様では、本方法は、不完全なタイルを実行するために、処理システムの汎用プロセッサを起動させるためのコードを生成することを含む。更に別の態様では、テンソル操作は、汎用行列乗算を含む集約命令である。
いくつかの実施形態では、方法は、処理システムのコンパイラにおいて、ソースコードがタイルを含む旨の指標を受信することと、タイルの内側ループを、処理システムの専用ハードウェアアクセラレータによって実行可能なテンソル操作と比較することと、タイルの内側ループが専用ハードウェアアクセラレータによって実行可能なテンソル操作と一致することに応じて、タイルの内側ループをテンソル操作によって置換する拡張コードを生成して、専用ハードウェアアクセラレータを起動させることと、を含む。一態様では、内側ループは、テンソル操作の次元及びデータ型に一致する第1の命令シーケンスを含む。別の態様では、タイルは、テンソル操作の次元及びデータ型と一致しない第2の命令シーケンスを更に含む。
一態様では、本方法は、第2の命令シーケンスを実行するために、処理システムの汎用プロセッサを起動させるためのコードを生成することを含む。別の態様では、本方法は、ソースコードにおいて、タイルの内側ループがテンソル操作の型によって置換可能であることを示すヒントを受信することと、ヒントによって示されるテンソル操作の型によって内側ループを置換するコードを生成することと、を含む。更に別の態様では、比較することは、ヒントを受信したことに応じて、第1の命令シーケンスの次元及びデータ型と、ヒントによって示されたテンソル操作の型によって特定された処理システムの専用ハードウェアアクセラレータによって実行可能なテンソル操作のサブセットと、を比較することを含む。
いくつかの実施形態では、処理システムは、専用ハードウェアアクセラレータと、プロセッサと、を含み、プロセッサは、処理システムにおいて実行されるコンパイラによって生成されたコードがタイル化可能であるという指標を受信したことに応じて、タイルについてのコンパイラによって生成されたコードの一部がテンソル操作によって置換され得る命令シーケンスを含むかどうかを決定し、その一部がテンソル操作によって置換され得ると決定したことに応じて、コンパイラによって生成されたコードの一部を置換するように構成されている。一態様では、専用ハードウェアアクセラレータは、1つ以上のテンソル操作を実行するように構成されている。別の態様では、プロセッサは、命令シーケンスの次元及びデータ型と、専用ハードウェア加速度器によって実行可能なテンソル操作と、を比較して、内側ループの命令シーケンスの次元及びデータ型が専用ハードウェアアクセラレータによって実行されるテンソル操作の次元及びデータ型と一致することに応じて、少なくとも1つの内側ループを置換することを更に含む。
一態様では、プロセッサは、専用ハードウェアアクセラレータによって実行可能なテンソル操作の次元及びデータ型と一致しない内側ループの命令シーケンスを更に実行する。別の態様では、プロセッサは、タイルの内側ループがテンソル操作の型と置換可能であることを示す、コンパイラによって生成されたコード内のヒントを受信する。更に別の態様では、プロセッサは、ヒントを受信したことに応じて、命令シーケンスの次元及びデータ型と、ヒントによって示されたテンソル操作の型によって特定された処理システムの専用ハードウェアアクセラレータによって実行可能なテンソル操作のサブセットと、を比較するように更に構成されている。さらに別の態様では、テンソル操作は、汎用行列乗算を含む集約命令である。
コンピュータ可読記憶媒体は、命令及び/又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の非一時的な記憶媒体又は非一時的な記憶媒体の組み合わせを含む。このような記憶媒体には、限定されないが、光学媒体(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ブルーレイ(登録商標)ディスク)、磁気媒体(例えば、フロッピー(登録商標)ディスク、磁気テープ、磁気ハードドライブ)、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)若しくはキャッシュ)、不揮発性メモリ(例えば、読取専用メモリ(ROM)若しくはフラッシュメモリ)、又は、微小電気機械システム(MEMS)ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体(例えば、システムRAM又はROM)はコンピューティングシステムに内蔵されてもよいし、コンピュータ可読記憶媒体(例えば、磁気ハードドライブ)はコンピューティングシステムに固定的に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、光学ディスク又はユニバーサルシリアルバス(USB)ベースのフラッシュメモリ)はコンピューティングシステムに着脱可能に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、ネットワークアクセス可能ストレージ(NAS))は有線又は無線ネットワークを介してコンピュータシステムに結合されてもよい。
いくつかの実施形態では、上記の技術のいくつかの態様は、ソフトウェアを実行するプロセッシングシステムの1つ以上のプロセッサによって実装されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体上で有形に具現化された実行可能命令の1つ以上のセットを含む。ソフトウェアは、1つ以上のプロセッサによって実行されると、上記の技術の1つ以上の態様を実行するように1つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶デバイス、例えばフラッシュメモリ、キャッシュ、ランダムアクセスメモリ(RAM)等のソリッドステート記憶デバイス、又は、他の1つ以上の不揮発性メモリデバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈若しくは実行可能な他の命令フォーマットであってもよい。
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、1つ以上のさらなるアクティビティが実行される場合があり、1つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。
Claims (20)
- 処理システム[100]においてコンパイルされるソースコード[202]がタイル化可能であるという指標を受信したことに応じて、前記処理システムのコンパイラ[120]において、複数のタイルを含むコンパイラ生成コード[404]が、前記処理システムの専用ハードウェアアクセラレータ[124]において実行可能なテンソル操作[208]と置換され得るタイル[204]についての命令シーケンスを含むかどうかを決定することと、
前記命令シーケンスが前記テンソル操作に置換され得ると決定したことに応じて、前記コンパイラ生成コードの前記命令シーケンスを前記テンソル操作に置換するコードを生成することと、を含む、
方法。 - 前記処理システムの専用ハードウェアアクセラレータにおいて前記テンソル操作の実行を起動させるためのラッパを生成することを更に含む、
請求項1の方法。 - コードを生成することは、
前記内側ループの命令シーケンスの次元及びデータ型が、前記専用ハードウェアアクセラレータによって実行可能なテンソル操作の次元及びデータ型と一致することに応じて、前記タイルの内側ループを置換することを含む、
請求項1の方法。 - 前記ソースコードにおいて、タイルの内側ループがテンソル操作の型に置換可能であることを示すヒント[402]を受信することと、
前記ヒントを受信したことに応じて、かつ、前記内側ループの前記命令シーケンスの次元及びデータ型が、前記ヒントによって示される前記型のテンソル操作の次元及びデータ型と一致したことに応じて、前記内側ループを、前記ヒントによって示されるテンソル操作の前記型に置換するコードを生成することと、を更に含む、
請求項1の方法。 - 前記専用ハードウェアアクセラレータによって実行可能なテンソル操作の次元及びデータ型と一致しないタイルの内側ループの命令シーケンスを、不完全なタイルとして識別することを更に含む、
請求項1の方法。 - 前記不完全なタイルを実行するために、前記処理システムの汎用プロセッサ[122]を起動させるためのコードを生成することを更に含む、
請求項5の方法。 - 前記テンソル操作は、汎用行列乗算を含む集約命令である、請求項1に記載の方法。
- 処理システム[100]のコンパイラ[120]において、ソースコード[202]がタイルを含むという指標[203]を受信することと、
前記タイルの内側ループと、前記処理システムの専用ハードウェアアクセラレータによって実行可能なテンソル操作と、を比較することと、
前記タイルの前記内側ループが、前記専用ハードウェアアクセラレータによって実行可能なテンソル操作[208]に一致することに応じて、前記タイルの前記内側ループを前記テンソル操作に置換する拡張コードを生成して、前記専用ハードウェアアクセラレータを起動させることと、を含む、
方法。 - 前記内側ループは、前記テンソル操作の次元及びデータ型に一致する第1の命令シーケンスを含む、
請求項8の方法。 - 前記タイルは、前記テンソル操作の次元及びデータ型と一致しない第2の命令シーケンスを更に含む、
請求項9の方法。 - 前記第2の命令シーケンスを実行するために、前記処理システムの汎用プロセッサ[122]を起動させるためのコードを生成することを更に含む、
請求項10の方法。 - 前記ソースコードにおいて、タイルの内側ループがテンソル操作の型に置換可能であることを示すヒント[402]を受信することと、
前記内側ループを、前記ヒントによって示されるテンソル操作の前記型に置換するコード[406]を生成することと、を更に含む、
請求項9の方法。 - 比較することは、
前記ヒントを受信したことに応じて、前記第1の命令シーケンスの次元及びデータ型と、前記ヒントによって示されたテンソル操作の前記型によって特定された前記処理システムの専用ハードウェアアクセラレータ[124]によって実行可能なテンソル操作のサブセットと、を比較することを含む、
請求項12の方法。 - 専用ハードウェアアクセラレータ[124]と、
プロセッサ[104]と、を備える処理システム[100]であって、
前記プロセッサは、
前記処理システムにおいて実行されるコンパイラ生成コード[404]がタイル化可能であるという指標を受信したことに応じて、タイル[204]についてのコンパイラ生成コードの一部がテンソル操作[208]に置換され得る命令シーケンスを含むかどうかを決定することと、
前記コンパイラ生成コードの一部が前記テンソル操作に置換され得ると決定したことに応じて、前記コンパイラ生成コードの一部を前記テンソル操作に置換することと、
を行うように構成されている、
処理システム[100]。 - 前記専用ハードウェアアクセラレータは、1つ以上のテンソル操作を実行するように構成されている、
請求項14の処理システム。 - 前記プロセッサは、
前記命令シーケンスの次元及びデータ型と、前記専用ハードウェアアクセラレータによって実行可能なテンソル操作と、を比較し、
前記内側ループの前記命令シーケンスの前記次元及びデータ型が、前記専用ハードウェアアクセラレータによって実行可能なテンソル操作の次元及びデータ型と一致することに応じて、少なくとも1つの内側ループを置換する、
請求項15の処理システム。 - 前記プロセッサは、
前記専用ハードウェアアクセラレータによって実行可能なテンソル操作の次元及びデータ型と一致しない前記内側ループの命令シーケンスを実行する、
請求項16の処理システム。 - 前記プロセッサは、
前記コンパイラ生成コードにおいて、タイルの内側ループがテンソル操作の型に置換可能であることを示すヒント[402]を受信する、
請求項14の処理システム。 - 前記プロセッサは、
前記ヒントを受信したことに応じて、前記命令シーケンスの次元及びデータ型と、前記ヒントによって示されたテンソル操作の前記型によって特定された前記処理システムの専用ハードウェアアクセラレータによって実行可能なテンソル操作のサブセットと、を比較するように構成されている、
請求項18の処理システム。 - 前記テンソル操作は、汎用行列乗算を含む集約命令である、
請求項14の処理システム。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/832,275 US11347486B2 (en) | 2020-03-27 | 2020-03-27 | Compiler-initiated tile replacement to enable hardware acceleration resources |
US16/832,275 | 2020-03-27 | ||
PCT/US2021/024154 WO2021195381A1 (en) | 2020-03-27 | 2021-03-25 | Compiler-initiated tile replacement to enable hardware acceleration resources |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023518833A true JP2023518833A (ja) | 2023-05-08 |
Family
ID=77854567
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022557656A Pending JP2023518833A (ja) | 2020-03-27 | 2021-03-25 | ハードウェアアクセラレーションリソースを有効にするためのコンパイラ主導のタイル置換 |
Country Status (6)
Country | Link |
---|---|
US (2) | US11347486B2 (ja) |
EP (1) | EP4127908A4 (ja) |
JP (1) | JP2023518833A (ja) |
KR (1) | KR20220156954A (ja) |
CN (1) | CN115552370A (ja) |
WO (1) | WO2021195381A1 (ja) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR3105853B1 (fr) * | 2019-12-31 | 2023-01-06 | Proton World Int Nv | Système embarqué |
FR3105854B1 (fr) | 2019-12-31 | 2024-07-19 | St Microelectronics Rousset | Système embarqué |
US11347486B2 (en) * | 2020-03-27 | 2022-05-31 | Advanced Micro Devices, Inc. | Compiler-initiated tile replacement to enable hardware acceleration resources |
CN114117896B (zh) * | 2021-11-09 | 2024-07-26 | 上海交通大学 | 面向超长simd管线的二值规约优化实现方法及系统 |
US11782683B1 (en) * | 2022-03-24 | 2023-10-10 | International Business Machines Corporation | Variable replacement by an artificial intelligence accelerator |
CN114995822B (zh) * | 2022-06-07 | 2024-08-23 | 重庆大学 | 专用于cnn加速器的深度学习编译器优化方法 |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4934267B2 (ja) * | 2003-10-17 | 2012-05-16 | パナソニック株式会社 | コンパイラ装置 |
US7926046B2 (en) | 2005-12-13 | 2011-04-12 | Soorgoli Ashok Halambi | Compiler method for extracting and accelerator template program |
US8561037B2 (en) * | 2007-08-29 | 2013-10-15 | Convey Computer | Compiler for generating an executable comprising instructions for a plurality of different instruction sets |
US8336036B2 (en) | 2008-11-21 | 2012-12-18 | Korea University Industrial & Academic Collaboration Foundation | System and method for translating high programming level languages code into hardware description language code |
US8789026B2 (en) | 2011-08-02 | 2014-07-22 | International Business Machines Corporation | Technique for compiling and running high-level programs on heterogeneous computers |
US9052888B2 (en) * | 2013-02-21 | 2015-06-09 | International Business Machines Corporation | Vectorization in an optimizing compiler |
US9720667B2 (en) * | 2014-03-21 | 2017-08-01 | Intel Corporation | Automatic loop vectorization using hardware transactional memory |
US9501269B2 (en) * | 2014-09-30 | 2016-11-22 | Advanced Micro Devices, Inc. | Automatic source code generation for accelerated function calls |
US9588746B2 (en) * | 2014-12-19 | 2017-03-07 | International Business Machines Corporation | Compiler method for generating instructions for vector operations on a multi-endian processor |
US11170294B2 (en) | 2016-01-07 | 2021-11-09 | Intel Corporation | Hardware accelerated machine learning |
US10592213B2 (en) * | 2016-10-19 | 2020-03-17 | Intel Corporation | Preprocessing tensor operations for optimal compilation |
WO2018094087A1 (en) | 2016-11-17 | 2018-05-24 | The Mathworks, Inc. | Systems and methods for generating code for parallel processing units |
US10032110B2 (en) | 2016-12-13 | 2018-07-24 | Google Llc | Performing average pooling in hardware |
US10747844B2 (en) | 2017-12-12 | 2020-08-18 | Tesla, Inc. | Systems and methods for converting a matrix input to a vectorized input for a matrix processor |
US10769526B2 (en) | 2018-04-24 | 2020-09-08 | Intel Corporation | Machine learning accelerator architecture |
US20190392296A1 (en) | 2019-06-28 | 2019-12-26 | John Brady | Hardware agnostic deep neural network compiler |
US20210048991A1 (en) * | 2019-08-13 | 2021-02-18 | Nvidia Corporation | Performing matrix operations in neural networks |
US11494608B2 (en) | 2019-08-14 | 2022-11-08 | Intel Corporation | Methods and apparatus to tile walk a tensor for convolution operations |
US11347486B2 (en) * | 2020-03-27 | 2022-05-31 | Advanced Micro Devices, Inc. | Compiler-initiated tile replacement to enable hardware acceleration resources |
-
2020
- 2020-03-27 US US16/832,275 patent/US11347486B2/en active Active
-
2021
- 2021-03-25 EP EP21776815.9A patent/EP4127908A4/en active Pending
- 2021-03-25 CN CN202180029522.2A patent/CN115552370A/zh active Pending
- 2021-03-25 WO PCT/US2021/024154 patent/WO2021195381A1/en active Application Filing
- 2021-03-25 JP JP2022557656A patent/JP2023518833A/ja active Pending
- 2021-03-25 KR KR1020227037684A patent/KR20220156954A/ko unknown
-
2022
- 2022-05-10 US US17/740,828 patent/US11853734B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US20210303284A1 (en) | 2021-09-30 |
EP4127908A1 (en) | 2023-02-08 |
US11853734B2 (en) | 2023-12-26 |
CN115552370A (zh) | 2022-12-30 |
EP4127908A4 (en) | 2024-04-17 |
US20220269492A1 (en) | 2022-08-25 |
WO2021195381A1 (en) | 2021-09-30 |
KR20220156954A (ko) | 2022-11-28 |
US11347486B2 (en) | 2022-05-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11853734B2 (en) | Compiler-initiated tile replacement to enable hardware acceleration resources | |
JP4999183B2 (ja) | 並列スレッド・コンピューティングの仮想のアーキテクチャ及び命令セット | |
US20080109795A1 (en) | C/c++ language extensions for general-purpose graphics processing unit | |
US9361079B2 (en) | Method for compiling a parallel thread execution program for general execution | |
JP2008276740A5 (ja) | ||
US20190278605A1 (en) | Software-controlled variable wavefront size execution at gpu | |
Sunitha et al. | Performance improvement of CUDA applications by reducing CPU-GPU data transfer overhead | |
US20160147559A1 (en) | Modification of context saving functions | |
US20220365750A1 (en) | Datatype conversion technique | |
US10664285B1 (en) | Flexibly deriving intended thread data exchange patterns | |
Leback et al. | Tesla vs. xeon phi vs. radeon a compiler writer’s perspective | |
Sakai et al. | Towards automating multi-dimensional data decomposition for executing a single-GPU code on a multi-GPU system | |
JP2022535736A (ja) | Gpuでのソフトウェア制御の可変ウェーブフロントサイズの実行 | |
Bhimani et al. | Design space exploration of GPU Accelerated cluster systems for optimal data transfer using PCIe bus | |
US20220188076A1 (en) | Dual vector arithmetic logic unit | |
US11847462B2 (en) | Software-based instruction scoreboard for arithmetic logic units | |
Thorarensen | A back-end for the skepu skeleton programming library targeting the low-power multicore vision processor myriad 2 | |
KR102644951B1 (ko) | 산술 논리 장치 레지스터 시퀀싱 | |
US20240289129A1 (en) | Application programming interface to modify thread | |
Kawakami et al. | A Binary Translator to Accelerate Development of Deep Learning Processing Library for AArch64 CPU | |
Aamodt et al. | Programming Model | |
Jin | Extending the SYCL Joint Matrix for Binarized Neural Networks | |
Wolfe | How we should program GPGPUs | |
Žužek | Implementacija knjižnice SYCL za heterogeno računanje | |
Ilvonen et al. | PATC Course: Introduction to Accelerators@ CSC (2014) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20221128 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20240219 |