JP2023552789A - 算術論理演算ユニット用のソフトウェアベースの命令スコアボード - Google Patents

算術論理演算ユニット用のソフトウェアベースの命令スコアボード Download PDF

Info

Publication number
JP2023552789A
JP2023552789A JP2023534600A JP2023534600A JP2023552789A JP 2023552789 A JP2023552789 A JP 2023552789A JP 2023534600 A JP2023534600 A JP 2023534600A JP 2023534600 A JP2023534600 A JP 2023534600A JP 2023552789 A JP2023552789 A JP 2023552789A
Authority
JP
Japan
Prior art keywords
instruction
alu
instructions
control word
pipeline
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
Application number
JP2023534600A
Other languages
English (en)
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.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
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 Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2023552789A publication Critical patent/JP2023552789A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • 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, look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • G06F9/3869Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations

Abstract

ソフトウェアベースの命令スコアボード(126)は、算術論理演算ユニット(ALU)のパイプライン(218)に発行される発行間隔の短い命令(302、304、306)間の依存関係を示す。ソフトウェアベースの命令スコアボードは、1つ以上の制御ワード(308)を依存命令間のコマンドストリーム(300)に挿入し、次いで、コマンドストリームがALUパイプラインによって実行される。制御ワードは、依存命令の依存先の命令(単数又は複数)(親命令)を識別するので、プロセッサ・ハードウェア(104)は、依存命令が親命令からの結果を待機する間、ALUパイプラインが確実にストールしないようにすることができる。【選択図】図2

Description

