JP5650952B2 - マルチコア/スレッドのワークグループ計算スケジューラ - Google Patents

マルチコア/スレッドのワークグループ計算スケジューラ Download PDF

Info

Publication number
JP5650952B2
JP5650952B2 JP2010183842A JP2010183842A JP5650952B2 JP 5650952 B2 JP5650952 B2 JP 5650952B2 JP 2010183842 A JP2010183842 A JP 2010183842A JP 2010183842 A JP2010183842 A JP 2010183842A JP 5650952 B2 JP5650952 B2 JP 5650952B2
Authority
JP
Japan
Prior art keywords
command
queue
workgroups
counter
processed
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.)
Expired - Fee Related
Application number
JP2010183842A
Other languages
English (en)
Other versions
JP2011054161A (ja
JP2011054161A5 (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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2011054161A publication Critical patent/JP2011054161A/ja
Publication of JP2011054161A5 publication Critical patent/JP2011054161A5/ja
Application granted granted Critical
Publication of JP5650952B2 publication Critical patent/JP5650952B2/ja
Expired - Fee Related 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/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)
  • Advance Control (AREA)
  • Computer And Data Communications (AREA)

Description

特許請求される主題は、一般に、コンピュータ・リソースの割り当てに関し、より具体的には、マルチコア処理システムにおいてデータ並列負荷及びタスク並列負荷の両方をスケジューリングするための技術に関する。
コンピューティング・システムのスケジューリングでは、データ並列性又はタスク並列性、或いはこの2つの何らかの組み合わせのために構造化されたジョブを必要とすることがある。データ並列ジョブ又は負荷は、これらに限定されるものではないが、プロセッサ又は処理コアのような多数のユニットによりデータを並行して操作できる計算である。このタイプの処理の例は、ビデオデータを処理するグラフィックス処理ユニット(GPU)によって行なわれ、そこで、ビットマップが領域に分離され、各領域を同時に動作させることができる。タスク並列負荷は、多数の実行ユニットがデータのセットに関する異なるタスクを並行して別個に実行する計算である。このタイプのタスクの例は、データのセットを1つのフィルタに通し、その結果を第2のフィルタに通す、データのフィルタリングである。
本発明の目的は、マルチコア処理システムにおいてデータ並列負荷及びタスク並列負荷の両方をスケジューリングするための技術を提供することにある。
コンピュータ装置へのコマンドをキューに入れるために第1のコマンド・キューを生成することと、複数のワークグループを含むコマンドを第1のコマンド・キューにポストすることと、複数のワークグループを識別するデータ構造体、コマンドに対応する予約サイズ、ワークグループの数を格納するカウンタ、及びまだ処理されていないワークグループの数を格納するカウンタをコマンドと関連付けることと、複数の実行ユニットの各々の実行ユニットによって、予約サイズに対応する、複数のワークグループの別個のN次元範囲(N-dimensional range)を予約することと、複数の実行ユニットの各々によって、対応するN次元範囲を処理することと、各々の実行ユニットが処理したワークグループの数だけ、まだ処理されていないワークグループの数を格納するカウンタをデクリメントすることと、まだ処理されていないワークグループの数を格納するカウンタが「0」の値より小さいか又は「0」の値に等しくなるまで、予約すること、処理すること、及びデクリメントすることを繰り返すことと、まだ処理されていないワークグループの数を格納するカウンタが「0」の値より小さいか又は「0」の値に等しいとき、コマンドの完了を示すよう知らせることと、を含む技術が提供される。
この概要は、特許請求される主題の包括的な説明であることを意図するものではないが、寧ろ、これと関連した機能の一部の概要を提供することを意図する。以下の図面及び詳細な説明を検討したとき、当業者には、特許請求される主題の他のシステム、方法、機能、特徴及び利点が明らか又は明らかになるであろう。
開示される実施形態の以下の詳細な説明を以下の図面と併せて考慮するとき、特許請求される主題のより良い理解を得ることができる。
特許請求される主題を実施することができるコンピューティング・システム・アーキテクチャの一例である。 最初に図1に導入された中央処理装置の例のブロック図である。 特許請求される主題に従った、コマンド・キューを実施するのに用いることができるコマンド・デスクリプタ・メモリ・オブジェクトの例である。 ホスト、コマンド・キュー、複数の処理コア及びそれらの間の関係の例を示すブロック図である。 カウンタ・ブロック、N次元範囲(NDR)コマンド、タスク、処理コア及びそれらの間の関係の例を示すブロック図である。 ホスト制御プロセスの例を示すフローチャートである。 特許請求される主題を実施するのに用いることができる実行コマンド・プロセスの例を示すフローチャートである。 特許請求される主題の態様を実施するコマンド完了プロセスの例を示すフローチャートである。
提供されるのは、実行コマンドが、データ並列処理要件又はタスク並列処理要件を含み得るコマンドを効率的に実行し、その作業負荷を均衡させるのに必要な情報を含む技術である。各々のコマンドは、実行されるコマンド内のワークグループの総数、まだ計算されていないワークグループの数、既に処理されたワークグループの数、一度に処理するワークグループの数(予約サイズ)、コマンド内で処理する実行スレッドの数、及びコマンドを見た実行スレッドの数に対応する情報を含む。
実行ユニットは、1つ又は複数のコマンド・キューからのコマンドを処理する。実行ユニットは、これらに限定されるものではないが、処理コア、スレッド、又はネットワークにわたるコンピューティング・システムを含む、コマンドを実行できるいずれのものであってもよい。各々の実行ユニットは、割り当てられたキュー内の現在の位置を管理する。コマンドがキュー上で利用可能になると、コマンドの実行に関与する各ユニットは、ワークグループの予約サイズだけ、コマンドのワークグループの残りのカウンタをアトミックに(atomically)デクリメントし、処理のためにワークグループ範囲内の対応する数のワークグループを予約する。実行ユニットが要求されたワークグループを実行すると、ユニットは、それ以上を予約しようと試みる。これは、ワークグループの総数が処理されるまで続く。全てのワークグループが処理されると、各々の実行ユニットは、処理済みワークグループのカウンタ(work group processed counter)をインクリメントする。例えば、特定の実行ユニットが、一度に10個のワークグループを3回処理し、次いで全てのワークグループが処理されたと判断した場合には、実行ユニットは、30だけ処理済みワークグループのカウンタをインクリメントする。処理済みワークグループのカウンタを、実行予定のワークグループのカウンタ(work group to be executed counter)内に格納された値にインクリメントするユニットが、コマンドの完了を知らせる。
コマンドにアクセスする各々の実行ユニットはまた、見終わったワークグループのカウンタ(workgroup seen counter)にマーク付けする。処理済みワークグループのカウンタが実行予定のワークグループのカウントと等しくなり、かつ、見終わったワークグループのカウンタが実行ユニットの数に等しくなった時点で、コマンドを除去すること又はコマンド・キュー上に上書きすることが可能になる。
当業者により理解されるように、本発明の態様は、システム、方法、又はコンピュータ・プログラムとして具体化ことができる。従って、本発明の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコード等を含む)、又はソフトウェアの態様とハードウェアの態様とが組み合わされた実施形態の形を取ることができ、これらは全て、本明細書において一般的に「回路」、「モジュール」又は「システム」と呼ばれる。さらに、本発明の態様は、コンピュータ可読プログラム・コードがその上に具体化された1つ又は複数のコンピュータ可読媒体において具体化されるコンピュータ・プログラムの形を取ることもできる。
特許請求される主題に従った1つの実施形態が、データ並列ジョブ及びタスク並列ジョブの両方の効率的なキューイングのためのプログラム・メソッドに向けられる。ここで用いられる「プログラム・メソッド(programmed method)」という用語は、現在実行されている1つ又は複数のプロセス・ステップ、或いは代替的に、将来の時点で実行されることが可能な1つ又は複数のプロセス・ステップを意味するように定義される。この「プログラム・メソッド」という用語は、3つの代替的な形を予期する。第1に、プログラム・メソッドは、現在実行されているプロセス・ステップを含む。第2に、プログラム・メソッドは、コンピュータによって実行されたとき、1つ又は複数のプロセス・ステップを実行するコンピュータ命令を具体化するコンピュータ可読媒体を含む。最後に、プログラム・メソッドは、1つ又は複数のプロセス・ステップを実行するために、ソフトウェア、ハードウェア、ファームウェア、又はこれらの任意の組み合わせによりプログラムされたコンピュータ・システムを含む。「プログラム・メソッド」という用語は、1つより多い代替的な形態を同時に有するものとして解釈されるべきではなく、寧ろ、任意の所与の時点で、複数の代替的な形態のうちの1つだけが存在するという、代替的な形態の最も適正な意味で解釈されるべきであることを理解すべきである。
1つ又は複数のコンピュータ可読媒体の任意の組み合わせを利用することができる。コンピュータ可読媒体は、コンピュータ可読信号媒体又はコンピュータ可読記憶媒体とすることができる。コンピュータ可読記憶媒体は、例えば、これらに限定されるものではないが、電子的、磁気的、光学的、電磁的、赤外線、又は半導体のシステム、装置若しくはデバイス、或いは上記の任意の適切な組み合わせとすることができる。コンピュータ可読記憶媒体のより具体的な例(網羅的ではないリスト)は、以下のもの、すなわち、1つ又は複数の配線を有する電気的接続、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能なプログラム可能読み出し専用メモリ(EPROM又はフラッシュ・メモリ)、光ファイバ、ポータブル・コンパクト・ディスク読み出し専用メモリ(CD−ROM)、光記憶装置、磁気記憶装置、又は上記の任意の適切な組み合わせを含む。本文書の文脈において、コンピュータ可読記憶媒体は、命令実行システム、装置又はデバイスによって使用するため、又はそれらと接続して使用するために、プログラムを収容又は保存できる任意の有形媒体とすることができる。
コンピュータ可読信号媒体は、コンピュータ可読プログラム・コードが内部に具体化された、例えばベースバンド内の又は搬送波の一部としての伝搬されたデータ信号を含むものとすることができる。このような伝搬信号は、これらに限定されるものではないが、電磁式、光学式、又はこれらの任意の適切な組み合わせを含む、様々な形態のいずれかを取ることができる。コンピュータ可読信号媒体は、コンピュータ可読記憶媒体ではなく、命令実行システム、装置又はデバイスによって使用するため、又はそれらと接続して使用するために、プログラムを伝達し、伝搬し、又は移送することができる任意のコンピュータ可読媒体とすることができる。
コンピュータ可読媒体上で具体化されるプログラム・コードは、これらに限定されるものではないが、無線、有線、光ファイバ・ケーブル、RF等、又は上記の任意の適切な組み合わせを含む、任意の適切な媒体を用いて伝送することができる。
本発明の態様の動作を実行するためのコンピュータ・プログラム・コードは、Java、Smalltalk、C++等のようなオブジェクト指向プログラミング言語、及び、「C」プログラミング言語又は同様のプログラミング言語のような従来の手続き型プログラミング言語を含む、1つ又は複数のプログラミング言語の任意の組み合わせで記述することができる。プログラム・コードは、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で実行される場合もあり、独立したソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部がリモート・コンピュータ上で実行される場合もあり、又は完全にリモート・コンピュータ若しくはサーバ上で実行される場合もある。一番最後のシナリオの場合、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部のコンピュータへの接続がなされる場合もある(例えば、インターネット・サービス・プロバイダを用いたインターネットを通じて)。
本発明の実施形態に従った方法、装置(システム)及びコンピュータ・プログラムのフローチャート図及び/又はブロック図を参照して、本発明の態様を以下に説明する。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図内のブロックの組み合わせは、コンピュータ・プログラム命令によって実施できることが理解されるであろう。これらのコンピュータ・プログラム命令は、機械を製造するために、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能なデータ処理装置のプロセッサに与えられるものとされ、その結果、コンピュータ又は他のプログラム可能なデータ処理装置のプロセッサによって実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実施するための手段を作り出すようにすることができる。
これらのコンピュータ・プログラム命令はまた、コンピュータ、他のプログラム可能なデータ処理装置、又は他のデバイスを特定の方法で機能させるように指図することができるコンピュータ可読媒体内に格納するものとし、その結果、コンピュータ可読媒体内に格納された命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実施する命令を含む製造物品を製造するようにさせることもできる。
コンピュータ・プログラム命令はまた、コンピュータによって実施されるプロセスを生成するために、コンピュータ、他のプログラム可能な装置、又はデバイス上で実行されるべき一連の動作ステップを生じさせるために、コンピュータ、他のプログラム可能な装置、又はデバイス上にロードされるものとされ、その結果、コンピュータ又は他のプログラム可能な装置上で実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実施するためのステップを提供するようにさせることができる。
ここで発明者らが認識したように、セル・ブロードバンド・エンジン・アーキテクチャ(CBEA)のようなアーキテクチャは、柔軟性を提供するように設計されているが、スケジューリング・モデルがハードウェア内に組み込まれていないので不都合である。ソフトウェアの機能として提供されるスケジューリングと比較して、ハードウェア・スケジューラと競うために、性能が重要な問題である。
ここで図面を参照すると、図1は、特許請求される主題を実施できるコンピューティング・システム・アーキテクチャ100の一例である。クライアント・システム102は、中央処理装置(CPU)104を含む。CPU104は、複数のプロセッサ(図示せず)を含むことができ、これらの各々が、複数の処理コアを含むことができる(図2を参照されたい)。コンピューティング技術分野の当業者であれば、CPU104に可能な多くの異なる構成を認識するはずである。
クライアント・システム102及びプロセッサ104は、協働して人間とコンピューティング・システム100及びクライアント・システム102との対話を容易にするモニタ106、キーボード108及びマウス110に結合される。CPU104に組み込むことができ、すなわち内部装置とすることができ、或いは、これに限定されるものではないが、ユニバーサル・シリアル・バス(USB)ポート(図示せず)のような一般的に利用可能な種々の接続装置によってCPU104に外部から取り付けることができる、データ・ストレージ・コンポーネント112も、クライアント・システム102内に含められ、かつ、CPU104に取り付けられている。データ・ストレージ112は、クライアント・システム102の動作を制御するオペレーティング・システム114と、特許請求される主題を実施するコマンド・キューイング・システム(Command Queuing System、CQS)116の例とを格納するように示されている。CQS116と関連した機能は、図2−図8と関連して以下により詳細に説明される。
クライアント・システム102及びCPU104は、ローカル・エリア・ネットワーク(LAN)120に接続され、ローカル・エリア・ネットワーク(LAN)120はまた、サーバ・コンピュータ122に接続されている。この例では、CPU104及びサーバ122は、LAN120を介して通信可能に結合されるが、これらは、これに限定されるものではないが、インターネット(図示せず)のような任意の数の通信媒体を介して結合することもできる。さらに、特許請求される主題を実施できる多くの可能なコンピューティング・システム構成が存在すること、及び、コンピューティング・システム100は、その1つの簡単な例にすぎないことに留意すべきである。
図2は、最初に図1において導入されたCPU104の構成の例のブロック図である。CPU104は、この例では、コア_0 131、コア_1 132等からコア_N 133までの処理コアである、N個の実行ユニットを含むプロセッサ130を含む。プロセッサ130の処理コアの正確な数は重要ではなく、特許請求される主題は、数に関係なく等しくうまく機能する。付加的なプロセッサとすることができるプロセッサ130に加えて、便宜上、1つのプロセッサだけが示されることに留意すべきである。特許請求される主題に従ってスケジューリングされる実行ユニットの例として、コア131−133が明細書全体を通して用いられる。上述のように、実行ユニットは、これらに限定されるものではないが、処理コア、CPU、スレッド、及び完全なコンピューティング・システムさえも含む、コマンドを実行する任意のデバイスとすることができる。
プロセッサ130は、コア131−133と、メモリ・コントローラ142と、入力/出力(I/O)コントローラ146と間の通信経路を提供するデータ・バス140に通信可能に結合される。メモリ・コントローラ142は、データ・ストレージ112(図1)のようなクライアント・システム102(図1)のメモリ・デバイス144の制御を担っている。I/Oコントローラは、モニタ106(図1)、キーボード108(図1)及びマウス110(図1)のようなI/Oデバイス148の制御を担っている。当業者であれば、図2は、典型的なCPUを非常に簡単に示したものであり、便宜上、図示されていない多くの他のコンポーネントを含むことを認識すべきである。
図3は、特許請求される主題に従った、コマンド・キューを実施するのに用いることができるコマンド記述子メモリ・オブジェクト(CDMO)150の例である。CDMO150は、単にオブジェクト200の名前、すなわち「CommandDesriptorObject」を記載するにすぎないタイトル・セクション152と、CDMO150と関連したメモリ要素又は属性を含む属性セクション154と、CDMO150と共に実行することができる機能又はメソッドを含むメソッド・セクション156とを含む。説明される属性及びメソッドは、例示のみを目的として用いられることに留意すべきである。付加的な及び/又は異なる属性及びメソッドを用いて、特許請求される主題を実施することもできる。
属性セクション154は、「cdoID」属性158と、「workGroups」属性160と、「atomicWGRemaining」属性162と、「atomicWGProcessed」属性164と、「reservationSize」属性166と、「executionUnits」属性168と、「atomicUnitsSeen」属性170とを含む。
cdoID属性158は、CDMO150の特定のインスタンスへの参照を含むタイプCDObjectIDの変数である。オブジェクト150の各インスタンスは、各インスタンスを一意的に特定することを可能にする、属性158についての固有の値を有する。workGroups属性160は、CDMO150の特定のインスタンシエーションによって参照される対応するコマンド内で計算されるワークグループの総数を格納する、整数型(type INTEGER)の変数である。
atomicWGRemaining属性162は、まだ処理されていないワークグループの数を格納する整数型の変数である。対応するコマンドについての処理を開始する前、属性162は、属性160の値に等しい値を格納する。対応するコマンドについての処理を開始すると、属性162の値は、処理のためにまだコアに割り当てられていないワークグループの数と等しくなる。処理が完了すると、属性162は、「0」より小さい又は0に等しい値に設定される。図7と併せて以下に詳細に説明されるように、値が「0」より小さく又は「0」に等しくなるように属性162をデクリメントする実行ユニットは、残っているワークグループが、対応するコマンドについて処理されることになる最後のワークグループであることを知っており、従って、不完全なセットを処理することが必要とされるか、又はワークグループを処理する必要はない。
atomicWGProcessed属性164は、処理を完了した対応するコマンドのワークグループの数を格納する整数型の変数である。対応するコマンドについての処理を開始する前に、属性164は、「0」又はNULLの値に等しい値を格納する。処理が完了すると、属性164は、属性160の値と等しくなり、オリジナルの割り当てられたワークグループの各々が処理を完了したことを示す。属性164はまた、実行ユニットが属性164をインクリメントし、全てのワークグループが完了したことを知らせるようにも使用される。代替的な実施形態においては、属性162及び164と関連した機能を逆にし、ワークグループが引き続き処理を必要としていたことを知らせるために属性164を使用し、全てのワークグループが完了したことを判断するために属性162を使用することができることに留意すべきである。
reservationSize属性166は、一度に各コアに割り当てるべきワークグループの数を格納する整数型の変数である。もちろん、コマンドが完了に近づくにつれて、処理されることになる残りのワークグループの数は、属性166の値より小さくなり得る。executionUnits属性168は、特定のコマンドを見ることになっている、すなわちワークグループに特定のコマンドの処理を要求する実行ユニットの数を格納する整数型の変数である。特定のスレッドがコマンドと関連したワークグループを処理していること、又は、スレッドが処理可能な状態になったときに全てのワークグループが既に割り当てられていることから、atomicUnitsSeen属性170は、コマンドを確認した実行スレッドの数を格納する整数型の変数である。
CDMO150のメソッド・セクション156は、2つの例示的な機能又はメソッドを含む。便宜上、2つのメソッドだけが示されている。プログラミング技術分野の当業者であれば、オブジェクト150のようなオブジェクトは、一般的に、これらに限定されるものではないが、コンストラクタ(constructor)、デストラクタ(destructor)、及び特定の属性について値を設定し獲得するためのメソッドを含む、多くの付加的なメソッドを含むことを認識すべきである。
例えば、どちらも図7と併せて以下により詳細に説明される「設定サイズを決定する」ブロック312及び「WGが残っているか?」ブロック316の際に、「getValues」メソッド172が呼び出される。メソッド172を呼び出して、CDMO150のインスタンシエーション内に格納される属性の値を取り出す。この例では、メソッド172は、1つのパラメータ:「valueStructure」、すなわち属性154のための記憶空間を含むタイプCDOValueStructureの変数と共に呼び出される。
例えば、図7と併せて以下により詳細に説明される「完了したWGの数をインクリメントする」ブロック322の際に、「updateCDO」メソッド174が呼び出される。メソッド174を呼び出して、対応するコンポーネントの属性158、160、162、164、166、168及び170を更新する。この例では、メソッド174は、1つのパラメータ:上述のような「valueStructure」、すなわち属性154のための記憶空間を含むタイプCDOValueStructureの変数と共に呼び出される。
CDMO150は、特許請求される主題を実施するために用いることができるメモリ・オブジェクトの一例にすぎないことを理解すべきである。より少ない、より多い、及び/又は異なる属性及びメソッドを有する他のメモリ・オブジェクトを用いることもできる。さらに、特許請求される主題の機能及びデータ・ストレージを実施するために、オブジェクト150を用いる以外の多くの方法が存在する。例えば、特許請求される主題は、リレーショナル・データベースと共にコンピュータ・プログラムによって実施することができる。
図4は、ホスト202、コマンド・キュー204、コア_0 210、コア_1 211、コア_2 212、コア_3 213の例、及びこれらの間の関係の種々の例を示すブロック図である。コマンド・キュー204が循環式であることに留意すべきである。ホスト202は、コマンドを、これらに限定されるものではないが、クライアント・システム102(図1)、サーバ122(図1)、処理コア、実行スレッド等のような、キューにポストする任意のコマンド実行デバイスとすることができる。コア210−213は、コア130−133(図2)のような、ホスト202と関連付けられた処理コアとすることができる。ホスト202がクライアント・システム102であると想定される場合、コマンド・キュー204は、データ・ストレージ102(図1)又はCPU104(図1及び図2)と関連した揮発性メモリ(図示せず)上に格納することができる。
コマンド・キュー204は、幾つかのキュー要素(QE)、具体的には、QE_1 221、QE_2 222、QE_3 223、QE_4 224、QE_5 225、QE_6 226、QE_7 227及びQE_8 228を含むように示される。QE221−228と関連した陰影付けは、種々の可能な状態を表し、QE221及び222は完了したコマンドを表し、QE223−225は、現在のところ必ずしも処理されていないが、全ての実行ユニットが見ていないコマンドを表す。QE226−228は、コマンド・キュー204における空の又は利用可能なキュー・スロットを表す。コマンド・キュー204内の空間229は、現在のところ処理されていないが、コア_2 212が既にそれらを越えて進んでいるので、完了していると想定できる付加的なQEを表すにすぎない。この場合、コア210、211及び213は、空間229によって表されるQEをまだ見ていない。空間229と関連したQEに関して処理が完了しても、コア210、211及び213によって「見られる(seen)」まで、QEに新しいコマンドを上書きすることはできない。このことは、コア210、211及び213が、上書きされたQEにアクセスし、従って、予想されるものとは異なる情報を格納するのを防止する。
この例では、ホスト202は、次の利用可能なキュー要素のスロットQE_6 226を指し示す。コア_0 210及びコア_1 211は、QE_3 223と関連付けられたコマンドを指し示すか又はこれを実行するプロセスにおいて示され、コア_2 212は、QE_5 225と関連付けられたコマンドを実行するように示され、コア_3 213は、QE_4 224と関連付けられたコマンドを実行するように示される。種々のポインタの重要性及びコマンド・キュー204内に格納されたコマンドの実行は、図5−図8と併せて以下により詳細に説明される。
NDRは、多次元のワークグループ/アイテムで構成されるコマンドであることに留意すべきである。NDRは、特定のコマンドと関連付けられており、全てがQE221−228のような単一のQE内に含まれてもよいが、それは必須ではない。QEは、これらに限定されるものではないが、NDR、タスク、又はキュー・サイズ変更の表示とすることができるコマンドを含む。開示される技術はまた、複数のQE内に複数のワークグループを有する単一のコマンドを配置し、複数の処理グループ間でのコマンドのインターリーブ(図5を参照されたい)を可能にする。図4の例示は、1つの処理グループだけを含む単純化された例と考えることができる。
図5は、図4のコマンド・キュー204とは異なる視点からのコマンド・キュー230の例を示すブロック図である。具体的には、コマンド・キュー230は、N次元範囲(NDR)コマンド及びタスク・コマンドに分割された状態で示される。言い換えれば、多数のワークグループを含むように指定されたコマンドが、1又は複数のN次元範囲に分割される。1つの特定のコマンドが、2つのNDR、すなわちNDR_A1 231及びNDR_A2 232に分割される。NDR_A1 231及びNDR_A2 232の両方とも、単一のコマンドを表し、よって、カウンタ・ブロックCB_1 241を共有する。1つのコマンドは、コマンド・キュー230内の2つのエントリを有し、処理グループ間でのキュー230におけるコマンドのインターリーブを可能にする。図5において、コア131−133によって表される処理グループは、奇数のエントリを処理し、処理グループ250は、偶数のエントリを処理している。このような責任の分担は、共有されるタスク・カウンタ・ブロックにわたる競合を軽減するのに役立つ。単一のコマンドを2つのエントリ、この例では、NDR_A1 231及びNDR_A2 232に分割することにより、両方の処理グループがコマンドを実行することが可能になる。別のコマンドも、2つのNDR、すなわちNDR_B1 236及びNDR_B2 237に分割される。さらに、タスク・コマンドは、1つのワークグループを有するNDRと考えることができる。
対応するコマンドと関連付けられた単一のタスク、すなわちタスク_A 233、タスク_B 234、タスク_C 235も示される。各々のタスク233−235は、対応するQEと関連付けられる。カウンタ・ブロック(CB)、具体的には、CB_1 241、CB_2 242、CB_3 243、CB_4 244及びCB_5 245を用いて、関連したNDRに対応する各々のブロックによりコマンドの実行を追跡する。この例では、CB_1 241は、NDR231及び232と関連したコマンドの実行を追跡しており、CB_5 245は、NDR236及び237と関連したコマンドの実行を追跡している。
処理コア131−133(図2)、並びに、処理グループ250と関連したコア_N+1 134からコア_2N 135までの付加的なコアも、図5内に含まれる。処理グループ250は、CPU104(図1及び図2)内の、又はCPU104に通信可能に結合されたサーバ122(図2)のような別のコンピュータ装置内の付加的なプロセッサとすることができる。2つの処理グループが示されるが、処理グループの数は制限されていない。処理グループは、処理コア、スレッド、又はさらにネットワークにわたるシステムからなることができる。プロセッサのグループ化は、性能及び/又は局所性又は要素のような要因によって決まり得る。この例では、コア_0 131は、NDR_A1 231を実行しており、コア_N 133は、タスク_A 233を実行しており、コア134及び135は、NDR_A2 232を処理している。カウンタ・ブロック、NDR、タスク、及び処理コアと関連した処理は、図6及び図7と併せて以下により詳細に説明される。
図6は、ホスト制御プロセス280の例を示すフローチャートである。この例では、プロセス280と関連したプログラムは、データ・ストレージ(図1)上に格納され、CQS116(図1)と共にCPU104(図1及び図2)上で実行される。プロセス280は、「ホスト制御を開始する」ブロック282で始まり、直ちに「コマンドを受け取る」ブロック284に進む
ブロック284の際、プロセス280は、以下の例においてはコマンド・キュー230であるコマンド・キュー上にポストするために、コマンドを受け取る。コマンドは、これらに限定されるものではないが、OS114(図1)、並びに、この例ではクライアント・システム102上で実行されるいずれかのアプリケーション(図示せず)及びユーティリティ(図示せず)等の種々のソースから伝送することができる。さらに、コマンドは、サーバ122のようなリモート・ソースから伝送することができる。「2つのスロットが利用可能か?」ブロック286の際、プロセス280は、コマンド・キュー230が少なくとも2つの利用可能なスロットを有するかどうかを判断する。この例においてはホスト202(図4)であるコマンド・キュー・ホストがストールするのを回避するために、2より少ないエントリが新しいコマンドのエントリに利用可能であるときはいつでも、コマンド・キュー230をサイズ変更する。将来を見越すことによって、ホスト202は、ブロックを次のエンキュー上に押し込むことなく、コマンド・キュー230が新しいコマンドを収容するのに十分な空間を有するかどうかを判断することができる。
新しいコマンドをキューに入れる(エンキューする)よう要求を受け取ったとき、2つより少ないブロックが利用可能である場合には、プロセス280は、新しいより大きいキュー(図示せず)を作成する「新しいキューを作成する」ブロック288に進む。コマンド・キュー230上で少なくとも2つのスポットが利用可能である場合には、1つのブロックは、ブロック284の際に受け取ったコマンドをキューに入れるために使用し、1つの空間は、次のコマンドを受け取ったときにブロックを防止するために残す。
「サイズ変更コマンドを付加する」ブロック290の際、サイズ変更コマンドが、実行ユニットが新しいキューにアクセスするのに必要な情報と共に、最後の残っているスポットとして現在のキュー内に挿入される。このように、コマンド・キュー・プロセス(図7のプロセス300を参照されたい)は、新しいキューを用いるのに必要なステップを通知し、必要な措置を取ることができる(図7の310を参照されたい)。以下の説明における連続性のために、新しいキューは、依然としてコマンド・キュー230と呼ばれる。サイズ変更コマンドがブロック290の際に挿入されたことが分かると、又はブロック286の際に、少なくとも2つのキュー・スポットが利用可能であるとプロセス280が判断した場合には、プロセス280は、「コマンドをキューに付加する」ブロック292に進む。ブロック292の際、ブロック284の際に受け取ったコマンドは、第1のエントリとして新しいキュー内に付加されるか(ブロック290から)、又は現在のコマンド・キュー230内に挿入される(ブロック286から)。「ポインタをインクリメントする」ブロック294の際、プロセス280は、ホスト202から次の利用可能なQEにポインタをインクリメントする。
最後に、プロセス280は、非同期割り込み298によって停止され、制御を「ホスト制御を終了する」ブロック299に渡し、そこで、プロセス280が完了する。割り込み298は、典型的には、プロセス280がその一部であるOS114又はCQS116(図1)それ自体が停止されるときに生じる。公称動作中、プロセス280は、ブロック284、286、288、290、292及び294を経由して連続的にループし、コマンドを受け取ったときにコマンドを処理する。
図7は、特許請求される主題を実施するために用いることができる実行コマンド・プロセス300の例を示すフローチャートである。この例では、プロセス300と関連したプログラムが、データ・ストレージ112(図1)上に格納され、CQS116(図1)と併せてCPU104(図1及び図2)上で実行される。
プロセス300は、「実行コマンドを開始する」ブロック302で始まり、直ちに「作業を待つ」ブロック304に進む。ブロック304の際、プロセス300は、コマンド・キュー204(図4)又は230(図5)のようなコマンド・キュー上に1つ又は複数のコマンドが存在するという、CQS116からの信号を待っているサスペンド状態にある。この説明を目的として、コマンド・キュー230が用いられる。コア131−135(図5)のような実行ユニットに通知するための機構、従って、コマンドが利用可能であるプロセス300は、システム構成及び作業負荷に応じて変わり得る。次の利用可能なコマンドの状態をうまくポーリングすることにより、システムに高い効率性がもたらされ、そのため、リソースのポーリングに大きな消費はなされない。例えば、SPUユニットは、処理されることになる次のコマンドを含むコマンド・キュー230のエントリのアトミック・ポーリング行なうことができる。ポーリングが貴重な計算サイクルを消費するCPUにおいては、条件変数を用いることができる。コマンドがキュー230上にあるという信号を受け取ると、プロセス300は、次の利用可能なコマンドを表すコマンド・キュー230内の位置から第1のコマンドを取り出す、「コマンドをフェッチする」ブロック306に進む。コマンドに関連した情報(図3のCDMO150を参照されたい)は、CB241−245(図5)のようなカウンタ・ブロック内に格納される。
サイズ変更コマンドか?」ブロック308の際、プロセス300は、ブロック306の際にフェッチされたコマンドが、コマンド・キュー230がサイズ変更された(図6のプロセス280を参照されたい)という表示を表すかどうかを判断する。表す場合には、プロセス300は、古いキュー(図6を参照されたい)ではなく新しいキュー又はサイズ変更されたキューを用いるように処理を実行する、「サイズ変更を処理する」ブロック310に進む。次に、プロセス300は、ブロック306に戻り、新しいキューから次のコマンドをフェッチし、上述のように処理が続く。
ブロック308の際、実行されることになる次のコマンドが、サイズ変更されたコマンド・キュー230の表示ではないとプロセス300が判断した場合、制御は「設定サイズを決定する」ブロック312に進む。ブロック312の間、プロセス300は、対応するコマンドについての構成されたワークグループのサイズ(図3のCDMO150の166を参照されたい)を決定する。もちろん、コマンドは、1つだけのワークグループを有し、かつ、1つの予約サイズをも有すると考えることができる、タスクとすることができる。「ワークグループ(WG)の設定サイズをデクリメントする」ブロック314の際、ブロック306の際にフェッチされたコマンドの実行と関連した各々の実行ユニットは、依然として処理する必要があるコマンド内のワークグループの数(図3のCDO150の162を参照されたい)を格納する変数をデクリメントする。この例のために、実行ユニット131−135(図2及び図5)が用いられる。各々の実行ユニット131−135はブロック314をアトミックに実行し、その結果、別のユニットが変数にアクセスし、これをデクリメントする前に、1つのユニットにより、変数が完全に更新される。デクリメント値は、特定のユニットによって実行されることになる特定のコマンド内のNDRの範囲に基づいて、対応する実行ユニット131−135を提供する。このように、各々の実行ユニットは、ホストの関与を最小にした状態で、これがNDRから実行するワークグループの数を制御することができる。言い換えれば、コマンドは、実行ユニット間で分割されるので、各々の実行ユニットは、必要に応じて作業を要求し、かつ、次のコマンドにいつ進むかを完全に知ることができる。
「WGが残っているか?」ブロック316の際、プロセス300は、(現在の実行ユニットが実行された時点で)いずれかのワークグループ・ユニットがまだ処理されていないかどうか、すなわち、ブロック314の動作の結果として、変数162の値がゼロ又はそれより小さいかどうかを判断する。属性がゼロ又はそれより小さく、また、reservationSize166(図3)の絶対値よりも小さい絶対値を有する場合、実行ユニットは、処理するコマンドの最後のワークグループ、及び潜在的には不完全なセットを有する。この場合、プロセス300は、ブロック314の際に取り出された基本範囲によって識別された残りのワークグループを処理する、「部分的なWGを処理する」ブロック320に進む。属性162がゼロ又はそれより小さく、また、reservationSize166(図3)の絶対値よりも大きいか又はこれと等しい絶対値を有する場合、実行ユニットは、全てのワークグループが処理されたことを知り、ブロック320に進むが、ワークグループを処理しない。
ブロック316の際、属性162がゼロより大きいと判断された場合には、プロセス300は、「WGアイテムを処理する」ブロック318に進む。ブロック318の際、対応する実行ユニット131−135は、ブロック314の際に判断されたNDRの基本範囲から開始する予約サイズのワークグループの実行を担っている。次に、プロセス300は、ブロック314に戻り、上述のように処理が続く。
「完了したWGの数をインクリメントする」ブロック322の際、各々の実行ユニットは、ブロック314、316、318及び320を通じた繰り返しの間、特定の実行ユニット131−135がブロック306の際に受け取ったコマンドに対して処理したワークグループの数だけ、完了したワークグループの総数(図3の164を参照されたい)を示す変数をアトミックにインクリメントする。
「完了したWG=総数か?」ブロック324の際、各々の実行ユニットは、完了したワークグループの数(図3の164を参照されたい)が、コマンド内のワークグループの数(図3の160を参照されたい)と等しいどうかを判断する。等しい場合には、対応する実行ユニット131−135は、「完了を知らせる」ブロック326に進む。ブロック326の際、実行ユニット131−135は、コマンドと関連した全てのワークグループが処理されたことをCQS116に知らせる。このように、コマンドを終了する実行ユニットだけが、CQS116に信号を送り、その結果、二重に信号を送るのを防止する。
上述の処理に加えて、コマンド・キュー230上で動作する各実行ユニット131−135は、「見られたコマンドにマーク付けする」ブロック328を実行する。ブロック328の際、各々の実行ユニット131−135は、特定のコマンドを見た実行ユニットの数(図3の170を参照されたい)を追跡する変数をインクリメントする。例えば、特定のコマンドに割り当てられたスレッドの数(図3の168を参照されたい)がコマンドを完了するのに実際に必要なユニットの数を上回る場合には、実行ユニットが実際に特定のコマンドに取り組み、コマンドを見る必要はないことに留意されたい。ブロック328の際にコマンドを見たものとしてマーク付けすると、各々の実行ユニット131−135は、ブロック304に戻り、上述のように処理が続く。
最後に、プロセス300は、非同期割り込み338によって停止され、制御を「実行コマンドを終了する」ブロック339に渡し、そこで、プロセス300が完了する。割り込み338は、典型的には、プロセス300がその一部であるOS114(図1)又はCQS116それ自体が停止されるときに生じる。公称動作中、プロセス300は、ブロック302、304、306、308、310、312、314、316、318、320、322、324、326及び328を経由して連続的にループし、コマンドを受け取ったときにコマンドを処理する。
図8は、特許請求される主題の態様を実施するコマンド完了プロセス350の例を示すフローチャートである。この例では、プロセス350と関連した論理は、データ・ストレージ112(図1)上に格納され、CQS116(図1)と併せてCPU104(図1及び図2)上で実行される。
プロセス350は、「コマンド完了を開始する」ブロック352で始まり、直ちに「作業を待つ」ブロック354に進む。ブロック354の際、プロセス350は、コマンドが実行されたという信号(図7の326を参照されたい)を待っているサスペンド状態にある。
信号を受け取ると、プロセス350は、「プロセス実行が完了したか?」ブロック356に進む。ブロック356の際、プロセス350は、ブロック354の際に受け取った信号がコマンドの完了を表すコマンドであるかどうかを判断する。コマンドの完了を表すコマンドではない場合、プロセス350は、「プロセスのサイズ変更が完了したか?」ブロック358に進み、そこで、プロセス350は、ブロック354の際に受け取った信号が、コマンド・キュー230のサイズ変更を完了したという表示を表すかどうかを判断する。具体的には、各々の実行ユニットがサイズ変更コマンドを見て、サイズ変更されたキューに切り替えられたかどうかについて判断を行なう。図6と併せて上述したように、コマンド・キュー230は、コマンドと、場合によってはコマンド・キュー230のサイズ変更が実行されたという表示との両方を含む。サイズ変更コマンドが全ての適切な実行ユニットにより見られた場合には、プロセス350は、サイズ変更されたキューに置き換えられたキューを削除する「古いキューを削除する」ブロック360に進む。
プロセス350は、ブロック356の際に、受け取った信号が完了したコマンドを表すと判断した場合、制御は、対応する実行ユニットによってコマンドが完了したことをCQS116に通知する「完了をポストする」ブロック362に進む。「完了したキュー・エントリ(QE)にマーク付けする」ブロック364の際、プロセス350は、コマンドが対応する実行ユニットによって完了されたという表示で対応するキュー・エントリにマーク付けする。
ブロック362の際にコマンド・キュー230内の適切なエントリが完了されたものとマーク付けされると、又は処理がブロック358及び360に対して完了した時点で、プロセス350は、ブロック354に戻り、別の信号を待ち、上述のように処理が続く。最後に、プロセス350は、非同期割り込み368によって停止され、制御を「コマンド完了を終了する」ブロック369に渡し、そこでプロセス350が完了する。割り込み368は、典型的には、プロセス350がその一部であるOS114(図1)又はCQS116それ自体が停止されるときに生じる。公称動作中、プロセス350は、ブロック352、354、356、358、360、362及び364を経由して連続的にループし、コマンドを受け取ったときにコマンドを処理する。
ここで用いられる用語は、特定の実施形態を説明することのみを目的とし、本発明を限定することを意図していない。ここで用いられる単数形の「1つの(a)」、「1つの(an)」及び「その(the)」という用語は、複数形も同様に含むことが意図される。「含む(comprise)」及び/又は「含んでいる(comprising)」という用語は、本明細書で用いられるときには、述べられた特徴、整数、ステップ、操作、要素、及び/又はコンポーネントの存在を特定するが、1つ又は複数の他の特徴、整数、ステップ、操作、要素、コンポーネント、及び/又はそれらのグループの存在又は付加を排除するものではないことが、さらに理解されるであろう。
以下の特許請求の範囲における全ての機能付き手段(ミーンズ・プラス・ファンクション)又は機能付き工程(ステップ・プラス・ファンクション)の対応する構造、材料、動作及び均等物は、具体的に請求される他の請求要素と組み合わせて本機能を実施するためのいずれかの構造、材料、又は動作を含むことを意図している。本発明の記載は、例示及び説明目的で提示されたが、網羅的であることを意図するものでも、本発明を開示された形態に限定することを意図するものでもない。当業者であれば、本発明の範囲及び精神から逸脱することなく、多くの修正及び変形が明らかであろう。実施形態は、本発明の原理及び実際の適用を最も良く説明し、その他の当業者が企図される特定の使用に適した種々の修正を伴う種々の実施形態について本発明を理解できるように、選択され、説明された。
図面内のフローチャート及びブロック図は、本発明の種々の実施形態によるシステム、方法及びコンピュータ・プログラムの可能な実装のアーキテクチャ、機能、及び動作を例証する。この点で、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実装するための1つ又は複数の実行可能な命令を含むコードのモジュール、セグメント又は部分を表すことができる。幾つかの代替的な実装においては、ブロック内に記載さされた機能は、図面内に記載された順序とは異なる順序で行われる場合があることにも留意すべきである。例えば、逐次的に図示された2つのブロックは、実際には、実質的に同時に実行される場合もあり、又は、これらのブロックは、関与する機能に応じて、ときとして逆順で実行される場合もある。ブロック図及び/又はフローチャート図の各ブロック、並びにブロック図及び/又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を実行する専用ハードウェア・ベースのシステム、又は専用ハードウェアとコンピュータ命令との組み合わせによって実装できることも留意される。
100:コンピューティング・システム・アーキテクチャ
102:クライアント・システム
104:中央処理装置(CPU)
106:モニタ
108:キーボード
110:マウス
112:データ・ストレージ
114:オペレーティング・システム
116:コマンド・キューイング・システム(CQS)
120:ローカル・エリア・ネットワーク(LAN)
122:サーバ・コンピュータ
130:プロセッサ
131〜135:コア
140:データ・バス
142:メモリ・コントローラ
146:入力/出力(I/O)コントローラ
148:I/O装置
150:コマンド記述子メモリ・オブジェクト(CDMO)
202:ホスト
204、230:コマンド・キュー
300、350:プロセス

