JP2015504226A - マルチスレッドコンピューティング - Google Patents

マルチスレッドコンピューティング Download PDF

Info

Publication number
JP2015504226A
JP2015504226A JP2014553528A JP2014553528A JP2015504226A JP 2015504226 A JP2015504226 A JP 2015504226A JP 2014553528 A JP2014553528 A JP 2014553528A JP 2014553528 A JP2014553528 A JP 2014553528A JP 2015504226 A JP2015504226 A JP 2015504226A
Authority
JP
Japan
Prior art keywords
channel
kernel
consumer
data
consumer kernel
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2014553528A
Other languages
English (en)
Other versions
JP2015504226A5 (ja
JP6336399B2 (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.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2015504226A publication Critical patent/JP2015504226A/ja
Publication of JP2015504226A5 publication Critical patent/JP2015504226A5/ja
Application granted granted Critical
Publication of JP6336399B2 publication Critical patent/JP6336399B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Stored Programmes (AREA)
  • Executing Machine-Instructions (AREA)
  • Image Processing (AREA)
  • Information Transfer Systems (AREA)

Abstract

マルチスレッドアプリケーションのリソース利用を改善するためのシステム、方法およびコンピュータプログラム製品を提供する。チャネルからのデータを待機している間にスレッドをブロックすることを必要とし、または、ブロックを最小にするためにコンテキスト切り替えを必要とするのではなく、本明細書に開示された技術は、必要なときにだけカーネルを起動して、チャネルデータに対して動作を行い、次いで、リソースを空にするために終了する、イベント駆動技術を提供する。これらの動作は、ハードウェアにおいて効率的に処理されるが、プログラミングモデルの全ての様式で実現されるのに十分な柔軟性がある。【選択図】図2

Description

本発明は、概して、ソフトウェアプログラミングに関し、より具体的には、マルチスレッドプログラミング技術に関する。
多くの高性能コンピューティングアプリケーションは、マルチスレッディング技術を用いて記述されている。マルチスレッディング技術を用いた場合には、複数の実行スレッドが、処理パイプラインに対して同時に又は交互にアクセスすることによって、異なるタスクにおいて作業することができる。例えば、1つのタスクを2つの別個のサブタスクに分解することができる場合には、それぞれ異なるサブタスクを処理する2つの別個のスレッドを作成することが有用であり得る。これらのスレッドは、次いで、各々の対応する結果を生成し、この結果は、合わせてタスク全体を解決する。
作業をタスクに割り当てるための異なる技術が存在する。1つの手法は、一般に、「プロデューサ−コンシューマ設計」と称されている。プロデューサ−コンシューマ設計手法では、1つ以上のスレッドが、データを生成する役割を果たし、1つ以上のスレッドが、生成したデータを消費する役割を果たす。一例として、プロデューサスレッドは、ファイルからのデータを、コンシューマスレッドによってアクセス可能なメモリ領域に読み込む役割を果たす。コンシューマスレッドは、そのメモリ領域からデータを検索し、必要に応じて当該データを処理(消費)する。
コンシューマスレッドの役割がより複雑になると、一般的に、コンシューマスレッドのリソース要件もより複雑になる。プロデューサ−コンシューマ設計手法において、コンシューマスレッドは、データがプロデューサスレッドからメモリ領域に到着したときに、データを処理するために利用可能である。コンシューマスレッドをメモリ内に常駐させたままにするという要件は、過剰なリソースの活用を必要とする。また、アクティブメモリの内外でコンシューマスレッドをスワップすることは、メモリ領域が空であるときにコンシューマスレッドがいかなる動作を行わない場合であっても、(例えば、過剰な処理サイクル、完了までの時間、電力、および、他の態様に関して)コストがかかる。
したがって、コンシューマスレッドのリソース要件を低減させるための技術が望まれている。
本発明の一実施形態は、チャネルを定義することと、前記チャネルからデータを読み出すように構成されたコンシューマカーネルを定義することと、データを前記チャネルに書き込むように構成されたプロデューサカーネルを定義することと、前記チャネルの条件を満たす場合にコンシューマカーネルを起動するように構成されたチャネルイベントを登録することとを含む、方法を含む。
本発明の別の実施形態は、命令が記憶されたコンピュータ可読記憶デバイスを含む。前記命令は、コンピューティングデバイスによって実行されると、コンピューティングデバイスに、チャネルを定義することと、前記チャネルからデータを読み出すように構成されたコンシューマカーネルを定義することと、データを前記チャネルに書き込むように構成されたプロデューサカーネルを定義することと、前記チャネルの条件を満たす場合にコンシューマカーネルを起動するように構成されたチャネルイベントを登録することと、を含む動作を行わせる。
本発明のさらなる実施形態は、システムを含む。前記システムは、モジュールを記憶するように構成されたメモリと、前記モジュールを処理するように構成された1つ以上のプロセッサとを有する。前記モジュールは、チャネルと、前記チャネルからデータを読み出すように構成されたコンシューマカーネルと、データを前記チャネルに書き込むように構成されたプロデューサカーネルと、前記チャネルの条件を満たす場合にコンシューマカーネルを起動するように構成されたチャネルイベントを登録するように構成された登録モジュールとを備える。
本発明のさらなる特徴および利点、ならびに、本発明の様々な実施形態の構造および動作は、添付図面を参照して以下に詳細に説明される。本発明は、本明細書に記載される特定の実施形態に限定されないことに留意されたい。このような実施形態は、単に例示の目的で本明細書に提示されている。追加の実施形態は、本明細書に包含される教示に基づき、当業者において明らかとなるであろう。
本明細書に組み込まれ、本明細書の一部を構成する添付図面は、本発明の実施形態を示し、または、明細書とともにさらに本発明の原理を説明することで、当業者が本発明を実施し、使用することを可能にする役割を果たす。
従来の技術を用いた例示的なマルチスレッドアプリケーションを示す図である。 本発明の一実施形態によるマルチスレッドアプリケーションを示す図である。 本発明の一実施形態によるマルチスレッドアプリケーションを開発する動作を示すフローチャートである。 本発明の一実施形態による拡張チャネルおよびイベント処理の動作を示すフローチャートである。 本発明の一実施形態による例示的なプロデューサ−コンシューマ実装と一致するコンシューマカーネルの動作を示すフローチャートである。 本発明の実施形態が実現され得る例示的なコンピュータシステムを表す図である。
以下、添付図面を参照して、本発明を説明する。図において、全般的に、同一の参照番号は、同一または機能的に類似する要素を示す。加えて、全般的に、図面において、参照番号の左端の数字は、参照番号が最初に現れる図面を識別する。
以下の本発明の詳細な説明では、本発明に一致する例示的な実施形態を示す添付図面を参照する。他の実施形態が可能であり、また、本発明の趣旨および範囲の範囲内で、実施形態に対して修正が行われ得る。したがって、詳細な説明は、本発明を限定することを意味しない。むしろ、本発明の範囲は、添付の特許請求の範囲によって定義される。
当業者には、本発明の態様が、以下に説明されるように、図面で示されるソフトウェア、ハードウェア、ファームウェアおよび/またはエンティティの多くの異なる実施形態で実現できることが明らかになるであろう。本発明を実現するためのハードウェアの特殊な制御を伴ういかなる実際のソフトウェアコードも、本発明を限定しない。したがって、本発明の動作挙動は、本明細書で提示される詳細のレベルを考慮して、実施形態の修正および変形が可能であるという了解の下で説明される。
加えて、当業者には明らかであるように、本発明の種々の実施形態のシミュレーション、合成および/または製造は、汎用プログラミング言語(CまたはC++等)、Verilog HDL、VHDL、Altera HDL(AHDL)等を含むハードウェア記述言語(HDL)、または、他の利用可能なプログラミングツールおよび/もしくは図式的なキャプチャツール(例えば回路キャプチャツール等)を含む(上述した)コンピュータ可読コードの使用を通して、部分的に達成され得る。このコンピュータ可読コードは、半導体、磁気ディスク、光ディスク(例えばCD−ROM、DVD−ROM等)を含む、任意の既知のコンピュータ使用可能な媒体内に、および、コンピュータ使用可能な(例えば、読み出し可能な)伝送媒体(搬送波、または、デジタル、光もしくはアナログに基づく媒体を含む任意の他の媒体等)内で具体化されるコンピュータデータ信号として、配置することができる。よって、コードは、インターネットおよびインターネットを含む通信ネットワークを通じて伝送することができる。上記のシステムおよび技術によって達成される機能および/または提供される構造は、プログラムコードで具体化されるコア(例えばグラフィックス処理ユニット(GPU)コア等)で表すことができること、および、集積回路の製造の一部としてハードウェアに変換され得ることを理解されたい。認識されるように、他のタイプのコアまたは処理ユニットは、本発明の態様を具体化する機能および/または構造を提供することができる。これらの処理ユニットとしては、例えば、中央処理ユニット(CPU)、上述したグラフィックス処理ユニット、デジタル信号プロセッサ、アプリケーションプロセッサ等が挙げられる。
本明細書および特許請求の範囲におけるモジュールに対する言及は、指示された機能を行うためのハードウェアまたはソフトウェア構成要素の任意の組み合わせを意味する。モジュールは、厳密に定義されたエンティティである必要はなく、したがって、複数のモジュールでは、機能性においてハードウェアおよびソフトウェア構成要素が重複し得る。例えば、ソフトウェアモジュールは、プロシージャ内の単一行のコードを指してもよく、該プロシージャは、それ自体が別個のソフトウェアモジュールである。当業者は、例えば、モジュールの機能が、いくつかの文体的または性能最適化技術に従って定義され得ることを理解するであろう。
図1は、従来の技術を用いた例示的なマルチスレッドアプリケーション100を示す図である。この実施例では、ステップ102で、主プロセスがスレッドを生じ、具体的には、1つ以上のプロデューサスレッドおよび1つ以上のコンシューマスレッドが、プロデューサ−コンシューマ設計手法に従って生成される。当業者は、他のスレッディングモデルが存在し本開示に関連すること、ならびに、プロデューサ−コンシューマ設計手法が、本開示のこの箇所および他の箇所で一例として使用されることを認識するであろう。
ステップ104で、プロデューサスレッドには、データを発生させるタスクが与えられる。例えば、プロデューサスレッドは、ファイルまたはデータベースからデータを読み出し得る。このデータは、例えば一組の行で構成されたグラフィック等のような、アプリケーション100が処理するように構成された何らかのデータであり得る。この実施例では、グラフィックファイルからの1行または他の一組のデータの処理を、他の複数行または複数組のデータの処理と並列に扱うことができると仮定する。
ステップ106で、プロデューサは、データを配置するために、バッファ112に空きがあるかどうかを判定する。空きがない場合、ステップ108で示されるように、プロデューサは、空きが利用可能になるまで待機する。リソースが利用可能になるまで、スレッドがさらなる処理を行うことができないというこの待機状態は、ときには、「ブロッキング」として知られている。ブロッキングの間、スレッドは、いかなる有用な作業も行わないにもかかわらず、システムリソースを使用し続けることになる。
リソース(この場合では、バッファ112)が利用可能になると、ステップ110で、プロデューサは、データをバッファ112に配置する。プロデューサは、次いで、ステップ104に戻り、引き続き、任意の追加的なデータ(例えば、グラフィックファイルからの追加的な画像ライン)を生成する。
コンシューマスレッドには、プロデューサによってバッファ112に配置されたデータを処理するタスクが与えられる。プロデューサ−コンシューマ設計手法では、複数のプロデューサおよび複数のコンシューマを使用することができるが、コンシューマスレッドは、より時間のかかる処理の原因となるので、実際には、コンシューマは、プロデューサよりも数が多い傾向がある。
プロデューサ−コンシューマ設計手法のこの実施例を続けると、コンシューマスレッドは、グラフィックファイルからの個々の行または他の組のデータに対して作業を行うために提供される。一実施形態において、コンシューマスレッドは、真の並列動作で、グラフィックファイルからの他のデータとは独立にこの作業を行うことができる。例えば、コンシューマスレッドは、グラフィックの色空間(1ピクセルあたりに割り当てられたビット)を低減させるために使用されてもよく、それぞれが、グラフィックの対応するデータに対してそのように行うことができる。ここでも、当業者は、本願が一例として提供されるものであり、限定するものではないことを認識するであろう。
その作業を行うために、ステップ114で、コンシューマスレッドは、作業を行うデータがバッファ112にあるかどうかを判定する。利用可能ないかなるデータもない場合には、コンシューマスレッドは、続けることができず、ステップ116で示されるように、待機(ブロック)しなければならない。上述したように、コンシューマスレッドは、バッファ112でデータが利用可能になるまでのブロッキングの間、システムリソースを利用し続けることになる。
スレッドブロッキングのための種々の機構が存在する。例えば、スレッドは、条件をテストし、その条件を満たすまでブロックすることができる(例えば、バッファがデータを有するかどうかのテスト、ロックのためのテスト等)。その条件を満たす場合に、次いで、スレッドを続けることができる。この場合、スレッドは、ステップ118に進み、バッファ112からデータを検索する。スレッドは、次いで、ステップ120で、データを処理する(例えば、1行のグラフィックデータの色空間を低減させる)ことによって、データを消費する。コンシューマスレッドは、次いで、ステップ114に戻り、追加的な作業ができる状態にある。
方法100で説明されるこの手法による重大な問題は、いかなる有用な作業も行われていなくても、ブロッキング状態(例えば、上記のステップ108,116)にある間、スレッドによってかなりのリソースが利用されることである。これは、コンテキスト切り替えプロセッサにおいて、ブロックされたスレッドを処理パイプラインから切り替えて、他のスレッドが処理リソースの一部を利用することを可能にすることによって、ある程度改善することができる。そうであっても、コンテキスト切り替えは、切り替えられたスレッドについてスレッド1つあたりの状態情報の保持を必要とし、よって、それらの状態情報が元に切り替えられるときに、それらは保持される。また、それでも、マルチスレッドプログラミングを行うことができる多数のGPU等の全てのプロセッサが、必要なコンテキスト切り替え動作を行うことができるわけではない。
その結果、空のチャネルに対する読み出しスレッドのブロッキングの間、1つのスレッドが書き込み、別のスレッドが読み出すという従来の実装は、効率的な手法ではない。これは、システムリソースを占有する長時間続くスレッドにつながり、スケジューラによって切り替える必要があり得る。加えて、切り替えた場合であっても、これらのスレッドは、スレッド1つあたりの状態情報を保持するために、リソースを消費し続ける。
図2は、本発明の一実施形態によるマルチスレッドアプリケーション200を示す図である。マルチスレッドアプリケーション200、および、これによって具体化される技術は、スレッドブロッキングと関連付けられた従来のリソース利用問題の非効率性に対する解決策を提供する。また、本明細書の議論は、プロデューサ−コンシューマモデルに照らして提示されるが、当業者は、ブロッキングが起こり得る他のマルチスレッディングモデルに対するこの手法の適用性を認識するであろう。
マルチスレッドアプリケーション200は、本発明の一実施形態によるプロデューサカーネル202およびコンシューマカーネル208を提供する。非限定的な例として、本明細書での実装の詳細は、Khronos Groupによって開発されたOpenCL(登録商標)並列プログラミング規格に照らして論じられる。しかしながら、当業者は、他の開発プラットフォームに対するこれらの技術の適用性を認識するであろう。
プロデューサカーネル202およびコンシューマカーネル208は、OpenCL(登録商標)「カーネル」用語を用いた、プロデューサタスクおよびコンシューマタスクの各々に対応するコードブロックである。OpenCL(登録商標)において、カーネルは、1つのスレッドまたは一組の並列スレッドによって扱われるタスクである。OpenCL(登録商標)ランタイムは、コマンドキューで実行されるようにカーネルを配置し、特定のデバイスで実行するためのカーネル(スレッド)をキューイングする。OpenCL(登録商標)の柔軟性は、CPUおよびGPUの双方を含む多数の処理デバイスに対するカーネルのキューイングを可能にする。認識されるように、OpenCL(登録商標)以外のAPIも用いることができる。例えば、マイクロソフト(登録商標)によるDirectCompute(商標)は、使用可能な別のAPIである。
プロデューサカーネル202およびコンシューマカーネル208によるデータフローを示すために、図2はさらに、本発明の一実施形態によるプロデューサキュー204およびコンシューマキュー210の使用を示す。プロデューサキュー204は、文字通りのキューである必要はなく、むしろ、本発明の一実施形態による1つ以上のコンシューマカーネル208として実行するための作業を提供するために、プロデューサカーネル202を読み出す、ある種のデータソースである。上記の実施例に戻って参照すると、グラフィックデータのラインを含むファイルは、プロデューサキュー204として処理することができ、プロデューサカーネル202は、ファイルからグラフィックデータのラインを読み出す。当業者は、他のデータソースを利用することができること、および、プロデューサキュー204が、一例として提供されるものであって限定するものではないことを認識するであろう。
同様に、コンシューマキュー210は、文字どおりのキューである必要はなく、むしろ、本発明の一実施形態によるコンシューマカーネル208によって処理されるいくつかの作業先を表す。上記の実施例に戻って参照すると、各コンシューマカーネル208は、本発明の一実施形態に従って、コンシューマキュー210からグラフィックデータの個々のラインを取り出し、それを処理する。複数のコンシューマカーネル208の各々は、同様に作業を行うことができる。当業者は、コンシューマカーネル208に対して作業の他のソースが使用され得ること、および、コンシューマキュー210が、一例として提供されるものであって限定するものではないことを認識するであろう。
図1の簡単なバッファの実施例を使用する代わりに、本発明の一実施形態によるマルチスレッドアプリケーション200は、チャネル206を導入する。チャネル206は、サポート機能性とともに、コンシューマスレッドによるブロッキングを除去する能力を提供する。
チャネル206は、単一のバッファまたはキューではなく、代わりに、チャネルに関連するカーネル起動トリガの登録を可能にする、プロデューサカーネル202とコンシューマキュー208との間のより精巧な通信経路を提供する。このカーネル起動トリガは、コンシューマキュー208に作業が存在する等の条件を満たす場合に、コンシューマカーネル210を起動する。
図3は、本発明の一実施形態による本手法を利用するためにマルチスレッドアプリケーションを開発する動作を示す方法300のフローチャートである。方法は、ステップ302から始まり、ステップ304に進み、そこでは、プロデューサカーネルが定義される。非限定的な例として、本明細書で開示される新規なチャネルおよびイベント処理概念に適応するように拡張されたOpenCL(登録商標)構文を使用すると、プロデューサカーネルは、以下の様式で定義することができる。
Figure 2015504226
この例示的なプロデューサカーネルでは、2つの別個のチャネルが書かれている。各チャネルは、この実施例においてデータ値が5よりも大きいかどうか等の条件が与えられるプロデューサカーネルによって、配列「a」(すなわち、プロデューサキュー204)から検索されるデータでポピュレートされる。
ステップ306で、本発明の一実施形態によるコンシューマカーネルが定義される。拡張OpenCL(登録商標)構文を有する上記の非限定的な実施例を続けると、コンシューマカーネルは、使用されている各チャネル(チャネルbおよびc)について定義される。本発明の一実施形態において、これらのコンシューマカーネルは、以下の様式で定義される。
Figure 2015504226
上の例示的なコンシューマカーネルにおいて、各カーネルは、それぞれのチャネルから整数値を読み出し、その値をグローバルな整数値(すなわち、コンシューマキュー210)に加えるという、類似したタスクを行う。
ステップ308で、本発明の一実施形態によるチャネルが定義される。ステップ310で、チャネルの一定の条件を満たす場合に、チャネルイベントがトリガアクションに登録される。
拡張OpenCL(登録商標)構文による上記の非限定的な実施例を続けると、ステップ308で、対応するイベントトリガとともに、2つのチャネル(channelBおよびchannelC)が定義される。これらのチャネルおよびイベントは、以下の様式で定義することができる。
Figure 2015504226
上記の実施例において、チャネルは、特定のチャネル条件を満たす場合に使用するために、あるサイズパラメータおよびイベントハンドラの指示によって作成される。非限定的な例として、OpenCL(登録商標)用のコンパイラ等のプログラミング言語コンパイラは、以下の関数によって、上述したようなチャネルオブジェクトの作成を扱うように拡張される。
Figure 2015504226
この例示的な非限定的な定義において、パラメータは、以下の使用法をとる。
・contextは、チャネルオブジェクトを作成するために使用される有効なOpenCL(登録商標)コンテキストである
・flagsは、作成されているチャネルメモリオブジェクトに関する情報の割り当ておよび使用法を指定するために使用されるビットフィールドである
・number_of_elementsは、要素の数を指す
・element_sizeは、要素タイプのバイト単位のサイズである
・block_sizeは、その後にCL_CHANNEL_BLOCK_READY状態がブロック準備イベントに設定される要素の数である
・errcode_retは、適切なエラーコードを返し、errcode_retがNULLである場合は、いかなるエラーコードも返さない
例示的な非限定的な定義を続けると、errcode_retは、関数が成功裏に実行された場合に、条件CL_SUCCESSを返すために利用することができ、または、以下の例示的なエラー値のうち1つのエラー値を有するNULL値を返す。
・CL_INVALID_CONTEXT コンテキストが有効なコンテキストでない場合
・CL_INVALID_VALUE フラグで指定された値が有効でない場合
・CL_INVALID_CHANNEL_SIZE サイズがCL_DEVICE_CHANNEL_MAX_SIZEで指定された値を超えた場合
・CL_MEM_OBJECT_ALLOCATION_FAILURE メモリを画像オブジェクトに割り当てることに不具合がある場合
・CL_INVALID_OPERATION チャネルをサポートするコンテキスト内にいかなるデバイスもない場合
・CL_OUT_OF_RESOURCES デバイス上のOpenCL(登録商標)実装によって必要とされるリソースを割り当てることに不具合がある場合
・CL_OUT_OF_HOST_MEMORY ホスト上のOpenCL(登録商標)実装によって必要とされるリソースを割り当てることに不具合がある場合
イベントトリガが定義され、それらの対応するチャネルと関連付けられることにより、当該イベントトリガは、ステップ310で、特定のイベント条件を満たす場合に登録される。上記の非限定的な例を続けると、以下の様式で2つのイベントトリガが登録される。
Figure 2015504226
上記の例示的なイベントトリガ登録は、CL_CHANNEL_BLOCK_READY条件に対してトリガし、当該条件は、上述したように、clCreateChannelに渡されたblock_size値で測定したときに、チャネル内に少なくとも1つのデータのブロックがある場合に設定される。代わりに、別のイベント、CL_CHANNEL_FULLを他のアプリケーションに利用することができ、当該イベントは、チャネルのサイズ値で測定したときに、チャネルが満杯である場合に設定される。当業者は、イベントトリガ関数を、所望に応じて拡張することができること、および、これらのイベントが、一例として提供されるものであって限定するものではないことを認識するであろう。
OpenCL(登録商標)の場合、イベントトリガの作成は、本発明の一実施形態による関数clAddEventTriggerを定義することによって扱われる。この関数の例示的な非限定的な定義は、次のようになる。
Figure 2015504226
この例示的な非限定的な定義において、パラメータは、以下の使用法をとる。
・queueは、カーネルがエンキュー(enqueued)される有効なOpenCL(登録商標)コマンドキューである
・kernelは、キューを加える有効なOpenCL(登録商標)カーネルである
・イベントリスト内のnum_eventsは、トリガを評価するために検査されるイベントの数を指す
・event_trigger_stateは、カーネルの起動が起こる1組の有効な状態に対する状態マスクであり、上記の新しい状態の追加を伴う通常の1組のOpenCL(登録商標)イベント状態からのものであり得る
・eventは、起動したカーネルの状態を記述するイベントである
方法300は、次いで、ステップ312で終了する。図3および図の他の個所で説明されるステップの順序は、プログラムが、コード内で、種々の順序でおよび種々の場所に現れる定義で書かれ得るため、固定する必要はない。
図4は、本発明の一実施形態による拡張チャネルおよびイベント処理の動作を示す方法400のフローチャートである。本方法は、ステップ402から始まり、ステップ404に進み、そこでは、処理されるデータが受け取られ、チャネルに記憶される(例えば、チャネル内のキューに配置される)。ステップ406で、チャネルのためのイベントトリガ条件がテストされる。例えば、上述したように、この条件は、CL_CHANNEL_BLOCK_READY条件であってよく、当該条件は、チャネル内に少なくとも1つのデータのブロックがある場合に設定される。
条件のテストが肯定的であった場合は、ステップ408で、本発明の一実施形態による、対応するコンシューマカーネルがコマンドキューにディスパッチされる。上記の実施例において、データのブロックが「channelB」で利用可能である場合には、kernelBが起動され、データを消費する。本方法は、ステップ410で終了する。
この手法の効果は、ブロッキングの間、コンシューマカーネルをアイドル状態にさせ、または、切り替えることを回避することである。代わりに、コンシューマカーネルは、必要なときにだけインスタンス化され、それらの作業が行われた後に終了される。本開示は、オンザフライでコンシューマカーネルを作成する背景でこのアプリケーションを提示しているが、当業者は、本明細書で開示されるチャネルイベント処理を、他のアプリケーションのためのカーネルをディスパッチするために適用することができることを認識するであろう。例えば、イベントトリガは、満杯のチャネルにおいて空きが利用可能になった場合にプロデューサカーネルをディスパッチするために使用することができ、空きを待機している間、プロデューサカーネルのブロッキングを防止する。
図5は、本発明の一実施形態による例示的なプロデューサ−コンシューマ実装と一致するコンシューマカーネルの動作を示す方法500のフローチャートである。方法は、ステップ502から始まり、ステップ504へ進み、そこでは、コンシューマカーネルが起動される。本発明の一実施形態によるコンシューマカーネルは、OpenCL(登録商標)実装においてコマンドキューから起動されるが、他のプログラミングモデルにおける特定の実装によってカーネルを起動するための他の技術が使用されてもよい。
ステップ506で、コンシューマカーネルは、チャネルからデータを読み出し、ステップ508で、データを消費する。データを消費するために必要とされる作業の量は、特定の実装によって変動する。しかしながら、全般的に、データを消費するために個々のコンシューマカーネルによって必要とされるリソースを低減させることが好まれる。コンシューマカーネルがデータに対する作業を完了したときに、ステップ510で、コンシューマカーネルが終了して、そのリソースを解放する。方法は、次いで、ステップ512で終了する。
本明細書で説明される技術の性能を向上させるために、プログラミング言語コンパイラ(例えば、OpenCL(登録商標)コンパイラ)またはランタイムシステムに対する一定の最適化が、本発明の一実施形態に従って企図される。例えば、コンパイラは、GPUでの実行のためにコンパイルするとき、実行時に、グローバルメモリ(例えば、DRAM)等のGPUメモリのあるレベルでの表現のために、チャネルを最適化し得る。代替として、チャネルは、ある程度のスレッドの持続を可能にして、メモリ帯域幅に対するトレードオフを提供するために、実行時に、グローバルデータシェア(GDS)のSRAM構造で、あるいは、コア基準のローカルデータシェア(LDS)で表現することもできる。
イベントトリガの効果的な取り扱いは、本発明の一実施形態による、例えば現在のGPU上の制御プロセッサの拡大版等のハードウェアスケジューリングシステムの実装を通して、さらに促進することができる。スケジューリングシステムは、最小の待ち時間および高い効率でイベントを監視し、ハードウェアからカーネルの起動をトリガするように構成されており、小さいコンシューマブロックの迅速な起動を可能にする。
上述したように、本開示の全体にわたる実装の詳細は、全般的に、OpenCL(登録商標)プログラミングモデルの背景におかれている。しかしながら、本開示によって提供される利点は、他のプログラミングモデルで実現することができる。代替のプログラミングモデルに実装される、上記の実施例に類似する実施例は、以下の通りである。
Figure 2015504226
本発明の種々の態様は、ソフトウェア、ファームウェア、ハードウェアまたはそれらの組み合わせによって実装することができる。図6は、本発明またはその一部をコンピュータ可読コードとして実装することの可能な例示的なコンピュータシステム600を表す図である。例えば、図3のフローチャート300、図4の400および図5の500によって示される方法を、システム600に実装することができる。本発明の種々の実施形態は、この例示的なコンピュータシステム600に関して説明される。この説明を読んだ後に、当業者には、他のコンピュータシステムおよび/またはコンピュータアーキテクチャを使用してどのように本発明を実装するのかが明らかになるであろう。
コンピュータシステム600は、プロセッサ604等の1つ以上のプロセッサを含む。プロセッサ604は、特殊用途プロセッサまたは汎用プロセッサであってよい。プロセッサ604は、通信インフラストラクチャ606(例えば、バスまたはネットワーク)に接続されている。
コンピュータシステム600は、メインメモリ608、好ましくはランダムアクセスメモリ(RAM)を含み、または、二次メモリ610も含み得る。二次メモリ610は、例えば、ハードディスクドライブ612、リムーバブル記憶ドライブ614および/またはメモリースティックを含み得る。リムーバブル記憶ドライブ614は、フロッピー(登録商標)ディスクドライブ、磁気テープドライブ、光ディスクドライブ、フラッシュメモリ等を備え得る。リムーバブル記憶ドライブ614は、よく知られている様式でリムーバブル記憶ユニット617から読み出しおよび/またはリムーバブル記憶ユニット617に書き込む。リムーバブル記憶ユニット617は、リムーバブル記憶ドライブ614によって読み出され、それによって書き込まれる、フロッピー(登録商標)ディスク、磁気テープ、光ディスク等を備え得る。当業者によって認識されるように、リムーバブル記憶ユニット617は、コンピュータソフトウェアおよび/またはデータをその中に記憶した、コンピュータ使用可能な記憶媒体を含む。
代替の実現例において、二次メモリ610は、コンピュータプログラムまたは他の命令をコンピュータシステム600にロードすることを可能にするための、他の類似した手段を含み得る。このような手段は、例えば、リムーバブル記憶ユニット622およびインターフェース620を含み得る。このような手段の例は、プログラムカートリッジおよびカートリッジインターフェース(例えばビデオゲームデバイスで見られるもの等)、リムーバブルメモリチップ(例えばEPROMまたはPROM等)、および、関連するソケット、ならびに、ソフトウェアおよびデータをリムーバブル記憶ユニット622からコンピュータシステム600に転送することを可能にする、他のリムーバブル記憶ユニット622およびインターフェース620を含み得る。
また、コンピュータシステム600は、通信インターフェース624も含み得る。通信インターフェース624は、ソフトウェアおよびデータを、コンピュータシステム600と外部デバイスとの間で転送することを可能にする。通信インターフェース624としては、モデム、ネットワークインターフェース(イーサネット(登録商標)カード等)、通信ポート、PCMCIAスロットおよびカード等が挙げられる。通信インターフェース624を介して転送されるソフトウェアおよびデータは、電子的、電磁気的、光学的であり得る信号、または、通信インターフェース624によって受け取ることができる他の信号の形態を有してよい。これらの信号は、通信経路626を介して、通信インターフェース624に提供される。通信経路626は、信号を搬送し、または、ワイヤもしくはケーブル、光ファイバ、電話回線、携帯電話リンク、RFリンクまたは他の通信チャネルを使用して実装され得る。認識されるように、コンピュータシステム600は、いくつかの異なるフォームファクタまたはタイプのコンピュータシステムで具体化され得る。例えば、本発明の態様は、ハンドヘルドもしくは他のモバイルコンピューティングシステム、セットトップボックス、従来のコンピュータ(例えば、ラップトップ、デスクトップ、サーバ)、タブレット、組み込みシステム、テレビ、オーディオ/ビデオ機器等において具体化され得る。本発明の態様を具体化するコンピュータシステムは、あるシナリオにおいて、コストの低減(例えば、低減し又はより効果的な処理、完了までの時間の低減、電力の低減等)をもたらし得る。
本明細書において、「コンピュータプログラム媒体」および「コンピュータ使用可能な媒体」という用語は、全般的に、リムーバブル記憶ユニット617、リムーバブル記憶ユニット622、および、ハードディスクドライブ612に取り付けられるハードディスク等の媒体を指すために使用される。また、通信経路626を通じて搬送される信号は、本明細書で説明される論理も具体化することができる。コンピュータプログラム媒体およびコンピュータ使用可能な媒体は、メモリ半導体(例えば、DRAM等)であってよい、メインメモリ608および二次メモリ610等のメモリも指す。これらのコンピュータプログラム製品は、ソフトウェアをコンピュータシステム600に提供するための手段である。
コンピュータプログラム(コンピュータ制御論理とも呼ばれる)は、メインメモリ608および/または二次メモリ610に記憶される。また、コンピュータプログラムは、通信インターフェース624を介して受け取られてよい。そのようなコンピュータプログラムは、実行されたときに、コンピュータシステム600が、本明細書で論じられる本発明を実装することを可能にする。具体的には、コンピュータプログラムは、実行されたときに、プロセッサ604が、上記図3のフローチャート300、図4の400、図5の500によって示される方法のステップ等の、本発明のプロセスを実装することを可能にする。したがって、そのようなコンピュータプログラムは、コンピュータシステム600のコントローラを表す。ソフトウェアを使用して本発明が実装される場合、当該ソフトウェアは、コンピュータプログラム製品に記憶されてもよく、また、リムーバブル記憶ドライブ614、インターフェース620、ハードドライブ612もしくは通信インターフェース624を使用してコンピュータシステム600にロードされ得る。
また、本発明は、任意のコンピュータ使用可能な媒体に記憶されるソフトウェアを備えるコンピュータプログラム製品も対象とする。このようなソフトウェアは、1つ以上のデータ処理デバイスで実行されたときに、データ処理デバイスを本明細書で説明されるように動作させる。本発明の実施形態では、現在知られている媒体、または、将来の任意のコンピュータ利用可能もしくは読み出し可能な媒体を用いる。コンピュータ使用可能な媒体の例としては、主記憶デバイス(例えば、任意のタイプのランダムアクセスメモリ)、二次記憶デバイス(例えば、ハードドライブ、フロッピー(登録商標)ディスク、CD−ROM、ZIPディスク、テープ、磁気記憶デバイス、光記憶デバイス、MEMS、ナノテクノロジー記憶デバイス等)、および、通信媒体(例えば、有線および無線通信ネットワーク、ローカルエリアネットワーク、ワイドエリアネットワーク、イントラネット等)が挙げられるが、それらに限定されない。
本発明の種々の実施形態を上記のように説明してきたが、これらは一例として提示されたものであり、限定するものではないことを理解されたい。添付の特許請求の範囲において定義される本発明の趣旨および範囲から逸脱することなく、形態および細部の種々の変更が行われ得ることが、当業者によって理解されるであろう。本発明は、これらの実施例に限定されないことを理解されたい。本発明は、本明細書で説明されるように動作する任意の要素に適用することができる。したがって、本発明の広さおよび範囲は、上述した例示的な実施形態のいずれかに限定されるべきではなく、添付の特許請求の範囲およびそれらの均等物によってのみ定義されるべきである。

Claims (24)

  1. チャネルを定義することと、
    前記チャネルからデータを読み出すように構成されたコンシューマカーネルを定義することと、
    前記チャネルの条件を満たす場合に前記コンシューマカーネルを起動するように構成されたチャネルイベントを、登録することと、
    を含む、方法。
  2. 少なくとも1つのデータのブロックが前記チャネル内に存在する場合に、前記チャネルの前記条件を満たす、請求項1に記載の方法。
  3. 前記チャネルが満杯である場合に、前記チャネルの前記条件を満たす、請求項1に記載の方法。
  4. 実行時に前記チャネルを処理ユニットのメモリユニットに割り当てることをさらに含む、請求項1に記載の方法。
  5. 前記チャネルイベントを監視し、前記コンシューマカーネルの前記起動をトリガするように構成されたハードウェアスケジューリングシステムを実行することをさらに含む、請求項1に記載の方法。
  6. 前記チャネルの前記条件を満たす場合に、前記コンシューマカーネルをコマンドキューに配置することをさらに含み、前記コマンドキューは、前記コンシューマカーネルの前記起動を処理するように構成されている、請求項1に記載の方法。
  7. 前記コンシューマカーネルを起動することと、
    前記コンシューマカーネルで前記チャネルから前記データを読み出すことと、
    前記データを消費することと、
    前記コンシューマカーネルを終了することと、をさらに含む、請求項1に記載の方法。
  8. データを前記チャネルに書き込むように構成されたプロデューサカーネルを定義することをさらに含む、請求項1に記載の方法。
  9. 命令が記憶されたコンピュータ可読記憶デバイスであって、前記命令は、コンピューティングデバイスによって実行されると、前記コンピューティングデバイスに、
    チャネルを定義することと、
    前記チャネルからデータを読み出すように構成されたコンシューマカーネルを定義することと、
    前記チャネルの条件を満たす場合に前記コンシューマカーネルを起動するように構成されたチャネルイベントを、登録することと、
    を含む動作を行わせる、コンピュータ可読記憶デバイス。
  10. 少なくとも1つのデータのブロックが前記チャネル内に存在する場合に、前記チャネルの前記条件を満たす、請求項9に記載のコンピュータ可読記憶デバイス。
  11. 前記チャネルが満杯である場合に、前記チャネルの前記条件を満たす、請求項9に記載のコンピュータ可読記憶デバイス。
  12. 前記動作は、
    実行時に前記チャネルを処理ユニットのメモリユニットに割り当てることをさらに含む、請求項9に記載のコンピュータ可読記憶デバイス。
  13. 前記動作は、
    前記チャネルイベントを監視し、前記コンシューマカーネルの前記起動をトリガするように構成されたハードウェアスケジューリングシステムを実行することをさらに含む、請求項9に記載のコンピュータ可読記憶デバイス。
  14. 前記動作は、
    前記チャネルの前記条件を満たす場合に、前記コンシューマカーネルをコマンドキューに配置することを含み、前記コマンドキューは、前記コンシューマカーネルの前記起動を処理するように構成されている、請求項9に記載のコンピュータ可読記憶デバイス。
  15. 前記動作は、
    前記コンシューマカーネルを起動することと、
    前記コンシューマカーネルで前記チャネルから前記データを読み出すことと、
    前記データを消費することと、
    前記コンシューマカーネルを終了することと、を含む、請求項9に記載のコンピュータ可読記憶デバイス。
  16. 前記動作は、
    データを前記チャネルに書き込むように構成されたプロデューサカーネルを定義することを含む、請求項9に記載のコンピュータ可読記憶デバイス。
  17. モジュールを記憶するように構成されたメモリと、
    前記モジュールを処理するように構成された1つ以上のプロセッサと、
    を備えるシステムであって、
    前記モジュールは、
    チャネルと、
    前記チャネルからデータを読み出すように構成されたコンシューマカーネルと、
    前記チャネルの条件を満たす場合に前記コンシューマカーネルを起動するように構成されたチャネルイベントを登録するように構成された登録モジュールと、を備える、
    システム。
  18. 少なくとも1つのデータのブロックが前記チャネル内に存在する場合に、前記チャネルの前記条件を満たす、請求項17に記載のシステム。
  19. 前記チャネルが満杯である場合に、前記チャネルの前記条件を満たす、請求項17に記載のシステム。
  20. 実行時に前記チャネルを前記1つ以上のプロセッサのメモリユニットに割り当てるように構成された割り当てモジュールをさらに備える、請求項17に記載のシステム。
  21. 前記チャネルイベントを監視し、前記コンシューマカーネルの前記起動をトリガするように構成されたハードウェアスケジューリングシステムをさらに備える、請求項17に記載のシステム。
  22. 前記チャネルの前記条件を満たす場合に前記コンシューマカーネルを受け取り、および、前記コンシューマカーネルの前記起動を処理するように構成されたコマンドキューをさらに備える、請求項17に記載のシステム。
  23. 前記コンシューマカーネルは、前記データを消費し、終了するように構成されている、請求項17に記載のシステム。
  24. データを前記チャネルに書き込むように構成されたプロデューサカーネルをさらに備える、請求項17に記載のシステム。
JP2014553528A 2012-01-23 2013-01-23 マルチスレッドコンピューティング Active JP6336399B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201261589468P 2012-01-23 2012-01-23
US61/589,468 2012-01-23
US13/606,741 US10235220B2 (en) 2012-01-23 2012-09-07 Multithreaded computing
US13/606,741 2012-09-07
PCT/US2013/022729 WO2013126170A1 (en) 2012-01-23 2013-01-23 Multithreaded computing

Publications (3)

Publication Number Publication Date
JP2015504226A true JP2015504226A (ja) 2015-02-05
JP2015504226A5 JP2015504226A5 (ja) 2016-03-10
JP6336399B2 JP6336399B2 (ja) 2018-06-06

Family

ID=48798336

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014553528A Active JP6336399B2 (ja) 2012-01-23 2013-01-23 マルチスレッドコンピューティング

Country Status (7)

Country Link
US (1) US10235220B2 (ja)
EP (1) EP2807559A1 (ja)
JP (1) JP6336399B2 (ja)
KR (1) KR102024283B1 (ja)
CN (1) CN104094235B (ja)
IN (1) IN2014DN06232A (ja)
WO (1) WO2013126170A1 (ja)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9477521B2 (en) 2014-05-29 2016-10-25 Netapp, Inc. Method and system for scheduling repetitive tasks in O(1)
US9304702B2 (en) 2014-05-29 2016-04-05 Netapp, Inc. System and method for parallelized performance data collection in a computing system
US9256477B2 (en) * 2014-05-29 2016-02-09 Netapp, Inc. Lockless waterfall thread communication
US9652817B2 (en) * 2015-03-12 2017-05-16 Samsung Electronics Co., Ltd. Automated compute kernel fusion, resizing, and interleave
CN105447285B (zh) * 2016-01-20 2018-11-30 杭州菲数科技有限公司 一种提高OpenCL硬件执行效率的方法
US10013240B2 (en) * 2016-06-21 2018-07-03 Advanced Micro Devices, Inc. Fingerprinting of redundant threads using compiler-inserted transformation code
US10296393B2 (en) 2016-09-19 2019-05-21 Texas Instruments Incorporated Method for scheduling a processing device
US10467056B2 (en) * 2017-05-12 2019-11-05 Google Llc Configuration of application software on multi-core image processor
CN107368255B (zh) * 2017-07-25 2019-04-12 Oppo广东移动通信有限公司 解锁方法、移动终端及计算机可读存储介质
US10713746B2 (en) * 2018-01-29 2020-07-14 Microsoft Technology Licensing, Llc FIFO queue, memory resource, and task management for graphics processing
US10719268B2 (en) 2018-06-29 2020-07-21 Microsoft Technology Licensing, Llc Techniques for safely and efficiently enqueueing and dequeueing data on a graphics processor
CN109918141B (zh) * 2019-03-15 2020-11-27 Oppo广东移动通信有限公司 线程执行方法、装置、终端及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003029980A (ja) * 2001-07-10 2003-01-31 Toshiba Corp データキュー管理システム、データキュー管理装置、データキュー管理方法、およびプログラム
US20060182137A1 (en) * 2005-02-14 2006-08-17 Hao Zhou Fast and memory protected asynchronous message scheme in a multi-process and multi-thread environment
JP2006525578A (ja) * 2003-05-08 2006-11-09 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ データパケットのパスによりブロックされている処理ノードをアンブロックする閾値

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2273591A (en) * 1992-12-18 1994-06-22 Network Systems Corp Microcomputer control systems for interprogram communication and scheduling methods
US7950017B1 (en) * 1999-04-23 2011-05-24 Avaya Inc. Apparatus and method for forwarding messages between two applications
US7584327B2 (en) * 2005-12-30 2009-09-01 Intel Corporation Method and system for proximity caching in a multiple-core system
JP4857207B2 (ja) 2006-09-07 2012-01-18 株式会社リコー 画像形成装置および入出力制御方法
US7761666B2 (en) * 2006-10-26 2010-07-20 Intel Corporation Temporally relevant data placement
US8621184B1 (en) * 2008-10-31 2013-12-31 Netapp, Inc. Effective scheduling of producer-consumer processes in a multi-processor system
US8694625B2 (en) * 2010-09-10 2014-04-08 International Business Machines Corporation Selective registration for remote event notifications in processing node clusters

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003029980A (ja) * 2001-07-10 2003-01-31 Toshiba Corp データキュー管理システム、データキュー管理装置、データキュー管理方法、およびプログラム
JP2006525578A (ja) * 2003-05-08 2006-11-09 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ データパケットのパスによりブロックされている処理ノードをアンブロックする閾値
US20060182137A1 (en) * 2005-02-14 2006-08-17 Hao Zhou Fast and memory protected asynchronous message scheme in a multi-process and multi-thread environment

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"理論で学ぶJavaプログラミング", JAVA WORLD 第7巻 第4号, JPN6017004936, 1 April 2003 (2003-04-01), pages 120 - 130 *

Also Published As

Publication number Publication date
US20130191852A1 (en) 2013-07-25
EP2807559A1 (en) 2014-12-03
JP6336399B2 (ja) 2018-06-06
CN104094235A (zh) 2014-10-08
KR102024283B1 (ko) 2019-11-14
KR20140117578A (ko) 2014-10-07
CN104094235B (zh) 2019-05-28
WO2013126170A1 (en) 2013-08-29
US10235220B2 (en) 2019-03-19
IN2014DN06232A (ja) 2015-10-23

Similar Documents

Publication Publication Date Title
JP6336399B2 (ja) マルチスレッドコンピューティング
US20210049729A1 (en) Reconfigurable virtual graphics and compute processor pipeline
US11550627B2 (en) Hardware accelerated dynamic work creation on a graphics processing unit
KR101786768B1 (ko) 그래픽 연산 처리 스케줄링
US9286119B2 (en) System, method, and computer program product for management of dependency between tasks
KR101788267B1 (ko) 시스템 호출 요청의 통신 최적화
US8963933B2 (en) Method for urgency-based preemption of a process
KR101786767B1 (ko) 유저 모드로부터 그래픽 처리 디스패치
US10402223B1 (en) Scheduling hardware resources for offloading functions in a heterogeneous computing system
AU2014268246A1 (en) Reverting tightly coupled threads in an over-scheduled system
US10146575B2 (en) Heterogeneous enqueuing and dequeuing mechanism for task scheduling
US8933942B2 (en) Partitioning resources of a processor
US9286114B2 (en) System and method for launching data parallel and task parallel application threads and graphics processing unit incorporating the same
US9122522B2 (en) Software mechanisms for managing task scheduling on an accelerated processing device (APD)
KR20140004654A (ko) 처리 디바이스의 동기 동작을 위한 방법 및 시스템
KR101791182B1 (ko) 컴퓨터 시스템 인터럽트 핸들링
US20120151145A1 (en) Data Driven Micro-Scheduling of the Individual Processing Elements of a Wide Vector SIMD Processing Unit
US20130135327A1 (en) Saving and Restoring Non-Shader State Using a Command Processor
CN116635829A (zh) 用于高吞吐量和低开销内核启动的压缩命令分组
US10360652B2 (en) Wavefront resource virtualization
US9619277B2 (en) Computer with plurality of processors sharing process queue, and process dispatch processing method
US20240111578A1 (en) Hierarchical work scheduling
WO2013090605A2 (en) Saving and restoring shader context state and resuming a faulted apd wavefront

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160120

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160120

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170221

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170522

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170808

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171107

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180502

R150 Certificate of patent or registration of utility model

Ref document number: 6336399

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250