従来の処理システムは、オーディオアプリケーション、ビデオアプリケーション、及び、マルチメディアアプリケーション、並びに、場合によっては汎用コンピューティングを実装する中央処理ユニット(CPU)及びグラフィック処理ユニット(GPU)等の処理ユニットを含む。GPUの物理リソースは、シェーダエンジンと、ユーザ定義の再構成可能な仮想パイプラインを実装するために使用される固定機能ハードウェアユニットと、を含む。例えば、三次元(3D)グラフィックを処理するための従来のグラフィックパイプラインは、プログラマブルシェーダによってサポートされた一連の固定機能ハードウェアブロック配置で形成される。GPUにおける処理は、典型的には、CPUによって処理されるアプリケーション・プログラミング・インターフェース(application programming interface、API)コール(例えば、ドローコール)によって開始される。ドローコールは、CPUによって生成され、GPUに伝送されて、フレーム内のオブジェクト(又はオブジェクトの一部)をレンダリングするようにGPUに命令するコマンドである。
GPU内のグラフィックハードウェアは、通常、スカラALU又はベクトルALU等の算術論理演算ユニット(ALU)を含み、これらは対応するパイプラインとして実装され、加算、減算、乗算、除算及び移動等の算術演算を実行するために使用され、種々の超越関数(transcendental functions)を実行する。場合によっては、1つのパイプラインを使用して算術関数の大部分を実装し、別のパイプラインを使用してより複雑な超越関数を実装する。ALUに対する命令は、アービタがパイプラインのうち何れかで実行する命令を選択するまで、命令バッファ内に保持される。命令バッファ内のいくつかの命令は他の命令に依存しており、例えば、第1の(依存)命令のソース・レジスタは、第2の命令の宛先レジスタから入力を受け取る。したがって、第2の命令は、第1の命令が実行される前に完了する必要がある。
本開示は、添付の図面を参照することによってより良好に理解され、その数々の特徴及び利点が当業者に明らかになり得る。異なる図面における同じ符号の使用は、類似又は同一のアイテムを示す。
いくつかの実施形態による、ソフトウェアベースの命令スコアボードを使用する処理システムのブロック図である。 いくつかの実施形態による、ある命令の依存関係を示す制御ワードをコマンドストリームに挿入する、ソフトウェアベースの命令スコアボードのブロック図である。 いくつかの実施形態による、コマンドストリームに挿入されたある命令の依存関係を示す制御ワードのブロック図である。 いくつかの実施形態による、ある命令の依存関係を示す制御ワードをコマンドストリームに挿入し、制御ワードに基づいて依存命令の発行を遅延させる方法を示すフロー図である。
ALUパイプラインは、4サイクル長パイプラインのような、所定のサイクル数に対応する長さを有する。したがって、依存命令は、依存先の命令の完了前にパイプラインに送信された場合、ストールする可能性がある。例えば、加算命令が移動命令に依存しており、ALUパイプラインが4サイクル長である場合、加算命令は、移動命令の1サイクル後にパイプラインに送信されると、3サイクルにわたってストールする。従来のGPUは、依存命令の依存先の命令が完了するまで、ALUパイプラインへの依存命令の送信を遅延させるために使用される情報を(例えば、1つ以上のフロップ内に)記憶するハードウェア命令スコアボードを含む。例えば、場合によっては、命令スコアボードは、パイプラインに先行発行された6つの命令の処理ステータスを示す情報を記憶するための6つのレジスタ(エントリ)を含む。各命令は、そのソース・レジスタを命令スコアボード内の命令の宛先レジスタと比較して、依存関係があるかどうかを判定する。ある命令が命令スコアボード内の命令の1つ以上に依存している場合、命令スコアボード内の対応するエントリを監視して、依存命令をパイプラインに送信するタイミングを決定する。このプロセスは、命令デコードと、数多くのレジスタ比較と、を実行する回路を必要とする。その結果、ハードウェア命令スコアボードでは、チップ上の電力消費量及び面積の両方において高いコストが発生する。
図1~図4は、GPU内のハードウェアによって消費される電力消費量及び面積を削減するためにソフトウェアに実装されるALUパイプライン用の命令スコアボードを示している。ソフトウェアベースの命令スコアボードは、ALUパイプラインに発行される命令間の依存関係を示し、命令間の間隔はパイプラインの実行時間よりも短い(「間隔の短い」命令と称される)。ソフトウェアベースの命令スコアボードは、「制御ワード」と称される1つ以上の遅延命令を、プログラムコード内の依存命令間のコマンドストリームに選択的に挿入し、プログラムコードは、その後、GPUによって実行される。制御ワードは、依存命令の依存先の命令(単数又は複数)(本明細書では「親命令」と称される)を識別し、これにより、親命令が未だ完了していないという理由で、GPUハードウェアが依存命令をALUパイプラインに発行せず、ALUパイプラインをストールさせる。
いくつかの実施形態では、ソフトウェアベースの命令スコアボードは、依存命令の直前に制御ワードをコマンドストリームに挿入し、この制御ワードは、依存命令の従属先である先行命令を示す。例えば、制御ワードは、コマンドストリーム内の次の命令がN番目の先行するベクトルALU(VALU)命令に依存していることを示す。いくつかの実施形態では、ソフトウェアベースの命令スコアボードは、命令ストリームのオーバーヘッドを低減するために、単一の制御ワード内に今後の命令の2つ以上の依存関係を識別する2つ以上の遅延値を含むように、制御ワード圧縮技術を実装する。例えば、単一の制御ワードは、コマンドストリーム内の次の命令に対する親命令を識別し、次の命令に続いて発行される命令をコマンドストリーム内の別の命令に依存するものとして識別する「スキップ」インジケータを更に含む。この制御ワード圧縮技術は、制御ワードごとに任意の数の依存関係指定子に適用することができる。いくつかの実施形態では、制御ワードは、2つ以上のALUパイプラインで実行される2つ以上の親命令に対するある命令の依存関係を示す。例えば、いくつかの実施形態では、制御ワードは、スカラALUパイプライン及びベクトルALUパイプラインの両方で実行される命令、又は、特殊関数ユニットの(例えば、サイン/コサイン)ALUパイプラインと、スカラALUパイプライン及びベクトルALUパイプラインのうち一方との両方で実行される命令の依存関係を示す。
ソフトウェアベースの命令スコアボードは、コンパイラによって維持される依存関係グラフに基づいて、制御ワードを生成する。この依存関係グラフは、プログラム内の全ての依存関係を識別する。しかしながら、全ての依存命令が制御ワードによって生じる遅延を必要とするわけではない。ALUパイプラインの深さ、及び、親命令と依存命令との間で発行される非依存命令の数に応じて、親命令と依存命令との間に余分なアイドルサイクルを挿入する必要がない場合がある。いくつかの実施形態では、ソフトウェアベースの命令スコアボードは、依存命令間の非依存命令の数及びALUパイプラインのステージの数に基づいて、必要に応じて制御ワードを挿入するのみである。例えば、依存命令がその親命令の後にALUパイプラインの長さに基づいて閾値サイクル数を超えて発行される場合、依存命令が発行される前に親命令は完了しており、依存命令のストールを回避するために追加のアイドルサイクルを設ける必要はない。したがって、ソフトウェアベースの命令スコアボードは、依存命令がその親命令の後の閾値サイクル数内に発行される場合にだけ、コマンドストリームに制御ワードを挿入する。いくつかの実施形態では、閾値サイクル数は、ALUパイプラインのステージの数に基づく。本明細書で説明される技術は、様々な実施形態では、様々な並列プロセッサ(例えば、ベクトルプロセッサ、グラフィックス処理ユニット(GPU)、汎用GPU(general-purpose GPU、GPGPU)、非スカラプロセッサ、高並列プロセッサ、人工知能(artificial intelligence、AI)プロセッサ、推論エンジン、機械学習プロセッサ、他のマルチスレッド処理ユニット等)の何れかにおいて利用される。
図1は、いくつかの実施形態による、ソフトウェアベースの命令スコアボードを使用する処理システム100を示している。処理システム100は、中央処理ユニット(CPU)102と、並列プロセッサの一例である加速処理デバイス(APD)104と、を含む。種々の実施形態では、CPU102は、1つ以上の単一コアCPU又はマルチコアCPUを含む。種々の実施形態では、APD104は、従来のCPU、従来のグラフィック処理ユニット(GPU)、及び、これらの組み合わせ等のリソースに関連して、加速された様式で、加速されたグラフィック処理タスク、データ並列タスク、ネストされたデータ並列タスクに関連付けられた機能及び計算を行うハードウェア及び/又はソフトウェアの任意の協働する集合体(collection)を含む。図1の実施形態では、処理システム100は、CPU102とAPD104とを組み合わせて統一されたプログラミング及び実行環境を提供する単一のシリコンダイ又はパッケージ上に形成されている。当該環境により、APD104を、いくつかのプログラミングタスクのためにCPU102と同様に流動的に使用できるようになる。その他の実施形態では、CPU102とAPD104とは別々に形成され、同じ又は異なる基板上に実装されている。処理システム100が、図1に示すよりも多くの又は少ない構成要素を含んでもよいことを理解されたい。例えば、処理システム100は、1つ以上の入力インターフェース、不揮発性ストレージ、1つ以上の出力インターフェース、ネットワークインターフェース、及び、1つ以上のディスプレイ若しくはディスプレイインターフェースを更に含んでもよい。
図1に示すように、処理システム100は、システムメモリ106、オペレーティングシステム108、通信インフラストラクチャ110、及び、1つ以上のアプリケーション112を含む。システムメモリ106へのアクセスは、メモリ106に連結されたメモリコントローラ(図示せず)によって管理される。例えば、システムメモリ106から読み取るか又はシステムメモリ106に書き込むための、CPU102又はその他のデバイスからの要求は、メモリコントローラによって管理される。いくつかの実施形態では、1つ以上のアプリケーション112は、CPU102においても実行される計算を行うための種々のプログラム又はコマンドを含む。CPU102は、APD104で処理するための選択されたコマンドを送信する。オペレーティングシステム108及び通信インフラストラクチャ110を、以下でより詳細に説明する。処理システム100は、デバイスドライバ114及び入力/出力メモリ管理ユニット(IOMMU)116等のメモリ管理ユニットを更に含む。処理システム100の構成要素は、ハードウェア、ファームウェア、ソフトウェア、又は、それらの任意の組み合わせとして実装されてもよい。いくつかの実施形態では、処理システム100は、図1に示されるものに加えて又はそれらとは異なる1つ以上のソフトウェア構成要素、ハードウェア構成要素及びファームウェア構成要素を含む。
処理システム100内で、システムメモリ106は、DRAM(図示せず)等の非永続的メモリを含む。種々の実施形態では、システムメモリ106は、処理論理命令、定数値、アプリケーション若しくはその他の処理論理の一部の実行中の変数値、又は、その他の所望の情報を記憶する。例えば、CPU102上の1つ以上の動作を実行するための制御論理の一部は、CPU102による動作のそれぞれの部分の実行中にシステムメモリ106内に存在してもよい。実行中、アプリケーション112等のそれぞれのアプリケーション、オペレーティングシステム108等のオペレーティングシステム機能、処理論理コマンド、及び、システムソフトウェアは、システムメモリ106内に存在する。オペレーティングシステム108に必須の制御論理コマンドは、通常、実行中にシステムメモリ106内に存在する。いくつかの実施形態では、その他のソフトウェアコマンド(例えば、デバイスドライバ114)は、処理システム100の実行中にシステムメモリ106内に存在する。
IOMMU116は、マルチコンテキスト・メモリ管理ユニットである。本発明で使用する場合、コンテキストは、カーネルが実行される環境と、同期及びメモリ管理が定義されるドメインと、を考慮している。コンテキストは、デバイスのセットと、それらのデバイスにアクセス可能なメモリと、対応するメモリプロパティと、メモリオブジェクト上のカーネル(単数又は複数)又は動作の実行をスケジュールするために使用される1つ以上のコマンドキューと、を含む。IOMMU116には、APD104等のデバイスに関するメモリページアクセスのために、仮想アドレスから物理的アドレスへの変換を実行するための論理が含まれている。いくつかの実施形態では、IOMMU116は、変換ルックアサイドバッファ(TLB)(図示せず)を含むか又はTLBへのアクセスを有する。TLBは、コンテンツアドレス指定可能メモリ(CAM)で実装されて、システムメモリ106内のデータについて、APD104によって行われる要求に対する論理(すなわち、仮想)メモリアドレスの物理メモリアドレスへの変換を加速させる。
種々の実施形態では、通信インフラストラクチャ110は、処理システム100の構成要素を相互接続している。通信インフラストラクチャ110は、周辺構成要素相互接続(PCI)バス、拡張PCI(PCI-E)バス、高度マイクロコントローラバスアーキテクチャ(AMBA)バス、高度グラフィックポート(AGP)、又は、その他のこのような通信インフラストラクチャ及び相互接続のうち1つ以上を含む(図示せず)。いくつかの実施形態では、通信インフラストラクチャ110は、イーサネット(登録商標)ネットワーク又はアプリケーションのデータ転送速度要件を満たす任意のその他の適切な物理的通信インフラストラクチャを含む。また、通信インフラストラクチャ110は、処理システム100の構成要素を含む、構成要素を相互接続するための機能を含む。
デバイスドライバ114等のドライバは、相互接続又は通信インフラストラクチャ110を介してデバイス(例えば、APD104)と通信する。呼び出しプログラムがデバイスドライバ114内のルーチンを起動させる場合、デバイスドライバ114は、コマンドをデバイスに発行する。デバイスがデータをデバイスドライバ114に戻すと、デバイスドライバ114は、元の呼び出しプログラムのルーチンを起動させる。概して、デバイスドライバは、任意の必要な非同期に依存するハードウェアインターフェースに必須の割り込み処理を提供するために、ハードウェア依存であり、オペレーティングシステム固有である。いくつかの実施形態では、コンパイラ120は、デバイスドライバ114内に埋め込まれる。コンパイラ120は、処理システム100による実行に必要なプログラム命令にソースコードをコンパイルする。このようなコンパイル中、コンパイラ120は、コンパイルの種々の段階でプログラム命令に変換を適用してもよい。その他の実施形態では、コンパイラ120は、スタンドアロンアプリケーションである。
CPU102は、制御プロセッサ、フィールド・プログラマブル・ゲート・アレイ(FPGA)、特定用途向け集積回路(ASIC)、又は、デジタル信号プロセッサ(DSP)のうち1つ以上を含むが、これらのエンティティは、明確にするために図1に図示されていない。CPU102は、処理システム100の動作を制御する制御論理の少なくとも一部を実行する。例えば、種々の実施形態では、CPU102は、オペレーティングシステム108、1つ以上のアプリケーション112、及び、デバイスドライバ114を実行する。いくつかの実施形態では、CPU102は、CPU102及びAPD104等の他の処理リソースにわたって1つ以上のアプリケーション112と関連付けられた処理を分配することにより、1つ以上のアプリケーション112の実行を開始及び制御する。
APD104は、並列処理にとりわけ適し得るグラフィック操作及びその他の操作等のような、選択された機能のためのコマンド及びプログラムを実行する。APD104は、通常、ピクセル操作、幾何学的計算及びディスプレイへの画像のレンダリング等のグラフィックパイプライン操作を実行するために頻繁に使用される。いくつかの実施形態では、APD104は、CPU102から受信したコマンド又は命令に基づいて、計算処理操作(例えば、ビデオ操作、物理的シミュレーション、計算流体ダイナミクス等のような、グラフィックとは無関係の操作)を実行する。例えば、コマンドは、APD104の命令セットアーキテクチャ(ISA)で通常定義されない特殊な命令と見なすことができる。コマンドは、ディスパッチプロセッサ、コマンドプロセッサ、又は、ネットワークコントローラ等の特殊なプロセッサによって実行することができる。
種々の実施形態では、APD104は、例えばシングルインストラクション・マルチプルデータ(SIMD)実行モデルに従って、Wavefront内のその他のスレッドの実行と同時にスレッドを実行する1つ以上のSIMDユニット124を含む1つ以上の処理コア122等のような1つ以上の計算ユニットを含む。SIMD実行モデルは、算術論理演算ユニット(ALU)等の複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有し、したがって、同じプログラムを実行するが、そのプログラムを異なるデータで実行することができるものである。APD104のいくつかの実施形態は、GPUを実装するために使用され、その場合、処理コア122は、シェーダコア又はストリーミングマルチプロセッサ(SMX)と称される。APD104に実装される処理コア122の数は、設計上自由に選択できる。
1つ以上の処理コア122の各々は、特定のワークアイテムのそれぞれのインスタンス化を実行して入力データを処理し、1つ以上の処理コア122における基本的な実行単位は、ワークアイテム(例えば、スレッド)である。各ワークアイテムは、例えば、並列に実行されるコマンドによってデバイス上で起動されたカーネルの並列実行の集合体の単一のインスタンス生成を表す。ワークアイテムは、処理コア122において実行されるワークグループの一部として、1つ以上の処理要素によって実行されてもよい。
APD104は、単一のSIMDユニット124上の「Wavefront」として同時に実行されるスレッドのグループを含むワークアイテムを発行及び実行するGPUを含む。複数のWavefrontが「ワークグループ」に含まれるが、これは、同じプログラムを実行するように指定されたワークアイテムの集合体を含む。ワークグループは、ワークグループを構成するWavefrontのそれぞれを実行することによって実行される。いくつかの実施形態では、これらのWavefrontは、単一のSIMDユニット124上で連続して実行されるか、又は、異なるSIMDユニット上で部分的に若しくは完全に並列で実行される。その他の実施形態では、ワークグループからの全てのWavefrontは、同じ処理コア122で処理される。また、Wavefrontは、ワープ、ベクトル又はスレッドとも互換的に称されてもよい。いくつかの実施形態では、Wavefrontは、シェーダプログラムの並列実行のインスタンスを含むが、各Wavefrontは、SIMDパラダイム(例えば、複数のデータと同じ命令のストリームを実行する1つの命令制御ユニット)に従って単一のSIMDユニット124上で同時に実行される、複数のワークアイテムを含む。スケジューラ128は、異なる処理コア122及びSIMDユニット124上の種々のWavefrontのスケジューリング、並びに、APD104上の種々のタスクを調整するためのその他の動作の実行に関連する動作を実行する。
1つ以上の処理コア122によって与えられる並列処理は、画素値計算、頂点変換、テッセレーション、ジオメトリシェーディング操作、及び、その他のグラフィック操作等のグラフィック関連操作に適している。グラフィック処理パイプライン130は、CPU102からのグラフィック処理コマンドを受信し、これにより、並列で実行するために、1つ以上の処理コア122に計算タスクを提供する。画素処理及びその他の並列計算動作等のいくつかのグラフィックパイプライン操作は、同じコマンドストリーム又は計算カーネルが入力データ要素のストリーム又はコレクションに対して実行されることを必要とする。同一の計算カーネルのそれぞれのインスタンスは、このようなデータ要素を並列に処理するために、1つ以上の処理コア122における複数のSIMD124ユニット上で同時に実行される。本明細書で言及されるように、例えば計算カーネルは、プログラムで宣言され、APD処理コア122上で実行される命令を含む関数である。この関数は、カーネル、シェーダ、シェーダプログラム又はプログラムとも称される。
Wavefrontの幅は、APD104のSIMDユニット124のハードウェアの特性である。種々の実施形態では、APD104は、GPUハードウェアのマイクロアーキテクチャに依存する、一定の固定サイズのWavefrontを発行するGPUアーキテクチャを含む。各処理コア122は、スカラ及び/又はベクトル浮動小数点ユニット、算術論理演算ユニット(ALU)等の1つ以上の処理要素を含む。種々の実施形態では、処理コア122は、逆平方根ユニット及びサイン/コサインユニット等の特殊用途処理ユニット(図示せず)を更に含む。
Wavefront内のワークアイテム(例えば、スレッド)は、その実行中にSIMDハードウェアレーン(以下、「SIMDレーン」と称される)上で実行される。一実施形態では、各SIMDユニット124の処理要素は、それぞれが16個のALU(レーンと称される)を含むアレイへと配置され、各レーンは、SIMDユニット124におけるその他のレーンと同時に同じ命令を実行するが、その一方で異なるデータを用いてその命令を実行することができ、各ワークアイテムが実行中にレーンへとマッピングされる。いくつかの実施形態では、Wavefrontは、Wave64と称される64個のスレッドのグループであり(したがって、Wavefrontの各スレッドは、0~63個の範囲のレーンに割り当てられる)、これらのスレッドは、16レーン幅のSIMDユニットを介して、4サイクルにわたって16個のスレッドのグループで発行される。しかしながら、当業者であれば、本開示の範囲から逸脱することなく、Wavefrontの幅及びSIMDユニット124が任意の構成又は数のスレッド(例えば、8個、16個、32個、64個等)を含んでもよいことを理解するであろう。
ハードウェア命令スコアボードの電力消費量及び面積のコストを発生させることなく依存関係の識別を容易にするために、コンパイラ120は、制御ワード118等の制御ワードをコマンドストリームに挿入して、ある命令の別の命令に対する依存関係を示すソフトウェアベースの命令スコアボード126を含む。制御ワード118に基づいて、SIMDユニット124は、依存命令の依存先の命令(親命令)が完了するまで、依存命令の実行を遅延させる。
図2は、いくつかの実施形態による、SIMDユニット124で実行するために、命令の依存関係を示す制御ワード206を命令のコマンドストリーム204に挿入するコンパイラ120を示す、処理システム100の一部分200のブロック図である。各SIMDユニット124は、命令バッファ210、発行ステージ212、及び、複数の算術論理演算ユニット(ALU)214(そのうち1つのみが図示されている)を含む。いくつかの実施形態では、命令バッファ210及び発行ステージ212のうち1つ以上が複数のSIMDユニット124の間で共有されるが、他の実施形態では、各SIMDユニット124は、それ自体の命令バッファ及び発行ステージを含む。演算を実行する過程で、コンパイラ120は、ALU214において実行される命令のセットを生成する。ALU命令の例には、加算命令、乗算命令、行列操作命令等が含まれる。SIMDユニット124は、実行のためにALU命令を命令バッファ210に記憶する。発行ステージ212は、命令バッファ210のエントリを参照する1つ以上のポインタを制御する。発行ステージ212は、ポインタを操作して命令バッファから命令を読み取り、次いで、読み取った命令をALU214に提供する。命令バッファ210から命令を読み取って、命令をALU214に供給することを、ALU214に命令を「発行する」と称される。
ALU214は、発行された命令を実行して、命令によって定義される算術演算を行う。命令の実行を容易にするために、ALU214は、ALU制御モジュール216と、ALUパイプライン218と、を含む。ALUパイプライン218は、複数のパイプラインステージ(例えば、ステージ220)を含み、各ステージは、実行中の命令に基づいて、とりわけALUパイプライン218の先行ステージによって提供されるデータに基づいて、1つ以上の演算を実行する。したがって、発行された命令は、ALUパイプライン218の第1のステージで実行を開始し、第1のステージは、受信データに基づいて演算を実行する第2のステージに実行の結果を提供し、次いで、第3のステージに結果を提供し、命令がALUパイプライン218の最終ステージに到達するまで同様に実行され、最終ステージは、演算の最終結果をレジスタファイル(図示せず)又はSIMDユニット124の他の記憶位置に記憶する。更に、ALUパイプライン218は、ALUパイプライン218の各ステージが異なる命令を同時に実行するように、パイプライン方式で命令を実行する。すなわち、ALUパイプライン218の所定のサイクルごとに、第1のステージは1つの命令を実行し、第2のステージは別の命令を実行し、第3のステージは更に別の命令を実行し、以下同様である。
ALU制御モジュール216は、ALUパイプライン218における状態を監視し、監視した状態に基づいて、何れのステージが所定のサイクルの命令を実行するかを制御する。すなわち、いくつかの実施形態では、ALU制御モジュール216は、クロック信号及び他の制御信号のゲーティングを制御して、ALUパイプライン218の何れのステージが所定のサイクルにおいて命令を実行するかを決定する。例えば、いくつかの条件下では、ALUパイプライン218のステージはストール状態に入り、ここで当該ステージは、キャッシュからのデータを待機するか又はデータを記憶するためのキャッシュラインの準備を待機する等のように、ステージが進行し得る前に別の実行ユニットでの演算を待機している。ALU制御モジュール216は当該ステージがストール状態に入っていることを検出し、ストール状態が持続する間、ALUパイプライン218の他のステージにおける実行を一時停止し、これにより、ストールされたステージに命令が進行して実行エラーを発生させることを防止する。
コンパイラ120は、SIMDユニット124の各々において実行されるソフトウェアプログラム内の全ての依存関係を識別する依存関係グラフ202を生成し、次いで、SIMDユニット124において実行する命令のコマンドストリーム204を生成する。依存関係グラフ202に基づいて、ソフトウェアベースの命令スコアボード126は、介在命令なしに発行するようにスケジュールされるか、又は、互いの閾値サイクル数内で発行するようにスケジュールされるか、親命令及び依存命令を識別する。ソフトウェアベースの命令スコアボード126は、依存命令と、依存命令の従属先である親命令と、を識別するために、制御ワード206をコマンドストリーム204に挿入する。
いくつかの実施形態では、ソフトウェアベースの命令スコアボード126は、親命令と依存命令との間で発行するようにスケジュールされた介在命令が存在しない(又は命令が不足している)と判定したことに応じて、制御ワード206をコマンドストリームに挿入するのみである。いくつかの実施形態では、ソフトウェアベースの命令スコアボード126は、ALUパイプライン218内のステージの数に基づいて、介在命令数の十分性を判定する。例えば、ALUパイプライン218が4つのステージを有し、親命令と依存命令との間で発行される介在命令が4つ未満である場合、ソフトウェアベースの命令スコアボード126は、親命令と依存命令との間の間隔が短いと判定し、親命令に対する依存命令の依存関係を示す制御ワード206をコマンドストリーム204に挿入する。しかしながら、親命令と依存命令との間で発行される介在命令が4つよりも多く存在する場合、ソフトウェアベースの命令スコアボード126は、更なる遅延を要することなく依存命令が発行される前に親命令が完了するので、制御ワード206のコマンドストリームへの挿入をバイパスする。
制御ワード206を受信したことに応じて、ALU制御モジュール216は、親命令が実行を完了するまで、依存命令の実行を一時停止する。親命令が完了するのに要するサイクル数は、発行サイクルが経過した後、ALU214が後続の命令によって消費され得る結果を生成するまでのサイクル数である。いくつかの実施形態では、親命令が実行を完了するのに要するサイクル数は、親命令のWavefront及び依存命令のWavefrontの幅に依存する。例えば、Wave32のWavefrontの場合、親命令が実行を完了するのに要するサイクル数は、親命令を発行するのに要するサイクル数にALUパイプライン218の長さ(すなわち、ALUパイプライン218内のALUステージ220の数である)を加えたものである。Wave64のWavefrontの場合、親命令が実行を完了するのに要するサイクル数は、親命令が1回発行されるか2回発行されるかに依存する。いくつかの実施形態では、Wave64のWavefrontは2つのパスで発行され、ALU制御モジュール216は、依存命令が親命令の第2のパスと重複するように、親命令の第1のパスが完了した後であるが、親命令の第2のパスが完了する前に依存命令を発行する。
図3は、いくつかの実施形態による、コマンドストリーム300に挿入されるある命令の依存関係を示す制御ワード308のブロック図である。コマンドストリーム300は、命令-1 302、命令-2 304、命令-3 306、命令-4 310、命令-5 312、及び、命令-6 314を含む。図示した例では、命令-4 310は命令-1 302に依存しており、命令-6 314は命令-5 312に依存している。
依存関係を示し、依存命令である命令-4 310及び命令-6 314を、それぞれの親命令である命令-1 302及び命令-5 312が完了するまで遅延させるようにALU制御モジュール216に命令するために、ソフトウェアベースの命令スコアボード126は、命令-4 310の前に制御ワード308をコマンドストリーム300に挿入する。制御ワード308は、親命令(単数又は複数)が実行されているALU 214の識別子と、親命令と依存命令との間で発行される介在命令数のインジケーションと、を含む。図示した実施形態では、制御ワード308は、命令-4 310を、命令-4 310の3サイクル前に発行された命令に依存するものとして識別し、命令-6 314を、命令-6 314の1サイクル前に発行された命令に依存するものとして識別する。制御ワード308は、第2の依存命令(命令-6 314)と、命令-5 312に対するその依存関係と、を識別するための「スキップ」コードを含む。図示した例の一実施形態では、制御ワード308は、
データ依存性 命令ID0=3、スキップ=2、命令ID1=1となり、
ここで、命令ID0=3は、制御ワード308の直後に続く命令ワード(命令-4 310)が、命令-4 310の3サイクル前に発行された命令(命令-1 302)に依存することを宣言し、スキップ=2は、次の遅延が次の命令用ではなく、次の命令の後の命令(命令-6 314)用であることを意味し、命令ID1=1は、命令-6 314が命令-6 314の1サイクル前に発行された命令(命令-5 312)に依存することを宣言する。制御ワード308を受信したことに応じて、ALU制御モジュール216は、命令-4 310及び命令-6 314の各々を発行する前に遅延を追加する。
図4は、いくつかの実施形態による、命令の依存関係を示す制御ワードをコマンドストリームに挿入する方法400を示すフロー図である。方法400は、図1の処理システム100における例示的な実装に関して記述されている。ブロック402において、コンパイラ120は、命令の依存関係を識別する。例えば、いくつかの実施形態では、コンパイラ120は、ソフトウェアプログラム内の各依存関係を識別する依存関係グラフ202を生成する。ブロック404において、コンパイラ120は、コマンドストリーム300内の命令を発行する。ブロック406において、ソフトウェアベースの命令スコアボード126は、依存命令の依存先の命令(親命令)が依存命令の前に閾値サイクル数を超えて発行されたかどうかを判定する。いくつかの実施形態では、閾値数は、ALUパイプライン218内のALUステージ220の数に基づく。ブロック406において、ソフトウェアベースの命令スコアボード126が、親命令が依存命令の前に閾値サイクル数を超えて発行されたと判定した場合、本方法フローはブロック404に戻って継続される。
ブロック406において、ソフトウェアベースの命令スコアボード126が、親命令が依存命令の前に閾値サイクル数を超えて発行されなかったと判定した場合、本方法フローはブロック408へと続く。ブロック408において、ソフトウェアベースの命令スコアボード126は、制御ワード308をコマンドストリーム300に挿入する。制御ワード308は、親命令が発行されたALU214と、親命令の発行と依存命令の発行との間の介在命令の数と、を識別する。いくつかの実施形態では、制御ワード308は、例えばスキップインジケータを含むことによって、2つ以上の命令の依存関係を示す。ブロック410において、ALU制御モジュール216は、依存命令の実行を、親命令が完了するまで遅延させる。
いくつかの実施形態では、上記の装置及び技術は、図1~図4を参照して説明した処理システム等の1つ以上の集積回路(integrated circuit、IC)デバイス(集積回路パッケージ又はマイクロチップとも称される)を含むシステムに実装される。電子設計自動化(electronic design automation、EDA)及びコンピュータ支援設計(computer aided design、CAD)ソフトウェアツールは、これらのICデバイスの設計及び製造に使用することができる。これらの設計ツールは、典型的には、1つ以上のソフトウェアプログラムとして表される。1つ以上のソフトウェアプログラムは、回路を製造するための製造システムを設計するか又は適応させるためのプロセスの少なくとも一部を実行するために、1つ以上のICデバイスの回路を表すコードで動作するようにコンピュータシステムを操作するための、コンピュータシステムによって実行可能なコードを含む。このコードは、命令、データ、又は、命令及びデータの組み合わせを含み得る。設計ツール又は製造ツールを表すソフトウェア命令は、典型的には、コンピューティングシステムにアクセス可能なコンピュータ可読記憶媒体に記憶される。同様に、ICデバイスの設計又は製造の1つ以上の段階を表すコードは、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体に記憶され、そこからアクセスされる。
コンピュータ可読記憶媒体は、命令及び/又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の非一時的な記憶媒体又は非一時的な記憶媒体の組み合わせを含む。このような記憶媒体には、限定されないが、光学媒体(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ブルーレイ(登録商標)ディスク)、磁気媒体(例えば、フロッピー(登録商標)ディスク、磁気テープ、磁気ハードドライブ)、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)若しくはキャッシュ)、不揮発性メモリ(例えば、読取専用メモリ(ROM)若しくはフラッシュメモリ)、又は、微小電気機械システム(MEMS)ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体(例えば、システムRAM又はROM)はコンピューティングシステムに内蔵されてもよいし、コンピュータ可読記憶媒体(例えば、磁気ハードドライブ)はコンピューティングシステムに固定的に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、光学ディスク又はユニバーサルシリアルバス(USB)ベースのフラッシュメモリ)はコンピューティングシステムに着脱可能に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、ネットワークアクセス可能ストレージ(NAS))は有線又は無線ネットワークを介してコンピュータシステムに結合されてもよい。
いくつかの実施形態では、上述した技術の特定の態様は、ソフトウェアを実行する処理システムの1つ以上のプロセッサによって実装される。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶されるか、別の方法で明確に具体化された実行可能命令の1つ以上のセットを含む。ソフトウェアは、命令及び特定のデータを含んでもよく、当該命令及び特定のデータは、1つ以上のプロセッサによって実行されると、上述した技術の1つ以上の態様を実行するように1つ以上のプロセッサを操作する。非一時的なコンピュータ可読記憶媒体は、例えば、磁気又は光ディスク記憶デバイス、フラッシュメモリ等のソリッドステート記憶デバイス、キャッシュ、ランダムアクセスメモリ(RAM)、又は、他の不揮発性メモリデバイス(単数又は複数)等を含み得る。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈され若しくは別の方法で実行可能な他の命令形式で実装可能である。
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、1つ以上のさらなるアクティビティが実行される場合があり、1つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。