Claims (20)

  1. コンピュータ装置へのコマンドをキューに入れるために第1のコマンド・キューを生成することと、
    複数のワークグループを含むコマンドを前記第1のコマンド・キューにポストすることと、
    前記複数のワークグループを識別するデータ構造体、前記コマンドに対応する予約サイズ、ワークグループの数を格納するカウンタ、及びまだ処理されていない前記ワークグループの数を格納するカウンタを前記コマンドと関連付けることと、
    複数の実行ユニットの各々の実行ユニットによって、前記予約サイズに対応する数のワークグループを予約することと、
    前記複数の実行ユニットの各々によって、前記対応する数のワークグループを処理することと、
    各々の実行ユニットが処理した前記ワークグループの数だけ、まだ処理されていない前記ワークグループの数を格納する前記カウンタをデクリメントすることと、
    まだ処理されていない前記ワークグループの数を格納する前記カウンタが「0」の値より小さいか又は「0」の値と等しくなるまで、前記予約すること、前記処理すること、及び前記デクリメントすることを繰り返すことと、
    まだ処理されていない前記ワークグループの数を格納する前記カウンタが「0」の値より小さいか又は「0」の値と等しいとき、前記コマンドの完了を示すよう知らせることと、
    を含む方法。
  2. 前記複数の実行ユニットの1つの実行ユニットによって、まだ処理されていない前記ワークグループの数を格納する前記カウンタが「0」の値より小さいか又は0の値と等しいこと、及び、まだ処理されていない前記ワークグループの数を格納する前記カウンタの絶対値が、前記予約サイズの絶対値より小さいか又はこれと等しいことを検出することをさらに含み、
    前記知らせることは、前記1つの実行ユニットによってのみ実行される、請求項1に記載の方法。
  3. 前記データ構造体はまた、前記コマンドを見ることになっている実行ユニットの数を格納するカウンタと、前記コマンドを確認した実行ユニットの数を格納するカウンタとを含み、前記方法は、まだ処理されていない前記ワークグループの数を格納する前記カウンタが「0」より小さいか又は「0」と等しく、かつ、前記コマンドを確認した前記実行ユニットの数を格納する前記カウンタが、前記コマンドを見ることになっている前記実行ユニットの数を格納する前記カウンタとも等しいとき、前記第1のコマンド・キューから前記コマンドに対応するエントリを解放することさらに含む、請求項1に記載の方法。
  4. 前記複数の実行ユニットの各々の実行ユニットは、処理コア、プロセッサ、処理スレッド、及び完全なコンピューティング・システムを含む、コマンドを実行するいずれかのコンピュータ装置とすることができる、請求項1に記載の方法。
  5. 前記コマンド・キュー内に入ってくるコマンドのエントリについて少なくとも2つの利用可能なスロットが存在するかどうかを判断することと、
    前記コマンド・キュー内に前記入ってくるコマンドのエントリについて少なくとも2つの利用可能なスロットが存在すると判断された場合、前記コマンド・キュー内に前記入ってくるコマンドを入力することと、
    前記第1のコマンド・キュー内に前記入ってくるコマンドのエントリについて少なくとも2つの利用可能なスロットは存在しないと判断された場合、第2のコマンド・キューを生成することと、
    前記第1のコマンド・キューを前記第2のコマンド・キューに置き換えることと、
    をさらに含む、請求項1に記載の方法。
  6. 前記置き換えることは、
    前記第1のキュー内にキュー・サイズ変更の表示を入力することと、
    前記入ってくるコマンドを前記第2のコマンド・キュー内に入力することと、
    前記第1のキューからのコマンドの実行中に前記キュー・サイズ変更の表示が検知されたとき、前記第1のキューを前記第2のキューに置き換えることと、
    を含む、請求項5に記載の方法。
  7. 前記置き換えることが完了すると、前記第1のキューを削除することをさらに含む、請求項6に記載の方法。
  8. プロセッサと、
    前記プロセッサに結合された物理メモリと、
    複数の実行ユニットと、
    前記実行ユニットへのコマンドをキューに入れるために第1のコマンド・キューを生成し、
    複数のワークグループを含むコマンドを前記第1のコマンド・キューにポストし、
    前記複数のワークグループを識別するデータ構造体、前記コマンドに対応する予約サイズ、ワークグループの数を格納するカウンタ、まだ処理されていない前記ワークグループの数を格納するカウンタ、及び処理された前記ワークグループの数を格納するカウンタを前記コマンドと関連付け、
    前記複数の実行ユニットの各々の実行ユニットによって、前記予約サイズに対応する数のワークグループを予約し、
    前記複数の実行ユニットの各々によって、前記対応する数のワークグループを処理し、
    各々の実行ユニットが予約した前記ワークグループの数だけ、まだ処理されていない前記ワークグループの数を格納する前記カウンタをデクリメントし、
    各々の実行ユニットが処理した前記ワークグループの数だけ、処理された前記ワークグループの数を格納する前記カウンタをインクリメントし、
    まだ処理されていない前記ワークグループの数を格納する前記カウンタが「0」の値より小さいか又は「0」の値と等しくなるまで、前記予約すること、前記処理すること、及び前記デクリメントすることを繰り返し、
    処理された前記ワークグループの数を格納する前記カウンタが前記ワークグループの数を格納するカウントと等しいとき、前記コマンドの完了を示すように知らせる、
    ための、前記メモリ上に格納され、かつ、前記プロセッサ上で実行されるプログラムと、
    を含む装置。
  9. 前記プログラムは、
    前記複数の実行ユニットの1つの実行ユニットによって、まだ処理されていない前記ワークグループの数を格納する前記カウンタが「0」の値より小さいか又は0の値と等しいこと、及び、まだ処理されていない前記ワークグループの数を格納する前記カウンタの絶対値が、前記予約サイズの絶対値より小さいか又はこれと等しいことを検出し、
    前記1つの実行ユニットによって、あらゆる残りのワークグループを処理する、
    ためのプログラムをさらに含む、請求項8に記載の装置。
  10. 前記データ構造体はまた、前記コマンドを見ることになっている実行ユニットの数を格納するカウンタと、前記コマンドを確認した実行ユニットの数を格納するカウンタとを含み、前記方法は、処理された前記ワークグループの数を格納する前記カウンタが、前記ワークグループの数を格納するカウントと等しく、かつ、前記コマンドを確認した前記実行ユニットの数を格納する前記カウンタが、前記コマンドを見ることになっている実行ユニットの数を格納するカウンタと等しくもあるとき、前記第1のコマンド・キューから前記コマンドに対応するエントリを解放することさらに含む、請求項8に記載の装置。
  11. 前記複数の実行ユニットの各々の実行ユニットは、処理コア、プロセッサ、処理スレッド、及び完全なコンピューティング・システムを含む、コマンドを実行するいずれかのコンピュータ装置とすることができる、請求項8に記載の装置。
  12. 前記プログラムは、
    前記コマンド・キュー内に入ってくるコマンドのエントリについて少なくとも2つの利用可能なスロットが存在するかどうかを判断し、
    前記コマンド・キュー内に前記入ってくるコマンドのエントリについて少なくとも2つの利用可能なスロットが存在すると判断された場合、前記コマンド・キュー内に前記入ってくるコマンドを入力し、
    前記第1のコマンド・キュー内に前記入ってくるコマンドのエントリについて少なくとも2つの利用可能なスロットは存在しないと判断された場合、第2のコマンド・キューを生成し、
    前記第1のコマンド・キューを前記第2のコマンド・キューに置き換える、
    ためのプログラムをさらに含む、請求項8に記載の装置。
  13. 前記置き換えるための前記プログラムは、
    前記第1のキュー内にキュー・サイズ変更の表示を入力し、
    前記入ってくるコマンドを前記第2のコマンド・キュー内に入力し、
    前記第1のキューからのコマンドの実行中に前記キュー・サイズ変更の表示が検知されたとき、前記第1のキューを前記第2のコマンド・キューに置き換える、
    ためのプログラムを含む、請求項12に記載の装置。
  14. 前記置き換えることが完了すると、前記第1のキューを削除することをさらに含む、請求項13に記載の装置。
  15. コンピュータに、
    複数の実行ユニットへのコマンドをキューに入力するために第1のコマンド・キューを生成する手順と
    複数のワークグループを含むコマンドを前記第1のコマンド・キューにポストする手順と
    前記複数のワークグループを識別するデータ構造体、前記コマンドに対応する予約サイズ、ワークグループの数を格納するカウンタ、まだ処理されていない前記ワークグループの数を格納するカウンタ、及び処理された前記ワークグループの数を格納するカウンタを前記コマンドと関連付ける手順と
    前記複数の実行ユニットの各々の実行ユニットによって、前記予約サイズに対応する数のワークグループを予約する手順と
    前記複数の実行ユニットの各々によって、前記対応する数のワークグループを処理する手順と
    各々の実行ユニットが予約した前記ワークグループの数だけ、まだ処理されていない前記ワークグループの数を格納する前記カウンタをデクリメントする手順と
    各々の実行ユニットが処理した前記ワークグループの数だけ、処理された前記ワークグループの数を格納する前記カウンタをインクリメントする手順と
    まだ処理されていない前記ワークグループの数を格納する前記カウンタが「0」の値より小さいか又は「0」の値と等しくなるまで、前記予約すること、前記処理すること、及び前記デクリメントすることを繰り返す手順と
    処理された前記ワークグループの数を格納する前記カウンタが前記ワークグループの数を格納するカウントと等しいとき、前記コマンドの完了を示すように知らせる手順と
    を実行させるためのコンピュータ・プログラム。
  16. 前記コンピュータにに
    前記複数の実行ユニットの1つの実行ユニットによって、まだ処理されていない前記ワークグループの数を格納する前記カウンタが「0」の値より小さいか又は「0」の値と等しいこと、及び、まだ処理されていない前記ワークグループの数を格納する前記カウンタの絶対値が、前記予約サイズの絶対値より小さいか又はこれと等しいことを検出する手順と
    前記1つの実行ユニットによって、あらゆる残りのワークグループを処理する手順と
    をさらに実行させるための、請求項15に記載のコンピュータ・プログラム。
  17. 前記データ構造体はまた、前記コマンドを見ることになっている実行ユニットの数を格納するカウンタと、前記コマンドを確認した実行ユニットの数を格納するカウンタとを含み、前記コンピュータに、処理された前記ワークグループの数を格納する前記カウンタが、前記ワークグループの数を格納するカウントと等しく、かつ、前記コマンドを確認した前記実行ユニットの数を格納する前記カウンタが、前記コマンドを見ることになっている実行ユニットの数を格納するカウンタと等しくもあるとき、前記第1のコマンド・キューから前記コマンドに対応するエントリを解放する手順をさらに実行させるための、請求項15に記載のコンピュータ・プログラム。
  18. 前記複数の実行ユニットの各々の実行ユニットは、処理コア、プロセッサ、処理スレッド、及び完全なコンピューティング・システムを含む、コマンドを実行するいずれかのコンピュータ装置とすることができる、請求項15に記載のコンピュータ・プログラム。
  19. 前記コンピュータに
    前記コマンド・キュー内に入ってくるコマンドのエントリについて少なくとも2つの利用可能なスロットが存在するかどうかを判断する手順と
    前記コマンド・キュー内に前記入ってくるコマンドのエントリについて少なくとも2つの利用可能なスロットが存在すると判断された場合、前記コマンド・キュー内に前記入ってくるコマンドを入力する手順と
    前記第1のコマンド・キュー内に前記入ってくるコマンドのエントリについて少なくとも2つの利用可能なスロットが存在しないと判断された場合、第2のコマンド・キューを生成する手順と
    前記第1のコマンド・キューを前記第2のコマンド・キューに置き換える手順と
    をさらに実行させるための、請求項15に記載のコンピュータ・プログラム。
  20. 前記置き換える手順は、
    前記第1のキュー内にキュー・サイズ変更の表示を入力する手順と
    前記入ってくるコマンドを前記第2のコマンド・キュー内に入力する手順と
    前記第1のキューからのコマンドの実行中に前記キュー・サイズ変更の表示が検知されたとき、前記第1のキューを前記第2のコマンド・キューに置き換える手順と
    を含む、請求項19に記載のコンピュータ・プログラム。
