(57)【要約】コンピューティングデバイスが開示される。コンピューティングデバイスは、高速処理ユニット（ＡＰＵ）を備える。ＡＰＵは、少なくとも第１の異種システムアーキテクチャ（ＨＳＡ）コンピューティングデバイスと、第１のＨＳＡコンピューティングデバイスとは異なるタイプの少なくとも第２のＨＳＡコンピューティングデバイスと、ＡＰＵが少なくとも１つのメモリと通信するのを可能にするＨＳＡメモリ管理ユニット（ＨＭＭＵ）と、を備える。コンピューティングタスクは、少なくとも第１のＨＳＡコンピューティングデバイス又は少なくとも第２のＨＳＡコンピューティングデバイスで実行するように設定されたＨＳＡ管理キューにエンキューされる。コンピューティングタスクは、コンピューティングタスクが再エンキューされた回数をトリガする繰り返しフラグに基づいて、ＨＳＡ管理キューに再エンキューされる。繰り返しフィールドは、コンピューティングタスクが再エンキューされる毎にデクリメントされる。繰り返しフィールドは、コンピューティングタスクの再エンキューを無制限に可能にする特別な値（例えば、−１）を含んでもよい。【選択図】図１０
2018536945.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも第１のコンピューティングデバイスであって、当該第１のコンピューティングデバイスに関連する少なくとも１つの第１のコンピューティングデバイスキューを有する少なくとも第１のコンピューティングデバイスと、少なくとも第２のコンピューティングデバイスであって、当該第２のコンピューティングデバイスに関連する少なくとも１つの第２のコンピューティングデバイスキューを有する少なくとも第２のコンピューティングデバイスと、を含む、処理ユニットと、
少なくとも１つのコンピューティングタスクの生成及び終了のためにオペレーティングシステムを使用することのオーバーヘッドを低減するために、前記少なくとも１つの第１のコンピューティングデバイスキュー及び前記少なくとも１つの第２のコンピューティングデバイスキューのうち少なくとも１つを介して、前記少なくとも１つのコンピューティングタスクのエンキューを直接制御するタイマ装置と、を備える、
コンピューティングデバイス。
【請求項２】
前記少なくとも１つのコンピューティングタスクは、タイムベースの遅延を用いてエンキューされる、請求項１のコンピューティングデバイス。
【請求項３】
前記タイムベースはデバイスタイマを使用する、請求項２のコンピューティングデバイス。
【請求項４】
前記タイムベースはユニバーサルタイマを使用する、請求項２のコンピューティングデバイス。
【請求項５】
前記少なくとも１つのコンピューティングタスクは、遅延キューがゼロに達したときに実行される、請求項２のコンピューティングデバイス。
【請求項６】
前記第１のコンピューティングデバイスは待ち時間計算ユニットを含む、請求項１のコンピューティングデバイス。
【請求項７】
前記第２のコンピューティングデバイスはスループット計算ユニットを含む、請求項１のコンピューティングデバイス。
【請求項８】
エンキューすることは、計算リソースへの直接アクセスを可能にする、請求項１のコンピューティングデバイス。
【請求項９】
前記第２のコンピューティングデバイスは、前記第１のコンピューティングデバイスとは異なるタイプである、請求項１のコンピューティングデバイス。
【請求項１０】
前記処理ユニットは異種である、請求項１のコンピューティングデバイス。
【請求項１１】
前記少なくとも１つのコンピューティングタスクは、前記少なくとも１つの第１のコンピューティングデバイスキュー及び前記少なくとも１つの第２のコンピューティングデバイスキューのうち少なくとも１つを介して再エンキューされる、請求項１のコンピューティングデバイス。
【請求項１２】
前記再エンキューは、フラグを用いて有効にされる、請求項１１のコンピューティングデバイス。
【請求項１３】
前記再エンキューは、前記少なくとも１つのコンピューティングタスクが再エンキューされた回数をトリガする繰り返しフラグに基づいて生じる、請求項１１のコンピューティングデバイス。
【請求項１４】
前記繰り返しフィールドは、前記少なくとも１つのコンピューティングタスクが再エンキューされる毎にデクリメントされる、請求項１３のコンピューティングデバイス。
【請求項１５】
前記繰り返しフィールドは、前記少なくとも１つのコンピューティングタスクの再エンキューを無制限に可能にするための特別な値を含む、請求項１３のコンピューティングデバイス。
【請求項１６】
前記特別な値は負の値である、請求項１５のコンピューティングデバイス。
【請求項１７】
少なくとも１つの異種システムアーキテクチャ（ＨＳＡ）コンピューティングユニット（Ｈ−ＣＵ）と、
前記ＨＳＡの少なくとも１つのプロセッサが少なくとも１つのメモリと通信するのを可能にするＨＳＡメモリ管理ユニット（ＨＭＭＵ）と、を備え、
少なくとも１つのコンピューティングタスクは、前記少なくとも１つのプロセッサで実行するように設定されたＨＳＡ管理キューにエンキューされる、
コンピューティングデバイス。
【請求項１８】
前記少なくとも１つのコンピューティングタスクは、タイムベースの遅延キューを用いてエンキューされる、請求項１７のコンピューティングデバイス。
【請求項１９】
前記少なくとも１つのコンピューティングタスクは、前記ＨＳＡ管理キューに再エンキューされる、請求項１７のコンピューティングデバイス。
【請求項２０】
前記再エンキューは、前記少なくとも１つのコンピューティングタスクが再エンキューされた回数をトリガする繰り返しフラグに基づいて生じる、請求項１９のコンピューティングデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１５年１２月８日に出願された米国特許出願第１４／９６２，７８４号の利益を主張するものであり、この内容は、本明細書中に完全に記載されているように参照により援用される。
【０００２】
開示された実施形態は、概して、コンピューティングシステムにおけるタスクのタイムベーススケジューリングに関する。
【背景技術】
【０００３】
例えば、キープアライブメッセージ、ヘルスモニタリングレポート、及び、チェックポイントの実行等の多くのコンピューティング動作を定期的に実行する必要がある。他の可能性としては、システム負荷平均、電力測定基準の計算等のクラスタ管理ソフトウェアによって使用される計算を定期的に実行することが含まれる。期間の定まった処理に加えて、プロセスは、例えばランダムなタイムベースの統計サンプリング等のように、将来のランダムな時間にタスク実行をスケジュールすることを望む場合がある。
【０００４】
この問題を解決するために、ＵＮＩＸ（登録商標）及びＬＩＮＵＸ（登録商標）のｃｒｏｎ及びａｔｄ機能によって提供されるような定期的なプロセスの実行によって、プロセスのタイムベーススケジューリングが可能になる。これらの解決手段は、プロセス生成及びメモリ使用等にかなりのオーバーヘッドを伴い、プロセスの生成及び終了のためにオペレーティングシステム（ＯＳ）を経由して動作し、標準的な中央処理装置（ＣＰＵ）の処理に限定される。したがって、プロセスの生成及び終了のためにＯＳを経由するオーバーヘッドの無い、コンピュータシステムのタスクのタイムベーススケジューリングをタスクによって直接行う方法及び装置が必要とされている。
【発明の概要】
【課題を解決するための手段】
【０００５】
コンピューティングデバイスが開示される。コンピューティングデバイスは、高速処理ユニット（ＡＰＵ：Accelerated Processing Unit）を備える。ＡＰＵは、少なくとも第１の異種システムアーキテクチャ（ＨＳＡ：heterogeneous system architecture）コンピューティングデバイスと、第１のＨＳＡコンピューティングデバイスとは異なるタイプの少なくとも第２のＨＳＡコンピューティングデバイスと、ＡＰＵが少なくとも１つのメモリと通信するのを可能にするＨＳＡメモリ管理ユニット（ＨＭＭＵ）と、を備える。少なくとも１つのコンピューティングタスクは、少なくとも第１のＨＳＡコンピューティングデバイス、又は、少なくとも第２のＨＳＡコンピューティングデバイス上で実行するように設定されたＨＳＡ管理キューに加えられる（エンキューされる）。少なくとも１つのコンピューティングタスクは、タイマを使用するタイムベースの遅延キューを用いてエンキューされ、遅延がゼロに達すると実行される。少なくとも１つのコンピューティングタスクは、少なくとも１つのコンピューティングタスクが再エンキューされた回数をトリガする繰り返しフラグに基づいて、ＨＳＡ管理キューに再エンキューされる。繰り返しフィールドは、少なくとも１つのコンピューティングタスクが再エンキューされる毎にデクリメントされる。繰り返しフィールドは、少なくとも１つのコンピューティングタスクの再エンキューを無制限に可能にするための特別な値（例えば、−１）を含んでもよい。
【０００６】
添付の図面と併せて例として与えられる以下の説明から、より詳細な理解が得られるであろう。
【図面の簡単な説明】
【０００７】
【図１】例示的なＡＰＵ等のプロセッサブロックのブロック図である。
【図２】同種（homogenous）コンピュータシステムを示す図である。
【図３】異種コンピュータシステムを示す図である。
【図４】ＧＰＵプロセッサに関連する付加的なハードウェアの詳細を伴う図３の異種コンピュータシステムを示す図である。
【図５】少なくとも１つのタイマ装置と、プロセッサ毎の複数のキュー構成と、を組み込んだ異種コンピュータシステムを示す図である。
【図６】他のプロセッサによって占有されたキューを有するコンピュータシステムを示す図である。
【図７】異種システムアーキテクチャ（ＨＳＡ）プラットフォームを示す図である。
【図８】スループット計算ユニットと待ち時間計算ユニットとの間のキューイングを示す図である。
【図９】時間遅延された作業項目のフロー図である。
【図１０】タスクキューにタスクを定期的に再挿入するフロー図である。
【発明を実施するための形態】
【０００８】
ＨＳＡプラットフォームは、ユーザレベルのコードがＨＳＡ管理デバイス上で実行するためにタスクを直接エンキューするメカニズムを提供する。これらには、スループット計算ユニット（ＴＣＵ）、待ち時間計算ユニット（ＬＣＵ）、ＤＳＰ、固定機能アクセラレータ等が含まれてもよいが、これらに限らない。元の実施形態では、ユーザプロセスは、ＨＳＡ管理デバイスへ即時ディスパッチするために、ＨＳＡ管理タスクキューにタスクをエンキューすることを担当している。このＨＳＡの拡張によって、指定された将来の時間に実行されるようにタスクをエンキューするメカニズムを提供する。また、これにより、タスクが一度発行されるが、その後、タスクが指定された間隔で実行するために適切なタスクキュー上で繰り返し再エンキューされるように、定期的な再エンキューを可能にし得る。本システム及び方法は、ＨＳＡのコンテキスト内で、ＵＮＩＸ（登録商標）／Ｌｉｎｕｘ（登録商標）のｃｒｏｎサービスにサービスを提供する。本システム及び方法は、プロセスの生成及び終了のためにＯＳを経由するオーバーヘッド無しに、計算リソースのスケジューリング及び使用をタスクによって直接可能にするメカニズムを提供する。本システム及び方法は、タイムベーススケジューリングの概念を、単に標準的なＣＰＵ処理だけではなく、全てのＨＳＡ管理デバイスにまで拡張することもできる。
【０００９】
コンピューティングデバイスが開示さる。処理ユニットの任意の集合を使用してもよいが、本システム及び方法では異種システムアーキテクチャ（ＨＳＡ）デバイスを使用することができ、例示的なコンピューティングデバイスは、高速処理ユニット（ＡＰＵ）を備える。ＡＰＵは、少なくとも１つのコアを有する少なくとも１つの中央処理装置（ＣＰＵ）と、少なくとも１つのＨＳＡ計算ユニット（Ｈ−ＣＵ）を含む少なくとも１つのグラフィックス処理ユニット（ＧＰＵ）と、ＡＰＵが少なくとも１つのメモリと通信するのを可能にするＨＳＡメモリ管理ユニット（ＨＭＭＵ又はＨＳＡ  ＭＭＵ）と、を備える。他のデバイスは、プロセッシングインメモリ（ＰＩＭ）、ネットワークデバイス等のＨＳＡデバイスを含んでもよい。少なくとも１つのコンピューティングタスクは、少なくとも１つのＣＰＵ又は少なくとも１つのＧＰＵで実行するように設定されたＨＳＡ管理キューにエンキューされる。少なくとも１つのコンピューティングタスクは、デバイスタイマ及び／又はユニバーサルタイマを使用するタイムベースの遅延キューを用いてエンキューされ、以下に説明するように、例えばＤＥＬＡＹ  ＶＡＬＵＥが使い果されたとき等のように遅延キューがゼロに達すると、実行される。少なくとも１つのコンピューティングタスクは、少なくとも１つのコンピューティングタスクが再エンキューされた回数をトリガする繰り返しフラグに基づいて、ＨＳＡ管理キューに再エンキューされる。繰り返しフィールドは、少なくとも１つのコンピューティングタスクが再エンキューされる毎にデクリメントされる。繰り返しフィールドは、少なくとも１つのコンピューティングタスクの再エンキューを無制限に可能にするための特別な値を含んでもよい。特別な値は、負の値であってもよい。
【００１０】
図１は、１つ以上の開示された実施形態を実装することができる例示的なデバイス１００のブロック図である。デバイス１００は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、又は、タブレットコンピュータを含んでもよい。デバイス１００は、プロセッサ１０２と、メモリ１０４と、ストレージ１０６と、１つ以上の入力デバイス１０８と、１つ以上の出力デバイス１１０と、を含む。デバイス１００は、オプションとして、入力ドライバ１１２及び出力ドライバ１１４を含んでもよい。デバイス１００は、図１に示されていない追加のコンポーネントを含んでもよいことを理解されたい。
【００１１】
プロセッサ１０２は、中央処理装置（ＣＰＵ）、グラフィックス処理ユニット（ＧＰＵ）、同じダイ上に配置されたＣＰＵ及びＧＰＵ、又は、１つ以上のプロセッサコアを含んでもよく、各プロセッサコアはＣＰＵ又はＧＰＵであってもよい。メモリ１０４は、プロセッサ１０２と同じダイ上に配置されてもよいし、プロセッサ１０２とは別に配置されてもよい。メモリ１０４は、例えば、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ又はキャッシュ等の揮発性又は不揮発性メモリを含んでもよい。
【００１２】
ストレージ１０６は、例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク、又は、フラッシュドライブ等の固定ストレージ又はリムーバブルストレージを含んでもよい。入力デバイス１０８は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリックスキャナ、又は、ネットワーク接続（例えば、無線ＩＥＥＥ８０２信号を送信及び／又は受信するための無線ローカルエリアネットワークカード等）を含んでもよい。出力デバイス１１０は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、１つ以上のライト、アンテナ、又は、ネットワーク接続（例えば、無線ＩＥＥＥ８０２信号を送信及び／又は受信するための無線ローカルエリアネットワークカード等）を含んでもよい。
【００１３】
入力ドライバ１１２は、プロセッサ１０２及び入力デバイス１０８と通信し、プロセッサ１０２が入力デバイス１０８からの入力を受信するのを可能にする。出力ドライバ１１４は、プロセッサ１０２及び出力デバイス１１０と通信し、プロセッサ１０２が出力デバイス１１０に出力を送信するのを可能にする。入力ドライバ１１２及び出力ドライバ１１４は、オプションのコンポーネントであり、入力ドライバ１１２及び出力ドライバ１１４が存在しない場合には、デバイス１００が同じように動作することに留意されたい。
【００１４】
図２は、同種コンピュータシステム２００を示す図である。コンピュータシステム２００は、各ＣＰＵがタスクキューからタスクを取り出し、そのタスクを必要に応じて処理するように動作する。図２に示すように、特定のＸ８６  ＣＰＵとして表される一連のプロセッサ２４０が存在する。プロセッサは、タスク又はスレッドタスクをキュー２２０からプロセッサ２４０に取り出すために、ＣＰＵワーカ２３０に依存する。図示するように、複数のキュー２２０と、複数のＣＰＵワーカ２３０と、複数のＣＰＵ２４０と、が存在してもよい。ロードバランスを行うために、及び／又は、どのＣＰＵ２４０が所与のタスクを実行するか（すなわち、何れのキュー２２０にタスクが投入されるか）を指示するために、ランタイム２１０を使用してもよい。このランタイム２１０は、処理リソースを効果的に管理するために、ＣＰＵ全体のロードバランスを提供してもよい。ランタイム２１０は、例えば、ラベルを使用することによって、又は、アドレスを提供することによって、処理するために何れのプロセッサを使用するかを指示する特定のアプリケーションレベルの命令を含んでもよい。ランタイム２１０は、実行するプロセッサを選択するタスクを含む、アプリケーション及びオペレーティングシステムから生成されたタスクを含んでもよい。以下に説明するように、一実施形態では、ロードバランス及びキュー管理を提供するために、タイマ装置（この構成では図示されていないが、コンピュータシステム２００に適用可能である）を使用してもよい。
【００１５】
図３は、異種コンピュータシステム３００を示す図である。コンピュータシステム３００は、コンピュータシステム２００と同様に、各ＣＰＵがタスクキューからタスクを取り出し、そのタスクを必要に応じて処理するように動作する。図３に示すように、特定のＸ８６  ＣＰＵとして表される一連のプロセッサ３４０が存在する。コンピュータシステム２００の場合と同様に、これらのプロセッサ３４０の各々は、タスク又はスレッドタスクをキュー３２０からプロセッサ３４０に取り出すために、ＣＰＵワーカ３３０に依存する。図示するように、複数のキュー３２０と、複数のＣＰＵワーカ３３０と、複数のＣＰＵ３４０と、が存在してもよい。コンピュータシステム３００は、少なくとも１つのＧＰＵ３６０を含んでもよく、ＧＰＵ３６０のキュー３２０は、ＧＰＵマネージャ３５０を介して制御される。単一のＧＰＵ３６０のみが示されているが、ＧＰＵマネージャ３５０及びキュー３２０を有する任意の数のＧＰＵ３６０が使用されてもよいことを理解されたい。
【００１６】
ロードバランスを提供し、及び／又は、何れのＣＰＵ３４０又はＧＰＵ３６０が所与のタスクを実行するか（すなわち、何れのキュー３２０にタスクが投入されるか）を指示するために、ランタイム３１０を使用してもよい。このランタイム３１０は、処理リソースを効果的に管理するために、ＣＰＵ全体のロードバランスを提供してもよい。しかしながら、コンピュータシステム３００の異種性のために、ＧＰＵ３６０及びＣＰＵ３４０が各々のキュー３２０に対して異なった処理（例えば、パラレル対シリアル等）を行う場合があるので、ランタイム３１０は、キュー３２０内のタスク用に残っている処理量を決定するのがより困難になる。以下に説明するように、一実施形態では、ロードバランス及びキュー管理を提供するために、タイマ装置（この構成では図示されていないが、コンピュータシステム３００に適用可能である）を使用してもよい。
【００１７】
図４は、ＧＰＵプロセッサに関連する付加的なハードウェアの詳細を伴う図３の異種コンピュータシステム３００を示す図である。詳細には、図４に示すコンピュータシステム４００は、コンピュータシステム２００，３００と同様に、各ＣＰＵがタスクキューからタスクを取り出し、そのタスクを必要に応じて処理するように動作するコンピュータシステム４００を含む。図４に示すように、特定のＸ８６  ＣＰＵとして表される一連のプロセッサ４４０が存在する。コンピュータシステム２００，３００の場合と同様に、これらのプロセッサ４４０の各々は、タスク又はスレッドタスクをキュー４２０からプロセッサ４４０に取り出すために、ＣＰＵワーカ４３０に依存する。図示するように、複数のキュー４２０と、複数のＣＰＵワーカ４３０と、複数のＣＰＵ４４０と、が存在してもよい。コンピュータシステム４００は、少なくとも１つのＧＰＵ４６０を含んでよく、ＧＰＵ４６０のキュー４２０は、ＧＰＵマネージャ４５０を介して制御される。単一のＧＰＵ４６０のみが示されているが、ＧＰＵマネージャ４５０及びキュー４２０を有する任意の数のＧＰＵ４６０が使用されてもよいことを理解されたい。コンピュータシステム４００では、ＧＰＵマネージャ４５０に関連するメモリ４５５を含む付加的な詳細が提供されている。メモリ４５５は、ＧＰＵ４６０に関連する処理を実行するために利用されてもよい。
【００１８】
単一命令複数データ（ＳＩＭＤ）４６５を含む付加的なハードウェアを利用することもできる。いくつかのＳＩＭＤ４６５が示されているが、任意の数のＳＩＭＤ４６５が使用されてもよい。ＳＩＭＤ４６５は、複数のデータポイントで同時に同じ演算を行う（すなわち、同時（並列）計算が存在するが、所与の瞬間に単一のプロセス（命令）のみが存在する）複数の処理要素を有するコンピュータを含んでもよい。ＳＩＭＤ４６５は、ＧＰＵ４６０全体の処理が必要とされないタスク等のように、複数のタスクに対して同時に動作してもよい。これにより、例えば、処理能力のより良い割り当てを提供することができる。これは、概して、一度に１つの単一タスクの演算を行い、その後に次のタスクに移るＣＰＵ４４０とは対照的である。以下に説明するように、一実施形態では、ロードバランス及びキュー管理を提供するために、タイマ装置（この構成では図示されていないが、コンピュータシステム４００に適用可能である）を使用してもよい。
【００１９】
図５は、少なくとも１つのタイマ装置５９０と、プロセッサ毎の複数のキュー構成と、を組み込んだ異種コンピュータシステム５００を示す図である。図５に示すように、ＣＰＵ１  ５４０は、ＣＰＵ１  ５４０に関連付けられた２つのキュー５２０，５２５を有してもよい。キュー５２０は、図２〜図４に関して上述したタイプのキューであってもよく、アプリケーション／ランタイム５１０を介して制御及び／又は占有される。キュー５２５は、ＣＰＵ１  ５４０によって完了されたタスクから生成されたタスクをキュー５２５に投入する等して、ＣＰＵ１  ５４０によって占有され、制御されてもよい。ＣＰＵ１  ５４０について２つのキューが示されているが、アプリケーション／ランタイム５１０、及び／又は、ＣＰＵ１  ５４０からの任意の数のキューを使用することができる。
【００２０】
図５に示すように、ＣＰＵ２  ５４０は、複数のキュー５２０，５５５を有してもよい。キュー５２０は、図２〜図４に関して上述したタイプのキューであってもよく、アプリケーション／ランタイム５１０を介して制御及び／又は占有される。キュー５５５は、キュー５２５がＣＰＵ５４０によって占有されるという点で、キュー５２５と概念的に類似したキューである。キュー５５５は、キュー５５５がフィードする処理ユニット（ＣＰＵ２）以外の別の処理ユニット（この場合、ＧＰＵ５６０）によって占有される。
【００２１】
図５に示すように、キュー５３５は、ＣＰＵ２  ５４０によって占有されており、ＧＰＵ５６０にフィードする。キュー５４５は、ＧＰＵ５６０にフィードし、ＧＰＵ５６０によって占有される。キュー５２０は、ＧＰＵ５６０にフィードし、アプリケーション／ランタイム５１０によって占有される。
【００２２】
図５には、タイマ装置５９０も示されている。タイマ装置５９０は、システムの残りの部分から、特にアプリケーション／ランタイム５１０から自律的にタスクを生成してもよい。図示するように、タイマ装置５９０は、システム５００内の１つ以上のプロセッサのタスクをキューに投入することができる。具体的には、タイマ装置５９０は、ＣＰＵ１  ５４０、ＣＰＵ２  ５４０、又は、ＧＰＵ５６０で実行されるように、キュー５２０を占有してもよい。タイマ装置は、各キュー５２５，５３５，５４５，５５５に対応するプロセッサ５４０，５６０で実行されるタスクを、各キュー５２５，５３５，５４５，５５５に投入してもよい。
【００２３】
図６は、他のプロセッサによって占有されたキューを有するコンピュータシステム６００を示す図である。コンピュータシステム６００は、プロセッサ毎に複数のキュー構成を組み込んだ異種コンピュータシステムを示す図５のコンピュータシステム５００に類似している。図６に示すように、ＣＰＵ１  ６４０は、ＣＰＵ１  ６４０に関連付けられた２つのキュー６２０，６２５を有してもよい。キュー６２０は、図２〜図５に関して上述したタイプのキューであってもよく、アプリケーション／ランタイム６１０を介して制御及び／又は占有される。キュー６２５は、ＣＰＵ１  ６４０によって完了されたタスクから生成されたタスクをキュー６２５に投入する等して、ＣＰＵ１  ６４０によって占有され、制御されてもよい。ＣＰＵ１  ６４０に対して２つのキューが示されているが、アプリケーション／ランタイム６１０及び／又はＣＰＵ１  ６４０からの任意の数のキューを使用してもよい。
【００２４】
図６に示すように、ＣＰＵ２  ６４０は、複数のキュー６２０，６５５を有してもよい。キュー６２０は、図２〜図５に関して上述したタイプのキューであってもよく、アプリケーション／ランタイム６１０を介して制御及び／又は占有される。キュー６５５は、キュー６２５がＣＰＵ６４０によって占有されるという点で、キュー６２５と概念的に類似したキューである。キュー６５５は、キュー６５５がフィードする処理ユニット（ＣＰＵ２）以外の別の処理ユニット（この場合、ＧＰＵ６６０）によって占有される。
【００２５】
図６に示すように、キュー６３５は、ＣＰＵ２  ６４０によって占有され、ＧＰＵ６６０にフィードする。キュー６４５は、ＧＰＵ６６０にフィードし、ＧＰＵ６６０によって占有される。キュー６２０は、ＧＰＵ６６０にフィードし、アプリケーション／ランタイム６１０によって占有される。
【００２６】
図６は、各キュー６２０，６２５，６３５，６４５，６５５へのタスクの投入を示している。キュー６２５の場合、キューには２つのタスクが存在するが、任意の数のタスクが使用されてもよいし、投入されてもよい。キュー６３５には、２つのタスクが投入されており、キュー６４５には、２つのタスクが投入されており、キュー６５５には、１つのタスクが投入されている。ここに示されるタスクの数は例示的なものであって、ゼロからキューに保持され得る数までのタスクを含む任意の数のタスクがキューに投入されてもよい。
【００２７】
図７は、異種システムアーキテクチャ（ＨＳＡ）プラットフォーム７００を示す図である。ＨＳＡ高速処理ユニット（ＡＰＵ）７１０は、マルチコアＣＰＵ７２０と、複数のＨＳＡ計算ユニット（Ｈ−ＣＵ）７３２，７３４，７３６を有するＧＰＵ７３０と、ＨＳＡメモリ管理ユニット（ＨＭＭＵ又はＨＳＡ  ＭＭＵ）７４０と、を備えてもよい。ＣＰＵ７２０は、図７に示すコア７２２，７２４，７２６，７２８を有する任意の数のコアを含んでもよい。図７には３つのＨ−ＣＵが示されているが、ＧＰＵ７３０は、任意の数のＨ−ＣＵを含んでもよい。説明した実施形態では、ＨＳＡを具体的に説明、図示しているが、本システム及び方法は、図２〜図６に記載されるシステム等のように同種又は異種システムに利用され得る。
【００２８】
ＨＳＡ  ＡＰＵ７１０は、システムメモリ７５０と通信してもよい。システムメモリ７５０は、コヒーレントシステムメモリ７５２及び非コヒーレントシステムメモリ７５７の少なくとも一方を含んでもよい。
【００２９】
ＨＳＡ７００は、基本的なコンピューティング要素の統一されたビューを提供することができる。ＨＳＡ７００は、プログラマが、ＣＰＵ７２０（待ち時間計算ユニットとも呼ばれる）と、ＧＰＵ７３０（スループット計算ユニットとも呼ばれる）とを、各々の最良の属性から恩恵を受けながらシームレスに統合するアプリケーションを書くのを可能にする。
【００３０】
ＧＰＵ７３０は、近年、純粋なグラフィックアクセラレータから例えばＯｐｅｎＣＬやＤｉｒｅｃｔＣｏｍｐｕｔｅ等の標準的なＡＰＩ及びツールによってサポートされる、より汎用的な並列プロセッサに移行している。これらのＡＰＩは有望な出発点であるが、ＣＰＵ７２０とＧＰＵ７３０との間の異なるメモリ空間、非仮想化ハードウェア等を含む一般的なプログラミングタスク用のＣＰＵ７２０と同様に滑らかにＧＰＵ７３０を使用可能にする環境を生成するには、多くのハードルが残っている。ＨＳＡ７００は、これらのハードルを取り除き、プログラマが従来のマルチスレッドＣＰＵ７２０のピアとしてＧＰＵ７３０の並列プロセッサを利用することを可能にする。ピアデバイスは、他のデバイスと同じメモリコヒーレンシドメインを共有するＨＳＡデバイスとして定義することができる。
【００３１】
ＨＳＡデバイス７００は、キューを用いて互いに通信する。キューは、ＨＳＡアーキテクチャの不可欠な部分である。待ち時間プロセッサ７２０は、ＣｏｎｃＲＴやスレッディングビルディングブロックのような一般的なタスクキューイングランタイムにおいて、キュー内で互いに計算要求を既に送信している。待ち時間プロセッサ７２０及びスループットプロセッサ７３０は、ＨＳＡを用いて、タスクを互いの及び自己のキューに加えてもよい。ＨＳＡランタイムは、全てのキュー生成及び破棄動作を実行する。キューは、プロデューサがコンシューマの要求を配置する物理メモリ領域である。ＨＳＡハードウェアの複雑さに応じて、ソフトウェア又はハードウェアの任意の組み合わせによってキューを管理してもよい。ハードウェア管理キューは、待ち時間プロセッサ７２０上で実行するアプリケーションが、オペレーティングシステムコールが介在する必要無しに作業をスループットプロセッサ７３０のキューに直接加えることができるという意味において、大きなパフォーマンス上の利点を有する。これにより、デバイス間の通信待ち時間が非常に短くなる。この場合、スループットプロセッサ７３０デバイスは、ピアデバイスと見なすことができる。待ち時間プロセッサ７２０は、キューを有してもよい。これにより、任意のデバイスが他のデバイスの作業をキューに加えることを可能にする。
【００３２】
詳細には、図８に示すように、待ち時間プロセッサ７２０は、スループットプロセッサ７３０にキューイングしてもよい。これは、ＯｐｅｎＣＬ型のキューイングの典型的なシナリオである。スループットプロセッサ７３０は、（自身を含む）別のスループットプロセッサ７３０にキューイングすることができる。これにより、スループットプロセッサ７３０上で実行するワークロードが、待ち時間プロセッサ７２０への往復無しに追加の作業をキューイングすることが可能になり、かなりの待ち時間が許容されることが多い。スループットプロセッサ７３０は、待ち時間プロセッサ７２０にキューイングしてもよい。これにより、スループットプロセッサ７３０上で実行するワークロードが、メモリ割り当て又はＩ／Ｏ等のシステム動作を要求することができる。
【００３３】
ＨＳＡタスクキューイングモデルは、即時実行のためにＨＳＡ管理キューにタスクをエンキューする機能を提供する。この拡張によって、（１）タスクの遅延エンキュー及び／又は実行、（２）タスクキューへのタスクの定期的な再挿入の２つの追加機能が可能になる。
【００３４】
タスクの遅延エンキュー及び／又は実行のために、ＨＳＡデバイス７００は、所定の間隔の後にタイムベースのスケジュール／遅延キューを調べるように設定可能なタイマ機能を利用してもよい。図９を参照すると、時間が遅延した作業項目のフロー図が示されている。スケジュールされたタスクの実行を要求するコンピューティングデバイスは、タスクを標準タスクキューにエンキューすることができる。エンキューされた作業項目は、作業項目の遅延フィールドの値（ＤＥＬＡＹ  ＶＡＬＵＥ９１０）を用いて、時間が遅延した作業項目であるか否かを示す情報を含んでもよい。ＤＥＬＡＹ  ＶＡＬＵＥ９１０がゼロである場合（９１５）、作業項目は、即時ディスパッチのためにエンキューされてもよい（９２０）。ＤＥＬＡＹ  ＶＡＬＵＥ９１０がゼロより大きい場合（９２５）には、ＤＥＬＡＹ  ＶＡＬＵＥ９１０は、ステップ９３０においてタスクの実行を延期する時間（ＤＥＬＡＹ  ＶＡＬＵＥに基づく遅延）を決定するのに使用される値を表す。例えば、ＤＥＬＡＹ  ＶＡＬＵＥ９１０は、タスクの実行を遅らせるＨＳＡプラットフォームクロックのティック数を示してもよい。ＤＥＬＡＹ  ＶＡＬＵＥ９１０によって示される遅延を使い果たした後、ステップ９４０においてタスクが実行されてもよい。
【００３５】
タイマの実装は、作業項目で指定されているよりも大きな時間粒度に制限される場合がある。この場合、実装において、タスクのスケジュールする方法を決定するためのルールを選択してもよい。例えば、実装において、最も近い時間単位に丸めてもよいし、次に高い又は次に低い時間単位に丸めることを決定してもよい。
【００３６】
作業項目情報には、タスクを再エンキューするかどうかを示す情報と、再エンキューされる場合、再エンキューされる回数及び再エンキュースケジュールポリシーを示す情報と、が含まれてもよい。これにより、タスクキューへのタスクの定期的な再挿入を可能にし得る。作業項目は、ＲＥ−ＥＮＱＵＥＵＥ  ＦＬＡＧを含んでもよい。ＦＬＡＧがゼロでない場合には、作業項目が実行を完了すると、ＦＬＡＧは、ＲＥＰＥＴＩＴＩＯＮ  ＦＩＥＬＤの値と、ＤＥＬＡＹ  ＶＡＬＵＥの値と、定期的なＦＬＡＧの値に基づく再エンキュースケジュールポリシーと、に基づいて、再スケジュールされてもよい。
【００３７】
図１０を参照すると、タスクキューへのタスクの定期的な再挿入のフロー図が示されている。このフローは、ステップ１０１０で実行されるタスクの完了から開始し、これにより定期的な再挿入が可能になる。ステップ１０２０において、ＲＥ−ＥＮＱＵＥＵＥ  ＦＬＡＧが調べられる。ＲＥ−ＥＮＱＵＥＵＥがゼロの場合には、ステップ１０６０において、定期的な再挿入が終了してもよい。ＲＥ−ＥＮＱＵＥＵＥ  ＦＬＡＧがゼロでない場合には、再エンキューロジックは、ステップ１０３０において、ＲＥＰＥＴＩＴＩＯＮ  ＦＩＥＬＤを調べることによって、再エンキューする回数を決定してもよい。ＲＥＰＥＴＩＴＩＯＮ  ＦＩＥＬＤが＞０の場合にはタスクが再エンキューされ、ＲＥＰＥＴＩＴＩＯＮ  ＦＩＥＬＤは、ステップ１０４０において、１つだけデクリメントされる。ＲＥＰＥＴＩＴＩＯＮ  ＦＩＥＬＤが０に達すると、ステップ１０６０において、タスクは、もはや再エンキューされない。−１等の特別な値の繰り返し値は、ステップ１０５０において、タスクが常に再エンキューされることを示す。この場合、ＲＥＰＥＴＩＴＩＯＮ  ＦＩＥＬＤは、各タスクの実行後にデクリメントされない。
【００３８】
タスクが再エンキューされる時間間隔は、ＰＥＲＩＯＤＩＣ  ＦＬＡＧの値に基づいている。ＦＬＡＧがゼロでない場合には、タスクは、ＤＥＬＡＹ  ＦＩＥＬＤの間隔で再エンキューされる。１つの拡張オプションは、ランダムな間隔で再エンキューするのを可能にすることである。これにより、ランダムなタイムベースの実行をサポートすることができる。これは、データストリーム、システムアクティビティ、モニタされた値等のランダムベースのサンプリングに有用となり得る。このランダムベースのサンプリングを達成するために、ＰＥＲＩＯＤＩＣ  ＦＬＡＧがゼロの場合には、間隔は、定期的ではなくランダムであり、再エンキュー間隔は、０からＤＥＬＡＹ  ＦＩＥＬＤの値までの範囲でランダムに選択される。言い換えれば、ＤＥＬＡＹ  ＦＩＥＬＤの値は、遅延範囲の上限である。
【００３９】
スケジュールされたタスクに関する情報を取り出す機能や、現在スケジュールされているタスクをキャンセルする機能等のために、追加の機能が提供されてもよい。ＨＳＡタスクキューイングプロトコルは、これらのコマンドをサポートするように拡張されてもよい。いくつかの実施形態では、タスク識別子、システム名及び作業項目カウンタ等を介して、タスク間の一意性を維持してもよい。キャンセルコマンドの結果、指定された定期的なタスクがタイマキューから削除され、そのタスクの実行スケジュールがなくなる。本システムは、遅延キューに現在存在するタスクのリスト及び状態を返してもよい。状態には、次の実行までの時間、再エンキューフラグ値、再エンキューカウント値、及び、間隔値等の情報が含まれてもよい。
【００４０】
キャンセル及びリスト／状態動作は、特権的（例えば、ルート）アクセスを提供してもよい。これにより、システム管理者や十分な特権で実行しているプロセスが、タイムベースのタスクを照会し、場合によってはキャンセルするのを可能にし得る。
【００４１】
本システム及び方法は、各ＨＳＡデバイスに統合されたスケジューラではなく、ノード内の任意の利用可能なＨＳＡデバイス上で定期的なタスクをスケジュールするのに使用される単一のＨＳＡスケジューラデバイスが存在するように構成されてもよい。ノード毎に単一のＨＳＡスケジューラデバイスがあってもよいし、ＨＳＡデバイス毎に統合されたＨＳＡスケジューラがあってもよいし、タスクキューのクライアントからのインタラクションが同じであってもよい。すなわち、ＨＳＡの実装は、スケジューリングを管理する単一のＨＳＡスケジューラデバイスを有してもよいし、ＨＳＡデバイス毎にＨＳＡスケジューラを有してもよい。
【００４２】
本明細書の開示に基づいて多くの変形が可能であることを理解されたい。特徴及び要素は、特定の組み合わせで説明されているが、各特徴又は要素は、他の特徴及び要素無しに単独で、又は、他の特徴及び要素を伴う若しくは伴わない様々な組み合わせで使用されてもよい。
【００４３】
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアで実施されてもよい。適切なプロセッサには、例えば、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアに関連する１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路、他のタイプの集積回路（ＩＣ）、及び／又は、状態機械が含まれる。かかるプロセッサは、処理されたハードウェア記述言語（ＨＤＬ）命令、及び、ネットリストを含む他の中間データ（かかる命令は、コンピュータ可読媒体に記憶可能である)の結果を用いて製造プロセスを構成することによって、製造されてもよい。かかる処理の結果は、実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスで使用されるマスクワークであってもよい。
【００４４】
本明細書で提供される方法又はフローチャートは、汎用コンピュータ又はプロセッサによって実行される、非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア又はファームウェアで実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリデバイス、内部ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、並びに、ＣＤ−ＲＯＭディスク及びデジタル多用途ディスク（ＤＶＤ）等の光学媒体が含まれる。
【図１】
2018536945.tif 000003
【図２】
2018536945.tif 000004
【図３】
2018536945.tif 000005
【図４】
2018536945.tif 000006
【図５】
2018536945.tif 000007
【図６】
2018536945.tif 000008
【図７】
2018536945.tif 000009
【図８】
2018536945.tif 000010
【図９】
2018536945.tif 000011
【図１０】
2018536945.tif 000012
【国際調査報告】
2018536945.tif 000013
2018536945.tif 000014