Claims (17)

  1. 方法であって、
    算術論理演算ユニット(ALU)パイプラインで実行するための第1の命令を含むコマンドストリームに制御ワードを挿入することであって、前記制御ワードは、前記ALUパイプラインで実行するための第2の命令に対する前記第1の命令の第1の依存関係を示し、前記ALUパイプラインは複数のステージを含む、ことを含む、
    方法。
  2. 前記ALUパイプラインにおいて、前記制御ワードに基づいて前記第1の命令の実行を遅延させることを更に含む、
    請求項1の方法。
  3. 前記制御ワードを挿入することは、
    前記第1の命令及び前記第2の命令がいかなる命令も介在することなしに発行されたことに応じて、前記制御ワードを挿入すること、又は、
    前記第2の命令の発行後に、前記第1の命令が閾値数未満の命令を発行したことに応じて、前記制御ワードを挿入することを含む、
    請求項1又は2の方法。
  4. 前記閾値数は、前記ALUパイプラインのステージの数に基づいている、
    請求項3の方法。
  5. 前記制御ワードは、
    前記第2の命令が実行されている前記ALUの識別子と、
    前記第2の命令の発行と前記第1の命令の発行との間に発行される命令数のインジケーションと、を含む、
    請求項1~4の何れかの方法。
  6. 前記制御ワードにおいて、前記ALUパイプラインで実行するための少なくとも1つの第4の命令に対する、少なくとも1つの第3の命令の少なくとも1つの第2の依存関係を示すことを更に含む、
    請求項1~5の何れかの方法。
  7. 方法であって、
    複数のステージを備える算術論理演算ユニット(ALU)のパイプラインにおいて、第1の命令が第2の命令に依存していることを示す制御ワードに基づいて、前記第1の命令の実行を遅延させることを含む、
    方法。
  8. 前記第1の命令及び前記第2の命令がいかなる命令も介在することなしに発行されたことに応じて、且つ、前記第1の命令が、前記第2の命令の発行後に、閾値数未満の命令を発行したことに応じて、命令ストリーム内の前記制御ワードを受信することを更に含む、
    請求項7の方法。
  9. 前記閾値数は、前記ALUパイプラインのステージの数に基づいている、
    請求項8の方法。
  10. 前記制御ワードは、
    前記第2の命令が実行されている前記ALUの識別子と、
    前記第2の命令の発行と前記第1の命令の発行との間に発行される命令数のインジケーションと、を含む、
    請求項7~9の何れかの方法。
  11. 前記制御ワードにおいて、前記ALUパイプラインで実行するための第4の命令に対する第3の命令の第2の依存関係を示すことを更に含む、
    請求項7~10の何れかの方法。
  12. デバイスであって、
    複数のステージを備える算術論理演算ユニット(ALU)パイプラインと、
    プロセッサと、を備え、
    前記プロセッサは、
    前記ALUパイプラインで実行するための第2の命令に対する第1の命令の第1の依存関係を示す制御ワードを、前記ALUパイプラインで実行するための前記第1の命令に挿入するように構成されている、
    デバイス。
  13. 前記ALUパイプラインは、
    前記制御ワードに基づいて前記第1の命令の実行を遅延させるように構成されている、
    請求項12のデバイス。
  14. 前記プロセッサは、
    前記第1の命令及び前記第2の命令がいかなる命令も介在することなしに発行されたことに応じて、前記制御ワードを挿入するか、又は、
    前記第2の命令の発行後に、前記第1の命令が閾値数未満の命令を発行したことに応じて、前記制御ワードを挿入するように更に構成されている、
    請求項12又は13のデバイス。
  15. 前記閾値数は、前記ALUパイプラインのステージの数に基づいている、
    請求項14のデバイス。
  16. 前記制御ワードは、
    前記第2の命令が実行されている前記ALUの識別子と、
    前記第2の命令の発行と前記第1の命令の発行との間に発行される命令数のインジケーションと、を含む、
    請求項12~15の何れかのデバイス。
  17. 前記プロセッサは、
    前記制御ワードにおいて、前記ALUパイプラインで実行するための第4の命令に対する第3の命令の第2の依存関係を示すように更に構成されている、
    請求項12~16の何れかのデバイス。