JP2010183842A 2009-08-31 2010-08-19 マルチコア/スレッドのワークグループ計算スケジューラ Expired - Fee Related JP5650952B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/551,515 US8056080B2 (en) 2009-08-31 2009-08-31 Multi-core/thread work-group computation scheduler
US12/551515 2009-08-31

Publications (3)

Publication Number Publication Date
JP2011054161A JP2011054161A (ja) 2011-03-17
JP2011054161A5 JP2011054161A5 (ja) 2014-08-07
JP5650952B2 true JP5650952B2 (ja) 2015-01-07

Family

ID=43626760

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010183842A Expired - Fee Related JP5650952B2 (ja) 2009-08-31 2010-08-19 マルチコア/スレッドのワークグループ計算スケジューラ

Country Status (5)

Country Link
US (1) US8056080B2 (ja)
JP (1) JP5650952B2 (ja)
KR (1) KR20110023832A (ja)
CN (1) CN102004630B (ja)
TW (1) TW201120754A (ja)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101818760B1 (ko) * 2011-07-22 2018-01-15 삼성전자주식회사 시뮬레이션 장치 및 그의 시뮬레이션 방법
US20140204103A1 (en) 2011-09-02 2014-07-24 Freescale Semiconductor, Inc. Data processing system and method for task scheduling in a data processing system
JP5238876B2 (ja) * 2011-12-27 2013-07-17 株式会社東芝 情報処理装置及び情報処理方法
US10007527B2 (en) 2012-03-05 2018-06-26 Nvidia Corporation Uniform load processing for parallel thread sub-sets
US9436504B2 (en) 2012-05-09 2016-09-06 Nvidia Corporation Techniques for managing the execution order of multiple nested tasks executing on a parallel processor
US9626216B2 (en) * 2012-05-09 2017-04-18 Nvidia Corporation Graphics processing unit sharing between many applications
US10936591B2 (en) 2012-05-15 2021-03-02 Microsoft Technology Licensing, Llc Idempotent command execution
US9239868B2 (en) 2012-06-19 2016-01-19 Microsoft Technology Licensing, Llc Virtual session management and reestablishment
US9251194B2 (en) 2012-07-26 2016-02-02 Microsoft Technology Licensing, Llc Automatic data request recovery after session failure
US8898109B2 (en) 2012-07-27 2014-11-25 Microsoft Corporation Automatic transaction retry after session failure
JP2014059606A (ja) * 2012-09-14 2014-04-03 Yamaha Corp 信号処理システムおよびプログラム
US9235464B2 (en) 2012-10-16 2016-01-12 Microsoft Technology Licensing, Llc Smart error recovery for database applications
US9823927B2 (en) 2012-11-30 2017-11-21 Intel Corporation Range selection for data parallel programming environments
CN104008013B (zh) * 2013-02-26 2018-02-09 华为技术有限公司 一种核资源分配方法、装置及众核系统
US9846597B2 (en) 2013-03-13 2017-12-19 Microsoft Technology Licensing, Llc Durable program execution
US8924596B1 (en) 2013-12-06 2014-12-30 Concurrent Ventures, LLC System and method for dividing and synchronizing a processing task across multiple processing elements/processors in hardware
US9838471B2 (en) * 2014-02-03 2017-12-05 Cavium, Inc. Method and an apparatus for work request arbitration in a network processor
US10310923B1 (en) 2014-08-28 2019-06-04 Seagate Technology Llc Probabilistic aging command sorting
KR102315279B1 (ko) 2014-11-28 2021-10-20 삼성전자 주식회사 작업 그룹의 크기를 결정하는 장치 및 방법
US9678806B2 (en) * 2015-06-26 2017-06-13 Advanced Micro Devices, Inc. Method and apparatus for distributing processing core workloads among processing cores
US10831403B2 (en) 2017-05-19 2020-11-10 Seagate Technology Llc Probabalistic command aging and selection
US10275283B2 (en) * 2017-07-21 2019-04-30 Red Hat, Inc. Low latency distributed counters for quotas
TWI648620B (zh) * 2017-08-07 2019-01-21 慧榮科技股份有限公司 記憶體裝置以及操作指令錯誤處理方法
US10467724B1 (en) 2018-02-14 2019-11-05 Apple Inc. Fast determination of workgroup batches from multi-dimensional kernels
US20200167191A1 (en) * 2018-11-26 2020-05-28 Advanced Micro Devices, Inc. Laxity-aware, dynamic priority variation at a processor
CN110162401A (zh) * 2019-05-24 2019-08-23 广州中望龙腾软件股份有限公司 Dwg文件并行读取方法、电子设备和存储介质
CN113254367A (zh) * 2020-02-11 2021-08-13 合肥杰发科技有限公司 一种基于iAP1协议的命令处理方法、电子设备以及存储介质
US12020075B2 (en) 2020-09-11 2024-06-25 Apple Inc. Compute kernel parsing with limits in one or more dimensions with iterating through workgroups in the one or more dimensions for execution

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03212742A (ja) * 1990-01-18 1991-09-18 Fujitsu Ltd 並行処理制御方式
US5506999A (en) 1992-01-22 1996-04-09 The Boeing Company Event driven blackboard processing system that provides dynamic load balancing and shared data between knowledge source processors
US6075546A (en) * 1997-11-10 2000-06-13 Silicon Grahphics, Inc. Packetized command interface to graphics processor
SE9901146D0 (sv) * 1998-11-16 1999-03-29 Ericsson Telefon Ab L M A processing system and method
US7376693B2 (en) 2002-02-08 2008-05-20 Jp Morgan Chase & Company System architecture for distributed computing and method of using the system
US7246353B2 (en) 2002-06-12 2007-07-17 Microsoft Corporation Method and system for managing the execution of threads and the processing of data
US20040003019A1 (en) * 2002-06-28 2004-01-01 Sun Microsystems, Inc., A Delaware Corporation Process management for real time systems management controller
US7318228B2 (en) * 2002-10-01 2008-01-08 Broadcom Corporation System and method for task arbitration in multi-threaded simulations
US7533382B2 (en) 2002-10-30 2009-05-12 Stmicroelectronics, Inc. Hyperprocessor
JP2004271609A (ja) * 2003-03-05 2004-09-30 Canon Inc 表示装置の駆動方法
US20050071841A1 (en) * 2003-09-30 2005-03-31 Hoflehner Gerolf F. Methods and apparatuses for thread management of mult-threading
US7385607B2 (en) * 2004-04-12 2008-06-10 Nvidia Corporation Scalable shader architecture
US7542042B1 (en) * 2004-11-10 2009-06-02 Nvidia Corporation Subpicture overlay using fragment shader
US20070030280A1 (en) * 2005-08-08 2007-02-08 Via Technologies, Inc. Global spreader and method for a parallel graphics processor
US7659898B2 (en) * 2005-08-08 2010-02-09 Via Technologies, Inc. Multi-execution resource graphics processor
US7659899B2 (en) * 2005-08-08 2010-02-09 Via Technologies, Inc. System and method to manage data processing stages of a logical graphics pipeline
JP4963018B2 (ja) * 2005-08-15 2012-06-27 株式会社ソニー・コンピュータエンタテインメント スケジューリング方法およびスケジューリング装置
US8141076B2 (en) * 2005-09-27 2012-03-20 Sony Computer Entertainment Inc. Cell processor methods and apparatus
US8065503B2 (en) * 2006-12-15 2011-11-22 International Business Machines Corporation Iteratively processing data segments by concurrently transmitting to, processing by, and receiving from partnered process
WO2009106398A1 (en) * 2008-02-26 2009-09-03 International Business Machines Corporation Routing workloads and method thereof

