(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-11-08
(54)【発明の名称】アクセラレータ常駐ランタイム管理を介した高スケーラブルHPCアプリケーションにおけるレイテンシの低減
(51)【国際特許分類】
G06F 9/48 20060101AFI20241031BHJP
G06F 9/50 20060101ALI20241031BHJP
【FI】
G06F9/48 370
G06F9/50 150Z
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024526933
(86)(22)【出願日】2022-10-26
(85)【翻訳文提出日】2024-06-17
(86)【国際出願番号】 US2022047900
(87)【国際公開番号】W WO2023086204
(87)【国際公開日】2023-05-19
(32)【優先日】2021-11-11
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ニコラス ジェームス カーティス
(57)【要約】
アクセラレータ常駐マネージャによるランタイム管理のための方法及びシステムが提供される。技術は、マネージャが、複数のカーネル及びそれぞれの依存関係を含むアプリケーションの処理フローの表現を受信することを含む。次いで、マネージャは、複数のカーネルを、それを管理する1つ以上のAPUに割り当て、複数のカーネルを、それらの割り当てられたAPU上で起動し、それぞれの依存関係に従って反復実行する。
【選択図】
図6
【特許請求の範囲】
【請求項1】
アクセラレータ常駐マネージャによるランタイム管理の方法であって、
前記マネージャが、複数のカーネル及びそれぞれの依存関係を含むアプリケーションの処理フローの表現を受信することと、
前記マネージャが、前記複数のカーネルを、前記マネージャによって管理されるアクセラレータの1つ以上のAPUに割り当てることと、
前記マネージャが、前記複数のカーネルをそれらの割り当てられたAPU上で起動し、前記それぞれの依存関係に従って反復実行することと、を含む、
方法。
【請求項2】
前記反復中に第1のカーネルの第2のカーネルに対する依存関係が終了した場合に、前記第2のカーネルが、前記第1のカーネルにメッセージを送信することであって、前記メッセージは、終了した依存関係を示す、ことを含む、
請求項1の方法。
【請求項3】
前記反復の終了時に、前記マネージャが、終了した依存関係に基づいて、前記カーネルを前記APUに再割り当てすることを含む、
請求項2の方法。
【請求項4】
前記反復中に第1のカーネルの第2のカーネルに対する依存関係が生成された場合に、前記第2のカーネルから完了メッセージを受信するために前記第1のカーネルによって使用されるメールボックスを前記第2のカーネルが生成することを含む、
請求項1の方法。
【請求項5】
前記反復の終了時に、前記マネージャが、生成された依存関係に基づいて、前記カーネルを前記APUに再割り当てすることを含む、
請求項4の方法。
【請求項6】
前記マネージャが、前記反復中における割り当てられたAPU上での前記カーネルの実行時間に基づいて、前記カーネルのサブセットを別のAPUに再割り当てすることによって、前記カーネルの実行をロードバランシングすることを含む、
請求項1の方法。
【請求項7】
前記割り当てることは、前記複数のカーネルの一部を第2のアクセラレータ常駐マネージャに割り当てることであって、前記第2のマネージャが、前記複数のカーネルの一部を前記第2のマネージャによって管理される第2のアクセラレータの1つ以上のAPUに割り当てる、ことを含み、
前記起動することは、前記第2のマネージャが、前記複数のカーネルの一部をそれらの割り当てられたAPU上で起動し、前記それぞれの依存関係に従って反復実行することを含む、
請求項1の方法。
【請求項8】
前記マネージャ及び前記第2のマネージャは、互いにリモートであり、
前記マネージャが前記起動すること及び前記第2のマネージャが前記起動することは、前記表現のそれぞれのコピーに含まれる依存関係に従って実行され、前記表現のコピーを照合することを含む、
請求項7の方法。
【請求項9】
前記表現は、グラフであり、
前記グラフの各ノードは、前記複数のカーネルのうち何れかのカーネルと、前記APUのうち何れかのAPUと、に関連付けられており、
前記グラフの各エッジは、前記それぞれの依存関係のうち何れかの依存関係を表す、
請求項1の方法。
【請求項10】
前記グラフの各ノードは、前記ノードに関連付けられたカーネルの実行時間を測定するタイマに関連付けられている、
請求項9の方法。
【請求項11】
アクセラレータ常駐マネージャによるランタイム管理のためのシステムであって、
少なくとも1つのプロセッサと、
命令を記憶するメモリと、を備え、
前記命令は、前記少なくとも1つのプロセッサによって実行されると、
前記マネージャが、複数のカーネル及びそれぞれの依存関係を含むアプリケーションの処理フローの表現を受信することと、
前記マネージャが、前記複数のカーネルを、前記マネージャによって管理されるアクセラレータの1つ以上のAPUに割り当てることと、
前記マネージャが、前記複数のカーネルをそれらの割り当てられたAPU上で起動し、前記それぞれの依存関係に従って反復実行することと、
を前記システムに行わせる、
システム。
【請求項12】
前記命令は、
前記反復中に第1のカーネルの第2のカーネルに対する依存関係が終了した場合に、前記第2のカーネルが、前記第1のカーネルにメッセージを送信することであって、前記メッセージは、終了した依存関係を示す、ことと、
前記反復の終了時に、前記マネージャが、終了した依存関係に基づいて、前記カーネルを前記APUに再割り当てすることと、
を前記システムに行わせる、
請求項11のシステム。
【請求項13】
前記命令は、
前記反復中に第1のカーネルの第2のカーネルに対する依存関係が生成された場合に、前記第2のカーネルから完了メッセージを受信するために前記第1のカーネルによって使用されるメールボックスを前記第2のカーネルが生成することと、
前記反復の終了時に、前記マネージャが、生成された依存関係に基づいて、前記カーネルを前記APUに再割り当てすることと、
を前記システムに行わせる、請求項11に記載のシステム。
【請求項14】
前記命令は、
前記マネージャが、前記反復中における割り当てられたAPU上での前記カーネルの実行時間に基づいて、前記カーネルのサブセットを別のAPUに再割り当てすることによって、前記カーネルの実行をロードバランシングすることを前記システムに行わせる、
請求項11のシステム。
【請求項15】
前記割り当てることは、前記複数のカーネルの一部を第2のアクセラレータ常駐マネージャに割り当てることであって、前記第2のマネージャが、前記複数のカーネルの一部を前記第2のマネージャによって管理される第2のアクセラレータの1つ以上のAPUに割り当てる、ことを含み、
前記起動することは、前記第2のマネージャが、前記複数のカーネルの一部をそれらの割り当てられたAPU上で起動し、前記それぞれの依存関係に従って反復実行することを含む、
請求項11のシステム。
【請求項16】
前記マネージャ及び前記第2のマネージャは、互いにリモートであり、
前記マネージャが前記起動すること及び前記第2のマネージャが前記起動することは、前記表現のそれぞれのコピーに含まれる依存関係に従って実行され、前記表現のコピーを照合することを含む、
請求項15のシステム。
【請求項17】
アクセラレータ常駐マネージャによるランタイム管理の方法を実行するために少なくとも1つのプロセッサによって実行可能な命令を備えるコンピュータ可読記憶媒体であって、
前記方法は、
前記マネージャが、複数のカーネル及びそれぞれの依存関係を含むアプリケーションの処理フローの表現を受信することと、
前記マネージャが、前記複数のカーネルを、前記マネージャによって管理される1つ以上のAPUに割り当てることと、
前記マネージャが、前記複数のカーネルをそれらの割り当てられたAPU上で起動し、前記それぞれの依存関係に従って反復実行することと、を含む、
コンピュータ可読記憶媒体。
【請求項18】
前記反復中に第1のカーネルの第2のカーネルに対する依存関係が終了した場合に、前記第2のカーネルが、前記第1のカーネルにメッセージを送信することであって、前記メッセージは、終了した依存関係を示す、ことと、
前記反復の終了時に、前記マネージャが、終了した依存関係に基づいて、前記カーネルを前記APUに再割り当てすることと、を含む、
請求項17のコンピュータ可読記憶媒体。
【請求項19】
前記反復中に第1のカーネルの第2のカーネルに対する依存関係が生成された場合に、前記第2のカーネルから完了メッセージを受信するために前記第1のカーネルによって使用されるメールボックスを前記第2のカーネルが生成することと、
前記反復の終了時に、前記マネージャが、生成された依存関係に基づいて、前記カーネルを前記APUに再割り当てすることと、を含む、
請求項17のコンピュータ可読記憶媒体。
【請求項20】
前記マネージャが、前記反復中における割り当てられたAPU上での前記カーネルの実行時間に基づいて、前記カーネルのサブセットを別のAPUに再割り当てすることによって、前記カーネルの実行をロードバランシングすることを含む、
請求項17のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
(関連出願の相互参照)
本願は、2021年11月11日に出願された米国特許出願第17/454,607号の利益を主張するものであり、その内容は、参照により本明細書に組み込まれる。
【背景技術】
【0002】
アクセラレーテッドプロセッシングユニット(Accelerated Processing Unit、APU)は、何千ものプロセス(計算タスク又はカーネル)を並列に効率的に実行するような設計により熟達している。典型的なアプリケーションは、逐次的に実行されなければならないプロセスと、並列化され得るプロセスと、を伴い得る。したがって、アプリケーションソフトウェアアーキテクチャは、クラスタによって与えられる高い性能を達成するために、中央処理装置(Central Processing Unit、CPU)上で実行するように設計され得る逐次部分と、APU又はAPUのクラスタを含むアクセラレータ上で実行するように設計され得る並列可能部分と、を含み得る。しかしながら、CPU上で実行されるプロセスがAPU上で実行される作業(カーネルの同期及び起動等)を管理するので、CPU-APU通信によってかなりのレイテンシが導入される。そのようなレイテンシは、小さい作業負荷を有する無数のカーネルがCPUによって管理される、強くスケーリング(strongly-scaled)された高性能コンピューティング(High Performance Computing、HPC)アプリケーションにとって特に重要である。そのような場合に、カーネルを同期及び起動する際にCPUによって費やされる時間は、カーネル自体の実行時間に匹敵するか又はそれを超え得る。更に、ランタイム中に発生するカーネル間の依存関係の変化は、同期方式を調整するためにCPUがランタイム動作を中断することを必要とするので、CPU-APU通信に関連するレイテンシに更に寄与し得る。CPU-APU通信に関連するレイテンシを低減するための技術が必要とされる。
【0003】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解が可能になる。
【図面の簡単な説明】
【0004】
【
図1A】例示的なデバイスのブロック図であり、これに基づいて、本開示の1つ以上の特徴を実装することができる。
【
図1B】
図1Aのデバイスによって使用可能な加速システムを示す例示的なシステムのブロック図であり、これに基づいて、本開示の1つ以上の特徴を実装することができる。
【
図2】アプリケーションランタイムの中央管理を示す例示的なシステムのブロック図であり、これに基づいて、本開示の1つ以上の特徴を実装することができる。
【
図3】例示的なグラフでありし、これに基づいて、本開示の1つ以上の特徴を実装することができる。
【
図4】アプリケーションランタイムの分散管理を示す例示的なシステムのブロック図であり、これに基づいて、本開示の1つ以上の特徴を実装することができる。
【
図5】ネットワーク境界をまたぐアプリケーションランタイムの分散管理を示す例示的なシステムのブロック図であり、これに基づいて、本開示の1つ以上の特徴を実装することができる。
【
図6】アクセラレータ常駐ランタイム管理のための例示的な方法のフローチャートであり、これに基づいて、本開示の1つ以上の特徴を実装することができる。
【発明を実施するための形態】
【0005】
HPCアプリケーションは、多くの場合、多数のデータ要素に対して独立して実行することができる並列化された計算から利益を得る。性能スケーリングは、APUの複数のクラスタを含むシステムによって達成することができ、そのクラスタ上でカーネルが並列に実行することができ、各カーネルが1つ以上のデータ要素に関して計算を実行することができる。そのようなレジームでは、レイテンシは、システムの様々な構成要素、例えば、ネットワークインターフェースコントローラ(network-interface controller、NIC)、CPU又はAPUによって増加し得る。多くの場合、これらの構成要素間の通信は、重要な性能制限である。
【0006】
CPUとアクセラレータ(例えば、APUの1つ以上のクラスタ)との間の通信によって寄与されるレイテンシを低減するシステム及び方法が本願において開示される。そのような通信は、アクセラレータ上のカーネルの実行を管理する際のCPUの役割によって必要とされる。本明細書では、アプリケーション実行フローの管理がアクセラレータ常駐マネージャによって実行される、すなわち、管理機能がそれぞれのアクセラレータに常駐するモジュールによって実行される技術について説明する。開示されたアクセラレータ常駐マネージャは、例えば、カーネル起動及び同期を制御し、ランタイム中にCPUの制御からアクセラレータを切り離す。
【0007】
アクセラレータ常駐マネージャによるランタイム管理のための方法が本明細書で開示される。本方法は、マネージャによって、複数のカーネル及びそれぞれの依存関係を含むアプリケーションの処理フローの表現を受信することと、マネージャによって、マネージャによって管理される1つ以上のAPUに複数のカーネルを割り当てることと、マネージャによって、複数のカーネルを、それらの割り当てられたAPU上で、それぞれの依存関係に従って反復において実行するように起動することと、を含む。
【0008】
アクセラレータ常駐マネージャによるランタイム管理のためのシステムも開示される。システムは、少なくとも1つのプロセッサと、命令を記憶するメモリと、を備える。命令は、少なくとも1つのプロセッサによって実行される場合に、システムに、マネージャによって、複数のカーネル及びそれぞれの依存関係を含むアプリケーションの処理フローの表現を受信することと、マネージャによって、マネージャによって管理される1つ以上のAPUに複数のカーネルを割り当てることと、マネージャによって、複数のカーネルを、それらの割り当てられたAPU上で、それぞれの依存関係に従って反復において実行するように起動することと、を行わせる。
【0009】
更に、アクセラレータ常駐マネージャによるランタイム管理のための方法を実行するために少なくとも1つのプロセッサによって実行可能な命令を備える非一時的なコンピュータ可読記憶媒体が本明細書で開示される。本方法は、マネージャによって、複数のカーネル及びそれぞれの依存関係を含むアプリケーションの処理フローの表現を受信することと、マネージャによって、マネージャによって管理される1つ以上のAPUに複数のカーネルを割り当てることと、マネージャによって、複数のカーネルを、それらの割り当てられたAPU上で、それぞれの依存関係に従って反復において実行するように起動することと、を含む。
【0010】
図1Aは、例示的なデバイス100Aのブロック図であり、これに基づいて、本開示の1つ以上の特徴を実装することができる。デバイス100Aは、例えば、コンピュータ、ゲーミングデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、又はタブレットコンピュータとすることができる。デバイス100Aは、プロセッサ102、APU106、メモリ104、ストレージ116、入力デバイス108、及び、出力デバイス110を含む。また、デバイス100Aは、入力ドライバ112及び出力ドライバ114を含み得る。一態様では、デバイス100Aは、
図1Aに示されていない追加の構成要素を含み得る。
【0011】
プロセッサ102は、CPU又はCPUの1つ以上のコアを含むことができる。APU106は、高度並列処理ユニット、グラフィックス処理ユニット(graphics processing unit、GPU)又はそれらの組み合わせを表すことができる。プロセッサ102及びAPU106は、同じダイ上又は別のダイ上に位置し得る。メモリ104は、プロセッサ102と同じダイ上に位置し得るか、又は、プロセッサ102とは別に位置し得る。メモリ104は、揮発性又は不揮発性メモリ(例えば、ランダムアクセスメモリ(random access memory、RAM)、ダイナミックRAM(dynamic random access memory、DRAM)、キャッシュ、又は、これらの組み合わせ)を含むことができる。
【0012】
ストレージ116は、固定又はリムーバブルストレージ(例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク、フラッシュドライブ)を含むことができる。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、生体認証スキャナ、又は、ネットワーク接続(例えば、無線IEEE802信号の受信のための無線ローカルエリアネットワークカード)等の1つ以上の入力デバイスを表すことができる。出力デバイス110は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上の光、アンテナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信のための無線ローカルエリアネットワークカード)等の1つ以上の出力デバイスを表すことができる。
【0013】
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、入力デバイス108からプロセッサ102への入力の受信を容易にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102から出力デバイス110への出力の送信を容易にする。一態様では、入力ドライバ112及び出力ドライバ114はオプションの構成要素であり、デバイス100Aは、入力ドライバ112及び出力ドライバ114が存在しない場合、同じ方式で動作することができる。
【0014】
APU106は、プロセッサ102から計算コマンド及びグラフィックスレンダリングコマンドを受け入れて、それらの計算及びグラフィックスレンダリングコマンドを処理し、及び/又は、ディスプレイ(出力デバイス110)に出力を提供するように構成され得る。以下で更に詳細に説明するように、APU106は、例えば、単一命令複数データ(single instruction multiple data、SIMD)パラダイムに従って計算を実行するように構成された1つ以上の並列処理ユニットを含むことができる。したがって、様々な機能が、本明細書では、APU106によって又はAPU106と併せて実行されるものとして説明されているが、様々な代替例では、APU106によって実行されるものとして説明される機能は、追加的又は代替的に、ホストプロセッサ(例えば、プロセッサ102)によって駆動されず、例えば、グラフィカル出力をディスプレイに提供するように構成することができる同様の能力を有する他のコンピューティングデバイスによって実行され得る。処理システムがSIMDパラダイムに従って処理タスクを実行することができるかどうかにかかわらず、処理システムは、本明細書で説明される機能を実行するように構成され得る。
【0015】
図1Bは、
図1Aのデバイスによって使用可能な加速システムを示す例示的なシステム100Bのブロック図であり、これに基づいて、本開示の1つ以上の特徴を実装することができる。
図1Bは、APU106上での処理タスクの実行を更に詳細に示す。プロセッサ102は、メモリ104内で、プロセッサ102による実行のための1つ以上のモジュールを維持することができる。モジュールは、オペレーティングシステム120、カーネルモードドライバ122、及び、アプリケーション126を含む。これらのモジュールは、プロセッサ102及びAPU106の動作の様々な特徴を制御することができる。例えば、オペレーティングシステム120は、システムコール、すなわち、アプリケーションプログラミングインターフェース(application programming interface、API)を提供することができ、これは、アプリケーション126によって採用され、ハードウェアと直接インターフェースすることができる。カーネルモードドライバ122は、例えば、プロセッサ102上で実行されるアプリケーション126にAPIを提供して、APU106の様々な機能にアクセスすることによって、APU106の動作を制御することができる。
【0016】
APU106は、並列処理又は逐次処理の何れか、及び、順序処理又は非順序処理の何れかを含む、グラフィックス動作及び非グラフィックス動作に関連するコマンドを実行することができる。APU106は、プロセッサ102から受信したコマンドに基づいて、ピクセル及び/又は幾何学計算を処理する動作(例えば、ディスプレイ(出力デバイス110)への画像のレンダリング)等のグラフィックスパイプライン動作を実行するために使用することができる。また、APU106は、プロセッサ102から受信したコマンドに基づいて、多次元データ、物理シミュレーション、計算流体力学又は他の計算タスクに関連する動作等のように、グラフィックス動作に関連しない処理動作を実行することができる。
【0017】
APU106は、WGP132.1~132.Mを含むことができ、各WGP、例えば132.1は、SIMDパラダイムに従って並列の方式で動作を実行することができる1つ以上のSIMDユニット、例えば138.1.1~138.1.Nを有することができる。SIMDパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有し、これにより、同じプログラムを、異なるデータで実行することができるものである。一例では、各SIMDユニット、例えば138.1.1は、64のレーン(すなわち、スレッド)を実行することができ、各レーンは、SIMDユニット内の他のレーンと同時に同じ命令を実行するが、その命令を異なるデータで実行する。レーンは、全てのレーンが所定の命令を実行する必要がない場合等に、予測でオフに切り替えることができる。また、予測は、分岐制御フローを有するプログラムを実行するために使用することができる。具体的には、条件付き分岐(又は制御フローが個々のレーンによって実行される計算に基づいている他の命令)を有するプログラムについては、現在実行されていない制御フローパスに対応するレーンの予測、及び、異なる制御フローパスのシリアル実行が、任意の制御フローを可能にする。一態様では、WGP132.1~132.Mの各々は、ローカルキャッシュを有することができる。別の態様では、複数のWGPがキャッシュを共有することができる。
【0018】
WGP、例えば132.1内の実行の基本的単位は、ワークアイテムである。通常、各ワークアイテムは、特定のレーンにおいて並列に実行され得るプログラムの単一のインスタンシエイションを表す。ワークアイテムは、単一のSIMD、例えば138.1.1上の「ウェーブフロント(wavefront)」(又は「ウェーブ」)として同時に実行され得る。1つ以上のウェーブは、ワークグループで実行されてもよく、各ウェーブは、同じプログラムを実行するように指定されたワークアイテムの集合体を含む。ワークグループは、ワークグループを構成するウェーブの各々を実行することによって実行される。また、ウェーブは、単一のSIMDユニット上で逐次実行され得るか、又は、異なるSIMDユニット138.1.1~138.1.N上で部分的に若しくは完全に並列に実行され得る。したがって、ウェーブは、単一のSIMDユニット、例えば、138.1.1上で同時に実行することができるワークアイテムの集合と考えることができる。したがって、プロセッサ102から受信されたコマンドが、プログラムが単一のSIMDユニット上で同時に実行させることができない程度に特定のプログラムが並列化されるべきであることを示す場合、そのプログラムは、2つ以上のSIMDユニット(例えば、138.1.1~138.1.N)上に並列化されるか、同じSIMDユニット(例えば、138.1.1)上で直列化されるか、又は、必要に応じて並列化と直列化との両方がされ得るウェーブに分けることができる。スケジューラ136は、異なるWGP132.1~132.M及びそれらのそれぞれのSIMDユニット上で様々なウェーブを開始することに関連する動作を実行するように構成され得る。
【0019】
WGP132.1~132.Mによって与えられる並列性は、例えば、ピクセル値に対する動作(例えば、フィルタ動作)、幾何学的データに対する動作(例えば、頂点変換)、及び、他のグラフィックス関連動作等のグラフィックス関連動作に好適である。例えば、プロセッサ102上で実行されるアプリケーション126は、APU106によって実行される計算を伴うことができる。アプリケーション126は、カーネルモードドライバ122によって提供されるAPIを使用して、処理コマンドをAPU106に発行することができる。次いで、処理コマンドは、スケジューラ136に提供される。スケジューラ136は、処理コマンドを、並列実行のためにWGP132.1~132.Mに割り当てられる計算タスクに変換する。例えば、スケジューラ136は、データ(例えば、画像の1024ピクセル)に対して実行される命令を含む処理コマンドを受信し得る。それに応じて、スケジューラ136は、データをグループ(例えば、各グループが64ピクセルの処理に必要なデータを含む)に分割し、1つ以上のWGPにおいてウェーブを開始することができ、各ウェーブは、データのグループ及びデータに対して実行する命令に関連付けられる。例えば、スケジューラ136は、1つ以上のWGP132のSIMD138において実行される16個のウェーブ(例えば、各々が64ピクセルの処理を担う)を開始することができる。
【0020】
図2は、アプリケーションランタイムの中央管理を示す例示的なシステム200のブロック図であり、これに基づいて、本開示の1つ以上の特徴を実装することができる。システム200は、アクセラレータ210と、メモリ250と、プロセッサ270と、を含む。アクセラレータ210は、マネージャ220と、APU-1 230及びAPU-2 240等の1つ以上のAPU(例えば、
図1BのAPU106)と、を含むことができる。プロセッサ270(例えば、
図1Aのプロセッサ102)は、マネージャ220によって公開されたAPIを利用して、アクセラレータ210によって実行されるアプリケーションの処理フローを定義する表現を開始することができる。
【0021】
アプリケーションの処理フローの表現は、アプリケーションのカーネル及びカーネル間の依存関係を定義するグラフ260(
図3によって更に説明されるように)によって表現され得る。そのようなグラフ260は、メモリ250に記憶され、そこからアクセスされ得る。表現が開始されると、マネージャ220は、各カーネルをアクセラレータ210のAPUに割り当てることができ、それらの割り当てられたAPU上のカーネルを起動して、表現によって定義された処理フローに従って1つ以上の反復において実行することができる。例えば、アプリケーションの処理フローの表現がグラフ260によって表現される場合にグラフが開始されると、マネージャ220は、アクセラレータ210のAPUの間でグラフをパーティショニングすることができ、その結果、1つのグラフのパーティションに関連付けられたカーネルが1つのAPU、例えば、APU-1 230に割り当てられ、別のグラフのパーティションに関連付けられたカーネルが別のAPU、例えば、APU-2 240に割り当てられる。次いで、マネージャ210は、グラフ260によって定義された依存関係に従って、それらの割り当てられたAPU上で実行するためにカーネルを起動することによって、グラフに従って、アプリケーションを実行することができる。マネージャ220は、専用ハードウェア(例えば、組み込みRISCプロセッサ、特殊目的APU)によって実装することができるか、APU230、240のうち何れかで実行されるプロセスによって実装することができるか、又は、ハードウェアとソフトウェアとの組み合わせによって実装することができる。
【0022】
図3は、例示的なグラフ300を示し、これに基づいて、本開示の1つ以上の特徴を実装することができる。グラフ300のノード310は、カーネルを表す。各カーネルは、例えば、メモリ250に記憶された1つ以上のデータ要素を処理するタスクである。したがって、各カーネルは、入力データを受信し、出力データ(例えば、入力データの処理されたバージョン)を配信する。グラフ300のエッジ320は、データ依存関係を表す。例えば、エッジ320.1.2は、カーネルB310.2がカーネルA310.1に依存することを表し、これは、カーネルB310.2がカーネルA310.1によって生成されるデータに対して動作しなければならない(又はカーネルB310.2への入力がカーネルA310.1の出力である)ことを意味し、したがって、カーネルB310.2は、カーネルA310.1が最初にそれ自体の実行を完了するまで実行を開始することができない。
【0023】
したがって、マネージャ220は、グラフ300を使用して、グラフによって記述されるカーネルの依存関係に基づいて、何れの順序でカーネルが起動されるかを判定することができる。追加的に、各ノードは、マネージャによって判定されたパーティションに従ってAPUに割り当てられる。
図3に示すように、グラフ300は、グラフ境界350によって2つのサブグラフ330及び340にパーティショニングされてもよく、グラフ境界350の左側のサブグラフ330は、
図2のAPU-1 230によって実行されるように割り当てられてもよく、グラフ境界350の右側のサブグラフ340は、
図2のAPU-2 240によって実行されるように割り当てられてもよい。
【0024】
したがって、カーネル及びそれらの割り当てられたAPUに加えて、グラフのノード、例えば310.1~310.8は、マネージャ220によってアプリケーションランタイムを管理する際に役立ち得る他のデータエンティティをそれらに関連付けることができる。各ノードは、それに関連付けられた1つ以上のメールボックス(例えば、メモリ250に記憶される)を有することができる。ノードにおけるメールボックスは、他のカーネルがその実行を完了したことを示すメッセージ(すなわち、完了メッセージ)を残すために、(ノードに関連付けられたカーネルが依存する)別のカーネルによって使用されてもよく、したがって、ノードの関連付けられたカーネルは、より多くの他のカーネルがそれらの実行を完了するのを未だ待機していない限り、それ自体の実行を開始することができる。例えば、ノード310.7は、それに関連付けられた2つのメールボックスを有することができ、一方はカーネルB(ノード310.2に関連付けられた)によって使用され、他方はカーネルC(ノード310.3に関連付けられた)によって使用される。カーネルB及びカーネルCは、それらのそれぞれの実行を完了すると、その旨のメッセージをノード310.7のそれらのそれぞれのメールボックスに送信する。これらのメールボックスを待機しているタスクGは、これらの完了メッセージを受信すると、それ自体の実行を開始することができる。
【0025】
一態様では、グラフ300の各ノードは、その関連するカーネルが有する依存関係の数と同じ数のメールボックスに関連付けられ得る。カーネルがそれの割り当てられたAPU上で動作を完了する場合に、カーネルは、カーネルが登録されているメールボックスに完了メッセージを送信することができる。これらは、そのカーネルのノードから分岐するノードに位置するそのカーネル専用であるメールボックスである。ノードにおける全てのメールボックスが、これらのメールボックスに登録されたカーネルの完了を示すメッセージを受信すると、そのノードに関連付けられたカーネルは、それが割り当てられたAPUによって直ちに実行され得る。一方、マネージャは、例えば、グラフのメールボックスのステータスに基づいて、グラフを非同期的に更新することができる。
【0026】
一態様では、グラフは、ランタイムにおけるアプリケーションの反復の実行中に依存関係が変化するにつれて、その構造を動的に変化させることができる。例えば、グラフは、物理的問題を解くように設計されたカーネルを表してもよく、各カーネルは、ある特定の物理的エンティティに関連付けられたデータを処理することに関与し、カーネル間の依存関係は、対応するエンティティ間の空間距離に由来する。したがって、第1のカーネルがエンティティQに関連付けられたデータを処理するように設計され、第2のカーネルがエンティティPに関連付けられたデータを処理するように設計される場合、エンティティQ及びPが互いに空間的に近接している限り、第2のカーネルは第1のカーネルに依存し得る。しかしながら、エンティティQ及びPが互いから離れる場合(物理システムのシミュレーションにおいて起こり得るように)、第1のカーネルと第2のカーネルとの間の依存関係は終了する。そのような場合に、ランタイム動作を中断することなくそのような変化に応答するために、第1のカーネルは、第2のカーネルがもはや第1のカーネルに依存しないことを示すメッセージを、第2のカーネルに関連付けられたノードにおけるその専用メールボックスに送信することができる。その結果、第2のカーネルは(未だ完了していない他のカーネルに依存しない限り)、その割り当てられたAPU上でそれ自体の実行を開始することができる。したがって、例えば、(カーネルGに関連付けられた)ノード310.7におけるメールボックスは、(ノード310.3に関連付けられた)カーネルCからメッセージを受信するように登録され得る。そのメールボックスは、カーネルCが完了したことを示すメッセージ(すなわち、完了メッセージ)、又は、カーネルCへの依存関係がもはや存在しないことを示すメッセージ(すなわち、終了メッセージ)を受信し得る。両方のメッセージは、カーネルGの実行を促すことができる。メールボックス通信を介して直接的に依存関係を破壊(又は終了)することとは無関係に、マネージャ220は、グラフのメールボックスに記憶されたメッセージに基づいて、依存関係の変化を反映するようにグラフを非同期的に更新することができる。例えば、反復の終了時に、マネージャは、依存関係の変化に基づいてグラフのパーティション(APUへのカーネルの割り当て)を更新することができる。
【0027】
依存関係の変更は、上述したように、既存の依存関係の終了をもたらすことに加えて、新しい依存関係を生成することもできる。グラフが物理的問題を解くように設計されたカーネルを表し、これらのカーネル間の依存関係が対応するエンティティ間の空間距離に由来する、上述した例を検討する。第1のカーネルがエンティティQに関連付けられたデータを処理するように設計され、第2のカーネルがエンティティPに関連付けられたデータを処理するように設計されている場合、エンティティQ及びPが互いに空間的に離れている限り、第2のカーネルは第1のカーネルに依存しない可能性がある。しかしながら、エンティティQ及びPが互いに近づく場合(物理システムのシミュレーションにおいて起こり得るように)、第1のカーネルと第2のカーネルとの間の依存関係が生成され得る。そのような場合に、ランタイム動作を中断することなくそのような変化に応答するために、第1のカーネルは、第2のカーネルのノードに関連付けられる、それに登録された(又は専用の)新しいメールボックスを生成することができる。次いで、その動作が完了すると、第1のカーネルは、そのメールボックスに完了メッセージを残すことができる。したがって、例えば、ノード310.7のカーネルGは、カーネルDに依存しないように示されている。しかしながら、依存関係が作成される場合に、カーネルDは、それ専用の新しいメールボックスをノード310.7に生成することができる。カーネルDは、その動作を完了すると、その新しいメールボックスに完了メッセージを送信することができる。その完了メッセージを受信すると、カーネルGは(カーネルB及びCからの完了メッセージの受信をまだ待機していない限り)それ自体の実行を開始することができる。上述したように、メールボックス通信を介して直接新しい依存関係を生成することとは無関係に、マネージャ220は、グラフのメールボックスに記憶されたメッセージに基づいて、依存関係の変化を反映するようにグラフを非同期的に更新することができる。例えば、反復の終了時に、マネージャは、依存関係の変化に基づいてグラフのパーティション(APUへのカーネルの割り当て)を更新することができる。
【0028】
別の態様では、マネージャ220は、各APUがそれに割り当てられたカーネルを完了するのにかかる時間を監視することによって、各反復の終了時にロードバランシングを実行することができ、次いで、マネージャ220は、全てのAPUにわたるロードバランスを改善するためにグラフを再パーティショニングすることができる。したがって、グラフのノード、例えば310.1~310.8は、それらに関連付けられたタイマを有することができる。ノードのタイマは、ノードに関連付けられたカーネルの実行時間を測定するように設定され得る。したがって、グラフ300の各反復の終了時に、マネージャ220は、タイマの読取値の分析に基づいてその動作をロードバランシングするためにグラフを再パーティショニングすることができる。例えば、実行反復の終了時に、タイマの読取値の分析に基づいて、マネージャ220は、APU-1 230がそれ自体の割り当てられたサブグラフ330に関連付けられたカーネルを実行するのに要した時間と比較して、APU-2 240がそれ自体の割り当てられたサブグラフ340に関連付けられたカーネルを実行するのにより多くの時間を要したことを見出すことができる。そのような場合に、マネージャ220は、例えばノード310.5がサブグラフ330の一部になり、したがって、ノード310.5に関連付けられたカーネルEがグラフの次の反復においてAPU-1 230によって実行されるようにグラフを再パーティショニングすることによってグラフをロードバランシングすることを決定し得る。
【0029】
図4は、アプリケーションランタイムの分散管理を示す例示的なシステム400のブロック図であり、これに基づいて、本開示の1つ以上の特徴を実装することができる。システム400は、複数のアクセラレータ410.1~410.M、共有メモリ440、及び、プロセッサ460を含むことができる。各アクセラレータ、例えば、410.1は、マネージャ420.1及びAPUのクラスタ430.1.1~430.1.Nを含むことができる。プロセッサ460は、システム400によって実行されるアプリケーションの処理フローを定義するグラフ450を開始するために、何れかのマネージャによって公開されたAPIを利用することができる。開始されたグラフ450は、システム400のマネージャ420.1~420.M、APU430.1.1~430.1.N、430.2.1~430.2.N、430.M.1~430.M.Nのクラスタ、及び、プロセッサ460によってアクセス可能な共有メモリ440に記憶され得る。グラフ450が開始されると、何れかのマネージャ、例えば420.1は、アクセラレータ410.1~410.Mの間でグラフをパーティショニングすることを担うことができ、その結果、アクセラレータレベルサブグラフが得られる。次いで、各アクセラレータのグラフマネージャ、例えば420.mは、グラフのそのそれぞれの部分(そのそれぞれのアクセラレータレベルサブグラフ)をAPUレベルサブグラフに更にパーティショニングすることに進むことができる。各そのようなAPUレベルサブグラフ(又はサブグラフ)は、アクセラレータ420.mの1つのAPUに割り当てられる。グラフ450のサブグラフへのパーティショニングが完了すると、各マネージャ420.mは、グラフ450のその部分によって定義される依存関係に従って、それぞれのAPU420.m.1~420.m.N内のカーネルを起動することによって、1つ以上の反復においてグラフ450のそれ自体の部分の実行から開始することができる。各マネージャ420.mは、専用ハードウェア(例えば、組み込みRISCプロセッサ、特殊目的APU)によって実装することができるか、又は、そのアクセラレータの何れかのAPU上で実行されるプロセスによって実装され得る。一態様では、各マネージャ420.mは、
図2のマネージャ220が
図2のグラフ260に関して動作することができる方式と同様に、それ自体のアクセラレータレベルサブグラフに関して動作することができる。
【0030】
したがって、上述したように、グラフ450の各ノードは、アクセラレータレベルサブグラフ内のAPUレベルサブグラフであるサブグラフの一部である。グラフ450は、ノードが接続された構造を有する。各ノードは、
図3を参照して説明したように、カーネル、割り当てられたAPU、メールボックス又はタイマ等のように、それに関連付けられたデータ又はオブジェクトエンティティを有することができる。したがって、グラフ450内の各ノードは、例えば共有メモリ440に記憶されたデータを処理するために実行され得るカーネルに関連付けられる。グラフ450内の各エッジは、2つのノードを接続し、
図3を参照して説明したように、2つのノードに関連付けられたカーネル間の依存関係を表す。更に、グラフ450内の各ノードは、それに関連付けられた(例えば、メモリ440に記憶された)1つ以上のメールボックスを有することができる。第1のカーネルに関連付けられた第1のノードにおけるメールボックスは、第2のカーネルが完了したことを示す完了メッセージを残すために(第1のカーネルが依存する)第2のカーネルによって使用されてもよく、したがって、第1のカーネルは、他のカーネルがそれらの実行を完了するのを未だ待っていない限り、それ自体の実行を開始することができる。
【0031】
図3を参照すると、サブグラフ330は、アクセラレータ410.1のアクセラレータレベルサブグラフ内のAPUレベルサブグラフとすることができ、サブグラフ340は、アクセラレータ410.2のアクセラレータレベルサブグラフ内のAPUレベルサブグラフとすることができる。この場合に、マネージャ420.1は、それ自体のアクセラレータレベルサブグラフに従ってカーネルB、F、Gの実行を管理するように構成されてもよく、マネージャ420.2は、それ自体のアクセラレータレベルサブグラフに従ってカーネルA、C、D、E、Hの動作を管理するように構成され得る。一態様では、ノード310.7は、カーネルGが待機している、それに関連付けられた2つのメールボックスを有し、一方はノード310.2に登録され、他方はノード310.3に登録される。(ノード310.2の)カーネルBは、その実行を完了する場合に、それに登録されているノード310.7のメールボックスに完了メッセージを残す。同様に、(ノード310.3の)カーネルCは、その実行を完了する場合に、それに登録されているノード310.7のメールボックスに完了メッセージを残す。これら2つの完了メッセージが受信されると、(ノード310.7の)カーネルGは、それ自体の実行を直ちに開始することができる。独立して、マネージャ420.1及び420.2は、現在の動作状態を反映するように、グラフのそれらのそれぞれの部分(それぞれのアクセラレータレベルサブグラフ)を更新することができる。
【0032】
前で言及されるように、グラフ450は、アプリケーションランタイム中に依存関係が変化すると、その構造を動的に変化させることができる。例えば、カーネルCの実行中に、カーネルは、カーネルGがもはやそれに依存しないことを認識し得るか、又は、それを通知され得る。そのような場合に、カーネルCは、その旨のメッセージを、ノード310.7においてそれに登録されたメールボックスに送信することができる。次いで、2つのメールボックス(一方は、カーネルBに登録され、他方は、カーネルCに登録されている)を現在待機しているカーネルGは、カーネルBがその実行を完了すると、それ自体の実行を開始することができる。一方、カーネルCの実行中に、カーネルは、カーネルFがそれに依存するようになるべきであることを認識し得るか、又は、通知され得る。そのような場合に、カーネルCは、それに登録される新しいメールボックスをノード310.6に生成することができる。次いで、カーネルFは、カーネルBに登録されたメールボックスに加えて、その新しいメールボックスを待機し、カーネルB及びカーネルCの両方から完了メッセージを受信した場合にのみ、カーネルFはそれ自体の実行を開始する。独立して、マネージャは、依存関係の変化を反映するようにグラフのそれらのそれぞれの部分を更新することができる。例えば、サブグラフ330を監視するマネージャ420.1は、ノード310.3とノード310.6との間にエッジを追加して、カーネルFがカーネルCに依存していることを反映することができ、サブグラフ340を監視するマネージャ420.2は、ノード310.3とノード310.7との間のエッジを取り出して、カーネルGがカーネルCにもはや依存していないことを反映することができる。
【0033】
マネージャ420.1~420.Mは、各々が管理しているグラフの部分に関して独立して、又は、全てのグラフ450に関して協働して、ロードバランシングを実行することができる。これは、それぞれのカーネルの実行時間を測定するように設定されたグラフ450のノードに関連付けられたタイマを監視することによって行われ得る。したがって、グラフ450の各実行反復の終了時に、タイマの読取値の分析に基づいて、各マネージャは、その動作のロードバランシングを行うために、それ自体のアクセラレータレベルサブグラフを再パーティショニングし得る。例えば、
図3を参照して、グラフ300が1つのマネージャ420.1によって管理されると仮定すると、サブグラフ330に関連付けられたカーネルはAPU-1 430.1.1に割り当てられ、サブグラフ340に関連付けられたカーネルはAPU-2 430.1.2に割り当てられる。反復の終了時に、タイマの読取値の分析に基づいて、マネージャ420.1は、APU-1がその割り当てられたサブグラフ330に関連付けられたカーネルを実行するのに要した時間と比較して、APU-2がその割り当てられたサブグラフ340に関連付けられたカーネルを実行するのにより多くの時間を要したことを見出すことができる。そのような場合に、マネージャ420.1は、グラフを再パーティショニングすることによってグラフのロードバランシングをすることを決定し得る。例えば、再パーティショニングは、ノード310.5がサブグラフ330の一部になることをもたらしてもよく、したがって、ノード310.5に関連付けられたカーネルは、グラフの次の実行反復においてAPU-1 230によって実行される。
【0034】
一態様では、ロードバランシング動作は、マネージャ間で協働して行うことができる(場合によっては、上述したように独立したロードバランシングが行われた後で)。例えば、各反復の終了時に、各マネージャは、(グラフのそれ自体の部分内の)その制御における各APUの可用性の尺度を計算することができ、(例えば、可用性尺度を共有メモリ440に記憶することによって)これらのAPUの可用性尺度を他のマネージャに公開することができる。可用性の尺度は、反復中にAPUがアイドル状態であった時間とすることができる。例えば、反復の終了時に、マネージャ420.1及び420.2は、それぞれ、APU430.1.1~430.1.N及び430.2.1~430.2.Nの可用性尺度を計算することができる。APU430.1.1の可用性尺度が十分に高く、APU430.2.1~430.2.Nの可用性尺度が十分に低い場合、マネージャ420.1は、グラフ450をロックし、次いで、グラフを再パーティショニングして、APU430.2.1~430.2.N上で実行される1つ以上のカーネルの割り当てを利用可能なAPU430.1.1に変化させることができる。マネージャ420.2は、マネージャ420.1がその再パーティショニングを実行する許可を有するかどうかを示すことができる。グラフ450を協働的にロードバランシングするために、他のメカニズムが使用され得る。一態様では、グラフのそれ自体の部分におけるAPUの可用性尺度のマネージャによる計算は、グラフのそれ自体の部分の独立したロードバランシングの後に(及びそれを考慮しながら)行われ得る。
【0035】
図5は、ネットワーク境界をまたぐアプリケーションランタイムの分散管理を示す例示的なシステム500のブロック図であり、これに基づいて、本開示の1つ以上の特徴を実装することができる。システム500は、
図4のシステム400の複数のアクセラレータ410.1~410.Mとそれらの動作が同様の複数のアクセラレータ510.1~510.Mを含むことができる。しかしながら、システム500では、アクセラレータ510.1~510.Mは互いにリモートにあり、各々がそれぞれのメモリ510.1~510.M及びそれらにローカルなそれぞれのプロセッサ560.1~560.Mに接続される。図示されるように、アクセラレータ510.1~510.M、メモリ510.1~510.M、及び、プロセッサ560.1~560.Mは、ネットワーク570を介して通信可能に接続される。何れかのプロセッサ、例えば560.1は、何れかのマネージャ、例えば520.1によって公開されたAPIを利用して、システム500によって実行されるアプリケーションの処理フローを定義するグラフを開始することができる。次いで、開始されたグラフは、アクセラレータ510によってアクセス可能なメモリ540.1に記憶されてもよく、そのグラフのコピーを、ネットワーク570を介して送信して、アクセラレータ510.1~560.2.Mによってアクセス可能なメモリ560~510.2.Mに記憶することができる。
【0036】
一態様では、システム500の動作は、システム400の動作と同様である。しかしながら、システム500は、そのコピー550.1~550.Mによってグラフの一貫した表現を維持しなければならない。例えば、各反復の終了時に、グラフ550.1~550.Mのコピーは、それらのそれぞれのマネージャ520.1~520.Mによって更新することができ(例えば、各マネージャは、それが所有するグラフの一部を更新することができる)、次いで、コピーを照合(reconciling)することができる。一態様では、1つのプロセッサ、例えば、560.1が、グラフの照合を担うことができる。そのために、プロセッサ560.2~560.Mは、グラフのそれらのコピーをプロセッサ560.1に送信するように構成されてもよく、このプロセッサは、コピー550.1~550.Mを照合し、それぞれのメモリ540.1~540.Mに記憶される1つの照合されたグラフを返送する。システム500では、互いにリモートにあるAPUによるこのような通信(例えば、1つのAPU上で動作するカーネルが、別のAPU上で動作するカーネルに関連付けられたメールボックスにメッセージを送信するとき)は、レイテンシに寄与し得る。しかしながら、そのようなレイテンシは、ネットワーク570の帯域幅によって制限され、CPU-APU通信によって寄与されるレイテンシとは区別される。
【0037】
図6は、アクセラレータ常駐ランタイム管理のための例示的な方法600のフローチャートであり、これに基づいて、本開示の1つ以上の特徴を実装することができる。方法600は、アクセラレータ常駐マネージャ、例えば、
図2のマネージャ220、又は、
図4のマネージャ420.1~420.M若しくは
図5のマネージャ520.1~520.Mのうち何れかによって実行され得る。方法600は、ステップ610において、カーネル及びそれらのそれぞれの依存関係を含む、アプリケーションの処理フローの表現を受信することができる。上述したように、表現は、グラフ、例えば、
図3のグラフ300によって表現され得る。ステップ620において、方法600は、マネージャによって管理されるAPUにカーネルを割り当てることができる。次いで、ステップ630において、方法600は、カーネルのそれぞれの依存関係に従って反復において実行するために、それらの割り当てられたAPU上でカーネルを起動することができる。反復中に、依存関係に変化(依存関係の終了又は新しい依存関係の生成の何れか)がある場合、方法600は、ステップ640において、影響を受けたカーネルに通知することができる。例えば、第1のカーネルの第2のカーネルへの依存関係が反復中に終了した場合に、終了された依存関係を示すメッセージが第2のカーネルによって第1のカーネルに送信することができる。そのメッセージを受信すると、第1のカーネルは、直ちに実行を開始することができる(他のカーネルが完了するのを未だ待機していない限り)。別の例では、第1のカーネルの第2のカーネルへの新しい依存関係が反復中に生成された場合、第1のカーネルによって待機されるメールボックスを第2のカーネルによって生成することができる。第2のカーネルがそれ自体の実行を完了すると、そのメールボックスに完了メッセージを送信する。反復の終了時に、ステップ650において、方法600は、表現を更新することができる。例えば、反復中に依存関係の変化(依存関係の終了又は新しい依存関係の生成の何れか)が生じた場合、方法600は、その変化に基づいてAPUへのカーネルの割り当てを変更することができる。したがって、グラフ表現300において、方法600は、グラフを再パーティショニングし、サブグラフ330、340の構造を変化させ、事実上、カーネルA~H310の割り当てのうちいくつかをAPU-1 230又はAPU-2 240の何れかに変更することができる。
【0038】
本明細書の開示に基づいて、多くの変形が可能であることを理解されたい。特徴及び要素が特定の組み合わせで上述されているが、各特徴又は要素は、他の特徴及び要素を用いずに単独で、又は、他の特徴及び要素を用いて若しくは用いずに様々な組み合わせで使用することができる。
【0039】
提供される方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実施することができる。好適なプロセッサとしては、例として、一般目的プロセッサ、特殊目的プロセッサ、従来型プロセッサ、デジタル信号プロセッサ(digital signal processor、DSP)、複数のマイクロプロセッサ、DSPコアと関連付けられた1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(Application Specific Integrated Circuit、ASIC)、フィールドプログラマブルゲートアレイ(Field Programmable Gate Array、FPGA)回路、任意の他のタイプの集積回路(integrated circuit、IC)、及び/又は、状態マシンが挙げられる。そのようなプロセッサは、処理されたハードウェア記述言語(hardware description language、HDL)命令及びネットリストを含む他の中間データ(コンピュータ可読媒体に記憶させることが可能な命令)の結果を使用して製造プロセスを構成することによって製造することができる。そのような処理の結果はマスクワークとすることができ、次いで、このマスクワークを半導体製造プロセスにおいて使用して、実施形態の態様を実装するプロセッサを製造する。
【0040】
本明細書に提供される方法又はフローチャートは、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれるコンピュータプログラム、ソフトウェア又はファームウェアにおいて実装することができる。非一時的なコンピュータ可読記憶媒体の例としては、読み取り専用メモリ(read only memory、ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、磁気光学媒体、並びに、CD-ROMディスク及びデジタル多用途ディスク(digital versatile disk、DVD)等の光学媒体が挙げられる。
【国際調査報告】