(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-04-05
(45)【発行日】2024-04-15
(54)【発明の名称】ハードウェアアクセラレータの自律ジョブキューイングシステム
(51)【国際特許分類】
G06F 9/48 20060101AFI20240408BHJP
【FI】
G06F9/48 300C
【外国語出願】
(21)【出願番号】P 2022146968
(22)【出願日】2022-09-15
(62)【分割の表示】P 2020125332の分割
【原出願日】2020-07-22
【審査請求日】2022-10-24
(31)【優先権主張番号】201941030394
(32)【優先日】2019-07-27
(33)【優先権主張国・地域又は機関】IN
(32)【優先日】2019-10-23
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】519383544
【氏名又は名称】アナログ・ディヴァイシス・インターナショナル・アンリミテッド・カンパニー
(74)【代理人】
【識別番号】100108453
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100110364
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】アブヒジット・ギリ
(72)【発明者】
【氏名】ラジブ・サーカー
【審査官】三坂 敏夫
(56)【参考文献】
【文献】特開2004-272894(JP,A)
【文献】国際公開第2017/163441(WO,A1)
【文献】特開平04-308939(JP,A)
【文献】米国特許出願公開第2018/0144435(US,A1)
【文献】特開平10-124316(JP,A)
【文献】国際公開第2019/044340(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/455-9/54
(57)【特許請求の範囲】
【請求項1】
コンピューティングデバイスであって、
プロセッサであって、
タスク制御ブロック(TCB)において、前記TCBの優先順位レベルの指示を識別し、
前記優先順位レベルの指示に基づいて、複数のTCBのキュー内の位置を識別し、前記複数のTCBのキューの各々のTCBが前記各々のTCBに関するジョブの実行のためのハードウェアアクセラレータに割り当てられ、かつ
前記識別された位置で前記キューに前記TCBを挿入し、前記挿入されたTCBが、前記挿入されたTCBに関連付けられた各々のジョブの完了時に前記プロセッサをシグナルする前記ハードウェアアクセラレータのための、ジョブ完了シグナリングメカニズムの指示を更に含むものである、プロセッサと、
前記プロセッサと通信可能に結合された前記ハードウェアアクセラレータであって、前記複数のTCBの前記キュー内の
TCBに関連するジョブを行い、前記複数のTCBの前記キュー内の前記TCBの順序に従ってTCBに関連するジョブを行う、前記ハードウェアアクセラレータと、を備える、コンピューティングデバイス。
【請求項2】
前記優先順位レベルの指示が、前記TCB内の2ビットインジケータである、請求項1に記載のコンピューティングデバイス。
【請求項3】
前記プロセッサが、
前記キューに前記TCBを挿入する前に、前記ハードウェアアクセラレータに停止コマンドを送信する、請求項1に記載のコンピューティングデバイス。
【請求項4】
前記キューが、第1の優先順位レベルのTCBの第1のサブ部分と、前記第1の優先順位レベルよりも低い第2の優先順位レベルのTCBの第2のサブ部分とを含み、前記ハードウェアアクセラレータが、TCBの前記第2のサブ部分に関連するジョブを行う前に、TCBの前記第1のサブ部分に関連するジョブを行う、請求項1に記載のコンピューティングデバイス。
【請求項5】
前記TCBが、前記第1の優先順位レベルであり、前記プロセッサが、
現在実行中のTCBの優先順位レベルを識別し、
前記現在実行中のTCBの前記優先順位レベルに基づいて、前記キュー内の前記位置を識別する、請求項4に記載のコンピューティングデバイス。
【請求項6】
前記現在実行中のTCBの前記優先順位レベルが、前記第1の優先順位レベルであり、前記位置が、前記TCBの前記第1のサブ部分の末端にある、請求項5に記載のコンピューティングデバイス。
【請求項7】
前記現在実行中のTCBの前記優先順位レベルが、前記第2の優先順位レベルであり、前記位置が、前記現在実行中のTCBの後であり、かつTCBの前記第2のサブ部分の他のTCBの前である、請求項5に記載のコンピューティングデバイス。
【請求項8】
ハードウェアアクセラレータと通信するための通信インターフェースと、
前記通信インターフェースと結合されたロジックを備えるプロセッサであって、
前記ロジックが、
タスク制御ブロック(TCB)において、前記TCBの優先順位レベルの指示を識別し、
前記優先順位レベルの指示に基づいて、複数のTCBのキュー内の位置に前記TCBを挿入するものであり、
前記ハードウェアアクセラレータが、前記キュー内のそれらの位置に基づいて、前記複数のTCBの各々を実行し、
前記挿入されたTCBが、前記挿入されたTCBに関連付けられた各々のジョブの完了時に前記プロセッサをシグナルする前記ハードウェアアクセラレータのための、ジョブ完了シグナリングメカニズムの指示を更に含むものである、
プロセッサ。
【請求項9】
前記優先順位レベルの指示が、前記TCB内の2ビットインジケータであり、
前記優先順位レベルの指標は、前記TCBが複数の優先順位レベルのうちの1つであることを示す、請求項8に記載のプロセッサ。
【請求項10】
前記挿入されたTCBが前記ジョブ完了シグナリングメカニズムの指示を含むことに
おいて、
前記ハードウェアアクセラレータが、前記挿入されたTCBの完了に関連して前記プロセッサにトリガを送信するか否かを
示す指示をさらに含むものである、
請求項8に記載のプロセッサ。
【請求項11】
前記TCBが、前記TCBに関連するジョブを行うために使用される計算の種類の指示をさらに含む、請求項8に記載のプロセッサ。
【請求項12】
前記TCBが、前記複数のTCBの前記キューにおける先のTCBの指示をさらに含む、請求項8に記載のプロセッサ。
【請求項13】
命令を含む1つ以上の非一時的なコンピュータ可読媒体であって、前記命令は、電子デバイスによって実行されると、前記電子デバイスのプロセッサに、
複数のタスク制御ブロック(TCB)のキューを識別することであって、前記複数のTCBの各々のTCBが、前記キュー内の前記各々のTCBの優先順位レベルの指示を含み、ハードウェアアクセラレータが、前記TCBの前記優先順位レベルに従って各々のTCBに関連するジョブを行う、識別することであって、前記複数のTCBのうちの少なくとも第1のTCBが、前記第1のTCBに関連付けられた各々のジョブの完了時に前記プロセッサをシグナルする前記ハードウェアアクセラレータのための、ジョブ完了シグナリングメカニズムの指示を更に含むものである、ことと、
前記キューに関連するアプリケーションプログラミングインターフェース(API)を実行することと、
前記APIの実行に基づいて前記キューを改変する
ことであって、前記キューを改変することが、前記キューからのTCBの削除、前記キューのTCBに関するジョブの状況のクエリ、前記キュー内のTCBの改変のうちの少なくとも1つを含む、ことと、
を行わせる、1つ以上の非一時的なコンピュータ可読媒体。
【請求項14】
前記APIが、前記TCBの優先順位レベルの指示に基づいて前記複数のTCBの前記キュー内へのTCBの挿入に関連する、請求項13に記載の1つ以上の非一時的なコンピュータ可読媒体。
【請求項15】
前記TCBの挿入が、優先順位レベルでの最後のTCBを示すフラグに関連する、請求項14に記載の1つ以上の非一時的なコンピュータ可読媒体。
【請求項16】
前記APIが、前記キューからのTCBの削除に関連する、請求項13に記載の1つ以上の非一時的なコンピュータ可読媒体。
【請求項17】
前記APIが、前記キューのTCBの改変に
関連し、前記キューのTCBの改変が、少なくとも、別のTCBに置き換えることを含む、請求項13に記載の1つ以上の非一時的なコンピュータ可読媒体。
【請求項18】
前記APIが、前記キュー内のTCBの実行状況の識別に関連する、請求項13に記載の1つ以上の非一時的なコンピュータ可読媒体。
【請求項19】
前記APIが、前記ハードウェアアクセラレータのリセットに関連する、請求項13に記載の1つ以上の非一時的なコンピュータ可読媒体。
【請求項20】
前記TCBは、前記ハードウェアアクセラレータが前記TCBを処理する前に前記プロセッサからのトリガを待つことの指示をさらに含む、請求項8に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本出願は、2019年7月27日に出願されたインド特許出願201941030394の利益を主張し、その主題は、参照によりその全体が本明細書に組み込まれる。
【0002】
本開示は、概して、コンピューティングの分野に関し、より具体的には、コンピューティングデバイスにおけるジョブキューイングのためのシステムおよび方法に関するが、これに限定されない。
【背景技術】
【0003】
ハードウェアアクセラレータは、有限インパルス応答(FIR)、無限インパルス応答(IIR)、高速フーリエ変換(FFT)などのような、ほとんどの一般的なデジタル信号プロセッサ(DSP)ルーチンをオフロードするために、DSPにおいてユビキタスである。計算能力を大幅に増強するという考えであり得るとしても、データフローを設定し、実行を追跡し管理しなければならない命令処理コアの必要性により、それらの有効使用には高い障害が存在することが多い。しばしば、このようなコア駆動型の管理は、同様にかなりの命令サイクルを必要とする。これにより、コアとアクセラレータが処理負荷を効率的に分担しなければならないDSPを通るデータフローにそれらをシームレスに統合することは非常に困難である。その結果、コア実行時間およびオーバーヘッドを組み合わせた場合と比較して、アクセラレータがコンピューティングタスクを何倍も速く完了することができる場合を除き、アクセラレータは未使用のままであり得る。
【先行技術文献】
【特許文献】
【0004】
【文献】特開2004-272894号
【文献】国際公開第2019/044340号
【発明の概要】
【課題を解決するための手段】
【0005】
実施形態は、ハードウェアアクセラレータと通信可能に結合されたプロセッサを含む電子デバイスに関し得る。プロセッサは、TCBにおける優先順位レベルの指標に基づいて、TCBがTCBのキュー内に挿入されるべき位置を識別するように構成されてもよい。ハードウェアアクセラレータは、TCBsのキューに関連するジョブを、キュー内のTCBsの順序に関連する順序で行い得る。
【0006】
一実施形態は、プロセッサであって、TCBにおいて、TCBの優先順位レベルの指標を識別し、優先順位レベルの指標に基づいて、複数のTCBsのキュー内の位置を識別し、かつ識別された位置でキューにTCBを挿入する、プロセッサと、プロセッサと通信可能に結合されたハードウェアアクセラレータであって、複数のTCBのキュー内のTCBに関連するジョブを行い、複数のTCBのキュー内のTCBの順序に従ってTCBに関連するジョブを行うハードウェアアクセラレータと、を備える、コンピューティングデバイスに関し得る。
【0007】
別の実施形態は、ハードウェアアクセラレータと通信するための通信インターフェースと、通信インターフェースと結合された論理であって、TCBにおいて、TCBの優先順位レベルの指標を識別し、優先順位レベルの指標に基づいて、複数のTCBsのキュー内の位置にTCBを挿入し、ハードウェアアクセラレータが、キュー内のそれらの位置に基づいて、複数のTCBのそれぞれを実行する、論理と、を備える、プロセッサに関し得る。
【0008】
別の実施形態は、命令を含む1つ以上の非一時的なコンピュータ可読媒体であって、命令は、電子デバイスによって実行されると、電子デバイスのプロセッサに、複数のTCBのキューを識別することであって、複数のTCBのそれぞれのTCBが、キュー内のそれぞれのTCBの優先順位レベルの指標を含み、ハードウェアアクセラレータが、TCBの優先順位レベルに従ってそれぞれのTCBに関連するジョブを行う、識別することと、キューに関連するアプリケーションプログラミングインターフェース(API)を実行することと、APIの実行に基づいてキューを改変することと、を行わせる、非一時的なコンピュータ可読媒体に関し得る。
【図面の簡単な説明】
【0009】
【
図1】様々な実施形態による、タスク制御ブロック(TCB)の例示的な構造を示す。
【
図2】様々な実施形態による、ジョブキューイングの例を示す。
【
図3】様々な実施形態による、ハードウェアアクセラレータにおけるジョブキューイングを行うために使用され得る、例示的なアプリケーションプログラミングインターフェース(API)を示す。
【
図4】様々な実施形態による、TCBジョブキューイングを行うために使用され得る別の例示的なAPIを示す。
【
図5】様々な実施形態による、TCBジョブキューイングを行うために使用され得る別の例示的なAPIを示す。
【
図6】様々な実施形態による、TCBジョブキューイングを行うために使用され得る別の例示的なAPIを示す。
【
図7】様々な実施形態による、TCBジョブキューイングを行うために使用され得る別の例示的なAPIを示す。
【
図8】様々な実施形態による、TCBジョブキューイングを行うように構成されたハードウェアアクセラレータおよびプロセッサを含み得る例示的な電気デバイスのブロック図である。
【発明を実施するための形態】
【0010】
次の詳細な説明では、同様の番号が全体を通して同様の部品を指定し、本開示の主題が実施され得る例示的な実施形態として示される、本明細書の一部を形成する添付の図面を参照する。本開示の範囲から逸脱することなく、他の実施形態を利用してもよく、構造的または論理的な変更を加えてもよいことを理解されたい。したがって、次の詳細な説明は限定的な意味でとるべきではない。
【0011】
本開示の目的上、「AまたはB」という句は、(A)、(B)、または(AおよびB)を意味する。本開示の目的上、「A、B、またはC」という句は、(A)、(B)、(C)、(AおよびB)、(AおよびC)、(BおよびC)、または(A、B、およびC)を意味する。
【0012】
説明は、「一実施形態において」または「実施形態において」という句を使用する場合があり、それは、同じまたは異なる実施形態のうちの1つ以上を各々指すことができる。さらに、本開示の実施形態に関して使用されるとき、「備える」、「含む」、「有する」などの用語は同義である。
【0013】
「と結合された」という用語は、その派生語とともに、本明細書で使用され得る。「結合された」とは、次のうちの1つ以上を意味する場合がある。「結合された」とは、2つ以上の要素が直接物理的または電気的に接触していることを意味し得る。しかしながら、「結合された」はまた、2つ以上の要素が互いに間接的に接触するが、それでも互いに協力または相互作用することを意味し得、1つ以上の他の要素が互いに結合されると言われる要素間で結合または接続されることを意味し得る。「直接結合された」という用語は、2つまたは要素が直接接触していることを意味し得る。いくつかの実施形態では、「結合された」とは、2つの要素が物理的に互いの近傍に配置され、それらの間に排他的かつ非常に高速なアクセスを有することを指すことができる。
【0014】
様々な動作は、特許請求される主題を理解するのに最も役立つ方法で、順番に複数の個別の動作として記載され得る。しかしながら、説明の順序は、これらの動作が必ずしも順序に依存することを暗示するものとして解釈されるべきではない。
【0015】
本明細書で使用されるように、「モジュール」という用語は、1つ以上のソフトウェアまたはファームウェアプログラムを実行する特定用途向け集積回路(ASIC)、電子回路、プロセッサ(共有、専用、もしくはグループ)、もしくはメモリ(共有、専用、もしくはグループ)、組み合わせ論理回路、または記載された機能性を提供する他の好適な構成要素を指してもよく、その一部でもよく、または含んでいてもよい。
【0016】
上述したように、ハードウェアアクセラレータは、様々な理由で未使用になる場合がある。しかしながら、コアが一定のDSPタスクを専用のハードウェアアクセラレータに効率的にオフロードし、その後タスクが完了するとハードウェアアクセラレータによって通知され得る、管理システムが有用な場合がある。管理システムが、現在のジョブの完了を待たずに、コアがプール内のタスクを提出することを可能にする場合、そのようなシステムの実用性は増加し得る。
【0017】
本明細書の実施形態は、様々な利点を提供し得る。例えば、そのような管理システムによって支配されるハードウェアアクセラレータは、プロセッサまたはプロセッサコアが、1つ以上のDSPタスクをハードウェアアクセラレータに効率的にオフロードすることを可能にし得る。加えて、アクセラレータのためのハードウェアベースのキューイングシステムは、例えば、ソフトウェアベースの管理システムよりも有益であり得るが、これは、プロセッサがタスクプールを管理し、現在のタスクが終了すると次のタスクにアクセラレータを割り当てなければならないので、完全にソフトウェアベースの管理システムは計算またはメモリ集約的であり得るためである。
【0018】
一般に、本明細書の実施形態は、ハードウェアベースの自律ジョブキュー管理構造に関する。実施形態は、管理構造を実装するために使用され得るいくらかの要素を含んでもよい。そのような要素の1つは、ハードウェアアクセラレータを管理するために使用され得る連鎖DMAインフラストラクチャに関し得る。別のそのような要素は、管理構造内の新しいジョブ提出に関し得る。具体的には、新しいジョブの提出は、DMAチェーンに新しいエントリを作成することによって行われてもよい。DMAチェーンは、例えば、TCBのリンクされたリストであり得る。一般に、TCBは、ハードウェアアクセラレータによって実行される具体的なジョブに関連する要素であると見なされ得る。各TCBは、ジョブの遂行においてハードウェアアクセラレータによって使用される具体的な構成データを含み得る1つ以上のデータ要素またはサブフィールドを含み得る。ここでは、TCBは「タスク制御ブロック」と呼ばれるが、他の実施形態では、TCBは「転送制御ブロック」などの別の名前で呼ばれ得ることが理解されるであろう。
【0019】
様々なTCBまたはそのフィールドは、キューイングメカニズムを支援するために使用され得る情報を含むように改変されてもよい。例えば、TCBは、入力(I/P)バッファへのポインタを含み得る。TCBはまた、出力(O/P)バッファへのポインタを含み得る。TCBはまた、DMAチェーン内の先行または後続のTCBを参照し得る「先の」または「次の」記述子へのポインタを含んでもよい。TCBはまた、そのTCBに関連するシステムアドレスを格納するために使用され得るプレースホルダを含んでもよい。TCBはまた、ハードウェアアクセラレータのジョブ専用計算構成を含んでもよい。TCBは、完了状況を格納するためのプレースホルダを含み、転用し、または再利用することもできる。
【0020】
いくつかの実施形態では、1つ以上のAPIを使用して、新しいジョブの作成または提出、既存のジョブの状況の識別、ジョブの削除などのキュー管理タスクを行ってもよい。APIは、(例えば、所与の優先順位グループの最後のジョブまたはTCBの識別に関連する情報を使用することによって)TCBのリンクされたリストを横断し、様々なTCBまたはそのフィールドを読み取りまたは改変し、リンクされたリストからエントリを導入または除去することなどによって、これらのタスクを達成し得る。
【0021】
次いで、ジョブは、TCBのリンクされたリストに現れる順序で実行され得る。一般に、TCBのリンクされたリストは、提出されたジョブの異なる優先順位に基づいて別個のセクションを有し得る。ハイレベルな例として、TCBの高優先順位セクションは、TCBのリンクされたリストの上位にあり得、それらのTCBに関連するジョブは、最初に実行され得る。TCBの中優先順位セクションは、TCBの高優先順位セクションに続く場合がある。これらの中優先順位TCBに関連するジョブは、高優先順位TCBに関連するジョブの実行後に実行され得る。高優先順位フラグの新しいジョブが受信された場合、それは、TCBのリンクされたリストの高優先順位セクションの末端に挿入され得る。リンクされたリストの高優先順位セクションが終了した場合、高優先順位TCBは、中優先順位セクションのTCBに関連する現在走行中のジョブの直後に挿入され得る。
【0022】
図1は、実行のためにハードウェアアクセラレータに提供され得る例示的なTCB105を示す。わかるように、TCB105は、いくらかのフィールドを含んでもよい。いくつかの実施形態では、TCB105の様々なフィールドは、「語」と呼ばれてもよく、TCB105は、最大16個のフィールドを含んでもよい。
【0023】
別のそのようなフィールドは、チェーンポインタ104であってもよく、チェーンポインタ104は、例えば、前方チェーンポインタであることを示すために「FWD_CP」と呼ばれてもよい。チェーンポインタ104は、TCBのリンクされたリスト内の後続のTCBのアドレスを含み得る。ハードウェアアクセラレータがTCB105に関連するジョブを完了した後、ハードウェアアクセラレータは、チェーンポインタ104内のアドレスを読み取り、チェーンポインタ104によって識別される次のTCBに移動し得る。いくつかの実施形態では、後続のジョブの識別子は、後続のTCBのシステムアドレスであり得る「TCBSYS_ADDR」識別子であってもよい。
【0024】
別のそのようなフィールドは、JOB_IDフィールド106であり得る。一般に、JOB_IDフィールド106は、TCB105またはTCB105が関連付けられているジョブに関する識別情報を格納するために使用され得るプレースホルダであってもよい。TCBによって記載された各ジョブは、フィールド106の値によって一意に識別される。このような情報は、例えば、TCB105に関連するジョブの状況を識別するために、プロセッサまたはハードウェアアクセラレータによって使用されてもよい。識別情報は、例えば、TCBSYS_ADDR識別子であり得るか、またはそれを含み得る。
【0025】
別のそのようなフィールドは、BACK_CPフィールド108であり得る。BACK_CPフィールド108は、先のTCBの識別子をTCBのリンクされたリストに格納することができるので、後方チェーンポインタと呼ばれることがある。先のTCBの識別子は、例えば、JOB_IDフィールド106に関して上記された識別子であり得る。リンクされたリスト内の各TCBが、先のジョブを識別するBACK_CPフィールド108、および後続のジョブを識別するチェーンポインタを含む場合、それぞれのTCBは、先または後続のTCBを指し示すことによってリンクされたリストを形成し得る。これらのフィールドは、組み合わせて、以下でさらに詳細に記載されるように、リンクされたリストの優先順位ベースの改変に有用であり得るTCBのリンクされたリストを横断するためにAPIによって使用され得る。
【0026】
別のこのようなフィールドは、COMP_CTLフィールド112であり得る。COMP_CTLフィールド112は、ジョブ専用計算構成をサポートし得るいくらかのサブフィールド110を含み得る。ここでは「サブフィールド」という用語が使用されるが、他の実施形態では、サブフィールドは「フラグ」または「データ要素」と呼ばれることがある。
【0027】
このようなサブフィールドの1つは、FXDサブフィールド122であり得る。FXDサブフィールド122は、ジョブが、固定小数点演算または浮動小数点演算、何らかの他の種類の演算を使用すべきかどうかを示し得る。利用可能なオプションは、例えば、いくつのビットがFXDサブフィールド122に使用されるかに依存し得る。別のこのようなサブフィールドは、TCサブフィールド124であり得る。TCサブフィールド124を使用して、それが動作するデータの種類、またはジョブの実行中にハードウェアアクセラレータによって使用される計算の種類をアクセラレータに示すために使用され得る。別のこのようなサブフィールドは、TCB105に関連付けられたジョブの完了中に使用される丸めモードを示し得るRNDサブフィールド126であり得る。
【0028】
TCB105の別のフィールドは、COEFF_Pフィールド114であり得る。COEFF_Pフィールド114は、TCB105に関連付けられたジョブの遂行中にハードウェアアクセラレータによって使用され得る係数テーブルへの参照を含み得る。例えば、いくつかの実施形態では、COEFF_Pフィールド114に関連付けられた複数のデータワードが存在し得る。データワードは、係数テーブルがシステムメモリにどのようにレイアウトされ得るかを指定してもよい。
【0029】
TCB105の別のフィールドは、DATA_O/P_Pフィールド116であり得る。DATA_O/P_Pフィールド116は、O/Pバッファへのポインタであってもよく、またはそれを含んでもよい。O/Pバッファは、例えば、ハードウェアアクセラレータのバッファ、またはハードウェアアクセラレータがその一部であるか、もしくはハードウェアアクセラレータが通信可能に結合される電子デバイスのバッファであり得る。O/Pバッファは、ハードウェアアクセラレータが、TCB105が関連付けられているジョブの遂行または完了に関連するデータを格納する所であってもよい。
【0030】
TCB105の別のフィールドは、DATA_I/P_Pフィールド118であり得る。DATA_I/P_Pフィールド118は、I/Pバッファへのポインタを含み得る。I/Pバッファは、例えば、ハードウェアアクセラレータのバッファ、またはハードウェアアクセラレータがその一部であるか、もしくはハードウェアアクセラレータが通信可能に結合される電子デバイスのバッファであり得る。I/Pバッファは、ハードウェアアクセラレータが、TCB105が関連付けられているジョブの遂行に関連するデータを受信する場所であり得る。
【0031】
TCB105の別のそのようなフィールドは、CONFIG_CTLフィールド120を含み得る。CONFIG_CTLフィールド120は、本明細書に記載される優先順位ベースのハードウェア加速スキームを実装するために使用され得る追加のサブフィールド115を含んでもよい。そのようなサブフィールドの1つは、ACC_CONFIGサブフィールド102を含んでもよい。ACC_CONFIGサブフィールド102は、TCBに関連するジョブを行うためにハードウェアアクセラレータによって使用され得る技術に関連する情報を含み得る。例えば、ACC_CONFIGサブフィールド102は、ハードウェアアクセラレータに、有限インパルスフィルタ(FIR)、具体的な順序の四次無限インパルスフィルタ(IIR)、ジョブ遂行に関連する具体的な時間ウィンドウであって、ウィンドウ長さが、生成される出力サンプルの数に関連し得る時間ウィンドウ、または使用され得るサンプルレート変換を実装するように指図し得る。しかしながら、これらは、ACC_CONFIGサブフィールド102が含み得る例であり、他の実施形態は、追加またはより少ない要素を含み得ることが理解されるであろう。
【0032】
別のこのようなサブフィールドは、PRIOサブフィールド128を含んでもよい。PRIOサブフィールド128は、TCBのリンクされたリスト内のTCB105の優先順位レベルを示し得るいくらかのビットを含み得る。例えば、PRIOサブフィールド128は、TCB105が「高い」または「低い」優先順位であるかどうかを示し得る1ビットインジケータであってもよい。代替的に、PRIOサブフィールド128は、TCB105が「非常に高い」、「高い」、「中」、または「低い」優先順位にあるかどうかを示し得る2ビットインジケータであってもよい。
【0033】
別のこのようなサブフィールドは、IMASKサブフィールド130を含んでもよい。IMASKサブフィールド130は、TCB105が関連付けられるジョブの完了時に割り込みがプロセッサに送信されるかどうかを示し得る。一般に、各ジョブの完了時に割り込みをプロセッサに送信することは望ましくない場合があるので、このサブフィールドは、割り込みが所望されるかどうかを示すフラグとして機能し得る。
【0034】
別のこのようなサブフィールドは、TMASKサブフィールド132を含んでもよい。IMASKサブフィールド130と同様に、TMASKサブフィールド132は、TCB105が関連付けられるジョブの完了時に、トリガがプロセッササブシステムに送信されるかどうかを示し得る。一般に、各ジョブの完了時にトリガをプロセッササブシステムに送信することは望ましくない場合があるので、このサブフィールドは、トリガが所望されるかどうかを示すフラグとして機能し得る。
【0035】
別のこのようサブフィールドは、TWAITサブフィールド134を含んでもよい。一般に、プロセッサが、リンクされたリストへの追加として新しいTCBをジョブプールに提出することができる前に、1つ以上の係数(その位置はCOEFF_Pフィールド114によって示され得る)を収容するデータバッファ、および入力データバッファ(これは、DATA_I/P_Pフィールド118によって示されるI/Pバッファ内のデータであり得る)の両方が必要とされ得る。一般に、係数は静的であり得るが、入力データは動的であり得る。入力データが利用できない場合、ハードウェアアクセラレータは、TCB105によって示されるジョブの遂行中に古いまたは破損したデータを処理し得る。次いで、TCB105にTWAITサブフィールドが設定される場合、ハードウェアアクセラレータがそのTCBに関連するジョブを実行しているとき、ハードウェアアクセラレータは、バッファの準備に関与し得るDMAなどのプロセッササブシステムの構成要素のいずれかから受信したトリガの形態でI/Pバッファ完了の指標を待つことができる。トリガがプロセッサから受信されると、ハードウェアアクセラレータは、入力DMAを開始して、データをその内部バッファに転送し、関連したジョブを実行し得る。その結果、TCBは、対応する入力データが、プロセッサによる提出時にI/Pバッファで利用可能でない場合でも、プロセッサによって、リンクされたリストに提出され得る。
【0036】
一般に、TCB105および関連したフィールド/サブフィールド/などは、このようなフィールド/サブフィールドの例として本明細書に示され、考察されており、他の実施形態は、示されているものと異なり得ることが理解されるであろう。例えば、いくつかのTCBは、示されるフィールドよりも追加の、または少ないフィールドを有し得る。いくつかの実施形態では、記載されるフィールドは、記載された厳密なパラメータとは異なってもよい。具体的な例として、いくつかの実施形態では、PRIOサブフィールド128は、記載された1ビットまたは2ビットの配設よりも多くまたは少ないビットを含んでもよい。加えて、この例で与えられた具体的な名前は、一実施形態で使用され得る名前であることが認識されるであろうが、記載した機能性を行いながら、他の実施形態では、他の名前が具体的なフィールドまたはサブフィールドに使用され得る。他の実施形態では、他の変形例が存在してもよい。
【0037】
図2は、様々な実施形態による、ジョブキューイングの高レベルな例を示す。具体的には、
図2は、新たに導入されたTCBをTCBのリンクされたリストにキューイングする高レベルな例を示す。考察されたTCBの各々は、PRIOサブフィールド128に関して考察されたような優先順位レベルを有し得る。この特定の例では、異なる濃淡に基づいて、
図2にグラフィカルに示される3つの異なる優先順位レベルが存在する。3つの異なる優先順位レベルは、高優先順位202、中優先順位204、および低優先順位206である。一般に、高優先順位レベルのTCBは、中または低優先順位レベルのTCBの実行の前に実行される。同様に、中優先順位レベルのTCBは、低優先順位レベルのTCBの実行の前に実行される。
【0038】
このシステムは、システムバス203によってハードウェアアクセラレータ205と通信可能に結合されるプロセッサ210を含み得る。システムバス203は、電子デバイスの1つ以上の要素が、互いにデータ信号を送受信することを可能にする通信結合であってもよい。プロセッサ210は、例えば、中央処理ユニット(CPU)、マルチもしくはシングルコアプロセッサ、マルチコアプロセッサのコア、または何らかの他の種類のプロセッサであり得る。同様に、ハードウェアアクセラレータ205は、一定の機能もしくは機能のセットを行うように構成されたハードウェア論理ブロック、CPU、マルチコアもしくはシングルコアプロセッサ、マルチコアプロセッサのコア、または何らかの他の種類のプロセッサなどの処理ユニットであってもよい。プロセッサ210は、1つ以上のコンピュータ実行可能命令を実行するための論理、1つ以上の数学的処理または計算を行うための論理などをさらに含んでもよい。
【0039】
システムは、メモリ201をさらに含み得る。メモリ201は、ダブルデータレート(DDR)メモリ、フラッシュメモリ、ランダムアクセスメモリ(RAM)、または何らかの他の種類のメモリなどの揮発性もしくは不揮発性メモリであってもよい。より具体的には、メモリ201は、上記で考察したI/Pバッファ、O/Pバッファ、またはCOEFFバッファなどの1つ以上のバッファを含み得る。加えて、メモリ201は、本明細書に記載された様々な実施形態による、1つ以上のTCBをTCBのリンクされたリストに格納するように構成されてもよい。メモリ201は、システムバス203によってプロセッサ210およびハードウェアアクセラレータ205と通信可能に結合され得る。
【0040】
プロセッサ210、メモリ201、およびハードウェアアクセラレータ205のうちの1つ以上は、システムオンチップ(SoC)、システムインパッケージ(SiP)、または何らかの他の構成として構成されてもよい。いくつかの実施形態では、プロセッサ210、メモリ201、およびハードウェアアクセラレータ205のうちの2つ以上は、同じ基板の要素、例えば、インターポーザまたはプリント回路基板(PCB)の要素であってもよく、一方、他の実施形態では、プロセッサ210、メモリ201、およびハードウェアアクセラレータ205の各々は、異なる基板上にあってもよい。いくつかの実施形態では、メモリ201、プロセッサ210、およびハードウェアアクセラレータ205のうちの2つ以上は、単一の半導体または単一のチップ内の論理的または物理的な区画であってもよく、一方、他の実施形態では、メモリ201、プロセッサ210、およびハードウェアアクセラレータ205のそれぞれは物理的に互いに分離されてもよい。
【0041】
ハードウェアアクセラレータ205は、メモリ201に格納されたTCBのリンクされたリスト内のいくつらのTCBに関連するジョブを実行するように構成され得る。TCBのリンクされたリストのそれぞれのTCBは、例えば、TCB105と類似していてもよい。TCBのリンクされたリストは、
図2に、先に実行されたTCB214、現在実行中のTCB218、および実行されるTCB220を含むように示されている。
【0042】
TCB212は、プロセッサ210によって識別または生成され得る。プロセッサ210は、TCBがTCBのリンクされたリストに挿入されることを識別し得る。次いで、ハードウェアアクセラレータ205へのTCB212の供給には、プロセッサとハードウェアアクセラレータ205との間で交換されるいくらかのメッセージが含まれ得る。具体的には、ハードウェアアクセラレータ205が現在、キュー内のTCBに関連するジョブを実行している場合、プロセッサ210およびハードウェアアクセラレータ205の両方によるTCBの改変は整合性の問題を生じ得るため、キューにTCBを追加することが望ましくない場合がある。プロセッサ210は、236で停止コマンドをハードウェアアクセラレータ205に送信し得る。停止コマンドは、例えば、ハードウェアアクセラレータ205のレジスタにビットを書き込むことを含み得る。236における停止コマンドは、ハードウェアアクセラレータ205が、実用的であればすぐに処理を一時停止することをハードウェアアクセラレータ205に示し得る。いくつかの実施形態では、停止は、イベントでいくらかのサイクルを必要とする場合があり、例えば、ハードウェアアクセラレータ205は、メモリアクセス動作を開始し得、その後、メモリアクセス動作の完了を待っている。236での停止コマンドに応答して、ハードウェアアクセラレータ205は、238で停止確認を送信し得る。238での停止確認は、ハードウェアアクセラレータ205が動作を停止し、プロセッサ210からのさらなる命令を待っていることを示し得る。次いで、プロセッサ210は、TCB212をメモリ201内のTCBのキューに挿入し得る。TCBを他のTCBに対してキュー内の指定された場所に配置することは、例えば、TCBのリンクされたリスト内のTCBのうちの1つ以上のFWD_CP104およびBACK_CP106フィールドを改変することを含み得る。
【0043】
TCBのキューを参照すると、先に実行されたTCB214がいくらか存在することがわかる。先に実行されたTCB214は、2つの高優先順位TCB208(すなわち、「高」優先順位に従って実行されることを示すPRIOサブフィールドを有するTCB)を含んでもよい。先に実行されたTCB214はまた、中間の優先順位TCB216(すなわち、高優先順位TCB後の「中」優先順位に従って実行されることを示すPRIOサブフィールドを有するTCB)を含んでもよい。さらに、ハードウェアアクセラレータ205は、別の中優先順位TCB218に関連するジョブを実行してもよい。実行されるTCB220は、中優先順位TCB224および低優先順位TCB228(すなわち、高優先順位TCBおよび中優先順位TCB後の「低」優先順位に従って実行されることを示すPRIOサブフィールドを有するTCB)を含んでもよい。
【0044】
破線アウトラインを有するTCBは、その優先順位に従って、TCB212をキュー内に配置することができる異なる位置を示す。述べたように、現在実行中のTCBに関連するジョブを停止することはできない。したがって、TCB212が高優先順位TCBである場合、TCB222によって示される位置に配置される。したがって、それは、TCB224のような中優先順位TCBに関連する任意の他のジョブの実行の前に処理され、それに関連する任意のジョブが実行されるように、キュー内に配置される。言い換えれば、現在実行中のTCB218は中優先順位TCBであるため、高優先順位TCB212がキュー内の次となる。
【0045】
しかしながら、TCB212が中優先順位TCBである場合、TCB226によって示されるキュー内の位置に配置されることになる。この位置は、中優先順位TCBの末端にあるが、任意の低優先順位TCBの前にある。最後に、TCB212が低優先順位TCBである場合、TCB230によって示されるキュー内の位置に配置される。この位置は、低優先順位TCBの末端にある。
【0046】
次の表、表1は、3つの優先順位レベル(高、中、および低)を有する実施形態において、優先順位ベースのタスク挿入がどのように達成され得るかの様々な例を提供する。しかしながら、この表は、高レベルな例として意図されており、他の実施形態は、この表の変形例を含んでもよいことが理解されるであろう。
【0047】
【0048】
この
図2の例は、優先順位ベースのキュー管理の1つの簡略化された例として意図されており、他の実施形態は、示された例と異なり得ることが理解されるであろう。例えば、いくつかの実施形態は、
図2に考察しまたは示されるよりも多い、または少ない優先順位レベルを有し得る。優先順位レベルの数は、上記で考察したPRIOサブフィールド128に依存し得る。加えて、様々な優先順位レベルのTCBの数は、異なるユースケースにおいて異なってもよい。
【0049】
加えて、
図2のユースケースは、TCB212をキューに導入するように記載されている。しかしながら、キューの他の改変が可能であり得ることが理解されるであろう。このような改変は、キューからのTCBの削除、キューのTCBに関連するジョブの状況のクエリ、キュー内のTCBの改変などを含んでよい。一般に、キューの管理は、キューを管理するためにプロセッサ210によって使用され得る様々なAPIに基づいて行われ得る。
図3~
図7は、キューの管理に使用され得る様々なAPIを示す。プロセッサ210によるこのようなキューの管理は、次の、「ジョブ」の作成(例えば、メモリ内のTCBの位置決め)、ジョブのキューへの提出、他の既存のTCBに対するキュー内の示された場所でのジョブの挿入、ジョブのキューからの削除、ジョブの完了状況の判定などのうちの1つ以上を含んでよい。これらの管理タスクを行うために、プロセッサ210は、キュー内の最初のTCBのメモリ参照、所与の優先順位レベルのキュー内の最初のTCB、キュー内の最後のTCB、所与の優先順位レベルのキュー内の最後のTCB、またはこれらの何らかの組み合わせなどの一定のキュー関連情報を格納することを必要とし、各TCB内の2つのチェーンポインタフィールド(例えば、チェーンポインタフィールド104およびバック_cpフィールド108)の助けを借りてTCBのリンクされたリストを横断することが可能であり得る。
【0050】
一般に、
図3は、ジョブをキューに提出するために使用され得るAPIを記載する。
図3のAPIは、例えば、プロセッサ210によって行われ得る。APIに関連する提出コマンドの構文は、submit_job(ACC_TCB TCB_x、ACC_TCB TCB_n)であり得る。「ACC_TCB TCB_x」は、キューに挿入されるTCBを指す情報を含み得る。TCBは、「TCB_x」と呼ばれることがある。情報は、TCB_xを指すポインタであってもよく、またはTCBの全部または部分であってもよい。同様に、「ACC_TCB TCB_n」は、キュー内のTCBを指す情報を含んでもよく、それに続いてTCB_xがキューに配置される。情報は、TCB_nを指すポインタであってもよく、またはTCBの全部または部分であってもよい。
【0051】
初めに、APIは、305において、ハードウェアアクセラレータ(例えば、ハードウェアアクセラレータ205)が有効であるかどうかをチェックすることを含んでよい。本明細書で使用されるように、「有効」とは、ハードウェアアクセラレータがTCBを受け入れるように構成されているか/TCBに関連するジョブを行うように構成されているかを指し得る。ハードウェアアクセラレータが有効にされていない場合、プロセッサは、ハードウェアアクセラレータ205に、TCBのリンクされたリストで処理される最初のTCBの指標を提供し得る。具体的には、プロセッサは、ハードウェアアクセラレータ内のチェーンポインタレジスタCPを、キュー内の最初のTCBのアドレスで更新し得る。次に、ハードウェアアクセラレータは、TCBを処理し、TCBが関連付けられているジョブを行うように、315で有効にされてもよい。いくつかの実施形態では、305で示されるTCB提出APIは、次いで再開されてもよい。
【0052】
しかしながら、ハードウェアアクセラレータが有効であると305で識別される場合、次いで、プロセッサは、320でハードウェアアクセラレータを停止することが望ましい場合がある。ハードウェアアクセラレータを停止することは、例えば、
図2の要素236に関して考察された停止メッセージを送信することを含み得る。プロセッサは、要素238に関して上記した停止確認のために監視することによって、アクセラレータが停止したことの確認を待ってもよい。次いで、プロセッサは、325において、ハードウェアアクセラレータがアイドルであるかどうかを判定し得る。本明細書で使用されるように、「アイドル」とは、ハードウェアアクセラレータが、TCBの既存のキュー内のすべてのTCBの処理を終了したかを指し得る。ハードウェアアクセラレータが325においてアイドルであると325において判定される場合、次いで、ハードウェアアクセラレータ内の構成レジスタ内の1つ以上のビットフィールドにプロセッサが書き込むによって、330においてハードウェアアクセラレータが無効になり得る。この無効化は、ハードウェアアクセラレータの「リセット」として機能し得る。ハードウェアアクセラレータ内のチェーンポインタレジスタCPは、プロセッサによって335でTCBのアドレスで更新されてもよく、次いで、ハードウェアアクセラレータは340で再有効化されてもよい。ハードウェアアクセラレータの再有効化は、例えば、要素236に関して上記したように、ハードウェアアクセラレータが停止すべきであることを示すレジスタ内のビットを変更することを含み得る。ハードウェアアクセラレータが340で再有効化されると、ハードウェアアクセラレータは、その機能を再開してもよく、加えて、プロセッサは、本明細書に記載のAPI、それ以外のAPI、またはそれ以外の処理機能に関連するアプリケーションコードを実行することを再開してもよい。
【0053】
しかしながら、ハードウェアアクセラレータが325でアイドルでないと判定される場合、プロセッサは、TCBのキューへのTCBの挿入に関連するAPIを345で行い得る。APIに関連する挿入コマンドの構文は、insert_job(ACC_TCB TCB_x、ACC_TCB TCB_n)であり得る。「ACC_TCB TCB_x」および「ACC_TCB TCB_n」は、
図3に関して上記したものと類似していてもよい。
図4は、挿入APIの例を示す。他の実施形態では、insert_job APIは、
図3のAPIとは別個に行われ得ることが理解されるであろう。
【0054】
初めに、APIは、405において、insert_job API内のTCB_nへのポインタがヌル(0)値であるかどうかを識別することを含んでよい。TCB_nがヌル値でない場合、APIは次いで、TCB_nが完了したかどうかを410で識別することを含んでよい。より具体的には、APIは、410において、TCB_nに関連するジョブが完了したか、またはTCB_nが、214で記載された先に実行されたTCBのリストにあるかを識別することを含んでよい。そうである場合、次いで、ハードウェアアクセラレータは、415でエラー指標をプロセッサに提供し得る。エラー指標は、処理が完了したTCBの後に挿入されたTCBが、ハードウェアアクセラレータによってアクセスされないため、関連付けられたジョブが決して実行され得ない事実が原因であり得る。ハードウェアアクセラレータまたはプロセッサは、上記のように動作を再開し得る。
【0055】
しかしながら、TCB_nが410において完了したとして識別されない場合、次いで、プロセッサは、420においてTCB_nをTCBのリスト内で探し得る。具体的には、プロセッサは、TCB_nが識別されるまで、TCBのリスト内の1つ以上のTCBをクエリし得る。次いで、プロセッサは、425でTCBリンクチェーンを更新し得る。リンクチェーンを更新することは、例えば、挿入されるTCBのチェーンポインタを更新すること、チェーン内の1つ以上のTCBのチェーンポインタを更新すること、ハードウェアアクセラレータのバッファを更新すること、プロセッサを更新することなどを含み得る。更新は、TCB_nを正しく識別する目的のためであってもよい。次いで、プロセッサおよびハードウェアアクセラレータは、上記のように動作を再開し得る。
【0056】
APIにおける値TCB_nへのポインタが、405におけるヌル値である場合、これは、TBC_xが、TCB構造105のPRIOフィールド128に示されるように、その優先順位に基づいてキューに挿入されることを示し得る。結果として、プロセッサは次いで、430でTCBの優先順位ベースの挿入を行い得る。優先順位ベースの挿入は、所与の優先順位セクションまたは一般的なキュー内の最初または最後のTCBに関する情報を使用して、TCBが挿入されるべき位置を識別することを含み得る。一例として、優先順位ベースの挿入は、435において、新しいジョブまたは新しいTCBをTCBのリストに挿入するために優先順位テーブルを横断することを含み得る。例えば、プロセッサは、各TCBの優先順位レベルを示すTCBのリストに関連するテーブル、または所与の優先順位セクションの最初もしくは最後のTCBの指標を有してもよく、またはアクセスしてもよい。いくつかの実施形態では、プロセッサは、所与の優先順位レベルで最後のTCBを示すインジケータまたはフラグを有することができるか、またはアクセスすることができる。これらのフラグまたはインジケータは、TCB管理が行われている間、システムまたはハードウェアアクセラレータが停止される時間を短縮するのに役立ち得る。代替的に、プロセッサ210は、TCBのチェーンポインタフィールド104または108の助けを借りて、キュー内の最初のTCB、現在実行中のTCB、またはそれ以外のTCBから開始し、
図2のメモリ201内のTCBのチェーンを横断し得る。横断は、例えば、所与の優先順位セクションの最後のTCBを識別するためであり得る。TCBのPRIOフィールド128を読み取ることによって、各TCBの優先順位レベルを判定し得る。優先順位テーブルが本明細書に記載されているが、他の実施形態では、TCBの優先順位ベースの編成に関連するデータ構造は異なり得ることが理解されるであろう。
【0057】
次に、APIは、440で戻し、再開してもよい。一般に、APIは、プロセッサ上で実行される、より高いレベルのアプリケーションによって呼び出され得る。APIが戻すと、プロセッサは、アプリケーションコードの残りの部分の実行を「再開」し得る。また、ハードウェアアクセラレータは、上記のように、その機能形態を「停止」状態に再開し得る。
【0058】
プロセッサ210は、(例えば、所与の優先順位セクションの最後のTCBに関する情報を使用することによって、またはそれ以外の技術によって)リンクされたリストを横断して、TCB_xが
図2に関して上記されるように配置されるべき位置を識別し得る。位置が識別されると、TCBは、TCBのリストに挿入され得る。次いで、APIは、TCBがTCBのリストに正常に挿入されたことを、例えば、TCBを要求または引き起こし得るより高いレベルのアプリケーションにSUCCESSインジケータを戻すことによって示し、より高いレベルのアプリケーションの他の機能の実行を再開してもよい。
【0059】
いくつかの実施形態では、既存のジョブまたはTCBを改変することが望ましい場合がある。改変は、例えば、TCBのリスト内の既存のTCBを、異なる係数、異なる入力バッファへのポインタなどを含む別のTCBに置き換えることを含み得る。
図5は、ジョブまたはTCB改変コマンドに使用され得る例示的なAPIを示す。APIは、プロセッサによって行われてもよい。APIに関連する改変コマンドの構文は、modify_job(ACC_TCB TCB_n、ACC_TCB TCB_o)であり得る。「ACC_TCB TCB_n」は、キューに挿入される新しいTCB(「TCB_n」)を指す情報を含み得る。「ACC_TCB TCB_o」は、キューから除去されるTCB(「TCB_o」)を指す情報を含み得る。具体的には、TCB_nは、TCB_oの代わりにキューに挿入されるTCBであり得る。このようにして、既存のTCB(TCB_o)は、そのTCBを、更新情報を含む新しいTCB(TCB_n)に置き換えることによって改変され得る。
【0060】
APIは、505において、ハードウェアアクセラレータを停止することを含んでもよい。停止は、要素236に関して上記された停止コマンドなどの停止コマンドに応答し得る。次いで、APIは、所与のジョブの状況を510でクエリすることを含み得る。具体的には、プロセッサ210は、保留中、完了中、走行中などのジョブかを510で識別し得る。いくつかの実施形態では、510でのクエリには、クエリAPIを走行することを含んでもよく、これは、
図7に関して以下でさらに詳細に考察される。
【0061】
APIは次いで、515において、510におけるクエリの結果は、TCB_oが保留中であることを示すかを判定することを含んでよい。「保留中」TCBは、将来の実行/処理のためにキュー内にあるTCBを指してもよく、そのTCBに関連するそのようなジョブは、現在ハードウェアアクセラレータによって行われていないか、またはまだ行われていない。言い換えれば、保留中のTCBは、
図2に関して記載されたように、220で実行されるTCBのキュー内にあり得る。TCB_oが保留中でない場合、APIは520でエラーを戻し得る。エラー条件は、TCB_oが保留中でない場合、そのジョブは既に行われている場合があるため、TCB_oに関連するジョブを改変するか、またはTCB_nとの置換で置き換えることができない場合があるためであり得る。エラー条件が識別されて戻された後、例えば、TCBキュー内の次のTCBを処理することによって、ハードウェアアクセラレータの動作を再開してもよい。
【0062】
しかしながら、510でのクエリが、TCB_oは保留中であることを515で戻す場合、APIは、保留中のTCBのリスト内のTCB_oを525で探すことを含んでよい。例えば、プロセッサ210は、実行されるTCB220におけるTCB_oの位置またはアドレスを識別し得る。TCB_oが見つかると、プロセッサ210は、TCB_oをデリンクし、TCB_nを530でその場所に配置し得る。このようなデリンク動作は、例えば、キュー内のTCB_oに先行するTCBのチェーンポインタFWD_CPフィールドを変えることと、TCB_nのメモリアドレスでこのフィールドを更新することとを含み得る。デリンク動作は、TCB_nのBACK_CPフィールドをTCB_oのBACK_CPフィールド内の同じ値で更新することをさらに含み得る。デリンク動作はまた、TCB_nのFWD_CPフィールドをTCB_oのFWD_CPフィールドの同じ値で更新することと、TCB_nのFWD_CPによって参照されるTCBのBACK_CPフィールドをTCB_nのメモリアドレスで更新することとを含んでもよい。いくつかの実施形態では、APIはまた、TCB_oを格納するために使用されるメモリをフリーにし、メモリをフリーのメモリブロックのプールに戻し得る。最後に、APIは、TCB_oがTCB_nに置き替えられた状況インジケータを535で戻すことを含んでもよく、ハードウェアアクセラレータの動作を再開してもよい。例えば、インジケータが、ハードウェアアクセラレータの別の論理もしくは処理要素、またはプロセッサに送信され、置換が完了したことを示し、次いで、ハードウェアアクセラレータは、TCBのリンクされたリスト内のTCBの処理を再開し得る。要素535の戻しおよび再開機能は、例えば、要素440の戻しおよび再開機能と同様であってもよい。
【0063】
いくつかの実施形態では、TCBのリンクされたリスト内のTCBを置き換えるのではなく、除去することが望ましい場合がある。
図6は、実行されるTCB220のリストからTCBを除去するためにプロセッサ210などの電子デバイスの構成要素によって使用され得るAPIを示す。APIの構文は、delete_job(ACC_TCB TCB_d)であり得、TCB_dは破棄されるTCBであり得、「ACC_TCB TCB_d」は、TCB_dを参照する情報を含み得る。
【0064】
図6のAPIは、
図5の要素と類似し得る1つ以上の要素を含み得、1つ以上の特性を
図5の要素と共有し得る。具体的には、要素605、610、615、620、625、および635はそれぞれ、
図5の要素505、510、515、520、525、および535と類似していてもよく、1つ以上の特性を共有してもよい。これらの要素の詳細は、冗長化を回避するために再反復されない。
【0065】
しかしながら、わかるように、TCB_dが、実行されるTCB220のリストに見出された後、
図6のAPIは、TCB_dを630でデリンクすること、およびTCB_dの前後にあったリスト内のTCBを接続することを含んでよい。具体的には、TCB_dに先行するTCBのFWD_CPフィールドは、TCB_dに続くTCBを指し示すように変えられてもよい。同様に、TCB_dに続くTCBのBACK_CPフィールドは、TCB_dに先行するTCBを指し示すように変えられてもよい。このようにして、TCB_dは、220で実行されるTCBのリストから効果的に除去され得る。いくつかの実施形態では、APIはまた、TCB_dを格納するために使用されるメモリをフリーにし、メモリをフリーのメモリブロックのプールに戻し得る。
【0066】
述べたように、いくつかの実施形態では、TCBのリンクされたリスト内のTCBの状況をクエリすることが望ましい場合がある。例えば、プロセッサ210上で走行中のアプリケーションコードは、特定のTCBまたは特定のジョブの状況更新をハードウェアアクセラレータから要求し得る。別の例として、
図5または
図6のAPIは、要素510または610でクエリを発行し得る。
図7は、このようなクエリに応答して使用され得る例示的なAPIを示す。
図7のAPIは、プロセッサ210によって行われてもよい。クエリの構文は、例えば、query_job(ACC_TCB TCB_q)であり得る。「ACC_TCB TCB_q」は、TCB(「TCB_q」)を指す、ポインタおよびアドレスなどの情報を含んでよい。
【0067】
いくつかの実施形態では、
図3~
図6のうちの1つ以上のAPIは、所与の優先順位レベルで最後のTCBに影響を及ぼし得ることに留意されたい。例えば、「高」優先順位を有する新しいTCBは、「高」優先順位を有する既存の最後のTCBの後に挿入され得る。代替的に、所与の優先順位を有する最後のTCBは、置き換えられるか、または除去され得る。この情勢において、その優先順位レベルの更新された「最後のTCB」を正確に反映するために、様々なチェーンポインタ、TCBのリンクされたリストなどに対する様々な更新が行われ得る。
【0068】
APIは、705において、ハードウェアアクセラレータを停止させることを含んでもよい。ハードウェアアクセラレータを停止させることは、要素320、505、605などに関して記載された停止と同様であり得る。次いで、APIは、TCB_qが存在するかを710において識別することを含んでよい。言い換えれば、APIは、TCB_qがTCBのリンクされたリストに位置することができるかを識別し得る。TCB_qが存在しないことが710において見出された場合、APIは、715においてエラーを戻すことと、例えば、上記の要素440と同様であり得る動作を再開することとを含み得る。
【0069】
TCB_qが710で識別される場合、APIは次いで、TCB_qが完了したかを720で識別することを含んでよい。言い換えれば、APIは、TCB_qが先に実行されたTCB214内にあるかを識別することを含んでよい。加えて、または代替的に、TCB_qが完了しているかを識別することは、TCB_qに関連するか、またはTCB_qの一部である完了フラグをチェックすることを含み得る。他の実施形態は、TCBの完了に関連する他のインジケータを含み得る。そうであれば、APIは、725において、TCB_qが完了したという指標を戻すことと、例えば、要素440に関して上記のように動作を再開することと、を含んでよい。
【0070】
TCB_qが720において完了していないと識別される場合、APIは、730において、TCB_qが走行中であるかを識別することを含んでよい。本明細書で使用されるように、「走行中」は、TCBが処理されているアクティブ状態にあったか、またはTCBが参照するジョブは、ハードウェアアクセラレータが停止される前にハードウェアアクセラレータによって実行されているかを示し得る。TCB_qが730で走行中と識別される場合、次いで、APIは、TCB_qが735で走行中であるという指標を戻すことと、例えば、要素440に関して上記したように動作を再開することとを含み得る。しかしながら、TCB_qが730において走行中と識別されない場合、次いで、APIは、例えば、要素440に関して上記したように、TCB_qが、再開動作として740で保留中であるという指標を戻すことを含むことができる。
【0071】
上記APIは、一実施形態の例として意図されており、他の実施形態は、記載されているものとは異なり得ることが理解されるであろう。例えば、他の実施形態は、より多くまたはより少ない要素、異なる構文などを有し得る。いくつかの実施形態では、一定の要素は、
図3~
図7に示されるものとは異なる順序で行われてもよい。加えて、一定のAPIまたはその要素は、ハードウェアアクセラレータまたはプロセッサによって行われると記載され得るが、いくつかの実施形態では、ハードウェアアクセラレータによって行われると記載されている1つ以上のAPIまたはその要素は、プロセッサによって行われる場合もあれば、その逆の場合もある。他の実施形態では、他の変形例が存在してもよい。
【0072】
図8は、本明細書に開示された実施形態のいずれかに従って、1つ以上のハードウェアアクセラレータを含み得る例示的な電気デバイス1800のブロック図である。いくらかの構成要素は、電気デバイス1800に含まれるように
図8に例示されるが、これらの構成要素のうちの任意の1つ以上は、用途に好適なように省略または複製され得る。いくつかの実施形態では、電気デバイス1800に含まれる構成要素のいくつかまたはすべては、1つ以上のマザーボードに取り付けられてもよい。いくつかの実施形態では、これらの構成要素のいくつかまたはすべては、単一のSoCダイ上に製造される。
【0073】
加えて、様々な実施形態において、電気デバイス1800は、
図8に例示された1つ以上の構成要素を含まない場合があるが、電気デバイス1800は、1つ以上の構成要素に結合するためのインターフェース回路を含んでもよい。例えば、電気デバイス1800は、ディスプレイデバイス1806を含まなくてもよいが、ディスプレイデバイス1806が結合されてもよいディスプレイデバイスインターフェース回路(例えば、コネクタおよびドライバ回路)を含んでもよい。別の一組の例では、電気デバイス1800は、オーディオ入力デバイス1824またはオーディオ出力デバイス1808を含まなくてもよいが、オーディオ入力デバイス1824またはオーディオ出力デバイス1808が結合されてもよいオーディオ入力または出力デバイスインターフェース回路(例えば、コネクタおよび支持回路)を含んでもよい。
【0074】
電気デバイス1800は、処理デバイス1802(例えば、1つ以上の処理デバイス)を含んでもよい。本明細書で使用されるように、「処理デバイス」または「プロセッサ」という用語は、レジスタおよび/またはメモリからの電子データを処理して、その電子データをレジスタおよび/またはメモリに格納され得る他の電子データに変換する任意のデバイスまたはデバイスの一部を指し得る。処理デバイス1802は、1つ以上のDSP、ASIC、CPU、グラフィックス処理ユニット(GPU)、暗号プロセッサ(ハードウェア内の暗号アルゴリズムを実行する専門プロセッサ)、サーバプロセッサ、または任意の他の好適な処理デバイスを含んでもよい。電気デバイス1800は、揮発性メモリ(例えば、ダイナミックランダムアクセスメモリ(DRAM))、不揮発性メモリ(例えば、読み取り専用メモリ(ROM))、フラッシュメモリ、ソリッドステートメモリ、および/またはハードドライブなどの1つ以上のメモリデバイスをそれ自体が含み得るメモリ1804を含んでもよい。いくつかの実施形態では、メモリ1804は、処理デバイス1802とダイを共有するメモリを含んでもよい。このメモリは、キャッシュメモリとして使用され得、埋め込まれた動的ランダムアクセスメモリ(eDRAM)またはスピン転送トルク磁気ランダムアクセスメモリ(STT-MRAM)を含み得る。処理デバイス1802は、例えば、プロセッサ210と同様であり得、ハードウェアアクセラレータ205などのハードウェアアクセラレータと結合され得る。
【0075】
いくつかの実施形態では、電気デバイス1800は、通信チップ1812(例えば、1つ以上の通信チップ)を含んでもよい。例えば、通信チップ1812は、電気デバイス1800へのデータの転送および電気デバイス1800からのデータの転送のためのワイヤレス通信を管理するように構成され得る。「ワイヤレス」という用語およびその派生語は、非固体媒体を通じて変調された電磁放射を使用してデータを通信することができる回路、デバイス、システム、方法、技法、通信チャネルなどを説明するために使用され得る。この用語は、関連付けられたデバイスが任意のワイヤを収容しないことを暗示するものではないが、いくつかの実施形態では、それらを含まない場合がある。
【0076】
通信チップ1812は、Wi-Fi(IEEE802.11ファミリー)、IEEE802.16規格(例えば、IEEE802.16-2005改正)、長期進化(LTE)プロジェクトを、任意の改正、更新、および/または改訂(例えば、高度なLTEプロジェクト、超モバイルブロードバンド(UMB)プロジェクト(「3GPP2」とも呼ばれる)など)とともに含む電気電子技術者協会(IEEE)規格を含むが、これらに限定されない、いくらかのワイヤレス規格またはプロトコルのいずれかを実装し得る。IEEE 802.16互換ブロードバンドワイヤレスアクセス(BWA)ネットワークは、一般に、IEEE 802.16規格の適合性および相互運用性試験に合格した製品の認証マークである、マイクロウェーブアクセスのワールドワイド相互運用性を表す頭文字、WiMAXネットワークと呼ばれる。通信チップ1812は、グローバルモバイル通信システム(GSM)、一般パケット無線サービス(GPRS)、ユニバーサルモバイル電気通信システム(UMTS)、高速パケットアクセス(HSPA)、進化HSPA(E-HSPA)、またはLTEネットワークに従って動作してもよい。通信チップ1812は、GSM進化高速データ(EDGE)、GSM EDGE無線アクセスネットワーク(GERAN)、ユニバーサル地上無線アクセスネットワーク(UTRAN)、または進化型UTRAN(E-UTRAN)に従って動作してもよい。通信チップ1812は、コード分割多重アクセス(CDMA)、時間分割多重アクセス(TDMA)、デジタル強化コードレス電気通信(DECT)、進化データ最適化(EV-DO)、およびそれらの派生物、ならびに3G、4G、5G、およびそれ以上に指定される任意の他のワイヤレスプロトコルに従って動作し得る。通信チップ1812は、他の実施形態では、他のワイヤレスプロトコルに従って動作し得る。電気デバイス1800は、ワイヤレス通信を容易にするため、および/または他のワイヤレス通信(AMまたはFM無線伝送など)を受信するためのアンテナ1822を含み得る。
【0077】
いくつかの実施形態では、通信チップ1812は、電気的、光学的、または任意の他の好適な通信プロトコル(例えば、イーサネット)などの有線通信を管理し得る。上述したように、通信チップ1812は、複数の通信チップを含んでもよい。例えば、第1の通信チップ1812は、Wi-FiまたはBluetoothなどの短距離ワイヤレス通信に専用であってもよく、第2の通信チップ1812は、全地球測位システム(GPS)、EDGE、GPRS、CDMA、WiMAX、LTE、EV-DOなどの長距離無線通信に専用であってもよい。いくつかの実施形態では、第1の通信チップ1812は、ワイヤレス通信に専用であり得、第2の通信チップ1812は、有線通信に専用であり得る。
【0078】
電気デバイス1800は、バッテリー/電源回路1814を含み得る。バッテリー/電源回路1814は、電気デバイス1800の構成要素を電気デバイス1800とは別個のエネルギー源(例えばACライン電源)に結合するための1つ以上のエネルギー貯蔵デバイス(例えば、バッテリーまたはコンデンサ)および/または回路を含み得る。
【0079】
電気デバイス1800は、ディスプレイデバイス1806(または上記で考察したように対応するインターフェース回路)を含んでもよい。ディスプレイデバイス1806は、ヘッドアップディスプレイ、コンピュータモニタ、プロジェクタ、タッチスクリーンディスプレイ、液晶ディスプレイ(LCD)、発光ダイオードディスプレイ、またはフラットパネルディスプレイなど、任意の視覚インジケータを含んでもよい。
【0080】
電気デバイス1800は、オーディオ出力デバイス1808(または上記で考察したような対応するインターフェース回路)を含み得る。オーディオ出力デバイス1808は、スピーカ、ヘッドセット、またはイヤホンなどの可聴インジケータを生成する任意のデバイスを含み得る。
【0081】
電気デバイス1800は、オーディオ入力デバイス1824(または上記で考察したような対応するインターフェース回路)を含み得る。オーディオ入力デバイス1824は、マイク、マイクアレイ、またはデジタル楽器(例えば、楽器デジタルインターフェース(MIDI)出力を有する楽器)などの音を表す信号を生成する任意のデバイスを含み得る。
【0082】
電気デバイス1800は、GPSデバイス1818(または上記で考察したような対応するインターフェース回路)を含んでもよい。GPSデバイス1818は、衛星ベースのシステムと通信でき、当該技術分野で知られているように、電気デバイス1800の位置を受信し得る。
【0083】
電気デバイス1800は、別の出力デバイス1810(または上記で考察したような対応するインターフェース回路)を含み得る。他の出力デバイス1810の例は、オーディオコーデック、ビデオコーデック、プリンタ、他のデバイスに情報を提供するための有線もしくはワイヤレス送信機、または追加の記憶デバイスを含み得る。
【0084】
電気デバイス1800は、別の入力デバイス1820(または上記で考察したような対応するインターフェース回路)を含み得る。他の入力デバイス1820の例には、加速度計、ジャイロスコープ、コンパス、画像キャプチャデバイス、キーボード、マウスなどのカーソル制御デバイス、スタイラス、タッチパッド、バーコードリーダ、クイックレスポンス(QR)コードリーダ、任意のセンサ、または無線周波数識別(RFID)リーダが含まれ得る。
【0085】
電気デバイス1800は、ハンドヘルドもしくはモバイル電気デバイス(例えば、携帯電話、スマートフォン、モバイルインターネットデバイス、音楽プレーヤー、タブレットコンピュータ、ラップトップコンピュータ、ネットブックコンピュータ、ウルトラブックコンピュータ、携帯情報端末(PDA)、ウルトラモバイルパーソナルコンピュータなど)、デスクトップ電気デバイス、サーバデバイスもしくは他のネットワークコンピューティングコンポーネント、プリンタ、スキャナ、モニタ、セットトップボックス、エンターテイメント制御ユニット、車両制御ユニット、デジタルカメラ、デジタルビデオレコーダ、または着用可能な電気デバイスなどの任意の所望の形態要因を有し得る。いくつかの実施形態では、電気デバイス1800は、データを処理する任意の他の電子デバイスであり得る。
【0086】
様々な実施形態の例
例1は、コンピューティングデバイスの構成要素によって、構成要素により行われるジョブに関連するTCBを識別することと、TCBに基づいてジョブの優先順位レベルを識別することと、識別された優先順位レベルに基づいて行われるジョブのキューにジョブを挿入することと、識別された優先順位レベルに基づいてジョブを行うことと、を含む方法を含む。
【0087】
例2は、例1、または本明細書の何らかの他の例に記載の方法を含み、構成要素は、コンピューティングデバイスのコアまたはハードウェアアクセラレータである。
【0088】
例3は、例1、または本明細書の何らかの他の例に記載の方法を含み、ジョブはDMA要求に関連するジョブである。
【0089】
例4は、例1~3のいずれか、または本明細書の何らかの他の例に記載の方法を含み、ジョブが、より高い優先順位レベルのジョブであり、より高い優先順位レベルのジョブをキューに挿入することは、より高い優先順位レベルのジョブを、より低い優先順位でのジョブの実行の前に実行されるキューに挿入することを含む。
【0090】
例5は、例4、または本明細書の何らかの他の例に記載の方法を含み、より低い優先順位レベルのジョブは、TCBの識別の前にコンピューティングデバイスの構成要素によって識別されている。
【0091】
例6は、例4、または本明細書の何らかの他の例に記載の方法を含み、より低い優先順位レベルのジョブは、より高い優先順位レベルのジョブの挿入の前にキューに挿入されている。
【0092】
例7は、例1~3のいずれか、または本明細書の何らかの他の例に記載の方法を含み、行われるジョブのキューにジョブを挿入することは、ジョブに関連するAPIの遂行に基づく。
【0093】
例8は、例1~3のいずれか、または本明細書の何らかの他の例に記載の方法を含み、行われるジョブのキューは、4つの優先順位レベルを有するキューを含む。
【0094】
例9は、命令を含む1つ以上の非一時的なコンピュータ可読媒体を含み、命令は、コンピューティングデバイスの1つ以上の要素による命令の実行時に、コンピューティングデバイスの構成要素に、構成要素によって行われるジョブに関連するTCBを識別させ、TCBに基づいてジョブの優先順位レベルを識別させ、識別された優先順位レベルに基づいて、行われるジョブのキューにジョブを挿入させ、識別された優先順位レベルに基づいてジョブを行わせる。
【0095】
例10は、例9、または本明細書の何らかの他の例に記載の1つ以上の非一時的なコンピュータ可読媒体を含み、構成要素は、コンピューティングデバイスのコアまたはハードウェアアクセラレータである。
【0096】
例11は、例9、または本明細書の何らかの他の例に記載の1つ以上の非一時的なコンピュータ可読媒体を含み、ジョブはDMA要求に関連するジョブである。
【0097】
例12は、例9~11のいずれか、または本明細書の何らかの他の例に記載の1つ以上の非一時的なコンピュータ可読媒体を含み、ジョブは、より高い優先順位レベルのジョブであり、より高い優先順位レベルのジョブをキューに挿入することは、より高い優先順位レベルのジョブを、より低い優先順位レベルのジョブの実行の前に実行されるキューに挿入することを含む。
【0098】
例13は、例12、または本明細書の何らかの他の例に記載の1つ以上の非一時的なコンピュータ可読媒体を含み、より低い優先順位レベルのジョブは、TCBの識別の前にコンピューティングデバイスの構成要素によって識別されている。
【0099】
例14は、例12、または本明細書の何らかの他の例に記載の1つ以上の非一時的なコンピュータ可読媒体を含み、より低い優先順位レベルのジョブは、より高い優先順位レベルのジョブの挿入の前にキューに挿入されている。
【0100】
例15は、例9~11のいずれか、または本明細書の何らかの他の例に記載の1つ以上の非一時的なコンピュータ可読媒体を含み、行われるジョブのキューにジョブを挿入することは、ジョブに関連するAPIの遂行に基づく。
【0101】
例16は、例9~11のいずれか、または本明細書の何らかの他の例に記載の1つ以上の非一時的なコンピュータ可読媒体を含み、行われるジョブのキューは、4つの優先順位レベルを有するキューを含む。
【0102】
例17は、構成要素によって行われるジョブに関連するTCBを識別する手段と、TCBに基づいてジョブの優先順位レベルを識別する手段と、識別された優先順位レベルに基づいて、行われるジョブのキューにジョブを挿入する手段と、識別された優先順位レベルに基づいてジョブを行う手段と、を含む装置を含む。
【0103】
例18は、例17、または本明細書の何らかの他の例に記載の装置を含み、構成要素は、コンピューティングデバイスのコアまたはハードウェアアクセラレータである。
【0104】
例19は、例17、または本明細書の何らかの他の例に記載の装置を含み、ジョブはDMA要求に関連するジョブである。
【0105】
例20は、例17~19のいずれか、または本明細書の何らかの他の例に記載の装置を含み、ジョブは、より高い優先順位レベルのジョブであり、より高い優先順位レベルのジョブをキューに挿入する手段は、より高い優先順位レベルのジョブを、より低い優先順位レベルのジョブの実行の前に実行されるキューに挿入する手段を含む。
【0106】
例21は、例20、または本明細書における何らかの他の例に記載の装置を含み、より低い優先順位レベルのジョブは、TCBの識別前にコンピューティングデバイスの構成要素によって識別されている。
【0107】
例22は、例20、または本明細書の何らかの他の例に記載の装置を含み、より低い優先順位レベルのジョブは、より高い優先順位レベルのジョブの挿入の前にキューに挿入されている。
【0108】
例23は、例17~19のいずれか、または本明細書の何らかの他の例に記載の装置を含み、行われるジョブのキューにジョブを挿入することは、ジョブに関連するAPIの遂行に基づく。
【0109】
例24は、例17~19のいずれか、または本明細書の何らかの他の例に記載の装置を含み、行われるジョブのキューは、4つの優先順位レベルを有するキューを含む。
【0110】
例25は、メモリと、メモリと通信可能に結合された構成要素と、を備える装置を含み、構成要素は、構成要素によって行われるジョブに関連するTCBを識別し、TCBに基づいてジョブの優先順位レベルを識別し、識別された優先順位レベルに基づいて、行われるジョブのキューにジョブを挿入し、識別された優先順位レベルに基づいてジョブを行う。
【0111】
例26は、例25、または本明細書の何らかの他の例に記載の装置を含み、構成要素は、コンピューティングデバイスのコアまたはハードウェアアクセラレータである。
【0112】
例27は、例25、または本明細書の何らかの他の例に記載の装置を含み、ジョブはDMA要求に関連するジョブである。
【0113】
例28は、例25~27のいずれか、または本明細書の何らかの他の例に記載の装置を含み、ジョブは、より高い優先順位レベルのジョブであり、より高い優先順位レベルのジョブをキューに挿入することは、より高い優先順位レベルのジョブを、より低い優先順位のジョブの実行の前に実行されるキューに挿入することを含む。
【0114】
例29は、例28、または本明細書の何らかの他の例に記載の装置を含み、より低い優先順位レベルのジョブは、TCBの識別の前にコンピューティングデバイスの構成要素によって識別されている。
【0115】
例30は、例28、または本明細書の何らかの他の例に記載の装置を含み、より低い優先順位レベルのジョブは、より高い優先順位レベルのジョブの挿入の前にキューに挿入されている。
【0116】
例31は、例25 ~27のいずれか、または本明細書の何らかの他の例に記載の装置を含み、行われるジョブのキューにジョブを挿入することは、ジョブに関連するAPIの遂行に基づく。
【0117】
例32は、例25~27のいずれか、または本明細書の何らかの他の例に記載の装置を含み、行われるジョブのキューは、4つの優先順位レベルを有するキューを含む。
【0118】
例33は、プロセッサであって、TCBにおいて、TCBの優先順位レベルの指標を識別し、優先順位レベルの指標に基づいて、複数のTCBのキュー内の位置を識別し、かつ識別された位置でキューにTCBを挿入する、プロセッサと、プロセッサと通信可能に結合されたハードウェアアクセラレータであって、複数のTCBのキュー内のTCBに関連するジョブを行い、複数のTCBのキュー内のTCBの順序に従ってTCBに関連するジョブを行うハードウェアアクセラレータと、を備える、コンピューティングデバイスを含む。
【0119】
例34は、例33、または本明細書の何らかの他の例に記載のコンピューティングデバイスを含み、優先順位レベルの指標は、TCBにおける2ビットインジケータである。
【0120】
例35は、例33、または本明細書の何らかの他の例に記載のコンピューティングデバイスを含み、プロセッサは、TCBの伝送の前に停止要求をさらに送信する。
【0121】
例36は、例33~35のいずれか、または本明細書の何らかの他の例に記載のコンピューティングデバイスを含み、キューは、第1の優先順位レベルのTCBの第1のサブ部分と、第1の優先順位レベルよりも低い第2の優先順位レベルのTCBの第2のサブ部分とを含み、ハードウェアアクセラレータは、TCBの第2のサブ部分に関連するジョブを行う前に、TCBの第1のサブ部分に関連するジョブを行う。
【0122】
例37は、例36、または本明細書の何らかの他の例に記載のコンピューティングデバイスを含み、TCBは、第1の優先順位レベルであり、プロセッサはさらに、現在実行中のTCBの優先順位レベルを識別し、現在実行中のTCBの優先順位レベルに基づいて、キュー内の位置を識別する。
【0123】
例38は、例37、または本明細書の何らかの他の例に記載のコンピューティングデバイスを含み、現在実行中のTCBの優先順位レベルは、第1の優先順位レベルであり、位置は、TCBの第1のサブ部分の末端にある。
【0124】
例39は、例37、または本明細書の何らかの他の例に記載のコンピューティングデバイスを含み、現在実行中のTCBの優先順位レベルは、第2の優先順位レベルであり、位置は、現在実行中のTCBの後であり、かつTCBの第2のサブ部分の他のTCBの前である。
【0125】
例40は、ハードウェアアクセラレータと通信するための通信インターフェースと、通信インターフェースと結合された論理であって、TCBにおいて、TCBの優先順位レベルの指標を識別し、優先順位レベルの指標に基づいて、複数のTCBのキュー内の位置にTCBを挿入し、ハードウェアアクセラレータが、キュー内のそれらの位置に基づいて、複数のTCBのそれぞれを実行する、論理と、を備えるプロセッサを含む。
【0126】
例41は、例40、または本明細書の何らかの他の例に記載のプロセッサを含み、優先順位レベルの指標は、TCBにおける2ビットインジケータである。
【0127】
例42は、例40、または本明細書の何らかの他の例に記載のプロセッサを含み、優先順位レベルの指標は、TCBが、複数の可能な優先順位レベルのうちの1つにあることを示す。
【0128】
例43は、例40~42、または本明細書の何らかの他の例に記載のプロセッサを含み、ここで、TCBは、ハードウェアアクセラレータが、TCBを処理する前にプロセッサからトリガを受信するのを待つという指標、ハードウェアアクセラレータが、TCBの完了に関連してプロセッサに割り込みを送信するという指標、またはハードウェアアクセラレータが、TCBの完了に関連してプロセッサにトリガを送信するという指標をさらに含む。
【0129】
例44は、例40~42のいずれか、または本明細書の何らかの他の例に記載のプロセッサを含み、TCBは、TCBに関連するジョブを行うために使用される計算の種類の指標をさらに含む。
【0130】
例45は、例40~42のいずれか、または本明細書の何らかの他の例に記載のプロセッサを含み、TCBは、複数のTCBのキューにおける先のTCBの指標をさらに含む。
【0131】
例46は、命令を含む1つ以上の非一時的なコンピュータ可読媒体を含み、命令は、電子デバイスによって実行されると、電子デバイスのプロセッサに、複数のTCBのキューを識別することであって、複数のTCBのそれぞれのTCBが、キュー内のそれぞれのTCBの優先順位レベルの指標を含み、ハードウェアアクセラレータが、TCBの優先順位レベルに従ってそれぞれのTCBに関連するジョブを行う、識別することと、キューに関連するアプリケーションプログラミングインターフェース(API)を実行すること、APIの実行に基づいてキューを改変することと、を行わせる。
【0132】
例47は、例46、または本明細書の何らかの他の例に記載の1つ以上の非一時的なコンピュータ可読媒体を含み、APIは、TCBの優先順位レベルの指標に基づいて複数のTCBのキュー内へのTCBの挿入に関連する。
【0133】
例48は、例47、または本明細書の何らかの他の例に記載の1つ以上の非一時的なコンピュータ可読媒体を含み、TCBの挿入は、優先順位レベルでの最後のTCBを示すフラグに関連する。
【0134】
例49は、例46、または本明細書の何らかの他の例に記載の1つ以上の非一時的なコンピュータ可読媒体を含み、APIは、キューからのTCBの削除に関連する。
【0135】
例50は、例46、または本明細書の何らかの他の例に記載の1つ以上の非一時的なコンピュータ可読媒体を含み、APIは、キューのTCBの改変に関連する。
【0136】
例51は、例46、または本明細書の何らかの他の例に記載の1つ以上の非一時的なコンピュータ可読媒体を含み、APIは、キュー内のTCBの実行状況の識別に関連する。
【0137】
例52は、例46に記載の1つ以上の非一時的なコンピュータ可読媒体を含み、APIは、ハードウェアアクセラレータのリセットに関連する。
【0138】
例53は、例1~52のいずれか、またはそれらのどれかのサブセットもしくは組み合わせの主題を行う方法を含む。
【0139】
例56は、命令を含む1つ以上の非一時的なコンピュータ可読媒体を含み、命令は、コンピューティングデバイスの1つ以上の要素による命令の実行時に、コンピューティングデバイスの構成要素に、例1~52のいずれか、またはそれらのどれかのサブセットもしくは組み合わせに記載の主題を行わせる。
【0140】
例55は、例1~52のいずれか、またはそれらのどれかのサブセットもしくは組み合わせに記載の主題を行うか、または行わせる回路を含む装置を含む。
【0141】
例56は、例1~52のいずれか、またはそれらのどれかのサブセットもしくは組み合わせに記載の主題を行うか、または行わせる手段を備える装置を含む。
【0142】
様々な実施形態は、上記の(および)連結形態で記載される実施形態の代替的(または)実施形態を含む、上記の実施形態の任意の好適な組み合わせを含んでもよい(例えば、「および」は、「および/または」であってもよい)。さらに、いくつかの実施形態は、実行されると、上記の実施形態のいずれかのアクションをもたらす、そこに格納された命令を有する1つ以上の製造品(例えば、非一時的なコンピュータ可読媒体)を含み得る。さらに、いくつかの実施形態は、上記の実施形態の様々な動作を成し遂げる任意の好適な手段を有する装置またはシステムを含んでもよい。
【0143】
例示された実施形態の上記の説明は、本要約に記載されるものを含むが、開示された精密な形態に関して網羅的または限定的であることを意図しない。様々な実施形態または概念の具体的な実施態様および例は、例示的な目的のために本明細書に記載されるが、関連する技術分野の当業者が認識するように、様々な等価な改変が可能であり得る。これらの改変は、上記の詳細な説明、要約、図面、または特許請求の範囲に照らしてなされ得る。
【符号の説明】
【0144】
202 高優先順位
204 中優先順位
206 低優先順位
201 メモリ
203 システムバス
205 ハードウェアアクセラレータ
210 プロセッサ
212 TCB
214 先に実行されたTCB
218 現在実行中のTCB
220 実行されるTCB
236,238 要素