JP2023534600A 2020-12-15 2021-12-13 算術論理演算ユニット用のソフトウェアベースの命令スコアボード Pending JP2023552789A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/122,089 2020-12-15
US17/122,089 US11847462B2 (en) 2020-12-15 2020-12-15 Software-based instruction scoreboard for arithmetic logic units
PCT/US2021/063019 WO2022132614A1 (en) 2020-12-15 2021-12-13 Software-based instruction scoreboard for arithmetic logic units

Publications (1)

Publication Number Publication Date
JP2023552789A true JP2023552789A (ja) 2023-12-19

Family

ID=81942535

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2023534600A Pending JP2023552789A (ja) 2020-12-15 2021-12-13 算術論理演算ユニット用のソフトウェアベースの命令スコアボード

Country Status (6)

Country Link
US (1) US11847462B2 (ja)
EP (1) EP4264413A1 (ja)
JP (1) JP2023552789A (ja)
KR (1) KR20230121073A (ja)
CN (1) CN116830145A (ja)
WO (1) WO2022132614A1 (ja)

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2925842B2 (ja) 1991-07-04 1999-07-28 松下電器産業株式会社 パイプライン処理装置
US6950926B1 (en) * 2001-03-02 2005-09-27 Advanced Micro Devices, Inc. Use of a neutral instruction as a dependency indicator for a set of instructions
US7206927B2 (en) * 2002-11-19 2007-04-17 Analog Devices, Inc. Pipelined processor method and circuit with interleaving of iterative operations
US7434035B2 (en) 2003-05-12 2008-10-07 International Business Machines Corporation Method and system for processing instructions in grouped and non-grouped modes
US9448805B2 (en) 2013-06-14 2016-09-20 Comsats Institute Of Information Technology Software controlled data prefetch buffering
KR20160046331A (ko) 2013-08-19 2016-04-28 상하이 신하오 (브레이브칩스) 마이크로 일렉트로닉스 코. 엘티디. 범용 유닛을 기반으로 하는 고성능 프로세스 시스템 및 방법
US11249765B2 (en) * 2018-08-22 2022-02-15 Advanced Micro Devices, Inc. Performance for GPU exceptions
US20220075627A1 (en) * 2020-09-09 2022-03-10 Ascenium, Inc. Highly parallel processing architecture with shallow pipeline

Also Published As

Publication number Publication date
EP4264413A1 (en) 2023-10-25
US11847462B2 (en) 2023-12-19
CN116830145A (zh) 2023-09-29
WO2022132614A1 (en) 2022-06-23
US20220188120A1 (en) 2022-06-16
KR20230121073A (ko) 2023-08-17

Similar Documents

Publication Publication Date Title
KR102432380B1 (ko) 워프 클러스터링을 수행하는 방법
US8639882B2 (en) Methods and apparatus for source operand collector caching
US9830158B2 (en) Speculative execution and rollback
EP2480979B1 (en) Unanimous branch instructions in a parallel thread processor
US10255228B2 (en) System and method for performing shaped memory access operations
US20130042090A1 (en) Temporal simt execution optimization
US9626191B2 (en) Shaped register file reads
US20220121444A1 (en) Apparatus and method for configuring cooperative warps in vector computing system
TWI546736B (zh) 多執行緒圖形處理單元管線
WO2023173642A1 (zh) 指令调度的方法、处理电路和电子设备
US10152329B2 (en) Pre-scheduled replays of divergent operations
TW202109286A (zh) 純函數語言神經網路加速器系統及結構
CN105446733B (zh) 数据处理系统、用于数据处理系统的方法及可读存储介质
US20110247018A1 (en) API For Launching Work On a Processor
CN117501254A (zh) 使用近存储器计算为复杂操作提供原子性
US20220300326A1 (en) Techniques for balancing workloads when parallelizing multiply-accumulate computations
JP2023552789A (ja) 算術論理演算ユニット用のソフトウェアベースの命令スコアボード
US11675568B2 (en) Dual vector arithmetic logic unit
US20130159684A1 (en) Batched replays of divergent operations

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230809