(57)【要約】継続分析タスク（ＣＡＴ）を実施するシステム、装置及び方法が開示される。一実施形態では、システムは、複数のタスクから構成されたアプリケーションの依存関係及びスケジューリングを管理するために、ＣＡＴのハードウェアアクセラレーションを実施する。一実施形態では、継続パケットは、第１タスクによって直接参照される。第１タスクが完了すると、第１タスクは、継続パケットを第１キューにエンキューする。第１タスクは、継続パケットを何れのキューに配置するかを指定することができる。第１キューを担当するエージェントは、何れの依存タスクをエンキューするかを決定する前に実行される分析フェーズを呼び出す継続パケットをデキューして実行する。分析フェーズ中に第２タスクを起動する準備ができていると判別された場合、第２タスクは、何れかのキューにエンキューされる。次に、このキューを担当するエージェントは、第２タスクをデキューして実行する。【選択図】図３
2020522797.tif 000002
【特許請求の範囲】
【請求項１】
システムであって、
複数の計算ユニットと、
１つ以上のコマンドプロセッサと、
複数のキューと、を備え、
前記システムは、
１つ以上の計算ユニット上で第１タスクを実行することと、
前記第１タスクによって、継続パケットと、前記第１タスクが完了したときに前記継続パケットをエンキューする第１キューと、を指定することと、
前記第１タスクが完了したことに応じて、前記継続パケットを前記第１キューにエンキューすることと、
第１コマンドプロセッサによって、前記継続パケットをデキューして実行することであって、前記継続パケットは、１つ以上のタスクを１つ以上のキューにエンキューさせ、前記１つ以上のタスクは、前記第１タスクに依存する、ことと、
を行うように構成されている、
システム。
【請求項２】
前記１つ以上のタスクは、所定のキューにエンキューされる第２タスクを含み、前記第１コマンドプロセッサによって実行される１つ以上の機能は、前記第２タスクが前記所定のキューにエンキューされるのを可能にする１つ以上の依存関係が満たされているかどうかを判別することを含む、
請求項１のシステム。
【請求項３】
前記第１コマンドプロセッサは、前記１つ以上の依存関係が満たされていると判別したことに応じて、前記第２タスクを前記所定のキューにエンキューするように構成されており、前記１つ以上のタスクは、前記第２タスクをエンキューするための前記所定のキューを指定する、
請求項２のシステム。
【請求項４】
前記１つ以上の機能は、
前記複数の計算ユニットの負荷分散状態を判別することと、
第１計算ユニットの負荷が閾値を下回ると判別したことに応じて、前記第２タスクをエンキューするための、前記第１計算ユニットに対応するキューを選択することと、を含む、
請求項２のシステム。
【請求項５】
前記システムは、グラフィックス処理ユニット（ＧＰＵ）及び中央処理装置（ＣＰＵ）を備え、前記第１コマンドプロセッサは、前記ＧＰＵ並びに前記ＧＰＵのタスクスケジューリング及び完了インタフェースに統合されたマルチスレッドコマンドプロセッサで実行されるスレッドである、
請求項１のシステム。
【請求項６】
前記複数のキューの各キューに記憶されたパケットは、順番に処理される、
請求項１のシステム。
【請求項７】
中央処理装置（ＣＰＵ）をさらに備え、前記ＣＰＵは、前記継続パケットをデキューして実行し、第２タスクをＣＰＵソフトウェアキューにエンキューさせる、
請求項１のシステム。
【請求項８】
１つ以上の計算ユニット上で第１タスクを実行することと、
前記第１のタスクによって、継続パケットと、前記第１タスクが完了したときに前記継続パケットをエンキューする第１キューと、を指定することと、
前記第１タスクが完了したことに応じて、前記継続パケットを前記第１キューにエンキューすることと、
第１コマンドプロセッサによって、前記継続パケットをデキューして実行することであって、前記継続パケットは、１つ以上のタスクを１つ以上のキューにエンキューさせ、前記１つ以上のタスクは、前記第１タスクに依存する、ことと、を含む、
方法。
【請求項９】
前記１つ以上のタスクは、所定のキューにエンキューされる第２タスクを含み、前記第１コマンドプロセッサによって実行される１つ以上の機能は、前記第２タスクが前記所定のキューにエンキューされるのを可能にする１つ以上の依存関係が満たされているかどうかを判別することを含む、
請求項８の方法。
【請求項１０】
前記第１コマンドプロセッサは、前記１つ以上の依存関係が満たされていると判別したことに応じて、前記第２タスクを前記所定のキューにエンキューするように構成されており、前記１つ以上のタスクは、前記第２タスクをエンキューするための前記所定のキューを指定する、
請求項９の方法。
【請求項１１】
前記１つ以上の機能は、
前記複数の計算ユニットの負荷分散状態を判別することと、
第１計算ユニットの負荷が閾値を下回ると判別したことに応じて、前記第２タスクをエンキューするための、前記第１計算ユニットに対応するキューを選択することと、を含む、
請求項９の方法。
【請求項１２】
前記第１コマンドプロセッサは、グラフィックス処理ユニット（ＧＰＵ）並びに前記ＧＰＵのタスクスケジューリング及び完了インタフェースに統合されたマルチスレッドコマンドプロセッサで実行されるスレッドである、
請求項８の方法。
【請求項１３】
前記複数のキューの各キューに記憶されたパケットは、順番に処理される、
請求項８の方法。
【請求項１４】
中央処理装置（ＣＰＵ）によって、前記継続パケットをデキューして実行し、第２タスクをＣＰＵソフトウェアキューにエンキューさせることをさらに含む、
請求項８の方法。
【請求項１５】
装置であって、
１つ以上のコマンドプロセッサと、
複数のキューと、を含み、
前記装置は、
１つ以上の計算ユニット上で第１タスクを実行することと、
前記第１タスクによって、継続パケットと、前記第１タスクが完了したときに前記継続パケットをエンキューする第１キューと、を指定することと、
前記第１タスクが完了したことに応じて、前記継続パケットを前記第１キューにエンキューすることと、
第１コマンドプロセッサによって、前記継続パケットをデキューして実行することであって、前記継続パケットは、１つ以上のタスクを１つ以上のキューにエンキューさせ、前記１つ以上のタスクは、前記第１タスクに依存する、ことと、
を行うように構成されている、
装置。
【請求項１６】
前記１つ以上のタスクは、所定のキューにエンキューされる第２タスクを含み、前記第１コマンドプロセッサによって実行される１つ以上の機能は、前記第２タスクが前記所定のキューにエンキューされるのを可能にする１つ以上の依存関係が満たされているかどうかを判別することを含む、
請求項１５の装置。
【請求項１７】
前記第１コマンドプロセッサは、前記１つ以上の依存関係が満たされていると判別したことに応じて、前記第２タスクを前記所定のキューにエンキューするように構成されており、前記１つ以上のタスクは、前記第２タスクをエンキューするための前記所定のキューを指定する、
請求項１６の装置。
【請求項１８】
前記１つ以上の機能は、
前記複数の計算ユニットの負荷分散状態を判別することと、
第１計算ユニットの負荷が閾値を下回ると判別したことに応じて、前記第２タスクをエンキューするための、前記第１計算ユニットに対応するキューを選択することと、を含む、
請求項１６の装置。
【請求項１９】
前記装置は、グラフィックス処理ユニット（ＧＰＵ）及び中央処理装置（ＣＰＵ）を備え、前記第１コマンドプロセッサは、前記ＧＰＵ並びに前記ＧＰＵのタスクスケジューリング及び完了インタフェースに統合されたマルチスレッドコマンドプロセッサで実行されるスレッドである、
請求項１５の装置。
【請求項２０】
前記複数のキューの各キューに記憶されたパケットは、順番に処理される、
請求項１５の装置。
【発明の詳細な説明】
【背景技術】
【０００１】
タスク並列アプリケーションは、並列実行リソースを効率的に利用する能力のために、高性能コンピューティング（ＨＰＣ）ドメインにおいて益々一般的になっている。しかしながら、タスク並列アプリケーションの１つの課題は、依存関係を効率的に管理することである。ヘテロジーニアスシステムアーキテクチャ（ＨＳＡ）のアーキテクテッドキューイング言語（ＡＱＬ：Architected Queuing Language）バリアパケット又はソフトウェア管理集中型依存関係追跡テーブル（software-managed centralized dependency tracking tables）等の現在の依存関係追跡及び解決方法は、効率的ではない。具体的には、ＡＱＬバリアパケットは、グラフィックス処理ユニット（ＧＰＵ）のコマンドプロセッサによって直接実行されるが、パケット自体がタスクキューをブロックし、慎重なキュー管理を必要とすることがある。一方、現在のソフトウェア依存関係追跡ソリューションは、ＧＰＵスケジューリングに関与するためにホスト中央処理装置（ＣＰＵ）スレッドを必要とし、依存タスクの低レイテンシディスパッチを抑制する。また、いくつかのソフトウェア依存関係追跡ソリューションでは、スケーリングされない集中型追跡テーブルを使用する。
【０００２】
本明細書で説明する方法及びメカニズムの利点は、添付の図面と併せて以下の詳細な説明を参照することによって、より良く理解することができる。
【図面の簡単な説明】
【０００３】
【図１】コンピューティングシステムの一実施形態のブロック図である。
【図２】コンピューティングシステムの別の実施形態のブロック図である。
【図３】継続分析タスク（ＣＡＴ）を実施する方法の一実施形態を示す一般化されたフローチャートである。
【図４】ＣＡＴを実施する方法の別の実施形態を示す一般化されたフローチャートである。
【図５】ＣＡＴを実施する方法の別の実施形態を示す一般化されたフローチャートである。
【図６】ＣＡＴを実施する方法の別の実施形態を示す一般化されたフローチャートである。
【図７】ＣＡＴを実施する方法の別の実施形態を示す一般化されたフローチャートである。
【図８】ＣＡＴがＣＰＵタスクを指定する方法の一実施形態を示す一般された体フローチャートである。
【図９】カーネル完了を処理する方法の一実施形態を示す一般化されたフローチャートである。
【発明を実施するための形態】
【０００４】
以下の説明では、本明細書に提示される方法及びメカニズムの十分な理解を提供するために、多くの具体的な詳細が示されている。しかしながら、当業者は、様々な実施形態がこれらの具体的な詳細無しに実施され得ることを認識すべきである。いくつかの例では、周知の構造、コンポーネント、信号、コンピュータプログラム命令及び技術は、本明細書に記載されたアプローチを不明瞭にすることを避けるために、詳細に示されていない。説明を簡単且つ明確にするために、図に示される要素が必ずしも縮尺通りに描かれていないことが理解されるであろう。例えば、いくつかの要素の寸法は、他の要素と比較して誇張されている場合がある。
【０００５】
継続分析タスク（ＣＡＴ）を実施するシステム、装置及び方法が本明細書に開示される。一実施形態では、システムは、複数のコマンドプロセッサと、複数のキューと、複数の計算ユニットと、を含む。一実施形態では、システムは、複数のタスクから構成されたアプリケーションの依存関係及びスケジューリングを処理するように設計されたＣＡＴのハードウェアアクセラレーションを実施するように構成されている。ＣＡＴは、ＡＱＬパケットによって、その親タスクを指定するデータ構造によって直接参照されてもよいし、信号に結び付けられてもよい。
【０００６】
様々な実施形態では、コマンドプロセッサは、複数の計算ユニット上で複数のスレッドを起動するように構成されており、所定のタスクは、複数のスレッドを含むことができる。第１タスクが完了すると、第１タスクは、継続パケットを所定のキューにエンキューする。一実施形態では、第１タスクは、継続パケットを何れのキューに配置するかを指定する。後の時点において、コマンドプロセッサは、継続パケットをデキューし、継続パケットによって指定された１つ以上のアクションを実行する。継続パケットによって指定されたアクションは、本明細書では「タスク」と呼ぶことができる。一実施形態では、タスクが固定機能のアクションである場合、パケットは、何れの固定機能を実行するかを示すコードを含むエージェントディスパッチパケットである。固定機能は、専用ハードウェア若しくはマイクロコードによって実行することができ、又は、ＣＰＵ上でソフトウェアエミュレートキュー（software emulated queue）によって実施されてもよい。タスクがアプリケーションアクションである場合、パケットは、タスクを実行するカーネルを参照するカーネルディスパッチパケット（kernel dispatch packet）である。他の実施形態では、他のタイプのパケットを利用することができる。
【０００７】
別の実施形態では、第１タスクが完了すると、継続アクションを起動するために割り込み（interrupt）が生成される。例えば、この実施形態では、第１タスクが完了すると、第１タスクは、割り込みのペイロードによって指定されたアクションで応答する所定のハードウェアユニットに対して割り込みを生成する。アクションは、分析タスクを起動すること、固定機能を実行すること、及び／又は、他のタスクを実行すること、を含むことができる。継続パケットがＣＡＴを起動して分析フェーズを実行する場合、分析フェーズの間に実行される特定のタイプのアクションを、実施形態毎に変更することができる。一実施形態では、分析フェーズは、第１タスクが完了したときに何れのタスクを起動する準備ができているかを判別することを含むことができる。分析フェーズの間に、第１タスクに依存する第２タスクを起動する準備ができていると判別された場合、第２タスクに対応する第２パケットは、複数のキューの指定されたキューにエンキューされる。次に、コマンドプロセッサは、第２タスクを起動する第２パケットをデキューして実行する。別の実施形態では、分析フェーズは、複数のタスクを現在起動する準備ができており、複数のパケットを指定されたキューにエンキューして、これらの複数のタスクを起動させるように決定することができる。
【０００８】
図１を参照すると、コンピューティングシステム１００の一実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム１００は、メモリ１８０に接続されたシステムオンチップ（ＳｏＣ）１０５を含む。ＳｏＣ１０５は、集積回路（ＩＣ）とも呼ばれ得る。一実施形態では、ＳｏＣ１０５は、中央処理装置（ＣＰＵ）１６５の処理ユニット１７５Ａ〜１７５Ｎと、入出力（Ｉ／Ｏ）インタフェース１５５と、キャッシュ１６０Ａ〜１６０Ｂと、ファブリック１２０と、グラフィックス処理ユニット（ＧＰＵ）１３０と、ローカルメモリ１１０と、メモリコントローラ１５０と、を含む。ＳｏＣ１０５は、図を不明瞭にすることを避けるために、図１に示されていない他のコンポーネントを含むことができる。処理ユニット１７５Ａ〜１７５Ｎは、任意の数及びタイプの処理ユニットを表す。一実施形態では、処理ユニット１７５Ａ〜１７５Ｎは、ＣＰＵコアである。別の実施形態では、１つ以上の処理ユニット１７５Ａ〜１７５は、他のタイプの処理ユニット（例えば、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタル信号プロセッサ（ＤＳＰ））である。ＣＰＵ１６５の処理ユニット１７５Ａ〜１７５Ｎは、キャッシュ１６０Ａ〜１６０Ｂ及びファブリック１２０に接続されている。
【０００９】
一実施形態では、処理ユニット１７５Ａ〜１７５Ｎは、特定の命令セットアーキテクチャ（ＩＳＡ）の命令を実行するように構成されている。各処理ユニット１７５Ａ〜１７５Ｎは、１つ以上の実行ユニット、キャッシュメモリ、スケジューラ、分岐予測回路等を含む。一実施形態では、処理ユニット１７５Ａ〜１７５Ｎは、オペレーティングシステム等のシステム１００の主制御ソフトウェアを実行するように構成されている。概して、使用中に処理ユニット１７５Ａ〜１７５Ｎによって実行されるソフトウェアは、システム１００の所望の機能を実現するためにシステム１００の他のコンポーネントを制御することができる。また、処理ユニット１７５Ａ〜１７５Ｎは、アプリケーションプログラム等の他のソフトウェアを実行することができる。
【００１０】
一実施形態では、ＧＰＵ１３０は、グラフィックスパイプライン動作（例えば、描画コマンド、ピクセル演算、幾何学的計算、ラスタライズ動作、及び、画像をディスプレイにレンダリングする他の動作等）を実行するように構成されている。別の実施形態では、ＧＰＵ１３０は、グラフィックスに関連しない動作を実行するように構成されている。更なる実施形態では、ＧＰＵ１３０は、グラフィックス動作及び非グラフィックス関連動作の両方を実行するように構成されている。
【００１１】
ＧＰＵ１３０は、コマンドプロセッサ１３５Ａ〜１３５Ｎと、ハードウェアキュー１４０Ａ〜１４０Ｎと、計算ユニット１４５Ａ〜１４５Ｎと、を少なくとも含む。コマンドプロセッサの数は、ハードウェアキューの数と異なっていてもよく、計算ユニットの数と異なっていてもよいことを理解されたい。また、コマンドプロセッサ、ハードウェアキュー及び計算ユニット間の１対１の対応関係が必要であるわけではなく、単に説明を簡単にするために示されていることも理解されたい。コマンドプロセッサ１３５Ａ〜１３５Ｎは、パケットをハードウェアキュー１４０Ａ〜１４０Ｎから取り出して実行するための任意の数及びタイプのコマンドプロセッサを表す。一実施形態では、「パケット」は、単一のコマンドを符号化したメモリバッファとして定義される。異なるタイプのパケットをハードウェアキュー１４０Ａ〜１４０Ｎに記憶することができる。例えば、カーネルをディスパッチするためのパケットは、「カーネルディスパッチパケット」と呼ばれる。
【００１２】
計算ユニット１４５Ａ〜１４５Ｎは、グラフィックス又は汎用処理に使用される任意の数及びタイプの計算ユニットを表す。各計算ユニット１４５Ａ〜１４５Ｎは、任意の数の実行ユニットを含み、計算ユニット当たりの実行ユニットの数は、実施形態毎に異なる。いくつかの実施形態では、計算ユニットは、仮想的（例えば、仮想マシン）であってもよい。このような様々な実施形態が可能であり、企図される。ＧＰＵ１３０は、ローカルメモリ１１０及びファブリック１２０に接続されている。一実施形態では、ローカルメモリ１１０は、高帯域幅メモリ（ＨＢＭ）を使用して実装される。ローカルメモリ１１０及びメモリ１８０の組み合わせを、本明細書において「メモリサブシステム」と呼ぶことができる。或いは、ローカルメモリ１１０又はメモリ１８０を、本明細書において「メモリサブシステム」と呼ぶことができる。
【００１３】
一実施形態では、第１タスクは、第１タスクが実行を完了する場合に、指定されたキューにエンキューされる継続パケットを指定する。「タスク」は、「カーネル」と呼ばれる場合があることに留意されたい。本明細書で使用される「継続パケット」という用語は、１つ以上のコマンド及び／又は実行可能コードへのポインタを符号化したデータの単位として定義される。一実施形態では、「継続パケット」は、第１タスクが完了したことに応じて、指定されたキューにエンキューされ、指定されたキューからデキューされたことに応じて、１つ以上の継続アクションを実行させるパケットとして定義される。パケットがデキューされる場合に第１タスクを起動するパケットを、「継続パケット」と区別するために、本明細書において「通常パケット」と呼ぶことができる。一実施形態では、「通常パケット」は、継続パケット及びターゲットキューＩＤを含むか参照する。通常パケットで指定されたタスクが完了すると、継続パケットは、ターゲットキューに自動的にエンキューされる。
【００１４】
第１タスクが完了すると、継続パケットは、ハードウェアキュー１４０Ａ〜１４０Ｎのうち１つにエンキューされる。継続パケットは、ＣＰＵ１６５のＡＱＬキューを含む、他のエージェントのＡＱＬキューにもエンキューされ得る。ＡＱＬキューは、スケジューラによってハードウェアキューにマッピングされ得ることに留意されたい。一実施形態では、第１タスクは、ハードウェアキュー１４０Ａ〜１４０Ｎのうち、継続パケットをエンキューするためのハードウェアキューを指定する。次に、継続パケットがエンキューされた後、コマンドプロセッサ１３５Ａ〜１３５Ｎのコマンドプロセッサは、継続パケットをデキュー及び実行する。一実施形態では、継続パケットは、第２タスクをハードウェアキュー１４０Ａ〜１４０Ｎのうち１つにエンキューする前に１つ以上の機能を実行するＣＡＴを起動する。これらの機能は、更なるタスクをエンキューすることを含むことの可能なアクションを実行する。また、これらの機能は、将来のＣＡＴによって検査されるグローバルメモリデータ構造をアトミックに更新する等の他のタイプのアクションを実行することができる。一実施形態では、ＣＡＴは、第２タスク及び任意の追加のタスクを実行可能にするために全ての依存関係が満たされているかどうかを判別する。
【００１５】
別の実施形態では、ＣＡＴは、計算ユニット１４５Ａ〜１４５Ｎ及び／又は（ＣＰＵ１６５の）処理ユニット１７５Ａ〜１７５Ｎの現在の作業負荷を判別し、第２タスク及び任意の追加のタスクを特定のキューに割り当て、計算ユニット１４５Ａ〜１４５Ｎ及び／又は処理ユニット１７５Ａ〜１７５Ｎに亘る負荷を分散させることを目標とする。所定のキューは、特定の計算ユニット又は処理ユニット上でカーネルをディスパッチすることを担うコマンドプロセッサによって処理されることに留意されたい。更なる実施形態では、ＣＡＴは、何れのタスクがクリティカルパス上にあるかを判別し、次に、クリティカルパス上にあるタスクの優先順位に基づく順序でタスクをエンキューする。
【００１６】
Ｉ／Ｏインタフェース１５５は、ファブリック１２０に接続されており、任意の数及びタイプのインタフェース（例えば、周辺機器相互接続（ＰＣＩ）バス、ＰＣＩ−Ｅｘｔｅｎｄｅｄ（ＰＣＩ−Ｘ）、ＰＣＩＥ（ＰＣＩ  Ｅｘｐｒｅｓｓ）バス、ギガビットイーサネット（登録商標）（ＧＢＥ）バス、ユニバーサルシリアルバス（ＵＳＢ））を表す。様々なタイプの周辺デバイスを、Ｉ／Ｏインタフェース１５５に接続することができる。このような周辺デバイスには、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティック又は他のタイプのゲームコントローラ、メディア記録デバイス、外部ストレージデバイス、及び、ネットワークインタフェースカード等が含まれるが、これらに限定されない。
【００１７】
ＳｏＣ１０５は、１つ以上のメモリモジュールを含むメモリ１８０に接続されている。各メモリモジュールは、その上に搭載された１つ以上のメモリデバイスを含む。いくつかの実施形態では、メモリ１８０は、ＳｏＣ１０５も搭載されるマザーボード又は他のキャリアに搭載された１つ以上のメモリデバイスを含む。一実施形態では、メモリ１８０は、動作中にＳｏＣ１０５と共に使用するためのランダムアクセスメモリ（ＲＡＭ）を実装するために使用される。実装されるＲＡＭは、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、抵抗変化型ＲＡＭ（ＲｅＲＡＭ）、相変化ＲＡＭ（ＰＣＲＡＭ）、又は、他の任意の揮発性若しくは不揮発性ＲＡＭであってもよい。メモリ１８０を実装するのに使用されるＤＲＡＭのタイプには、ダブルデータレート（ＤＤＲ）ＤＲＡＭ、ＤＤＲ２  ＤＲＡＭ、及びＤＤＲ３  ＤＲＡＭ等が含まれるが、これらに限定されない。図１には明確に示されていないが、ＳｏＣ１０５は、処理ユニット１７５Ａ〜１７５Ｎ及び／又は計算ユニット１４５Ａ〜１４５Ｎの内部にある１つ以上のキャッシュメモリを含むことができる。いくつかの実施形態では、ＳｏＣ１０５は、処理ユニット１７５Ａ〜１７５Ｎによって利用されるキャッシュ１６０Ａ〜１６０Ｂを含む。キャッシュ１６０Ａ〜１６０Ｂは、ＳｏＣ１０５に含まれ得る任意の数のキャッシュを表すことに留意されたい。一実施形態では、キャッシュ１６０Ａ〜１６０Ｂは、キャッシュコントローラを含むキャッシュサブシステムの一部である。
【００１８】
文字「Ｎ」は、本明細書において様々な構造の隣に表示される場合、その構造に対する任意の数の要素（例えば、１つの処理ユニットを含むＣＰＵ１６５内の任意の数の処理ユニット１７５Ａ〜１７５Ｎ）を全体的に示すことを意味することに留意されたい。また、文字「Ｎ」を使用する図１内の異なる符号（例えば、計算ユニット１４５Ａ〜１４５Ｎ）は、等しい数の異なる要素が設けられているのを示すことを意図していない（例えば、ＣＰＵ１６５内の処理ユニット１７５Ａ〜１７５Ｎの数は、ＧＰＵ１３０の計算ユニット１４５Ａ〜１４５Ｎの数と異なっていてもよい）。
【００１９】
様々な実施形態では、コンピューティングシステム１００は、コンピュータ、ラップトップ、モバイルデバイス、サーバ、又は、他の任意のタイプのコンピューティングシステム若しくはデバイスとすることができる。コンピューティングシステム１００及び／又はＳｏＣ１０５のコンポーネントの数は、実施形態毎に異なり得ることに留意されたい。図１に示す数よりも多い又は少ない各コンポーネント／サブコンポーネントが存在し得る。また、コンピューティングシステム１００及び／又はＳｏＣ１０５は、図１に示されていない他のコンポーネントを含むことができることに留意されたい。さらに、他の実施形態では、コンピューティングシステム１００及びＳｏＣ１０５を、図１に示す以外の他の方法で構成することができる。
【００２０】
図２を参照すると、コンピューティングシステム２００の別の実施形態のブロック図が示されている。コンピューティングシステム２００は、ＧＰＵ２１０と、ＣＰＵ２１５と、メモリ２２０と、を少なくとも含む。メモリ２２０は、ＧＰＵ２１０及びＣＰＵ２１５によってアクセス可能な任意の数及びタイプのメモリデバイスを表す。コマンドプロセッサ２４０Ａ〜２４０Ｎは、任意の数及びタイプのコマンドプロセッサを表す。一実施形態では、各々のコマンドプロセッサ２４０Ａ〜２４０Ｎは、他のコマンドプロセッサ２４０Ａ〜２４０Ｎと同等である。別の実施形態では、コマンドプロセッサ２４０Ａ〜２４０Ｎの間に異なるタイプのコマンドプロセッサが含まれる。各コマンドプロセッサ２４０Ａ〜２４０Ｎは、キュー２３０Ａ〜２３０Ｎの対応するセットからパケットを取り出し、パケットを処理するように構成されている。パケットがカーネルディスパッチパケットである場合、コマンドプロセッサ２４０Ａ〜２４０Ｎは、１つ以上の計算ユニット２４５Ａ〜２４５Ｎでカーネルを開始するように構成されている。
【００２１】
計算ユニット２４５Ａ〜２４５Ｎは、任意の数及びタイプの計算ユニットを表す。各計算ユニット２４５Ａ〜２４５Ｎは、任意の数の実行ユニットを含み、実行ユニットの数は、実施形態毎に異なる。一実施形態では、各計算ユニット２４５Ａ〜２４５Ｎは、対応するキャッシュ２５０Ａ〜２５０Ｎを含むか、対応するキャッシュ２５０Ａ〜２５０Ｎに接続されている。また、計算ユニット２４５Ａ〜２４５Ｎは、共有キャッシュ２５５に接続されている。他の実施形態では、計算ユニット２４５Ａ〜２４５Ｎは、他のタイプのキャッシュ構造及び／又はメモリサブシステムにアクセスすることができる。
【００２２】
キュー２３０Ａ〜２３０Ｎは、メモリ２２０に割り当てられた任意の数及びタイプのキューを表す。キュー２３０Ａ〜２３０Ｎの各セットは、任意の数のキューを含む。一実施形態では、キュー２３０Ａ〜２３０Ｎの各キューに記憶されたパケットは、順番に処理される。したがって、この実施形態では、キュー２３０Ａ〜２３０Ｎの各キューは、ファーストインファーストアウト（ＦＩＦＯ）キューとして扱われる。一実施形態では、キュー２３０Ａ〜２３０Ｎのうち異なるキューは、異なるタイプのパケットを記憶するように構成されている。パケットは、１つ以上のコマンドを符号化するメモリバッファであり、メモリ２２０の別の場所に記憶された実行可能コードへのポインタを含むことができる。一実施形態では、パケット（例えば、ＡＱＬパケット）は、単一のコマンドを含む。
【００２３】
一実施形態では、各キュー２３０Ａ〜２３０Ｎは、コマンドプロセッサ２４０Ａ〜２４０Ｎの別々のコマンドプロセッサに割り当てられている。例えば、この実施形態では、キュー２３０Ａに記憶されたパケットは、コマンドプロセッサ２４０Ａによって取り出されて処理され、キュー２３０Ｂに記憶されたパケットは、コマンドプロセッサ２４０Ｂによって取り出されて処理され、以下同様である。また、一実施形態では、キュー２３０Ａ〜２３０Ｎのセットのうち１つ以上は、タスクをＣＰＵ２１５にディスパッチするコマンドプロセッサによって監視される。
【００２４】
所定のタスクがシステム２００での実行を終了すると、所定のタスクは、継続パケットをエンキューすることができる。所定のタスクは、継続パケットを参照し、キュー２３０Ａ〜２３０Ｎのうち、継続パケットがエンキューされるキューを指定する。次に、一実施形態では、継続パケットを記憶するキューを担当するエージェントによって継続パケットが処理される場合に、ＣＡＴが起動される。実施形態に応じて、ＣＡＴは、対応するコマンドプロセッサ２４０Ａ〜２４０Ｎによって継続パケットがキューから選択されると、１つ以上の機能を開始することができる。一実施形態では、ＣＡＴは、前のタスクが完了したときに何れのタスクを起動する準備ができているかを判別する。例えば、この実施形態では、ＣＡＴは、様々な依存関係をチェックし、何れのタスクの実行準備ができているかを判別することができる。ＣＡＴは、所定のタスクを実行する準備ができていると判別した場合、所定のタスクを、キュー２３０Ａ〜２３０Ｎのうち適切なキューにエンキューする。
【００２５】
別の実施形態では、ＣＡＴは、分析フェーズを実行する。例えば、ＣＡＴは、負荷分散分析を実行してシステムの状態を判別し、システムの状態に基づいて、何れの計算ユニット及び／又はＣＰＵで依存タスクを実行するかを決定することができる。他の実施形態では、ＣＡＴは、他のタイプの機能を開始することができる。
【００２６】
更なる実施形態では、ＣＡＴが元のタスクによって識別され、元のタスクが完了すると、識別されたＣＡＴを開始するために割り込みが生成される。この実施形態では、ＣＡＴは、メモリ２２０内の場所に記憶され、割り込みは、ＣＡＴのアドレスへのポインタを含む。
【００２７】
図３を参照すると、継続分析タスク（ＣＡＴ）を実施する方法３００の一実施形態が示されている。説明のために、この実施形態におけるステップ及び図４〜図８のステップは、順番に示されている。しかしながら、説明する方法の様々な実施形態では、説明される要素のうち１つ以上は、同時に実行されてもよいし、示された順序とは異なる順序で実行されてもよいし、完全に省略されてもよいことに留意されたい。他の追加要素も必要に応じて実行される。本明細書で説明する様々なシステム又は装置は、方法３００を実施するように構成されている。
【００２８】
システムは、１つ以上の計算ユニット上で第１タスクを実行する（ブロック３０５）。第１タスクは、継続パケットと、第１タスクが完了したときに継続パケットをエンキューする第１キューと、を指定する（ブロック３１０）。システムは、第１タスクが完了したことに応じて、継続パケットを第１キューにエンキューする（ブロック３１５）。一実施形態では、システムは、複数の計算ユニットと、１つ以上のコマンドプロセッサと、複数のキューと、を含む。一実施形態では、所定のキューについて、所定のキューに記憶されたパケットが、対応するコマンドプロセッサによって順番に処理される。しかしながら、異なるキューにエンキューされたパケットは、他のキューのパケットに対して必ずしも順番に処理されない。次に、第１コマンドプロセッサは、継続パケットを第１キューからデキューする（ブロック３２０）。次いで、第１コマンドプロセッサは、継続パケットを実行して、１つ以上の機能の実行の一部として、１つ以上のタスクを１つ以上の異なるキューにエンキューする継続分析タスク（ＣＡＴ）を起動する。ここで、１つ以上のタスクは、第１タスクに依存する（ブロック３２５）。ＣＡＴを起動させる継続パケットは、「ＣＡＴパケット」とも呼ばれ得ることに留意されたい。一実施形態では、ＣＡＴは、複数のタスクがブロック解除されていることを発見し、これらのタスクの全てをエンキューすることを試み、各タスクは、場合によっては、異なるキューにエンキューされる。概して、１つ以上のタスクは、所定のキューにエンキューされる第２タスクを含むことができる。一実施形態では、所定のキューは、第１キューと異なる。別の実施形態では、所定のキューは、第１キューと同じキューである。一実施形態では、ＣＡＴは、第２タスクをエンキューするための特定のキューを識別する。ブロック３２５の後に、方法３００は終了する。
【００２９】
一実施形態では、ＣＡＴによって実行される１つ以上の機能は、第２タスク（及び、オプションで１つ以上の他のタスク）を所定のキューにエンキューすることができる１つ以上の依存関係が満たされるかどうかを判別することを含む。この実施形態では、第１コマンドプロセッサは、１つ以上の依存関係が満たされたと判別したことに応じて、第２タスクを所定のキューにエンキューするように構成されている。別の実施形態では、ＣＡＴによって実行される１つ以上の機能は、複数の計算ユニットの負荷分散状態を判別することと、所定の計算ユニットの負荷が閾値を下回ると判別したことに応じて、第２タスクをエンキューするための、所定の計算ユニットに対応するキューを選択することを含む。
【００３０】
図４を参照すると、継続分析タスク（ＣＡＴ）を実施する方法４００の別の実施形態が示されている。第１タスクは、システムの１つ以上の計算ユニットで実行される（ブロック４０５）。一実施形態では、システムは、複数の計算ユニットと、１つ以上のコマンドプロセッサと、複数のキューと、を含む。また、第１タスクは、第１タスクが完了したときに実行される継続分析タスク（ＣＡＴ）を指定する（ブロック４１０）。次に、第１タスクが完了したことに応じて、ＣＡＴを開始するための割り込みが生成される（ブロック４１５）。割り込みが生成されたことに応じて、コマンドプロセッサは、ＣＡＴを実行する（ブロック４２０）。次いで、ＣＡＴは、１つ以上の機能の実行の一部として、第２タスクを所定のキューにエンキューする。ここで、第２タスクは、第１タスクに依存する（ブロック４２５）。いくつかの実施形態では、ＣＡＴは、複数のタスクを１つ以上のキューにエンキューする。ブロック４２５の後に、方法４００は終了する。
【００３１】
図５を参照すると、継続分析タスク（ＣＡＴ）を実施する方法５００の別の実施形態が示されている。コマンドプロセッサは、ＧＰＵタスクキューのセットを、利用可能なハードウェアキュースロットにマッピングする（ブロック５０５）。ＧＰＵタスクキューのセットは、任意の数のタスクキューを含むことができる。一実施形態では、各タスクキューは、複数のコマンドプロセッサのうち対応するコマンドプロセッサによって監視される。次に、コマンドプロセッサは、カーネルを起動させる第１パケットを処理する（ブロック５１０）。一実施形態では、第１パケットは、アーキテクテッドキューイング言語（ＡＱＬ）パケットである。
【００３２】
次に、後の時点において、カーネルが完了すると、カーネルは、継続パケットと、継続パケットをエンキューする場所と、を指定する（ブロック５１５）。次いで、コマンドプロセッサは、継続パケットをデキューして実行する（ブロック５２０）。継続パケットは、継続分析タスク（ＣＡＴ）を実行するカーネルを呼び出して、１つ以上の第２パケットをエンキューする（ブロック５２５）。一実施形態では、コマンドプロセッサは、マルチスレッドコマンドプロセッサで実行されるスレッドである。コマンドプロセッサは、ＧＰＵメモリシステム並びにＧＰＵのタスクスケジューリング及び完了インタフェースに緊密に統合されている。したがって、ＣＰ上でＣＡＴを実行することは、ＣＰＵホストで同様の機能を実行するよりも効率的である。ブロック５２５の後に、方法５００は終了する。
【００３３】
図６を参照すると、継続分析タスク（ＣＡＴ）を実施する方法６００の別の実施形態が示されている。コマンドプロセッサは、ＧＰＵタスクキューのセットを、利用可能なハードウェアキュースロットにマッピングする（ブロック６０５）。ＧＰＵタスクキューのセットは、任意の数のタスクキューを含むことができる。一実施形態では、各タスクキューは、複数のコマンドプロセッサのうち対応するコマンドプロセッサによって監視される。次に、コマンドプロセッサは、カーネルを起動させる第１パケットを処理する（ブロック６１０）。
【００３４】
次に、後の時点において、カーネルが完了し、カーネルは、継続パケットと、継続パケットをエンキューする場所と、を指定する（ブロック６１５）。次いで、後の時点において、コマンドプロセッサは、継続パケットをデキュー及び実行して、継続分析タスク（ＣＡＴ）を起動し、依存タスクの依存関係ロジック（dependency logic）を評価する（ブロック６２０）。依存タスクの全ての依存関係が解決した場合（条件付きブロック６２５：Ｙｅｓ）、コマンドプロセッサは、依存タスクを、指定されたキューにエンキューする（ブロック６３０）。そうではなく、依存タスクの依存関係が解決していない場合（条件付きブロック６２５：Ｎｏ）、依存タスクをエンキューすることなくＣＡＴが完了する（ブロック６３５）。ブロック６３０，６３５の後に、方法６００は終了する。
【００３５】
図７を参照すると、継続分析タスク（ＣＡＴ）を実施する方法７００の別の実施形態が示されている。コマンドプロセッサは、ＧＰＵタスクキューのセットを、利用可能なハードウェアキュースロットにマッピングする（ブロック７０５）。ＧＰＵタスクキューのセットは、任意の数のタスクキューを含むことができる。一実施形態では、各タスクキューは、複数のコマンドプロセッサのうち対応するコマンドプロセッサによって監視される。次に、コマンドプロセッサは、カーネルを起動させる第１パケットを処理する（ブロック７１０）。
【００３６】
次に、後の時点において、カーネルが完了し、カーネルは、継続パケットと、継続パケットをエンキューする場所と、を指定する（ブロック７１５）。次いで、後の時点において、コマンドプロセッサは、継続パケットをデキュー及び実行して、継続分析タスク（ＣＡＴ）を起動し、複数の依存タスクの依存関係ロジックを評価する（ブロック７２０）。複数のタスクが、このタスクによって生成されるフューチャ（future）を待っている場合（条件付きブロック７２５：Ｙｅｓ）、コマンドプロセッサは、アプリケーションの最終タスクからの距離に応じて、依存タスクを指定されたキューにエンキューする（ブロック７３０）。一実施形態では、コマンドプロセッサは、ＣＡＴを実行して、各依存タスクが、タスク依存関係グラフ又はタスク依存関係グラフの一部における終了ノード（すなわち、最後のタスク）からの距離を評価することによって、依存タスクがエンキューされる順序を最適化する。ＣＡＴは、終了ノードからの距離を比較することによって、アプリケーションを完了するためにクリティカルパス上にある依存タスクを判別し、これらの依存タスクを優先付ける。一実施形態では、ＣＡＴは、ＧＰＵ性能カウンタを読み出し、以前のタスクのキャッシュ局所性に応じて依存タスクをエンキューする。
【００３７】
そうではなく、このタスクによって生成されたフューチャを待っている複数のタスクが存在しない場合（条件付きブロック７２５：Ｎｏ）、ＣＡＴは、依存関係が満たされたタスクを完了してエンキューする（ブロック７３５）。ブロック７３０，７３５の後に、方法７００は終了する。方法７００の一実施形態では、ＣＡＴは、アプリケーション固有の「フューチャ」を評価する。フューチャは、関数型プログラミングにおいて最初に導入された周知の並列プログラミングの概念である。基本的に、フューチャは、最初は未知の結果についてのプロキシであり、アプリケーションは、フューチャを使用して、タスク間のデータ依存関係を識別する。フューチャ変数が親タスクによって生成されると、フューチャを待っている子タスクを続行することができる。また、複数のタスクが共有フューチャに依存する場合があるので、コマンドプロセッサ用に生成されたＣＡＴは、共有フューチャに依存する複数の子タスクを生成してエンキューすることができる。
【００３８】
図８を参照すると、ＣＡＴがＣＰＵタスクを指定する方法８００の一実施形態が示されている。コマンドプロセッサは、ＧＰＵタスクキューのセットを、利用可能なハードウェアキュースロットにマッピングする（ブロック８０５）。一実施形態では、各ＧＰＵタスクキューは、メモリに割り当てられており、コマンドプロセッサは、ブロック８０５において、各ＧＰＵタスクキューのアドレスを決定する。次に、コマンドプロセッサは、第１パケットによって指定されたカーネルを起動させる第１パケットを処理する（ブロック８１０）。
【００３９】
カーネルが完了すると、カーネルは、継続パケットと、継続パケットをエンキューする場所と、を指定する（ブロック８１５）。次いで、ＣＰＵスレッドは、継続パケットをデキュー及び実行して、ＣＰＵタスクをＣＰＵソフトウェアキューにエンキューする（ブロック８２０）。ブロック８２０の後に、方法８００は終了する。方法８００の一実施形態では、継続パケットは、ＧＰＵによって生成された結果を分析するＣＰＵタスクを起動させる。他の実施形態では、継続パケットは、他のＧＰＵ、ＤＳＰ、ＦＰＧＡ、ＡＳＩＣ、又は、他のデバイス等の他のデバイス上でタスクを起動させることができる。
【００４０】
図９を参照すると、カーネル完了を処理する方法９００の一実施形態が示されている。コマンドプロセッサは、第１ＡＱＬパケットを処理して、カーネルを起動する（ブロック９０５）。カーネルが完了し、コマンドプロセッサは、第１ＡＱＬパケットに関連するＣＡＴパケットを、第１ＡＱＬパケットによって指定されたＡＱＬキューにエンキューする（ブロック９１０）。ＣＡＴパケット、及び、ＣＡＴパケットが置かれるＡＱＬキューは、ＧＰＵ又はＣＰＵによって処理されるキューを含む任意のキューとすることができる。任意のパケットとすることができるＣＡＴの実行は、依存関係を評価することができ、満たされる場合、追加のＡＱＬパケットを、それらを実行することができるＡＱＬキューにエンキューすることができる。これは、ＧＰＵパケットの完了によって、ＧＰＵ上でより多くのＧＰＵパケットが評価される結果となる依存関係を有することを可能にし、ＣＰＵ通知をもたらす依存関係がＣＰＵ上で実行されることを可能にする。依存関係分析のために実行される計算は、完全に一般的なカーネルから、ＧＰＵ又はＣＰＵで実施されるエージェントディスパッチＡＱＬキューによって処理される専用パケットまで及ぶ任意のアクションとすることができる。ブロック９１０の後に、方法９００は終了する。
【００４１】
様々な実施形態では、ソフトウェアアプリケーションのプログラム命令を使用して、上述した方法及び／又はメカニズムを実施する。プログラム命令は、例えばＣ言語等の高水準プログラミング言語におけるハードウェアの挙動を記述する。或いは、Ｖｅｒｉｌｏｇ等のハードウェア設計言語（ＨＤＬ）が使用される。プログラム命令は、非一時的なコンピュータ可読記憶媒体に記憶される。複数のタイプの記憶媒体が利用可能である。記憶媒体は、プログラム命令及び付随するデータをプログラム実行のためにコンピューティングシステムに提供するために、使用中にコンピューティングシステムによってアクセス可能である。コンピューティングシステムは、１つ以上のメモリと、プログラム命令を実行するように構成された１つ以上のプロセッサと、を少なくとも含む。
【００４２】
上述した実施形態は、実施態様の非限定的な例に過ぎないことを強調しておきたい。上記の開示が十分に理解されれば、多くの変形及び修正が当業者に明らかになるであろう。以下の特許請求の範囲は、このような変形及び修正の全てを包含するように解釈されることを意図している。
【図１】
2020522797.tif 000003
【図２】
2020522797.tif 000004
【図３】
2020522797.tif 000005
【図４】
2020522797.tif 000006
【図５】
2020522797.tif 000007
【図６】
2020522797.tif 000008
【図７】
2020522797.tif 000009
【図８】
2020522797.tif 000010
【図９】
2020522797.tif 000011
【国際調査報告】
2020522797.tif 000012
2020522797.tif 000013
2020522797.tif 000014