Also Published As

Publication number Publication date
KR20110023832A (ko) 2011-03-08
JP2011054161A (ja) 2011-03-17
US8056080B2 (en) 2011-11-08
CN102004630B (zh) 2013-12-11
US20110055839A1 (en) 2011-03-03
TW201120754A (en) 2011-06-16
CN102004630A (zh) 2011-04-06

Similar Documents

Publication Publication Date Title
JP5650952B2 (ja) マルチコア/スレッドのワークグループ計算スケジューラ
US11550627B2 (en) Hardware accelerated dynamic work creation on a graphics processing unit
US10884822B2 (en) Deterministic parallelization through atomic task computation
EP2240859B1 (en) A multi-reader, multi-writer lock-free ring buffer
CN107015862B (zh) 用于具有不同能力的核心的线程和/或虚拟机调度
CN106569891B (zh) 一种存储系统中任务调度执行的方法和装置
US9678806B2 (en) Method and apparatus for distributing processing core workloads among processing cores
US20140157278A1 (en) Thread folding tool
US20190188034A1 (en) Thread pool and task queuing method and system
CN102567090B (zh) 在计算机处理器中创建执行线程的方法和系统
EP2613257B1 (en) Systems and methods for use in performing one or more tasks
CN111324427B (zh) 一种基于dsp的任务调度方法及装置
US8626799B2 (en) Mapping data structures
US8452948B2 (en) Hybrid compare and swap/perform locked operation queue algorithm
US10768902B2 (en) Actor model programming
US20070043869A1 (en) Job management system, job management method and job management program
JP4845149B2 (ja) データを管理する管理装置、管理プログラム、および管理方法
US20120137300A1 (en) Information Processor and Information Processing Method
US10158580B2 (en) Utilizing access control data structures for sharing computing resources
CN113918307A (zh) 一种任务处理方法、装置、设备及介质
WO2020005596A1 (en) Actor model programming
JP3931883B2 (ja) ジョブスケジューリング方法、計算機システムおよびジョブスケジューリングプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130501

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140618

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140624

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20140624

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20140709

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140715

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141010

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: 20141028

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20141114

R150 Certificate of patent or registration of utility model

Ref document number: 5650952

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees