JP2021525420A - ハードウェアアクセラレーションのためのハードウェアリソースの埋込みスケジューリング - Google Patents

ハードウェアアクセラレーションのためのハードウェアリソースの埋込みスケジューリング Download PDF

Info

Publication number
JP2021525420A
JP2021525420A JP2020565488A JP2020565488A JP2021525420A JP 2021525420 A JP2021525420 A JP 2021525420A JP 2020565488 A JP2020565488 A JP 2020565488A JP 2020565488 A JP2020565488 A JP 2020565488A JP 2021525420 A JP2021525420 A JP 2021525420A
Authority
JP
Japan
Prior art keywords
command
controller
slot
calculation unit
host processor
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.)
Granted
Application number
JP2020565488A
Other languages
English (en)
Other versions
JPWO2019226355A5 (ja
JP7313381B2 (ja
Inventor
ソーレン ティー. ソー,
ソーレン ティー. ソー,
イドリス アイ. タルワラ,
イドリス アイ. タルワラ,
ウマン パレク,
ウマン パレク,
ソナル サンタン,
ソナル サンタン,
ヘム シー. ニーマ,
ヘム シー. ニーマ,
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xilinx Inc
Original Assignee
Xilinx 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 Xilinx Inc filed Critical Xilinx Inc
Publication of JP2021525420A publication Critical patent/JP2021525420A/ja
Publication of JPWO2019226355A5 publication Critical patent/JPWO2019226355A5/ja
Application granted granted Critical
Publication of JP7313381B2 publication Critical patent/JP7313381B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • 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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

集積回路(IC)[150]が、ハードウェアアクセラレーションのためのスケジューラ[160]を含み得る。スケジューラは、複数のスロットを有し、IC[150]の算出ユニットによる実行のためにホストプロセッサ[105]からオフロードされたコマンドを記憶するように構成されたコマンド待ち行列[165]を含み得る。スケジューラ[160]は、コマンド待ち行列[165]のスロットに対応するビットロケーションを有するステータスレジスタ[170]を含み得る。スケジューラ[160]は、コマンド待ち行列[165]とステータスレジスタ[170]とに結合されたコントローラ[175]をも含み得る。コントローラ[175]は、コマンド待ち行列[165]のスロットに記憶されたコマンドを実行し、コマンド待ち行列[165]からのどのコマンドを実行し終えたかを指示するためにステータスレジスタ[170]のビットロケーションを更新するように、IC[150]の算出ユニットをスケジュールするように構成され得る。【選択図】図1

Description

本開示は、集積回路(IC)に関し、より詳細には、ハードウェアアクセラレーションを促進するためのハードウェアリソースの埋込みスケジューリング(embedded scheduling)に関する。
異種コンピューティングプラットフォーム(HCP:heterogeneous computing platform)は、ホストプロセッサと1つまたは複数の他の異なる処理デバイスとを含むデータ処理システムのタイプを指す。ホストプロセッサは、一般的に、中央処理ユニット(CPU)として実装される。ホストプロセッサは、インターフェース回路を通して他の処理デバイスに結合される。他の処理デバイスは、アーキテクチャ上、ホストプロセッサとは異なる。さらに、処理デバイスは、ホストプロセッサからオフロードされた動作を実施することと、動作の結果をホストプロセッサにとって利用可能にすることとを行うことが可能である。
いくつかのHCP内では、処理デバイスは、プログラムコードを実行するように適応される。そのような処理デバイスは、一般的に、ホストとは異なる命令セットアーキテクチャを有する。これらの他のプロセッサの例は、限定はしないが、(1つまたは複数の)グラフィックス処理ユニット(GPU)、(1つまたは複数の)デジタル信号プロセッサ(DSP)などを含む。
他のHCPでは、ホストプロセッサからオフロードされた動作を実施する処理デバイスは、プログラムコードをハードウェアアクセラレートする(hardware accelerate)ように適応されたデバイスを含む。これらの処理デバイスは、オフロードされた動作を実装する回路を含む。回路は、プロセッサ(たとえば、CPU)によって実行されたとき、オフロードされた動作を実施することが可能であるプログラムコードと機能的に等価である。ハードウェアアクセラレーションが可能な処理デバイスの例は、フィールドプログラマブルゲートアレイ(FPGA)、部分的にプログラム可能な集積回路(IC)、特定用途向けIC(ASIC)など、プログラマブルICを含む。明らかに、HCPは、1つまたは複数がプログラムコードを実行するように適応され、1つまたは複数の他のものがプログラムコードをハードウェアアクセラレートするように適応された、処理デバイスの組合せを含み得る。
ホストプロセッサは、処理デバイスに動作をオフロードし、処理デバイスから結果を取り出すことの責任を負う。処理デバイスとの間で必要なデータを効率的に移動するホストプロセッサの能力は、HCPの全体的効率および性能に著しく影響を及ぼすことがある。
1つまたは複数の実施形態は、ハードウェアアクセラレーションのためのスケジューラを含む集積回路(IC)を対象とする。スケジューラは、複数のスロットを有し、ICの算出ユニット(compute unit)による実行のためにホストプロセッサからオフロードされたコマンドを記憶するように構成されたコマンド待ち行列を含み得る。スケジューラは、コマンド待ち行列のスロットに対応するビットロケーションを有するステータスレジスタを含み得る。スケジューラは、コマンド待ち行列とステータスレジスタとに結合されたコントローラをも含み得る。コントローラは、コマンド待ち行列のスロットに記憶されたコマンドを実行し、コマンド待ち行列からのどのコマンドを実行し終えたかを指示するためにステータスレジスタのビットロケーションを更新するように、ICの算出ユニットをスケジュールするように構成され得る。
いくつかの実施形態では、ステータスレジスタは、読み取られたことに応答して、そこに記憶されたコンテンツを消去するように構成され得る。
いくつかの実施形態では、スケジューラは、通信リンクを介してホストプロセッサと通信し、コマンド待ち行列の利用可能なスロット内にコマンドを記憶するように構成されたインターフェースをさらに含み得る。
いくつかの実施形態では、コマンド待ち行列に記憶されたコマンドは、それぞれのコマンドを実行するために算出ユニットによって使用される引数を含み得る。
いくつかの実施形態では、各コマンドは、算出ユニットのうちのどれがコマンドを実行することができるかを指定し得る。
いくつかの実施形態では、コントローラは、コマンドを、算出ユニットに、算出ユニットのうちのどれが各それぞれのコマンドを実行することができ、アイドルであるかに基づいて割り当てるように構成され得る。
いくつかの実施形態では、コントローラは、プログラムコードを実行するように構成されたプロセッサであり得る。
いくつかの実施形態では、プロセッサは、集積回路のプログラマブル回路を使用して実装されるソフトプロセッサであり得る。
いくつかの実施形態では、コントローラは、選択されたコマンドがその上で稼働することができる選択された算出ユニットがアイドルであると決定し、実行のために、選択されたコマンドの引数を選択された算出ユニットに転送し、選択された算出ユニットを開始するように構成され得る。
いくつかの実施形態では、コントローラは、選択されたコマンドを実行し終えたと決定したことに応答して、選択されたコマンドを含むスロットに対応する、ステータスレジスタ中のビットロケーションに書き込み、スロットがフリーであることを指示するように構成され得る。
1つまたは複数の実施形態は、ICを使用してハードウェアアクセラレーションのためにコマンドをスケジュールする方法を対象とする。本方法は、IC内のコマンド待ち行列のスロット内に、ホストプロセッサから受信されたコマンドを記憶することであって、コマンドが、ICの算出ユニットによる実行のためにホストプロセッサからオフロードされる、コマンドを記憶することを含み得る。本方法は、コントローラを使用して、コマンド待ち行列のスロットに記憶されたコマンドを実行するように算出ユニットをスケジュールすることを含み得る。本方法は、コマンドを実行し終えたと決定したことに応答して、IC内のステータスレジスタ中のビットロケーションを書き込むことであって、ビットロケーションが、コマンドを記憶するコマンド待ち行列のスロットに対応する、ビットロケーションを書き込むことを含み得る。
いくつかの実施形態では、本方法は、コントローラ内に、コマンド待ち行列のスロットに記憶されたコマンドのヘッダのローカルにキャッシュされたコピーを維持することと、ヘッダのローカルにキャッシュされたコピー中の値を更新することによってスロットのステータスを更新することとをさらに含み得る。
いくつかの実施形態では、本方法は、ステータスレジスタが読み取られたことに応答して、ステータスレジスタに記憶されたコンテンツを消去することをさらに含み得る。
いくつかの実施形態では、コマンド待ち行列に記憶されたコマンドは、コマンドを実行するために算出ユニットによって使用され得る引数を含む。
いくつかの実施形態では、本方法は、各コマンドから、算出ユニットのうちのどれがコマンドを実行することができるかを決定することをさらに含み得る。
いくつかの実施形態では、本方法は、コマンドを、算出ユニットに、算出ユニットのうちのどれが各それぞれのコマンドを実行することができ、アイドルであるかに基づいて割り当てることをさらに含み得る。
いくつかの実施形態では、本方法は、選択されたコマンドがその上で稼働することができる選択された算出ユニットがアイドルであると決定することと、実行のために、選択されたコマンドの引数を選択された算出ユニットに転送することと、選択された算出ユニットを開始することとをさらに含み得る。
いくつかの実施形態では、ビットロケーションを書き込むことは、スロットがフリーであることを指示し得る。
いくつかの実施形態では、本方法は、選択された算出ユニットから割込みを受信することによって、選択された算出ユニットが選択されたコマンドを実行し終えたと決定することをさらに含み得る。
いくつかの実施形態では、本方法は、選択された算出ユニットをポーリングすることによって、選択された算出ユニットが選択されたコマンドを実行し終えたと決定することをさらに含み得る。
本発明の概要セクションは、いくつかの概念を導入するために提供されるにすぎず、請求される主題の重要な、または本質的な特徴を識別するために提供されるものではない。本発明の構成の他の特徴は、添付の図面および以下の発明を実施するための形態から明らかになろう。
本発明の構成は、添付の図面において例として示される。しかしながら、図面は、本発明の構成を、図示される特定の実装形態のみに限定するものと解釈されるべきではない。様々な態様および利点が、以下の発明を実施するための形態を検討し、図面を参照すると明らかになろう。
本開示内で説明される1つまたは複数の実施形態とともに使用するための異種コンピューティングプラットフォームの一例を示す図である。 ホストプロセッサからコマンドをオフロードする例示的な方法を示す図である。 スケジューラによって実施される、ホストプロセッサからのコマンドを処理する方法を示す図である。 スケジューラによって実施される、ホストプロセッサからのコマンドを処理する別の例示的な方法を示す図である。 算出ユニットのステータスを決定する例示的な方法を示す図である。 集積回路(IC)のための例示的なアーキテクチャを示す図である。
本開示は、新規の特徴を定義する特許請求の範囲で締めくくるが、本開示内で説明される様々な特徴は、図面とともにその説明を考慮することにより、より良く理解されると考えられる。本明細書で説明される(1つまたは複数の)プロセス、(1つまたは複数の)機械、(1つまたは複数の)製造物およびその任意の変形形態は、例示のために提供される。本開示内で説明される特定の構造的および機能的詳細は、限定するものとして解釈されるべきではなく、単に、特許請求の範囲のための基礎として、およびほぼすべての適切に詳細な構造において説明される特徴を様々に採用するように当業者に教示するための代表的基礎として解釈されるべきである。さらに、本開示内で使用される用語および句は、限定するものではなく、むしろ、説明される特徴の理解可能な説明を提供するものである。
本開示は、集積回路(IC)に関し、より詳細には、ハードウェアアクセラレーションを促進するためのハードウェアリソースの埋込みスケジューリングに関する。本開示内で説明される本発明の構成によれば、ハードウェアスケジューラが、ハードウェアアクセラレーションのために使用されるIC内に埋め込まれる。ハードウェアスケジューラは、異種コンピューティングプラットフォーム(HCP)のホストプロセッサからの動作の、IC内のハードウェアリソースへのオフローディングを支援する。本開示内では、ハードウェアリソースは、「算出ユニット」と呼ばれる。ハードウェアスケジューラは、算出ユニットの動作を管理し、追跡することが可能である。
従来のHCPでは、スケジューリングは、ホストプロセッサによって実行されるソフトウェアプロセスとして実装される。ホストプロセッサは、動作を実施するために算出ユニットがいつ利用可能になるかを決定するために、ICの個々の算出ユニットを継続的にポーリングするというタスクを与えられる。算出ユニットのポーリングは、かなりの量のホストプロセッサ時間を消費する。さらに、スケジューラはホストプロセッサにおいて実行するので、ホストプロセッサは、ICにコマンドを送る前に、算出ユニットが利用可能になるまで待たなければならない。ホストプロセッサは、コマンドを実行するために算出ユニットが利用可能になったと決定したことに応答してのみ、コマンドを送る。したがって、算出ユニットが利用可能になる時間と、算出ユニットがコマンドに対する実行を始めることが可能になる時間との間に、遅延が生じる。この遅延は、算出ユニットによって必要とされるデータを含むコマンドを、ホストプロセッサから算出ユニットを含むICに転送するのに必要な時間を含む。
本明細書で説明される本発明の構成によれば、ハードウェアスケジューラは、算出ユニット(たとえば、ホストプロセッサからオフロードされた実際の動作を実施するハードウェアリソース)を含む同じIC中で実装される。ハードウェアスケジューラは、IC内の算出ユニットの利用可能性を追跡することが可能である。ハードウェアスケジューラは、ホストプロセッサから送られたコマンド(たとえば、動作)を受信することも可能である。ハードウェアスケジューラは、算出ユニットが(1つまたは複数の)コマンドを実行するために利用可能になるような時間まで、コマンド待ち行列にコマンドを記憶することが可能である。したがって、ホストプロセッサは、利用可能な算出ユニットについて継続的にポーリングする必要なしに、および/またはICにコマンドを送る前に算出ユニットが利用可能になるのを待つ必要なしに、コマンドを送り、他のタスクを続けることが可能である。
コマンドがハードウェアスケジューラ内で待ち行列に入れられ、算出ユニットが利用可能になると、算出ユニットへのコマンドの転送は、ホストプロセッサ関与を必要としない。ハードウェアスケジューラは、算出ユニットにコマンドを転送する。ハードウェアスケジューラと算出ユニットとは同じIC中にあるので、算出ユニットにコマンドを転送するための時間は比較的小さい。したがって、算出ユニットが利用可能になる時間と、算出ユニットがコマンドの実行を始める時間との間の遅延が低減される。
ハードウェアスケジューラは、さらに、コマンドがいつ実行し終えたかを決定することが可能である。コマンドが実行し終えたと決定したことに応答して、ハードウェアスケジューラは、ホストプロセッサに通知することが可能である。たとえば、ハードウェアスケジューラは、コマンドが実行を終えたと決定したことに応答して、ハードウェアスケジューラ自体内に含まれるステータスレジスタに書き込むことが可能である。ステータスレジスタは、コマンドのステータスと、実行を終えた特定のコマンドとを確認するために、ホストプロセッサによって読み取られ得る。ステータスレジスタの使用は、ホストプロセッサが、ICの算出ユニットの各々を個々に管理することとは対照的に「コマンド」レベルで動作することを可能にする。
図を参照しながら、本発明の構成のさらなる態様が以下でより詳細に説明される。例示を単純および明快にするために、図に示されている要素は、必ずしも一定の縮尺で描かれているとは限らない。たとえば、要素のうちのいくつかの寸法は、明快のために、他の要素に対して誇張され得る。さらに、適切と見なされる場合、対応する、類似する、または同様の特徴を指示するために、参照番号が図の間で繰り返される。
図1は、異種コンピューティングプラットフォーム(HCP)100の一例を示す。図1の例では、HCP100は、ホストシステム102と、ハードウェアアクセラレーションデバイスとして使用されるIC150とを含む。
ホストシステム102は、コンピュータまたはサーバなど、データ処理システムとして実装され得る。ホストシステム102は、インターフェース回路115を通してメモリ110および1つまたは複数の入出力(I/O)デバイスに結合されたホストプロセッサ105を含む。ホストシステム102は、メモリ110内にコンピュータ可読命令(プログラムコード)を記憶することが可能である。メモリ110は、コンピュータ可読記憶媒体の一例である。ホストプロセッサ105は、インターフェース回路115を介してメモリ110からアクセスされるプログラムコードを実行することが可能である。
メモリ110は、たとえば、ローカルメモリおよびバルク記憶デバイス(bulk storage device)など、1つまたは複数の物理メモリデバイスを含み得る。ローカルメモリは、概してプログラムコードの実際の実行中に使用される(1つまたは複数の)非永続的メモリデバイスを指す。ローカルメモリの例は、ランダムアクセスメモリ(RAM)、および/または、プログラムコードの実行中のプロセッサによる使用のために好適である様々なタイプのRAM(たとえば、ダイナミックRAMまたは「DRAM」あるいはスタティックRAMまたは「SRAM」)のいずれかを含む。バルク記憶デバイスは、永続的データ記憶デバイスを指す。バルク記憶デバイスの例は、限定はしないが、ハードディスクドライブ(HDD)、ソリッドステートドライブ(SSD)、フラッシュメモリ、読取り専用メモリ(ROM)、消去可能プログラマブル読取り専用メモリ(EPROM)、電気的消去可能プログラマブル読取り専用メモリ(EEPROM)、または他の好適なメモリを含む。ホストシステム102は、プログラムコードが実行中にバルク記憶デバイスから取り出されなければならない回数を低減するために少なくともあるプログラムコードの一時的記憶を行う1つまたは複数のキャッシュメモリ(図示せず)をも含み得る。
インターフェース回路115の例は、限定はしないが、システムバスと入出力(I/O)バスとを含む。インターフェース回路115は、様々なバスアーキテクチャのいずれかを使用して実装され得る。バスアーキテクチャの例は、限定はしないが、拡張業界標準アーキテクチャ(EISA)バス、アクセラレーテッドグラフィックスポート(AGP)、ビデオエレクトロニクス規格協会(VESA)ローカルバス、ユニバーサルシリアルバス(USB)、および周辺構成要素相互接続エクスプレス(PCIe)バスを含み得る。
I/Oデバイス120は、直接、または介在するI/Oコントローラを通してのいずれかで、ホストシステム102、たとえば、インターフェース回路115に結合され得る。I/Oデバイス120の例は、限定はしないが、キーボード、ディスプレイデバイス、ポインティングデバイス、1つまたは複数の通信ポート、およびネットワークアダプタを含む。ネットワークアダプタは、ホストシステム102が、介在するプライベートまたは公衆ネットワークを通して他のシステム、コンピュータシステム、リモートプリンタ、および/またはリモート記憶デバイスに結合されるようになることを可能にする回路を指す。モデム、ケーブルモデム、イーサネットカード、およびワイヤレストランシーバが、ホストシステム102とともに使用され得る異なるタイプのネットワークアダプタの例である。
1つまたは複数の実施形態では、メモリ110は、ホストプロセッサ105によって実行され得るオペレーティングシステム(図示せず)および1つまたは複数のアプリケーション(図示せず)を記憶する。ランタイムライブラリも、ホストプロセッサ105によって実行され得る。1つまたは複数の実施形態では、ランタイムライブラリは、ホストプロセッサ105によって実行される(1つまたは複数の)アプリケーションとリンクされるか、またはさもなければ、それと一体化され得る。ランタイムライブラリは、IC150と通信するために使用される機能を含む。
ホストシステム102は、実装されるデバイスおよび/またはシステムの特定のタイプに応じて、図示された構成要素よりも少数の構成要素、または図1に示されていない追加の構成要素を含み得る。さらに、含まれる特定のオペレーティングシステム、(1つまたは複数の)アプリケーション、および/またはI/Oデバイスは、システムタイプに基づいて変動し得る。さらに、例示的な構成要素のうちの1つまたは複数は、別の構成要素に組み込まれるか、またはさもなければ、別の構成要素の一部分を形成し得る。たとえば、プロセッサが、少なくともあるメモリを含み得る。ホストシステム102は、図1のアーキテクチャまたはそれと同様のアーキテクチャを使用して各々実装される単一のコンピュータあるいは複数のネットワーク化されたまたは相互接続されたコンピュータを実装するために使用され得る。
IC150は、通信リンク125を介してホストシステム102に通信可能にリンクされる。たとえば、IC150は、ホストシステム102内に含まれ得る回路板に結合され得る。1つまたは複数の実施形態では、通信リンク125はPCIeリンクである。ただし、通信リンク125は様々な異なる接続および/または通信プロトコルのうちのいずれかを使用して実装され得ることと、提供された例は限定として意図されていないこととを諒解されたい。
IC150は、通信リンク125を介してホストシステム102と通信することが可能であるインターフェース155を含む。特定の実施形態では、インターフェース155は、ダイレクトメモリアクセス(DMA)回路を含むPCIeインターフェースである。インターフェース155のDMA部分は、メモリコントローラ185を介してコマンド待ち行列165、ステータスレジスタ170、および/またはメモリ130など、1つまたは複数のメモリを読み取り、および/またはそれに書き込むことが可能であり、それにより、ホストシステム102が、そのようなメモリを読み取り、および/またはそれに書き込むことを可能にする。
さらに、スケジューラ160が、コマンド待ち行列165と、ステータスレジスタ170と、コントローラ175とを含み得る。別々に示されているが、1つまたは複数の他の実施形態では、インターフェース155はスケジューラ160の一部と見なされ得る。
コマンド待ち行列165は、メモリとして実装され得る。たとえば、コマンド待ち行列165は、ランダムアクセスメモリ(RAM)として実装され得る。1つまたは複数の実施形態では、コマンド待ち行列165は、IC150内に1つまたは複数のブロックRAM(BRAM)として実装される。コマンド待ち行列165は、(たとえば、ランタイムライブラリを実行する際に)ホストプロセッサ105によって書き込まれ、コントローラ175によって読み取られ得る。コマンド待ち行列165は、「スロット」と呼ばれる固定サイズの複数の領域に区分され得る。各スロットは、ホストプロセッサ105からのコマンド(たとえば、1つのコマンド)を記憶することが可能である。
特定の実施形態では、各スロットは同じサイズである。一態様では、スロットのサイズは、スケジューラ160によってハンドリングされることになる最も大きいコマンドのサイズが知られているので、スケジューラ160を含む回路設計のコンパイル時間において構成され得る。スロットは、スケジューラ160によってハンドリングされる最も大きいコマンドを記憶するようにサイズ決定され得る。1つまたは複数の他の実施形態では、スロットのサイズは、ホストプロセッサ105によって実行されるランタイムライブラリによって構成され得る。いずれの場合も、ホストプロセッサ105は、コマンド待ち行列165の利用可能なスロットに新しいコマンドを書き込むことが可能である。
ステータスレジスタ170は、メモリとして実装され得る。ステータスレジスタ170は、コマンド待ち行列165中に含まれているスロットの数よりも大きいかまたはそれに等しい数のビットを含むようにサイズ決定され得る。したがって、ステータスレジスタ170の各ビット位置は、コマンド待ち行列165のスロットに対応し得る。ステータスレジスタ中のビット位置は、対応するスロットに記憶されたコマンドが実行を終えたかどうかを指示する。たとえば、ステータスレジスタ170中のビット位置「X」に書き込まれた「1」は、コマンド待ち行列165のスロット「X」に記憶されたコマンドが実行を完了したことを指示する。ホストプロセッサ105は、ランタイムライブラリの実行によって、コマンド待ち行列165からの、いずれかのコマンドが実行し終えたかどうか、および/またはどのコマンドが実行し終えたかを決定するために、コマンド待ち行列165中のビットを読み取ることが可能である。
コントローラ175は、コマンド待ち行列165内のスロット(およびそこに記憶されたコマンド)のステータスを追跡することと、算出ユニット180のステータスを追跡することと、コマンド待ち行列165からのコマンドが実行を終えたことを指示するためにステータスレジスタ170に書き込むこととを行うことが可能である。1つまたは複数の実施形態では、コントローラ175は、IC150中に埋め込まれ、プログラムコードを実行することが可能であるプロセッサとして実装される。特定の実施形態では、プロセッサは、ハードワイヤードである。他の実施形態では、プロセッサは、IC150のプログラマブル回路を使用して実装される「ソフトプロセッサ」である。コントローラ175は、コントローラ175に本明細書で説明される様々な動作を実施させるファームウェアを実行し得る。
算出ユニット180は、ハードウェアアクセラレーションのために使用される。算出ユニット180は、ホストシステム102から、より詳細にはホストプロセッサ105からオフロードされた動作を実施するために使用され得る。図1の例では、算出ユニット180は、コントローラ175に結合される。コントローラ175は、コマンド待ち行列165からコマンドを読み取ることと、そのコマンドを算出ユニット180のうちの利用可能なものに提供することとを行うことが可能である。1つまたは複数の実施形態では、コントローラ175は、各それぞれの算出ユニット180がビジーであるのかアイドルであるのかを決定するために、算出ユニット180をポーリングすることが可能である。1つまたは複数の他の実施形態では、算出ユニット180は、算出ユニットがコマンドを実行し終えたことを指示するために、コントローラ175への割込みを生成することが可能である。
1つまたは複数の実施形態では、コントローラ175は、オンチップ相互接続(図示せず)を通して算出ユニット180に結合される。インターフェース155も、オンチップ相互接続(図示せず)を介してコマンド待ち行列165に、およびステータスレジスタ170に結合され得る。オンチップ相互接続の一例は、アドバンストマイクロコントローラバスアーキテクチャ(AMBA:Advanced Microcontroller Bus Architecture)拡張可能インターフェース(AXI:AMBA eXtensible Interface)バスである。AMBA AXIバスは、回路ブロックおよび/またはシステムの間にオンチップ接続を確立する際に使用するための埋込みマイクロコントローラバスインターフェースである。AXIは、インターフェースの例示的な例として提供され、本開示内で説明される実施形態の限定として意図されていない。コントローラ175と算出ユニット180とを結合するために使用されるインターフェースの他の例は、限定はしないが、他のタイプのバス、ネットワークオンチップ(NoC)、クロスバー、または他のタイプのスイッチを含み得る。
メモリ130は、メモリコントローラ185を介して算出ユニット180および/またはコントローラ175によってアクセスされ(たとえば、読み取られ、および/または書き込まれ)得るオフチップメモリとして含まれ得る。1つまたは複数の実施形態では、ホストプロセッサ105も、メモリコントローラ185を介してメモリ130にアクセス(たとえば、メモリ130を読み取り、および/またはメモリ130を書き込み)得る。メモリ130は、IC150が結合される回路板に結合され得る。したがって、特定の実施形態では、算出ユニット180は、実行されたコマンドの結果をメモリ130に記憶し得る。ホストプロセッサ105は、次いで、メモリ130から結果を取り出し得る。
説明と例示の容易さとのために、「オープンコンピューティング言語(Open Computing Language)」または「OpenCL(商標)」という専門用語が、本出願全体にわたって使用される。HCPをサポートする様々な異なるフレームワークおよび/または言語のうちのいずれかが使用され得ることを諒解されたい。したがって、本発明の構成は、OpenCLに限定されるものではない。むしろ、本開示内で説明される実施形態は、様々な好適なおよび異なるHCPフレームワークのうちのいずれかとともに使用され得る。本開示内で説明される実施形態とともに使用され得る他のHCPおよび/またはハードウェアアクセラレーションフレームワークの例は、限定はしないが、オープンマルチプロセシング(Open Multi−Processing)(OpenMP(登録商標))およびCUDA(登録商標)を含む。
図2は、図1に関して説明されたHCP100のホストプロセッサ105によって実施されるコマンドをオフロードする例示的な方法200を示す。方法200は、HCP100が動作している状態において始まり得る。ホストプロセッサ105は、少なくとも部分的に、IC150およびその中に含まれているスケジューラ160と通信するための機能を提供するランタイムライブラリの実行を通して、図2を参照しながら説明される動作を実施することが可能である。1つまたは複数の実施形態では、ホストプロセッサ105は、ランタイムライブラリを実行する際に、専用コマンドスレッドを実行する。ホストプロセッサ105は、コマンドスレッドを実行する際に、図2で説明される動作を実施することが可能である。
ブロック205において、ホストプロセッサは、カーネルイベントが受信されたかどうかを決定することが可能である。カーネルイベントは、ホストプロセッサによって実行されるアプリケーションから受信され得、ハードウェアアクセラレータへの機能のオフローディングを要求する。カーネルイベントが受信された場合、方法200はブロック210に進む。カーネルイベントが受信されなかった場合、方法200はブロック205をループし続け、カーネルイベントの発生を待つ。
たとえば、ホストプロセッサは、カーネル呼出しに関連する各ワークグループについてスケジューラのコマンド待ち行列にコマンドを書き込むことが可能である。別個のカーネル呼出し(たとえば、カーネルイベント)が、並行して稼働することが可能である。ホストプロセッサは、実行されるべきより多くのワークグループがあるかどうか、またはすべてのワークグループがその特定のカーネルイベントについてスケジュールされたかどうかを決定するために、各カーネルイベントを検査することが可能である。
ブロック210において、ホストプロセッサは、カーネルイベントについてスケジュールされるべきそれ以上のワークグループがあるかどうかを決定することが可能である。ホストプロセッサは、たとえば、カーネルイベントによって表される、実施されるべき機能を、1つまたは複数のワークグループに区分することが可能である。処理されるべき1つまたは複数のワークグループが残っている場合、方法200はブロック215に進む。処理されるべきさらなるワークグループが残っていない場合、方法200はブロック240に進む。
概して、ホストプロセッサは、機能が、実行されているホストプロセッサアプリケーションに従って実行される準備ができたときに直ちに、そのような機能をスケジュールすることが可能である。説明されるように、ホストプロセッサは、算出ユニットが準備ができているかどうかを検査するためにポーリングを実施する必要がない。同様に、ホストプロセッサは、コンピューティングユニットを開始することを担当しない。
ブロック215において、ホストプロセッサは、コマンド待ち行列中のスロットを取得するために、スケジューラのステータスレジスタを読み取ることが可能である。述べられたように、ステータスレジスタ中の各ビットがコマンド待ち行列中のスロットに対応する。したがって、読み取られたときに「1」の値を有するステータスレジスタのビット位置は、ビット位置に対応するコマンド待ち行列のスロットに記憶されたコマンドが実行を完了したことを指示する。したがって、そのスロットは、フリーであるか、または、ホストプロセッサから新しいコマンドを受信するために利用可能である。
ブロック220において、ホストプロセッサは、コマンド待ち行列中のスロットが利用可能であるかどうかを決定する。たとえば、ホストプロセッサがステータスレジスタから1つまたは複数の「1」値を読み取った場合、ステータスレジスタから読み取られた「1」値の数に等しい数の、コマンド待ち行列内のスロットが利用可能である。さらに、ホストプロセッサは、読み取られた「1」値のビット位置に基づいて、コマンド待ち行列のどのスロットが利用可能であるかを知る。コマンド待ち行列中のスロットが利用可能である場合、方法200はブロック225に進む。ホストプロセッサが、ステータスレジスタを読み取った後に、コマンド待ち行列中のどのスロットも利用可能でない(たとえば、ステータスレジスタがすべて「0」値を含んでいる)と決定した場合、方法200は、処理を続けるためにブロック205にループバックし得る。ホストプロセッサは、ループし、コマンド待ち行列内のスロットを取得することを試み続けて、受信されたイベントを処理し得る。特定の実施形態では、コマンド待ち行列は、算出ユニットよりも多くのスロットを含み得る。この点について、算出ユニットの利用可能性は、コマンド待ち行列が、さらなるコマンドを記憶するための余地(たとえば、フリースロット)を有するかどうかに関して決定的でない。
1つまたは複数の実施形態では、ステータスレジスタは、読取り時に消去する(clear−on−read)ように実装される。したがって、スケジューラは、ホストプロセッサがステータスレジスタを読み取ることなしに複数回ステータスレジスタに書き込むことが可能である。ステータスレジスタが、たとえば、ホストプロセッサによって、読み取られたことに応答して、ステータスレジスタは、そこに記憶されたコンテンツを自動的に消去するように構成される。
ブロック225において、ホストプロセッサは、コマンド待ち行列内のフリースロットについてのアドレスを算出することが可能である。たとえば、ステータスレジスタを読み取った後に、ホストプロセッサは、コマンド待ち行列中のどのスロットが利用可能であるかを知る。各スロットが固定サイズを有するので、ホストプロセッサは、コマンドを記憶するためのコマンド待ち行列中の利用可能なスロットについてのアドレスを算出することが可能である。1つまたは複数の実施形態では、ホストプロセッサは、コマンドを記憶するためのコマンド待ち行列中の第1の利用可能なスロットを選定することが可能である。その場合、ホストプロセッサは、コマンド待ち行列中の第1の利用可能なスロットについてのアドレスを算出する。
ブロック230において、ホストプロセッサは、次のワークグループのためのコマンドを作成することが可能である。コマンドは、ヘッダと、1つまたは複数の引数とを含み得る。コマンドのヘッダは、コマンドのタイプを指示するオペコードと、ICの算出ユニットのうちのどれがコマンドを実行するために使用され得るかを指定するビットマスクとを含み得る。コマンドの引数は、レジスタマップと呼ばれるコマンドの一部分中に含まれ得る。コマンドの引数は、コマンドを実行する際に(1つまたは複数の)算出ユニットによって処理されるデータである。異なるタイプのコマンドは、様々なサイズの、異なる数の引数を含み得る。
1つまたは複数の実施形態では、ホストプロセッサは、各コマンド内に1つのワークグループを含む。1つまたは複数の他の実施形態では、ホストプロセッサは、コマンド中に2つ以上のワークグループを含めることが可能である。
例示的な非限定的な例として、コマンドの1つのタイプは、START_KERNELコマンドである。START_KERNELコマンドは、コマンドのタイプを指示する一意のオペコードを有する。各カーネルイベントに応答して、ホストプロセッサは、カーネルイベントの各ワークグループについてSTART_KERNELコマンドを生成することが可能である。述べられたように、他の実施形態では、START_KERNELコマンドは、2つ以上のワークグループを含み得る。START_KERNELコマンドは、オペコードと、どの算出ユニットがコマンドを実行するために使用され得るかを指示する算出ユニットビットマスクと、引数を含むレジスタマップ部分とを含む。引数は、所与のコマンドについて算出ユニットを開始するのに必要なデータを含む。
START_KERNELコマンド以外の他のコマンド(たとえば、オペコード)が使用され得ることを諒解されたい。そのような他のコマンドは、スケジューラによってサポートされる様々な異なる目的のためのものである。たとえば、ホストプロセッサは、算出ユニット実行進捗のデバッギングを実装し、IC内のハードウェアリソースに関する情報を取り出し、および/または電力監視を実施する、スケジューラが実行するためのコマンドを生成し得る。
ブロック235において、ホストプロセッサは、ブロック230において生成されたコマンドをスケジューラのコマンド待ち行列に書き込むことが可能である。たとえば、ホストプロセッサは、ブロック225において算出されたアドレスを有するコマンド待ち行列中のスロットに、通信リンクを介してコマンドを書き込むことが可能である。したがって、コマンドは、コマンド待ち行列上に効果的にプッシュされる。コマンド待ち行列が利用可能なスロットを有する限り、ホストプロセッサは、スロット内にコマンドを記憶し続け得る。
ブロック240において、処理すべきさらなるワークグループがない場合、ホストプロセッサは、カーネルイベントに関連するワークグループが実行を終えたかどうかを検査することが可能である。スケジューラは、実行を終えたコマンドを記憶するコマンド待ち行列のスロットに対応するステータスレジスタ中のビットロケーションに「1」の値を書き込むことによって、コマンドが実行を終えたことをホストプロセッサに通知することが可能である。
1つまたは複数の実施形態では、ホストプロセッサは、ステータスレジスタをポーリングすること(たとえば、ステータスレジスタを周期的に読み取ること)が可能である。1つまたは複数の他の実施形態では、スケジューラは、ステータスレジスタが書き込まれたことと、ホストプロセッサがステータスレジスタを読み取るべきであることとを指示するホストプロセッサへの割込みを生成することが可能である。
いずれの場合も、ブロック240において、ホストプロセッサは、カーネルイベントのためのワークグループのためのコマンドが実行し終えたかどうかを決定するために、ステータスレジスタを読み取ることが可能である。ホストプロセッサが、ワークグループが実行を完了しなかったと決定した場合、方法200は、処理を続けるためにブロック205にループバックし得る。ホストプロセッサが、ワークグループが実行を完了したと決定した場合、方法200はブロック245に進み得る。ブロック245において、ホストプロセッサは、カーネルイベントを完了しているものとしてマークすることが可能である。
1つまたは複数の実施形態では、ホストプロセッサがステータスレジスタを読み取るたびに、ホストプロセッサは、フリーであるスロットのステータスと完了したコマンドとを記憶することが可能である。この点について、図2は、例示のために提供される。説明される動作の特定の順序は、ホストプロセッサがスロットのステータスを記憶することが可能であるので、変動し得る。コマンド待ち行列のスロットは、スロットを最後に占有したコマンドが処理または実行されるまで、さらなるコマンドを記憶するために再使用され得ない。
図3は、図1に関して説明されたスケジューラ160によって実施される、ホストプロセッサからのコマンドを処理する方法300を示す。方法300は、ホストプロセッサからのコマンドを処理するためにスケジューラによって実施され得る動作の簡略化されたバージョンである。たとえば、図3は、図4を参照しながらより詳細に説明されるように使用され得るコマンド待ち行列中のスロットの異なるステータスの各々を示さない。
方法300は、ホストプロセッサがIC150にコマンドを送った状態において始まり得る。ブロック305において、コマンドが、ホストプロセッサから受信され、コマンド待ち行列のスロットに記憶される。たとえば、IC内のインターフェースは、通信リンクを介してホストプロセッサからコマンドを受信することが可能である。インターフェースは、ホストプロセッサによって指定されたコマンド待ち行列のアドレスにおいてコマンドを記憶する。説明されるように、ホストプロセッサは、コマンド待ち行列のスロットのうちのどれがフリーであるかを決定することと、フリースロットのアドレスへのコマンドの書込みを始動することとを行うことが可能である。
ブロック310において、スケジューラのコントローラは、新しいコマンドを検出することが可能である。1つまたは複数の実施形態では、コントローラは、コマンド待ち行列中のスロットの各々を検査することと、書き込まれたときにホストプロセッサからの新しいコマンドを検出することとを行うことが可能である。特定の実施形態では、コマンド待ち行列のスロットは、4つの異なる状態のうちのいずれかにおいて存在し得る。たとえば、スロットは、フリーであるか、新しいか、待ち行列中であるか、または稼働中であり得る。コントローラがスロット中の新しいコマンドを検出したとき、コントローラは、コマンド待ち行列からコマンドのヘッダを読み取ることと、コントローラ内でヘッダをローカルにキャッシュすることとを行うことが可能である。コントローラがスロットのステータス(たとえば、および/またはスロットに記憶されたコマンド)を変更したとき、コントローラは、処理時間を低減するために、コマンド待ち行列に記憶されたヘッダとは対照的に、ローカルにキャッシュされたヘッダを更新することが可能である。
ブロック315において、コントローラは、IC内の算出ユニットの利用可能性を追跡することが可能である。たとえば、コントローラは、算出ユニットがビジーであるのかアイドルであるのかを決定することが可能である。ブロック320において、コントローラは、コマンド待ち行列に記憶されたコマンドを実行するために、利用可能である、たとえばアイドルである算出ユニットをスケジュールすることが可能である。1つまたは複数の実施形態では、スケジュールされた算出ユニットは、アイドルであるものと、また、コマンドのヘッダ内に含まれるビットマスクに従ってコマンドを実行することを可能にされるものとである。ブロック325において、コントローラは、算出ユニットにコマンドを提供し、算出ユニットを開始することが可能である。ブロック325において、たとえば、コントローラは、算出ユニットにコマンドの引数を提供し、算出ユニットを開始する。
ブロック330において、コントローラが、算出ユニットがコマンドの実行を終えたと決定したことに応答して、コントローラは、実行し終えたコマンドが読み取られたコマンド待ち行列のスロットに対応するステータスレジスタ中のビットロケーションに「1」の値を書き込むことが可能である。たとえば、実行し終えたコマンドがコマンド待ち行列のスロット3に記憶された場合、コントローラは、コマンド待ち行列のスロット3に対応するステータスレジスタ中のビット位置に「1」の値を書き込む。ブロック335において、コントローラは、スロットのステータスをフリーに更新することが可能である。述べられたように、コントローラは、コマンドのヘッダのローカルにキャッシュされたコピーを更新することによって、スロットのステータスを更新し得る。
図4は、図1に関して説明されたスケジューラ160によって実施される、ホストプロセッサからのコマンドを処理する別の例示的な方法400を示す。方法400は、ホストプロセッサからのコマンドを処理するためにスケジューラによって実施され得る動作のより詳細なバージョンを示す。方法400は、コントローラがコマンド待ち行列のスロットをループすることが可能である一例を示す。方法400は、コントローラが、どのように、コマンド待ち行列のスロットを追跡し、それに応じてスロットのステータスを更新するかをさらに示す。
ブロック405において、コントローラは、処理すべきさらなるスロットがあるかどうかを決定することが可能である。処理されるべき1つまたは複数のスロットが残っていると決定したことに応答して、方法400はブロック410に進む。他の場合、方法400は終了し得る。方法400は、周期的にまたは特定のイベントに応答して、コマンド待ち行列のスロットを処理するために、コントローラによって新たに開始され得ることを諒解されたい。
ブロック410において、コントローラは、スロット、たとえば、現在選択されているスロットについてのヘッダのステータスを検査することが可能である。コントローラは、たとえば、スロットについてのキャッシュされたヘッダに記憶された値を読み取ることが可能である。コントローラによって検査された値は、スロットのステータスを、フリーであるか、新しいか、待ち行列中であるか、または稼働中であるものとして指示する。
スロットがフリーであることを指示する値に応答して、方法400はブロック415に進む。ブロック415において、コントローラは、スロットについてのヘッダをコマンド待ち行列から直接読み取ることが可能である。説明されるように、ヘッダを読み取る際に、コントローラは、スロットについてのヘッダの新しいローカルにキャッシュされたコピーを記憶することが可能である。ブロック420において、コントローラは、新しいコマンドがスロット中で受信されたかどうかを決定する。一例では、コントローラは、新しいコマンドがスロットに記憶されたかどうかを決定するために、新たにキャッシュされたヘッダを前のキャッシュされたヘッダと比較することが可能である。
新しいコマンドがコマンド待ち行列のスロットに記憶されたと決定したことに応答して、方法400はブロック425に進む。スロットが新しいコマンドを記憶していないと決定したことに応答して、方法400は、さらなるスロットを処理し続けるためにブロック405にループバックする。ブロック425において、コントローラは、スロットが新しいことを指示するように、ヘッダのローカルにキャッシュされたコピー中の値を設定することが可能である。
方法400は、コントローラが、(ブロック410における)スロットのステータスが新しいと決定した場合、ブロック425からまたはブロック410からブロック430に進み得る。ブロック430において、コントローラは、ICの算出ユニットのうちのどれがコマンドを実行するために使用され得るかを決定する。たとえば、コントローラ内でキャッシュされたコマンドのヘッダは、どの算出ユニットがコマンドを実行するために使用され得るかを指示する1つまたは複数のビットを含み得る。コントローラは、算出ユニットのうちのどれ(たとえば、特定の算出ユニットおよび算出ユニットの数)がコマンドを実行することが可能である(たとえば、コマンドを実行することを可能にされる)かを決定するために、これらのビットを読み取ることが可能である。
1つまたは複数の実施形態では、コマンドによって使用され得る算出ユニットは、コマンドのヘッダ内でビットマスクとして符号化され得る。ビットマスクは、コントローラによって維持される算出ユニットインデックスに対応する位置においてビットを含み得る(たとえば、ここで、各算出ユニットが、対応する算出ユニットインデックスによって識別され得る)。1つまたは複数の実施形態では、算出ユニットアドレスは、非連続であり、任意のアドレス範囲だけ分離され得る。したがって、コントローラは、算出ユニットインデックスを算出ユニットについてのアドレスにマッピングするルックアップテーブルで構成され得る。コントローラは、算出ユニットインデックスを、算出ユニットインデックスによって識別された算出ユニットについてのアドレスにマッピングするためにルックアップテーブルを使用することによって、ビットマスクによって指定された算出ユニットのアドレスを決定することが可能である。
1つまたは複数の他の実施形態では、算出ユニットアドレスは、連続であり得、固定アドレス範囲だけ分離され得る。その場合、コントローラは、コマンドのヘッダから読み取られたビットマスクに基づいて、コマンドを実行するために使用され得る算出ユニットの各々のアドレスを決定することが可能である。特定の実施形態では、固定アドレス範囲は4kであり得る。その場合、コントローラは、インデックスを12(4k)ビットだけ左側にシフトすることによって、算出ユニットアドレスを決定し得る。
ブロック435において、コントローラは、コマンドの(1つまたは複数の)引数のアドレスを決定する。特定の実施形態では、各算出ユニットは、引数が書き込まれ得るレジスタマップ(たとえば、レジスタマップインターフェース)を有する。算出ユニットのレジスタマップは、コマンドのペイロードに記憶されたコマンドのレジスタマップ部分との1対1の対応を有し得る。ブロック435において、コントローラは、コマンドのペイロード中のレジスタマップのロケーションにコマンド待ち行列にオフセットすることによって、コマンドのレジスタマップのアドレスを決定することが可能である。
ブロック440において、コントローラは、コマンドの引数のサイズを読み取ることが可能である。ブロック445において、コントローラは、スロットが待ち行列中であることを指示するようにヘッダ値を設定することが可能である。説明されるように、コントローラは、ヘッダのローカルにキャッシュされたコピー内のヘッダ値を更新することと、実際のコマンド待ち行列のスロット内のヘッダを、そのままにすることとを行うことが可能である。
方法400は、コントローラが、スロットのステータスが待ち行列中であると(ブロック410において)決定した場合、ブロック445からまたはブロック410からブロック450に進み得る。スロットの待ち行列中ステータスは、スロットが、算出ユニットによって実施される準備ができているコマンドを含むことを意味する。したがって、ブロック450において、コントローラは、ビットマスクに従ってコマンドを実行するために使用され得る(1つまたは複数の)算出ユニットのステータスを決定することが可能である。ビットマスクによって指定された(1つまたは複数の)算出ユニットがビジーであると決定したことに応答して、方法400は、現在のスロット内のコマンドが算出ユニットにオフロードされないことがあるので、コマンド待ち行列の別のスロットに対して処理するために、ブロック405にループバックする。(1つまたは複数の)算出ユニットのうちの1つまたは複数がアイドルであると決定したことに応答して、方法400はブロック455に進む。
ブロック455において、コントローラは、ブロック450において決定された算出ユニットに、現在処理されているスロットのコマンドの引数を書き込む。1つまたは複数の実施形態では、コントローラは、ブロック450において決定された算出ユニットのうちの第1の利用可能な算出ユニットを選択する。たとえば、コントローラは、コマンド待ち行列中のコマンドのレジスタマップ(たとえば、ペイロード)からの(1つまたは複数の)引数を、選択された算出ユニットのレジスタマップに転送するために、メモリコピーを実施することが可能である。コントローラは、たとえば、算出ユニットのアドレス(たとえば、ブロック430に関して説明されたように決定された算出ユニットのレジスタマップについてのベースアドレス)に書き込むことによって、コマンドのレジスタマップのコンテンツを算出ユニットにコピーし得る。
ブロック460において、算出ユニットにコマンドの引数を書き込んだ後に、コントローラは、算出ユニットを開始することが可能である。ブロック465において、コントローラは、稼働中のステータスを指示するように、コマンドのヘッダのローカルにキャッシュされたコピー内の値を設定することが可能である。稼働中ステータスは、コマンドが1つまたは複数の算出ユニットによって現在実行されていることを指示する。
方法400は、コントローラが、スロットのステータスが稼働中であると(ブロック410において)決定した場合、ブロック465からまたはブロック410からブロック470に進み得る。図4は、コントローラが、各算出ユニットがビジー状態にあるのかアイドル状態にあるのかを決定するために算出ユニットをポーリングするように構成された例示的な実装形態を示す。したがって、ブロック470において、コントローラは、算出ユニットのステータスを決定する。コントローラは、たとえば、算出ユニットがビジーであるのかアイドルであるのかを決定するために算出ユニットをポーリングする。応答して、算出ユニットは、現在のステータスをビジーまたはアイドルとして指示する信号を提供し得る。
算出ユニットがビジーであると決定したことに応答して、方法400は、コマンド待ち行列の次のスロットのステータスを検査するために、ブロック405にループバックする。算出ユニットがアイドルであると決定したことに応答して、コントローラは、ステータスレジスタを更新することによってホストプロセッサに通知することが可能である。コントローラは、たとえば、算出ユニットによって実行されたコマンドを含むスロットに対応するステータスレジスタのビット位置に「1」の値を書き込み得る。ブロック480において、コントローラは、フリーのステータスを指示するようにヘッダ値を設定する。説明されるように、コントローラは、実際のコマンド待ち行列内のヘッダとは対照的に、コマンドのヘッダのローカルにキャッシュされたコピー内のヘッダ値を更新することが可能である。
図5は、算出ユニットのステータスを決定する例示的な方法500を示す。1つまたは複数の実施形態では、算出ユニットは、ステータスの変化を指示するために、割込みを生成するように構成され得る。そのような場合、コントローラは、ステータスを決定するために算出ユニットをポーリングする必要がない。図5は、算出ユニットがそのような割込みを生成するように構成された実施形態においてコントローラによって実施され得る動作を示す。図5の方法500は、たとえば、算出ユニットが割込みを生成するように構成され、コントローラがステータスのために算出ユニットをポーリングしない実施形態において、図4の例におけるブロック470、475および480の代わりに使用され得る。
ブロック505において、コントローラは、算出ユニットからの割込みが受信されたかどうかを決定する。算出ユニットによって生成された割込みは、たとえば、算出ユニットが動作を完了し、アイドル状態に入ったことを指示し得る。割込みが算出ユニットから受信されなかったと決定したことに応答して、方法500は、算出ユニットからの受信された割込みについて検査し続けるために、ブロック505にループバックし得る。算出ユニットからの割込みが受信されたと決定したことに応答して、方法500はブロック510に進み得る。
ブロック510において、コントローラは、どの算出ユニットが割込みをトリガしたかを決定する。1つまたは複数の実施形態では、コントローラは、動作を完了した各算出ユニットについてのビットセットをもつビットマスクを受信する割込みハンドラルーチンを実行することが可能である。したがって、割込みハンドラルーチンは、1つのコールにおいて、ビットマスクにおいて指定された算出ユニットの各々を処理することが可能である。方法500は2つ以上の算出ユニットからの割込みを処理し得るが、例示のために、算出ユニットからの単一の割込みのハンドリングが説明される。
ブロック515において、コントローラは、ブロック505において割込みが検出された特定のライン上で割込みを無効にすることが可能である。ブロック520において、コントローラは、割込みを消去するために、割込みを生成した算出ユニット中のステータスレジスタを消去することが可能である。ブロック525において、コントローラは、算出ユニットによって実行されるコマンドを記憶するコマンド待ち行列のスロットが今フリーであることを指示するために、算出ユニットによって実行されるコマンドのヘッダのローカルにキャッシュされたコピー内のヘッダ値を更新することが可能である。
ブロック530において、コントローラは、コマンド待ち行列の対応するスロットに記憶されたコマンドが実行を終えたことを指示するために、ステータスレジスタ内の適切なビットを更新することが可能である。説明されるように、ステータスレジスタに書き込むことは、スケジューラが、コマンドが実行を完了したことをホストシステムに通知することを可能にする。ブロック535において、コントローラは、算出ユニットに対応するライン上で割込みを有効にすることが可能である。
本開示は、算出ユニットが、実行が完了したことをスケジューラに通知するために割込みを生成することが可能である実施形態(割込みモード)と、スケジューラが、実行が終わったかどうかを決定するために算出ユニットをポーリングすることが可能である実施形態(ポーリングモード)とを説明する。いくつかの場合には、算出ユニットポーリングは、スケジューラによって実装され得る。他の場合には、算出ユニットは、説明されたように割込みを生成するように構成され得る。割込みモードを使用するとき、算出ユニットをポーリングするためにホストプロセッサによって実行されるスレッドは、コマンド待ち行列が新しいコマンドを記憶するための余地を有するときのみ稼働する純粋なスケジューリングスレッドとして稼働するように構成され得る。
さらに他の場合には、ポーリングと、算出ユニットの生成した割込みとの両方が、組み合わせて使用され得る。たとえば、割込みハンドリングは、複数のカーネルが同時に稼働しているとき、ポーリングに勝る改善された性能を提供し得る。ポーリングモードでは、算出ユニットステータスレジスタは、稼働しているコマンドの各々について読み取られなければならない。割込みモードでは、算出ユニットステータスレジスタは、算出ユニットが、完了した実行を告知するためにスケジューラに割込みをかけない限り、読み取られない。したがって、限られた数の算出ユニットが稼働している場合、ポーリングモードは割込みモードよりも速くなり得る。稼働している算出ユニットの数がしきい値数を超えたとき、実施形態は、割込みモードに遷移し得る。実施形態は、算出ユニットのしきい値数と比較される実行している算出ユニットの数に基づいて、ポーリングモードと割込みモードとの間で遷移し得る。
本明細書で説明される本発明の構成によれば、スケジューラは、コマンドにおいて指定された算出ユニットのいずれか上にワークグループをスケジュールすることが可能である。スケジューラは、できる限り多くのワークグループをアイドル算出ユニット上でスケジュールし、さらなるワークグループをスケジュールする前に算出ユニットが再びアイドルになるのを待ち得る。
特定の実施形態では、コマンド待ち行列がいっぱいである場合、ホストプロセッサは、コマンド待ち行列がさらなるコマンドのための余地を有するという通知を待ち得る。通知は、ホストプロセッサがスケジューラをポーリングすることによって、またはスケジューラ(たとえば、コントローラ)が、コマンド待ち行列内の利用可能な空間を指示するプロセッサへの割込みを生成することによって、実装され得る。
図6は、ICのための例示的なアーキテクチャ600を示す。一態様では、アーキテクチャ600は、プログラマブルIC内に実装され得る。たとえば、アーキテクチャ600は、FPGAを実装するために使用され得る。アーキテクチャ600はまた、ICのシステムオンチップ(SOC)タイプを表し得る。SOCは、プログラムコードを実行するプロセッサと、1つまたは複数の他の回路とを含むICである。他の回路は、ハードワイヤード回路、プログラマブル回路、および/またはそれらの組合せとして実装され得る。回路は、互いと、および/またはプロセッサと協働して動作し得る。
図示のように、アーキテクチャ600は、いくつかの異なるタイプのプログラマブル回路、たとえば、論理、ブロックを含む。たとえば、アーキテクチャ600は、マルチギガビットトランシーバ(MGT:multi−gigabit transceiver)601、構成可能論理ブロック(CLB)602、ランダムアクセスメモリブロック(BRAM)603、入出力ブロック(IOB)604、構成およびクロッキング論理(CONFIG/CLOCKS)605、デジタル信号処理ブロック(DSP)606、特殊なI/Oブロック607(たとえば、構成ポートおよびクロックポート)、ならびにデジタルクロックマネージャ、アナログデジタル変換器、システム監視論理などの他のプログラマブル論理608を含む、多数の異なるプログラマブルタイルを含み得る。
いくつかのICでは、各プログラマブルタイルは、プログラマブル相互接続要素(INT)611を含み、INT611は、各隣接するタイル中の対応するINT611との間の規格化された接続を有する。したがって、INT611は、まとめると、示されているICのためのプログラマブル相互接続構造を実装する。各INT611は、図6の上部に含まれる例によって示されているように、同じタイル内のプログラマブル論理要素との間の接続をも含む。
たとえば、CLB602は、ユーザ論理を実装するようにプログラムされ得る構成可能論理要素(CLE)612と、単一のINT611とを含み得る。BRAM603は、1つまたは複数のINT611に加えてBRAM論理要素(BRL)613を含み得る。一般的に、タイル中に含まれるINT611の数は、タイルの高さに依存する。描かれているように、BRAMタイルは、5つのCLBと同じ高さを有するが、他の数(たとえば、4つ)も使用され得る。DSPタイル606は、適切な数のINT611に加えてDSP論理要素(DSPL)614を含み得る。IOB604は、たとえば、INT611の1つのインスタンスに加えてI/O論理要素(IOL)615の2つのインスタンスを含み得る。IOL615に接続された実際のI/Oパッドは、IOL615のエリアに制限されないことがある。
図6に描かれている例では、ダイの中心の近くの、たとえば、領域605、607、および608から形成された、列状エリアが、構成、クロック、および他の制御論理のために使用され得る。この列から延びる水平エリア609が、プログラマブルICの幅にわたってクロックおよび構成信号を分散させるために使用され得る。
図6に示されているアーキテクチャを利用するいくつかのICは、ICの大部分を作り上げる規則的な列状構造を損なう追加の論理ブロックを含む。追加の論理ブロックは、プログラマブルブロックおよび/または専用回路であり得る。たとえば、PROC610として示されているプロセッサブロックが、CLBおよびBRAMのいくつかの列にまたがる。
一態様では、PROC610は、ICのプログラマブル回路を実装するダイの一部として作製される専用回路として、たとえば、ハードワイヤードプロセッサとして実装され得る。PROC610は、個々のプロセッサ、たとえば、プログラムコードを実行することが可能な単一のコアから、1つまたは複数のコア、モジュール、コプロセッサ、インターフェースなどを有するプロセッサシステム全体まで、複雑さに幅がある様々な異なるプロセッサタイプおよび/またはシステムのいずれかを表し得る。
別の態様では、PROC610は、アーキテクチャ600から省略され、説明されるプログラマブルブロックの他の種類のうちの1つまたは複数と置き換えられ得る。さらに、そのようなブロックは、PROC610の場合のようにプログラムコードを実行することができるプロセッサを形成するためにプログラマブル回路の様々なブロックが使用され得るという点で、「ソフトプロセッサ」を形成するために利用され得る。
「プログラマブル回路」という句は、IC内のプログラマブル回路要素、たとえば、本明細書で説明される様々なプログラマブルまたは構成可能回路ブロックまたはタイル、ならびに、ICにロードされた構成データに従って様々な回路ブロック、タイル、および/または要素を選択的に結合する相互接続回路を指す。たとえば、CLB602およびBRAM603など、PROC610の外部にある、図6に示されている回路ブロックは、ICのプログラマブル回路と見なされる。
概して、プログラマブル回路の機能性は、構成データがICにロードされるまで確立されない。FPGAなど、ICのプログラマブル回路をプログラムするために、構成ビットのセットが使用され得る。(1つまたは複数の)構成ビットは、一般的に、「構成ビットストリーム」と呼ばれる。概して、プログラマブル回路は、構成ビットストリームをICに最初にロードしなければ、動作可能でないか、または機能可能でない。構成ビットストリームは、プログラマブル回路内に特定の回路設計を効果的に実装する。回路設計は、たとえば、プログラマブル回路ブロックの機能的態様と、様々なプログラマブル回路ブロックの間の物理的接続性とを指定する。
「ハードワイヤード」または「ハード化(harden)」される、すなわち、プログラマブルでない回路が、ICの一部として製造される。プログラマブル回路とは異なり、ハードワイヤード回路または回路ブロックは、構成ビットストリームのローディングを通してICの製造後に実装されない。ハードワイヤード回路は、概して、たとえば、構成ビットストリームを、IC、たとえば、PROC610に最初にロードすることなしに機能可能である、専用回路ブロックおよび相互接続を有すると見なされる。
いくつかの事例では、ハードワイヤード回路は、IC内の1つまたは複数のメモリ要素に記憶されたレジスタ設定または値に従って設定または選択され得る1つまたは複数の動作モードを有し得る。動作モードは、たとえば、ICへの構成ビットストリームのローディングを通して設定され得る。この能力にもかかわらず、ハードワイヤード回路が、ICの一部として製造されたとき、動作可能であり、特定の機能を有するので、ハードワイヤード回路はプログラマブル回路と見なされない。
SOCの場合、構成ビットストリームは、プログラマブル回路内に実装されるべきである回路と、PROC610またはソフトプロセッサによって実行されるべきであるプログラムコードとを指定し得る。いくつかの場合には、アーキテクチャ600は、適切な構成メモリおよび/またはプロセッサメモリに構成ビットストリームをロードする専用構成プロセッサを含む。専用構成プロセッサは、ユーザ指定のプログラムコードを実行しない。他の場合には、アーキテクチャ600は、構成ビットストリームを受信し、構成ビットストリームを適切な構成メモリにロードし、および/または実行のためのプログラムコードを抽出するために、PROC610を利用し得る。
スケジューラ160は、図6に関して説明されるようなアーキテクチャを有するICを使用して実装され得る。たとえば、BRAMは、コマンド待ち行列を実装するために使用され得る。PROC610は、コントローラ175を実装するために使用され得る。ICのプログラマブル回路内のレジスタは、ステータスレジスタ170を実装するために使用され得る。プログラマブル回路は、インターフェース155と算出ユニット180とを実装するために使用され得る。特定の実施形態では、メモリコントローラ185は、ハードワイヤードである。他の実施形態では、メモリコントローラ185はまた、プログラマブル回路を使用して実装される。
図6は、プログラマブル回路、たとえば、プログラマブルファブリックを含むICを実装するために使用され得る例示的なアーキテクチャを示すことを意図される。たとえば、1つの列中の論理ブロックの数、列の相対幅、列の数および順序、列中に含まれる論理ブロックのタイプ、論理ブロックの相対サイズ、および図6の上部に含まれる相互接続/論理実装形態は、例示にすぎない。実際のICでは、たとえば、CLBの2つ以上の隣接する列は、一般的に、ユーザ回路設計の効率的な実装を容易にするために、CLBが現れるところならどこでも含まれる。しかしながら、隣接するCLB列の数は、ICの全体的サイズとともに変動し得る。さらに、IC内のPROC610などのブロックのサイズおよび/または配置は、例示のためのものにすぎず、限定として意図されていない。
説明のために、特定の名称が、本明細書で開示される様々な発明概念の完全な理解を提供するために記載される。しかしながら、本明細書で使用される専門用語は、本発明の構成の特定の態様を説明するためのものにすぎず、限定するものではない。
本明細書で定義される単数形「a」、「an」および「the」は、文脈が別段に明確に指示するのでなければ、複数形をも含むものとする。
本明細書で定義される「少なくとも1つ」、「1つまたは複数」、および「および/または」という用語は、別段に明記されていない限り、運用において連言的と選言的の両方である、オープンエンド表現である。たとえば、「A、B、およびCのうちの少なくとも1つ」、「A、B、またはCのうちの少なくとも1つ」、「A、B、およびCのうちの1つまたは複数」、「A、B、またはCのうちの1つまたは複数」、および「A、B、および/またはC」という表現の各々は、Aのみ、Bのみ、Cのみ、AとBを一緒に、AとCを一緒に、BとCを一緒に、またはAとBとCを一緒に、を意味する。
本明細書で定義される「自動的に」という用語は、ユーザ介入なしに、を意味する。本明細書で定義される「ユーザ」という用語は、人間を意味する。
本明細書で定義される「コンピュータ可読記憶媒体」という用語は、命令実行システム、装置、またはデバイスが使用するための、あるいはそれとともに使用するためのプログラムコードを含んでいるかまたは記憶する記憶媒体を意味する。本明細書で定義される「コンピュータ可読記憶媒体」は、それ自体は、一時的な伝搬信号でない。コンピュータ可読記憶媒体は、限定はしないが、電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、または上記の任意の好適な組合せであり得る。本明細書で説明される、様々な形態のメモリが、コンピュータ可読記憶媒体の例である。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、ポータブルコンピュータディスケット、ハードディスク、RAM、読取り専用メモリ(ROM)、消去可能プログラマブル読取り専用メモリ(EPROMまたはフラッシュメモリ)、電子的消去可能プログラマブル読取り専用メモリ(EEPROM)、スタティックランダムアクセスメモリ(SRAM)、ポータブルコンパクトディスク読取り専用メモリ(CD−ROM)、デジタル多用途ディスク(DVD)、メモリスティック、フロッピーディスクなどを含み得る。
本明細書で定義される「する場合(if)」という用語は、文脈に応じて、「するとき(when)」または「すると(upon)」または「に応答して(in response to)」または「に反応して(responsive to)」を意味する。したがって、「それが決定された場合」または「[述べられた条件またはイベント]が検出された場合」という句は、文脈に応じて、「決定すると」または「決定したことに応答して」あるいは「[述べられた条件またはイベント]を検出すると」または「[述べられた条件またはイベント]を検出したことに応答して」または「[述べられた条件またはイベント]を検出したことに反応して」を意味すると解釈され得る。
本明細書で定義される「に反応して」という用語および上記で説明されたような同様の言い回し、たとえば、「する場合」、「するとき」、または「すると」は、アクションまたはイベントに容易に応答または反応することを意味する。応答または反応は、自動的に実施される。したがって、第2のアクションが第1のアクション「に反応して」実施される場合、第1のアクションの発生と第2のアクションの発生との間に因果関係がある。「に反応して」という用語は、因果関係を指示する。
本明細書で定義される「一実施形態(one embodiment)」、「一実施形態(an embodiment)」、「1つまたは複数の実施形態」、「特定の実施形態」という用語、または同様の言い回しは、実施形態に関して説明される特定の特徴、構造、または特性が、本開示内で説明される少なくとも1つの実施形態に含まれることを意味する。したがって、本開示全体にわたる、「一実施形態では(in one embodiment)」、「一実施形態では(in an embodiment)」、「1つまたは複数の実施形態では」、「特定の実施形態では」という句、および同様の言い回しの出現は、必ずしもそうとは限らないが、すべて、同じ実施形態を指し得る。「実施形態」および「構成」という用語は、本開示内では互換的に使用される。
本明細書で定義される「プロセッサ」という用語は、少なくとも1つのハードウェア回路を意味する。ハードウェア回路は、プログラムコード中に含まれている命令を行うように構成され得る。ハードウェア回路は集積回路であり得る。プロセッサの例は、限定はしないが、中央処理ユニット(CPU)、アレイプロセッサ、ベクトルプロセッサ、デジタル信号プロセッサ(DSP)、FPGA、プログラマブル論理アレイ(PLA)、ASIC、プログラマブル論理回路、およびコントローラを含む。
本明細書で定義される「出力」という用語は、物理メモリ要素、たとえば、デバイスに記憶すること、ディスプレイまたは他の周辺出力デバイスに書き込むこと、別のシステムに送ることまたは送信すること、エクスポートすることなどを意味する。
本明細書で定義される「リアルタイム」という用語は、ユーザまたはシステムが、特定のプロセスまたは決定が行われるのに十分に即時であると感じる、あるいは、プロセッサが、何らかの外部プロセスについていくことを可能にする、処理応答性のレベルを意味する。
本明細書で定義される「実質的に」という用語は、具陳された特性、パラメータ、または値が正確に達成される必要がないこと、ただし、たとえば、当業者に知られている許容差、測定誤差、測定精度限界、および他のファクタを含む、偏差または変動が、特性が提供することを意図された効果を妨げない量で生じ得ることを意味する。
第1の、第2のなどの用語は、様々な要素を説明するために本明細書で使用され得る。これらの用語は、別段に述べられていない限り、または文脈が別段に明確に指示しない限り、ある要素を別の要素と区別するために使用されるにすぎないので、これらの要素はこれらの用語によって限定されるべきでない。
コンピュータプログラム製品は、プロセッサに本明細書で説明される本発明の構成の態様を行わせるためのコンピュータ可読プログラム命令をその上に有する(1つまたは複数の)コンピュータ可読記憶媒体を含み得る。本開示内では、「プログラムコード」という用語は、「コンピュータ可読プログラム命令」という用語と互換的に使用される。本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、あるいはネットワーク、たとえば、インターネット、LAN、WANおよび/またはワイヤレスネットワークを介して外部コンピュータまたは外部記憶デバイスにダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバー、ワイヤレス送信、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ、および/またはエッジサーバを含むエッジデバイスを含み得る。各コンピューティング/処理デバイス中のネットワークアダプタカードまたはネットワークインターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、そのコンピュータ可読プログラム命令を、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体に記憶するためにフォワーディングする。
本明細書で説明される本発明の構成のための動作を行うためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、あるいは、オブジェクト指向プログラミング言語および/または手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組合せで書き込まれたソースコードまたはオブジェクトコードのいずれかであり得る。コンピュータ可読プログラム命令は、状態設定データを含み得る。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロンソフトウェアパッケージとして、部分的にユーザのコンピュータ上でおよび部分的にリモートコンピュータ上で、あるいは完全にリモートコンピュータまたはサーバ上で実行し得る。後者のシナリオでは、リモートコンピュータは、LANまたはWANを含む任意のタイプのネットワークを通してユーザのコンピュータに接続され得るか、あるいは接続は、(たとえば、インターネットサービスプロバイダを使用してインターネットを通して)外部コンピュータに対して行われ得る。いくつかの場合には、たとえば、プログラマブル論理回路、FPGA、またはPLAを含む電子回路が、本明細書で説明される本発明の構成の態様を実施するために、電子回路を個人化するためにコンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行し得る。
本発明の構成のいくつかの態様が、方法、装置(システム)、およびコンピュータプログラム製品のフローチャート例示図および/またはブロック図を参照しながら本明細書で説明された。フローチャート例示図および/またはブロック図の各ブロック、ならびにフローチャートの例示図および/またはブロック図中のブロックの組合せが、コンピュータ可読プログラム命令、たとえば、プログラムコードによって実装され得ることを理解されよう。
これらのコンピュータ可読プログラム命令は、汎用コンピュータ、専用コンピュータ、または機械を作り出すための他のプログラマブルデータ処理装置のプロセッサに提供され得、その結果、コンピュータまたは他のプログラマブルデータ処理装置のプロセッサを介して実行する命令は、フローチャートおよび/またはブロック図の1つまたは複数のブロックにおいて指定された機能/行為を実装するための手段を作成する。これらのコンピュータ可読プログラム命令はまた、コンピュータ、プログラマブルデータ処理装置、および/または他のデバイスに特定の様式で機能するように指示することができるコンピュータ可読記憶媒体に記憶され得、その結果、命令が記憶されたコンピュータ可読記憶媒体は、フローチャートおよび/またはブロック図の1つまたは複数のブロックにおいて指定された動作の態様を実装する命令を含む製造品を備える。
コンピュータ可読プログラム命令はまた、コンピュータ実装プロセスを作り出すために、一連の動作をコンピュータ、他のプログラマブルデータ処理装置または他のデバイス上で実施させるように、コンピュータ、他のプログラマブル装置、または他のデバイスにロードされ得、その結果、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する命令は、フローチャートおよび/またはブロック図の1つまたは複数のブロックにおいて指定された機能/行為を実装する。
図中のフローチャートおよびブロック図は、本発明の構成の様々な態様によるシステム、方法、およびコンピュータプログラム製品の可能な実装形態のアーキテクチャ、機能性、および動作を示す。この点について、フローチャートまたはブロック図中の各ブロックは、指定された動作を実装するための1つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表し得る。
いくつかの代替実装形態では、ブロック中で言及される動作は、図中で言及される順序から外れて行われ得る。たとえば、関与する機能性に応じて、連続して示されている2つのブロックが、実質的に同時に実行され得るか、またはブロックが、時々、逆の順序で実行され得る。他の例では、ブロックは、概して小さい数字から順に実施され得、さらに他の例では、1つまたは複数のブロックは、変動順で実施され得、結果は、記憶され、後続の、または直後にこない他のブロックにおいて利用される。また、ブロック図および/またはフローチャート例示図の各ブロック、ならびにブロック図および/またはフローチャート例示図中のブロックの組合せが、指定された機能または行為を実施するかあるいは専用ハードウェアとコンピュータ命令との組合せを行う専用ハードウェアベースシステムによって実装され得ることに留意されたい。
以下の特許請求の範囲において見られ得るすべての手段またはステップおよび機能要素の対応する構造、材料、行為、および等価物は、特に主張されるように、他の請求される要素と組み合わせて機能を実施するための任意の構造、材料、または行為を含むことを意図される。
1つまたは複数の実施形態は、ハードウェアアクセラレーションのためのスケジューラを含む集積回路(IC)を対象とする。スケジューラは、複数のスロットを有し、ICの算出ユニットによる実行のためにホストプロセッサからオフロードされたコマンドを記憶するように構成されたコマンド待ち行列を含み得る。スケジューラは、コマンド待ち行列のスロットに対応するビットロケーションを有するステータスレジスタを含み得る。スケジューラは、コマンド待ち行列とステータスレジスタとに結合されたコントローラをも含み得る。コントローラは、コマンド待ち行列のスロットに記憶されたコマンドを実行し、コマンド待ち行列からのどのコマンドを実行し終えたかを指示するためにステータスレジスタのビットロケーションを更新するように、ICの算出ユニットをスケジュールするように構成され得る。
一態様では、ステータスレジスタは、読み取られたことに応答して、そこに記憶されたコンテンツを消去するように構成され得る。
別の態様では、スケジューラは、通信リンクを介してホストプロセッサと通信し、コマンド待ち行列の利用可能なスロット内にコマンドを記憶するように構成されたインターフェースを含み得る。
別の態様では、コマンド待ち行列に記憶されたコマンドは、それぞれのコマンドを実行するために算出ユニットによって使用される引数を含み得る。
別の態様では、各コマンドは、算出ユニットのうちのどれがコマンドを実行することを可能にされるかを指定し得る。
別の態様では、コントローラは、コマンドを、算出ユニットに、算出ユニットのうちのどれがアイドルであり、各それぞれのコマンドを実行することを可能にされるかに基づいて割り当てるように構成され得る。
別の態様では、コントローラは、プログラムコードを実行するように構成されたプロセッサであり得る。プロセッサは、ICのプログラマブル回路を使用して実装されるソフトプロセッサであり得る。
別の態様では、コントローラは、選択されたコマンドがその上で稼働することが可能である選択された算出ユニットがアイドルであると決定し、実行のために、選択されたコマンドの引数を選択された算出ユニットに転送し、選択された算出ユニットを開始するように構成され得る。
別の態様では、コントローラは、選択されたコマンドを実行し終えたと決定したことに応答して、選択されたコマンドを含むスロットに対応する、ステータスレジスタ中のビットロケーションに書き込み、スロットがフリーであることを指示するように構成され得る。
1つまたは複数の実施形態は、ICを使用してハードウェアアクセラレーションのためにコマンドをスケジュールする方法を対象とする。本方法は、IC内のコマンド待ち行列のスロット内に、ホストプロセッサから受信されたコマンドを記憶することであって、コマンドが、ICの算出ユニットによる実行のためにホストプロセッサからオフロードされる、コマンドを記憶することを含み得る。本方法は、コントローラを使用して、コマンド待ち行列のスロットに記憶されたコマンドを実行するように算出ユニットをスケジュールすることを含み得る。本方法は、コマンドを実行し終えたと決定したことに応答して、IC内のステータスレジスタ中のビットロケーションを書き込むことであって、ビットロケーションが、コマンドを記憶するコマンド待ち行列のスロットに対応する、ビットロケーションを書き込むことを含み得る。
一態様では、本方法は、コントローラ内に、コマンド待ち行列のスロットに記憶されたコマンドのヘッダのローカルにキャッシュされたコピーを維持することと、ヘッダのローカルにキャッシュされたコピー中の値を更新することによってスロットのステータスを更新することとを含み得る。
別の態様では、本方法は、ステータスレジスタが読み取られたことに応答して、ステータスレジスタに記憶されたコンテンツを消去することを含み得る。
別の態様では、コマンド待ち行列に記憶されたコマンドは、コマンドを実行するために算出ユニットによって使用される引数を含み得る。
別の態様では、本方法は、各コマンドから、算出ユニットのうちのどれがコマンドを実行することを可能にされるかを決定することを含み得る。
別の態様では、本方法は、コマンドを、算出ユニットに、算出ユニットのうちのどれがアイドルであり、各それぞれのコマンドを実行することを可能にされるかに基づいて割り当てることを含み得る。
別の態様では、本方法は、選択されたコマンドがその上で稼働することが可能である選択された算出ユニットがアイドルであると決定することと、実行のために、選択されたコマンドの引数を選択された算出ユニットに転送することと、選択された算出ユニットを開始することとを含み得る。
別の態様では、ビットロケーションの書込みは、スロットがフリーであることを指示し得る。
別の態様では、本方法は、選択された算出ユニットから割込みを受信することによって、選択された算出ユニットが選択されたコマンドを実行し終えたと決定することを含み得る。
別の態様では、本方法は、選択された算出ユニットをポーリングすることによって、選択された算出ユニットが選択されたコマンドを実行し終えたと決定することを含み得る。
本明細書で提供される本発明の構成の説明は、例示のためであり、網羅的なものでも、開示される形式および例に限定されるものでもない。本明細書で使用される専門用語は、本発明の構成の原理、実際的適用例、または市場で見られる技術に対する技術的改善を説明するために、および/あるいは、他の当業者が本明細書で開示される本発明の構成を理解することを可能にするために選定された。説明される本発明の構成の範囲および趣旨から逸脱することなく、修正および変形が当業者に明らかになり得る。したがって、そのような特徴および実装形態の範囲を指示するものとして、上記の開示に対してではなく、以下の特許請求の範囲に対して参照が行われるべきである。

Claims (15)

  1. ハードウェアアクセラレーションのためのスケジューラを備える集積回路であって、前記スケジューラは、
    複数のスロットを有し、前記集積回路の算出ユニットによる実行のためにホストプロセッサからオフロードされたコマンドを記憶するように構成されたコマンド待ち行列と、
    前記コマンド待ち行列の前記スロットに対応するビットロケーションを有するステータスレジスタと、
    前記コマンド待ち行列と前記ステータスレジスタとに結合されたコントローラであって、前記コントローラが、前記コマンド待ち行列の前記スロットに記憶された前記コマンドを実行し、前記コマンド待ち行列からのどのコマンドを実行し終えたかを指示するために前記ステータスレジスタの前記ビットロケーションを更新するように、前記集積回路の前記算出ユニットをスケジュールするように構成された、コントローラと
    を備える、集積回路。
  2. 前記ステータスレジスタが、読み取られたことに応答して、そこに記憶されたコンテンツを消去するように構成された、請求項1に記載の集積回路。
  3. 前記コマンド待ち行列に記憶された前記コマンドが、前記それぞれのコマンドを実行するために前記算出ユニットによって使用される引数を含む、請求項1または2に記載の集積回路。
  4. 各コマンドが、前記算出ユニットのうちのどれが前記コマンドを実行することができるかを指定する、請求項1から3のいずれか一項に記載の集積回路。
  5. 前記コントローラは、コマンドを、算出ユニットに、前記算出ユニットのうちのどれが各それぞれのコマンドを実行することができ、アイドルであるかに基づいて割り当てるように構成された、請求項1から4のいずれか一項に記載の集積回路。
  6. 前記コントローラが、プログラムコードを実行するように構成されたプロセッサである、請求項1から5のいずれか一項に記載の集積回路。
  7. 前記コントローラは、選択されたコマンドがその上で稼働することができる選択された算出ユニットがアイドルであると決定し、実行のために、前記選択されたコマンドの引数を前記選択された算出ユニットに転送し、前記選択された算出ユニットを開始するように構成された、請求項1から6のいずれか一項に記載の集積回路。
  8. 前記コントローラは、前記選択されたコマンドを実行し終えたと決定したことに応答して、前記選択されたコマンドを含むスロットに対応する、前記ステータスレジスタ中の前記ビットロケーションに書き込み、前記スロットがフリーであることを指示するように構成された、請求項7に記載の集積回路。
  9. 集積回路を使用してハードウェアアクセラレーションのためにコマンドをスケジュールする方法であって、前記方法は、
    前記集積回路内のコマンド待ち行列のスロット内に、ホストプロセッサから受信されたコマンドを記憶することであって、前記コマンドが、前記集積回路の算出ユニットによる実行のために前記ホストプロセッサからオフロードされる、コマンドを記憶することと、
    コントローラを使用して、前記コマンド待ち行列の前記スロットに記憶された前記コマンドを実行するように前記算出ユニットをスケジュールすることと、
    前記コマンドを実行し終えたと決定したことに応答して、前記集積回路内のステータスレジスタ中のビットロケーションを書き込むことであって、前記ビットロケーションが、前記コマンドを記憶する前記コマンド待ち行列の前記スロットに対応する、ビットロケーションを書き込むことと
    を含む、方法。
  10. 前記コントローラ内に、前記コマンド待ち行列のスロットに記憶されたコマンドのヘッダのローカルにキャッシュされたコピーを維持することと、
    前記ヘッダの前記ローカルにキャッシュされたコピー中の値を更新することによってスロットのステータスを更新することと
    をさらに含む、請求項9に記載の方法。
  11. 前記ステータスレジスタが読み取られたことに応答して、前記ステータスレジスタに記憶されたコンテンツを消去すること
    をさらに含む、請求項9または10に記載の方法。
  12. 各コマンドから、前記算出ユニットのうちのどれが前記コマンドを実行することができるかを決定すること
    をさらに含む、請求項9から11のいずれか一項に記載の方法。
  13. コマンドを、前記算出ユニットに、前記算出ユニットのうちのどれが各それぞれのコマンドを実行することができ、アイドルであるかに基づいて割り当てること
    をさらに含む、請求項9から12のいずれか一項に記載の方法。
  14. 選択されたコマンドがその上で稼働することができる選択された算出ユニットがアイドルであると決定することと、
    実行のために、前記選択されたコマンドの引数を前記選択された算出ユニットに転送することと、
    前記選択された算出ユニットを開始することと
    をさらに含み、
    前記ビットロケーションを前記書き込むことは、前記スロットがフリーであることを指示する、
    請求項9から13のいずれか一項に記載の方法。
  15. 前記選択された算出ユニットから割込みを受信することによって、または前記選択された算出ユニットをポーリングすることによって、前記選択された算出ユニットが前記選択されたコマンドを実行し終えたと決定すること
    をさらに含む、請求項14に記載の方法。
JP2020565488A 2018-05-24 2019-05-09 ハードウェアアクセラレーションのためのハードウェアリソースの埋込みスケジューリング Active JP7313381B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/988,900 2018-05-24
US15/988,900 US10877766B2 (en) 2018-05-24 2018-05-24 Embedded scheduling of hardware resources for hardware acceleration
PCT/US2019/031443 WO2019226355A1 (en) 2018-05-24 2019-05-09 Embedded scheduling of hardware resources for hardware acceleration

Publications (3)

Publication Number Publication Date
JP2021525420A true JP2021525420A (ja) 2021-09-24
JPWO2019226355A5 JPWO2019226355A5 (ja) 2022-05-17
JP7313381B2 JP7313381B2 (ja) 2023-07-24

Family

ID=66641498

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020565488A Active JP7313381B2 (ja) 2018-05-24 2019-05-09 ハードウェアアクセラレーションのためのハードウェアリソースの埋込みスケジューリング

Country Status (6)

Country Link
US (1) US10877766B2 (ja)
EP (1) EP3803588A1 (ja)
JP (1) JP7313381B2 (ja)
KR (1) KR102668599B1 (ja)
CN (1) CN112204524B (ja)
WO (1) WO2019226355A1 (ja)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10761992B2 (en) * 2018-10-31 2020-09-01 Advanced Micro Devices, Inc. Shared loads at compute units of a processor
US10705993B2 (en) 2018-11-19 2020-07-07 Xilinx, Inc. Programming and controlling compute units in an integrated circuit
KR20200072854A (ko) * 2018-12-13 2020-06-23 에스케이하이닉스 주식회사 데이터 처리 시스템 및 그것의 동작방법
US11443018B2 (en) * 2019-03-12 2022-09-13 Xilinx, Inc. Locking execution of cores to licensed programmable devices in a data center
US11294992B2 (en) * 2019-03-12 2022-04-05 Xilinx, Inc. Locking execution of cores to licensed programmable devices in a data center
US11500901B2 (en) 2019-06-28 2022-11-15 Nxp B.V. Apparatuses and methods involving synchronization using data in the data/address field of a communications protocol
US11010323B2 (en) 2019-06-28 2021-05-18 Nxp B.V. Apparatuses and methods involving disabling address pointers
US10985759B2 (en) 2019-06-28 2021-04-20 Nxp B.V. Apparatuses and methods involving a segmented source-series terminated line driver
US10999097B2 (en) 2019-06-28 2021-05-04 Nxp B.V. Apparatuses and methods involving first type of transaction registers mapped to second type of transaction addresses
US10996950B2 (en) * 2019-06-28 2021-05-04 Nxp B.V. Apparatuses and methods involving selective disablement of side effects caused by accessing register sets
KR20210080009A (ko) 2019-12-20 2021-06-30 삼성전자주식회사 가속기, 가속기의 동작 방법 및 가속기를 포함한 디바이스
CN112783506B (zh) * 2021-01-29 2022-09-30 展讯通信(上海)有限公司 一种模型运行方法及相关装置
US11561733B2 (en) * 2021-02-05 2023-01-24 Micron Technology, Inc. Interrupt mode or polling mode for memory devices
CN113032010B (zh) * 2021-03-12 2022-09-20 歌尔科技有限公司 命令的传输控制方法、终端及计算机可读存储介质
US11861010B2 (en) 2022-02-14 2024-01-02 Xilinx, Inc. Extensible device hosted root of trust architecture for integrated circuits
CN115168081B (zh) * 2022-09-08 2022-11-15 井芯微电子技术(天津)有限公司 转换电路和报文转换方法
CN115292053B (zh) * 2022-09-30 2023-01-06 苏州速显微电子科技有限公司 移动端cnn的cpu、gpu、npu统一调度方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130031553A1 (en) * 2011-07-29 2013-01-31 International Business Machines Corporation Hardware acceleration
US20130117533A1 (en) * 2010-04-27 2013-05-09 Jan Hayek Coprocessor having task sequence control
US20140344815A1 (en) * 2012-03-30 2014-11-20 Boris Ginzburg Context switching mechanism for a processing core having a general purpose cpu core and a tightly coupled accelerator
US20150234679A1 (en) * 2014-02-20 2015-08-20 Freescale Semiconductor, Inc. Method to communicate task context information and device therefor
US20160098365A1 (en) * 2014-10-05 2016-04-07 Amazon Technologies, Inc. Emulated endpoint configuration
US20160335215A1 (en) * 2011-03-31 2016-11-17 International Business Machines Corporation Accelerator engine commands submission over an interconnect link

Family Cites Families (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4245306A (en) 1978-12-21 1981-01-13 Burroughs Corporation Selection of addressed processor in a multi-processor network
US6360243B1 (en) * 1998-03-10 2002-03-19 Motorola, Inc. Method, device and article of manufacture for implementing a real-time task scheduling accelerator
US6243736B1 (en) * 1998-12-17 2001-06-05 Agere Systems Guardian Corp. Context controller having status-based background functional task resource allocation capability and processor employing the same
US8913667B2 (en) * 1999-11-09 2014-12-16 Broadcom Corporation Video decoding system having a programmable variable-length decoder
US20100146256A1 (en) 2000-01-06 2010-06-10 Super Talent Electronics Inc. Mixed-Mode ROM/RAM Booting Using an Integrated Flash Controller with NAND-Flash, RAM, and SD Interfaces
US7328277B2 (en) 2000-03-03 2008-02-05 Enterasys Networks, Inc. High-speed data processing using internal processor memory space
US6477598B1 (en) 2000-07-20 2002-11-05 Lsi Logic Corporation Memory controller arbitrating RAS, CAS and bank precharge signals
US6829697B1 (en) * 2000-09-06 2004-12-07 International Business Machines Corporation Multiple logical interfaces to a shared coprocessor resource
US7346898B2 (en) * 2002-01-29 2008-03-18 Texas Instruments Incorporated Method for scheduling processors and coprocessors with bit-masking
US7500126B2 (en) * 2002-12-04 2009-03-03 Nxp B.V. Arrangement and method for controlling power modes of hardware resources
WO2006031157A1 (en) 2004-09-16 2006-03-23 Telefonaktiebolaget Lm Ericsson (Publ) Routing based on transmission utilization
US7743176B1 (en) * 2005-03-10 2010-06-22 Xilinx, Inc. Method and apparatus for communication between a processor and hardware blocks in a programmable logic device
US7669037B1 (en) * 2005-03-10 2010-02-23 Xilinx, Inc. Method and apparatus for communication between a processor and hardware blocks in a programmable logic device
US7428603B2 (en) 2005-06-30 2008-09-23 Sigmatel, Inc. System and method for communicating with memory devices via plurality of state machines and a DMA controller
JP4936517B2 (ja) * 2006-06-06 2012-05-23 学校法人早稲田大学 ヘテロジニアス・マルチプロセッサシステムの制御方法及びマルチグレイン並列化コンパイラ
US7934113B2 (en) 2007-05-21 2011-04-26 Texas Instruments Incorporated Self-clearing asynchronous interrupt edge detect latching register
US8250578B2 (en) * 2008-02-22 2012-08-21 International Business Machines Corporation Pipelining hardware accelerators to computer systems
US7673087B1 (en) * 2008-03-27 2010-03-02 Xilinx, Inc. Arbitration for an embedded processor block core in an integrated circuit
US7737725B1 (en) * 2008-04-04 2010-06-15 Xilinx, Inc. Device control register for a processor block
US9547535B1 (en) 2009-04-30 2017-01-17 Nvidia Corporation Method and system for providing shared memory access to graphics processing unit processes
JP5521403B2 (ja) 2009-06-23 2014-06-11 ソニー株式会社 情報処理装置とリソース管理方法およびプログラム
US8056080B2 (en) * 2009-08-31 2011-11-08 International Business Machines Corporation Multi-core/thread work-group computation scheduler
US8423799B2 (en) * 2009-11-30 2013-04-16 International Business Machines Corporation Managing accelerators of a computing environment
US8914805B2 (en) * 2010-08-31 2014-12-16 International Business Machines Corporation Rescheduling workload in a hybrid computing environment
US9378182B2 (en) * 2012-09-28 2016-06-28 Intel Corporation Vector move instruction controlled by read and write masks
US9582321B2 (en) * 2013-11-08 2017-02-28 Swarm64 As System and method of data processing
GB2525002B (en) * 2014-04-09 2021-06-09 Advanced Risc Mach Ltd Data processing systems
US9785473B2 (en) * 2014-07-14 2017-10-10 Nxp Usa, Inc. Configurable per-task state counters for processing cores in multi-tasking processing systems
US9022291B1 (en) 2014-07-24 2015-05-05 Apple Inc. Invisible optical label for transmitting information between computing devices
US9665509B2 (en) * 2014-08-20 2017-05-30 Xilinx, Inc. Mechanism for inter-processor interrupts in a heterogeneous multiprocessor system
WO2016077393A1 (en) * 2014-11-12 2016-05-19 Xilinx, Inc. Heterogeneous multiprocessor program compilation targeting programmable integrated circuits
US9846660B2 (en) * 2014-11-12 2017-12-19 Xilinx, Inc. Heterogeneous multiprocessor platform targeting programmable integrated circuits
US10831547B2 (en) * 2016-01-29 2020-11-10 Nec Corporation Accelerator control apparatus for analyzing big data, accelerator control method, and program
GB2549722B (en) * 2016-04-25 2018-09-26 Imagination Tech Ltd Communications interface circuit architecture
EP4089531B1 (en) * 2016-12-31 2024-06-26 Intel Corporation Systems, methods, and apparatuses for heterogeneous computing
US10235736B2 (en) 2017-04-21 2019-03-19 Intel Corporation Intelligent graphics dispatching mechanism

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130117533A1 (en) * 2010-04-27 2013-05-09 Jan Hayek Coprocessor having task sequence control
US20160335215A1 (en) * 2011-03-31 2016-11-17 International Business Machines Corporation Accelerator engine commands submission over an interconnect link
US20130031553A1 (en) * 2011-07-29 2013-01-31 International Business Machines Corporation Hardware acceleration
US20140344815A1 (en) * 2012-03-30 2014-11-20 Boris Ginzburg Context switching mechanism for a processing core having a general purpose cpu core and a tightly coupled accelerator
US20150234679A1 (en) * 2014-02-20 2015-08-20 Freescale Semiconductor, Inc. Method to communicate task context information and device therefor
US20160098365A1 (en) * 2014-10-05 2016-04-07 Amazon Technologies, Inc. Emulated endpoint configuration

Also Published As

Publication number Publication date
KR20210011451A (ko) 2021-02-01
WO2019226355A1 (en) 2019-11-28
US20190361708A1 (en) 2019-11-28
CN112204524A (zh) 2021-01-08
CN112204524B (zh) 2024-07-12
KR102668599B1 (ko) 2024-05-22
US10877766B2 (en) 2020-12-29
JP7313381B2 (ja) 2023-07-24
EP3803588A1 (en) 2021-04-14

Similar Documents

Publication Publication Date Title
JP7313381B2 (ja) ハードウェアアクセラレーションのためのハードウェアリソースの埋込みスケジューリング
US11544106B2 (en) Continuation analysis tasks for GPU task scheduling
US20150363239A1 (en) Dynamic task scheduling method for dispatching sub-tasks to computing devices of heterogeneous computing system and related computer readable medium
US10402223B1 (en) Scheduling hardware resources for offloading functions in a heterogeneous computing system
US9304775B1 (en) Dispatching of instructions for execution by heterogeneous processing engines
JP7470685B2 (ja) 集積回路中の算出ユニットをプログラムおよび制御すること
US10073783B2 (en) Dual mode local data store
KR102205899B1 (ko) 메모리의 뱅크 충돌을 방지하기 위한 방법 및 장치
US8862786B2 (en) Program execution with improved power efficiency
US10664282B1 (en) Runtime augmentation of engine instructions
CN112559403B (zh) 一种处理器及其中的中断控制器
JP2022546250A (ja) 電力に基づいたsramの適応割り当て
US9384036B1 (en) Low latency thread context caching
CN111095228A (zh) 具有一个存储器通道的第一启动

Legal Events

Date Code Title Description
A529 Written submission of copy of amendment under article 34 pct

Free format text: JAPANESE INTERMEDIATE CODE: A529

Effective date: 20210119

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220509

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220509

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20230613

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230711

R150 Certificate of patent or registration of utility model

Ref document number: 7313381

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150