JP6368452B2 - 非同期のデバイスによって実行されるタスクのスケジューリングの向上 - Google Patents

非同期のデバイスによって実行されるタスクのスケジューリングの向上 Download PDF

Info

Publication number
JP6368452B2
JP6368452B2 JP2012066901A JP2012066901A JP6368452B2 JP 6368452 B2 JP6368452 B2 JP 6368452B2 JP 2012066901 A JP2012066901 A JP 2012066901A JP 2012066901 A JP2012066901 A JP 2012066901A JP 6368452 B2 JP6368452 B2 JP 6368452B2
Authority
JP
Japan
Prior art keywords
task
tasks
independent
processing devices
consistency
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.)
Active
Application number
JP2012066901A
Other languages
English (en)
Other versions
JP2012203911A (ja
Inventor
エリオット ロバート
エリオット ロバート
Original Assignee
エイアールエム リミテッド
エイアールエム リミテッド
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 エイアールエム リミテッド, エイアールエム リミテッド filed Critical エイアールエム リミテッド
Publication of JP2012203911A publication Critical patent/JP2012203911A/ja
Application granted granted Critical
Publication of JP6368452B2 publication Critical patent/JP6368452B2/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/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
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0842Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
    • 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/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5033Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering data affinity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/484Precedence
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5017Task decomposition

Description

発明の背景
本発明は、データ処理の分野に関し、特に、非同期のデバイスによって実行されるタスクのスケジューリングに関する。
互いにおよびメモリシステムと相互作用する複数のデバイスを有するシステムが知られている。異なるデバイスがデータについて独自のローカルストレージを有する場合、異なるローカルストレージ位置およびメモリの間のデータの同期を維持する上で問題が生じることがある。概して、デバイスは、キャッシュメンテナンス動作等の一貫性動作の実行、バリアの利用、およびデータが少なくともシステムの他の部分の一部と同期することが重要である実行における特定のポイントでのローカルストレージのフラッシングによってこの問題を解決する。また、長いパイプラインを有する画像処理装置GPU等のデバイスでは、特定の問題が生じる可能性がある。一貫性動作の実行中におけるGPUによるタスクの実行の待機により、バブルをパイプラインに導入することになり、これは、ディープパイプラインにおいて、大きな欠点を有する。
先行技術のデバイスは、概して複数回の更新が行われることにより、それに関連付けられる帯域幅コストはかかるが待ち時間は短い、一貫性動作を直ちに実行しているか、あるいは、不必要な複数回の更新を避けることができるが待ち時間は長くなる、待機およびバッチプロセスにおける一貫性動作を共に実行している。
帯域幅に過度に影響を及ぼすことなく、かかる一貫性動作に関連付けられた待ち時間を短縮することが望ましいであろう。
第1の態様から概観すると、本発明は、複数の非同期の処理デバイスのうちの1つによって処理されるタスクをスケジューリングするための方法を提供し、前記複数の非同期の処理デバイスのうちの少なくとも2つは、異種デバイスであり、前記タスクのうちの少なくともいくつかは、前記複数の非同期の処理デバイスのうちの特定の1つにターゲットされ、前記非同期の処理デバイスは、ローカルストレージと、前記複数の非同期の処理デバイスのうちの少なくともいくつかによってアクセス可能なメモリとに記憶されるデータを処理し、前記方法は、前記非同期の処理デバイスによって処理される複数の非依存タスクのそれぞれについて、前記非依存タスクの処理前に実行することが必要な一貫性動作を判定することと、前記非依存タスクのうちの1つの前記一貫性動作を実行することと、完了時に、処理のために前記処理デバイスへ前記タスクを発行することと、前記一貫性動作の完了時に、前記非同期の処理デバイスが前記さらなるタスクを処理できるように、さらなる非依存タスクについて一貫性動作を実行することと、を含む。
本発明は、デバイスが互いに一貫し、その間でデータを自由に受け渡しできる前に、複数の一貫性動作を実行する必要があり得るが、非同期のデバイスが特定のタスクを実行できるように、このタスクを安全に実行するために、実行することが必要な完全な一貫性動作のサブセットしか存在しない可能性を認識している。このため、本発明は、全ての一貫性動作を実行するのではなく、特定のタスクについて必要な一貫性動作を判定し、これらのみを実行する。これらが完了すると、タスクを、処理のために非同期のデバイスに発行することができ、一方で、以降のタスクに必要な一貫性動作を並列で実行できる。これらを完了すると、以降のタスクは、非同期のデバイスによって処理される準備ができる。
概して、いずれかの良好に設計されたシステムでは、一貫性動作は、これらに関連付けられたタスクよりも時間がかからないため、以降のタスクについての一貫性動作は、以前のタスクが時間切れになる前に完了し、このため、以降のタスクは、デバイスがそれを実行する準備ができる前に実行のために発行される準備ができる。このため、一貫性動作によってシステムへ導入される待ち時間は、概して、第1のタスクについての一貫性動作に関連付けられた待ち時間にすぎない。
デバイスのうちの少なくともいくつかは異種デバイスであり、タスクのうちの少なくともいくつかは特定のデバイスにターゲットされていることに留意されたい。これは、タスクを有用性および搭載によって異なるコアにリダイレクトできる、同種のコアを有するデバイスとは異なる。異種デバイスは、それらの実行能力において異なる特性または能力を有するデバイスである。例えば、専用のイメージ操作回路によるGPUの実行パフォーマンスは、CPU上における同等のソフトウェアよりも効率的かつ格段に速くなる。この差はあまりに明確であるため、一貫性作業の必要性を回避するために、より遅いデバイス上で作業を行うことを選択することが実現可能でなくてもよい。他のデバイスにおいて、あるデバイスにおいて機能性が完全に欠けている可能性があるため、特定の機能が実行できなくなる。本発明は、少なくともいくつかの場合では、タスクをデバイスの間にポートできない状況に関連している。
このため、本発明の実施形態およびその実装のための動作の制約とは、デバイスが事前に選択されており、そのため、その選択を、他の最適化の規模として使用することができないということである。
いくつかの実施形態では、非依存タスクは、処理の前に一貫性動作を実行することが必要である全てのタスクに依存しないタスクであり、前記方法は、前記非依存タスクのうちの前記1つへ依存するいずれかのタスクの再評価の前記非依存タスクの前記1つについて、前記いずれかのタスクが依存であるか非依存であるかを判定するために、さらなる非依存タスクについての一貫性動作の前記ステップが実行される前に前記一貫性動作を実行する前記ステップに従うさらなるステップを含む。
非依存タスクは、処理されるいずれかの他の未処理のタスクに依存しないタスクとして考えてもよい。しかしながら、この実施形態の文脈において、非依存タスクは、一貫性動作を実行することが必要ないずれかの他の未処理のタスクに依存しないタスクである。例えば、タスクa、b、cおよびdが、以下の依存関係、a=>b=>d、およびc=>dを有する場合(つまり、aをbの前に、bをdの前に、cをdの前に実行する必要がある)、最初に、aおよびcは非依存タスクとして考えられる。しかしながら、タスクaについて一貫性動作が実行されると、タスクaが完了したかどうかに関係なく、タスクbの一貫性動作がタスクcのものよりも小さい場合にこれらが先に実行できるように、bが非依存タスクとして考えられる。このため、タスクが現在、非依存と考えられているかどうかに照らして、各一貫性タスクが完了後、一貫性作業の順序を再評価することができる。
いくつかの実施形態では、前記非同期の処理デバイスは、前記タスクの実行前と、処理されるか、または、前記非同期の処理デバイスがより以前のタスクを処理している場合に処理を待機する前記タスク記憶行列に記憶される、前記非同期の処理デバイスへ前記さらなるタスクを伝送する、前記さらなる非依存タスクについての前記一貫性動作の完了時とに、行列内に少なくとも1つのタスクを記憶するためのタスク行列記憶装置を含む。
非同期の処理デバイスが行列に少なくとも1つのタスクを記憶するためのタスク行列記憶装置を有する場合に、有利であり得る。その場合、さらなるタスクについての一貫性動作の完了後、このさらなるタスクは非同期の処理デバイスに伝送でき、実行を待機する行列に配置でき、非同期の処理デバイスがその実行の準備ができるとすぐに実行できる。このように、実行されるさらなるタスクの一貫性動作を待機する必要がないため、この時点でパイプラインにバブルは現れず、さらなるタスクは、実行の準備ができている行列で待機する。
いくつかの実施形態では、前記方法は、互いに独立して実行できる前記タスクの部分を判定し、可能な場合、前記タスクを前記複数の非依存タスクに細分化する初期ステップを含む。
タスクを細分化するためにどれが最も適切な原子タスクであるかを判定することが有利であり得る。言い換えると、何が作成可能な非依存タスクの最も小さい細分化であるかである。タスクを小さい分割に細分化することにより、システムの待ち時間を削減することができ、このように、小さいタスクについて一貫性動作を実行できるため、次のタスクの一貫性動作が実行される間にタスクを実行できる。
いくつかの実施形態では、前記方法は、前記タスクの依存関係を判定し、初期の待ち時間を削減するために前記タスクの順序付けを提供する前記初期のステップに従うステップを含む。
タスクが非依存タスクに細分化されると、初期の待ち時間を削減するために、各タスクについての一貫性作業のサイズに基づいて、スケジューラによって順序付けを実行することができる。このため、最も小さい一貫性作業を有するタスクを、最初に実行されるように選択してもよい。
他の実施形態では、前記さらなる非依存タスクについての前記一貫性動作を実行した後で、前記方法は、前記さらなるタスクを処理する準備ができているという指示に応答して、前記非同期のデバイスへ出力する準備ができている優先される行列内に前記さらなるタスクを記憶する。
非同期の処理デバイス上にタスク行列記憶装置が存在しない場合、リングバッファの形態であってもよい優先される行列にさらなるタスクが記憶されると、有利であり得る。この行列は、同期動作を実行するデバイス上にあってもよい、または、メモリ内であってもよい。タスクは、出力の準備ができたこの優先される行列に存在する。非同期のデバイスがさらなるタスクを処理する準備ができている場合、一貫性動作を実行するデバイスへこれをシグナル送信し、タスクを、迅速および効率的にそれに伝送できる。これは、非同期のデバイスにおいて、さらなるタスクについて待機が長くなりすぎることを防止する。このシステムの1つの欠点は、異なるデバイスの間に必要な通信がより多いということである。
いくつかの実施形態では、前記一貫性動作は、前記複数の処理デバイスおよび前記メモリの間の一貫性を確実にするために、同期動作および他のデータ伝送動作のうちの少なくとも1つを含む。
実行される一貫性動作は、データを一貫性あるものにするための同期動作等の動作である。デバイスが一定して動作することを必要とする他の動作が存在してもよい。例えば、エイリアスをコピーすることを伴ってもよい。
いくつかの実施形態では、方法は、複数のさらなる非依存タスクについての一貫性動作を実行することと、前記複数のさらなるタスクのそれぞれについての前記一貫性動作の完了時に、前記非同期の処理デバイスが前記さらなるタスクを受信するための容量を有するかどうかを判定することと、前記非同期の処理デバイスに応答して、前記さらなるタスクを前記非同期の処理デバイスに発行する容量を有することを、さらに含む。
本発明の実施形態は、非同期の処理デバイス上での実行を待機する全ての非依存タスクについての一貫性動作が次々に実行される場合に、特に有利である。この場合、これらの非同期の動作が非同期の処理デバイスに発行されるように実行されるとすぐに、これらのタスクは準備ができている。
タスクは、そのタスク行列記憶装置が容量を有することを示す非同期の処理デバイスからの指示に応答して、非同期の処理デバイスに発行されてもよい。こうした信号が受信される場合、その同期動作が完了したいずれのタスクも伝送できる。多くの実施形態では、タスク行列は、いくつかのタスクを並列で記憶でき、このため、2つのデバイス間にこれらのタスクを伝送するために単一伝送を使用でき、したがって、時間および電力が節約される。
いくつかの実施形態では、前記方法は、さらに、前記タスク行列記憶装置が容量を有するという指示を前記非同期の処理デバイスから受信することと、前記指示および完了した一貫性動作を有するタスクがないことに応答して、未処理の一貫性動作の完了時において対応するタスクを前記行列に配置できるように、前記指示を留意することと、を含む。
タスク行列記憶装置が容量を有するという指示を受信し、現在、完了した一貫性動作が存在していない場合、システムは、この指示を留意してもよく、未処理の一貫性動作の完了時に、対応するタスクを行列内に配置できる。このように、さらなるタスクを、準備ができると、かつ、パイプラインに現れるバブルを避けるのにできれば間に合うように、タスク行列に記憶するための非同期のデバイスに送信することができる。
いくつかの実施形態では、前記タスクのそれぞれについて実行される一貫性動作を判定する前記ステップは、前記タスクのどれがそれに関連付けられている最も少ない数の一貫性動作を有するかを判定することと、前記最も少ない数の一貫性動作を実行することと、前記他の一貫性動作およびタスクを実行する前に前記非同期の処理デバイスに前記タスクを発行することと、を含む。
どのタスクが最も短い待ち時間で最少の数の一貫性動作を有するかを判定することが有利であり得る。これが行われると、これらの動作が完了するとすぐに、つまり、より多くの同期動作を有するタスクが選択される場合よりも迅速に、非同期の処理デバイスにタスクを送信できる。このようにシステムの待ち時間が短縮される。さらにより長い待ち時間一貫性動作を実行することができ、一方で、最短の待ち時間一貫性動作を有するタスクが処理される。挙動が良好なシステムにおいて前述のように、タスクは、概して、同期動作よりも時間がかかり、このため、次のタスクは、その同期動作を完了させ、以前のタスクが完了する前に処理の準備ができているべきである。
いくつかの実施形態では、前記タスクを処理する前記非同期の処理デバイスは、ディープパイプラインを有する画像処理装置を備える。
非同期の処理デバイスは、多様なものであってもよいが、ディープパイプラインを有する画像処理装置に特に有利である。バブルがディープパイプラインに現れることは特に不利であり、このため、このように同期動作を実行し、タスクが画像処理装置に送信される待ち時間を削減することは、バブルを低減させ、システムのパフォーマンスを向上させるために役立ち得る。
いくつかの実施形態では、非同期の中央処理装置で前記一貫性動作が実行される。
多数の処理デバイスにおいて一貫性動作を実行できるが、多くの場合、これは、スケジューリングおよび一貫性動作を実行する中央処理装置である。
本発明の第二の態様は、プロセッサによって実行される場合に、本発明の第一の態様に従う方法においてステップを実行するために前記プロセッサを制御する、プログラムを含むコンピュータプログラム製品を提供する。
本発明の第三の態様は、データ処理のための複数の非同期の処理デバイスを含むデータ処理装置であって、前記非同期の処理デバイスのうちの少なくともいくつかは、ローカルデータストレージを含む、データ処理装置と、前記複数の非同期の処理デバイスのうちの少なくともいくつかによってアクセス可能なデータを記憶するためのメモリと、前記複数の非同期の処理デバイスのうちの少なくとも1つによって実行されるタスクをスケジューリングするためのスケジューリング回路と、を備え、前記非同期の処理デバイスのうちの前記少なくとも1つは、実行を待機する少なくとも1つのタスクを記憶するためのタスク行列記憶装置を備え、前記スケジューリング回路は、前記非同期の処理デバイスのうちの1つによって実行される複数の非依存タスクのそれぞれについて、前記タスクの実行の前に実行することが必要な一貫性動作を判定し、前記一貫性動作のパフォーマンスをスケジュールし、完了時に、前記非同期の処理デバイスによって実行される前記タスクを発行し、さらなるタスクについて一貫性動作を実行するように構成される。
本発明の上記および他の目的、特徴および利点は、添付の図面に関連して一読されるべき例示的な実施形態の以下の詳細な記載から明らかであろう。
本発明の一実施形態に従うデータ処理装置を示す。 タスクおよびそれらの関連付けられた同期動作のスケジューリングを概略的に示す 非依存タスクおよびそれらの同期動作のスケジューリングを概略的に示す。 本発明の一実施形態に従う方法におけるステップを図示する流れ図を示す。 本発明の一実施形態の仮想マシン実装を示す。
図1は、中央処理装置CPU10、画像処理装置GPU20およびメモリ30を有するデータ処理装置5を示す。中央処理装置および画像処理装置は、互いに、およびバス40を介してメモリと通信する。
中央処理装置10は、実行される複数のタスクをスケジューリングするためのスケジューラ12を有する。いくつかの実施形態では、スケジューラは、それらをスケジューリングする前に非依存タスクの最も小さい分割にタスクを細分化してもよい。基本的には、スケジューラは、(図3に示される等の)それらの最小限の形態でユーザ指定タスクを有してもよく、または、スケジューラは、タスク自体において使用される命令のシーケンスに依存するタスクを細分化するための基準を使用してもよい。タスク自体は、コードが細分化を防止する副次的効果を有しても有しなくてもよい等の(CPUによって実行される)汎用の計算である。
例えば、単純なタスクを、メモリの各要素から読み込み、これを修正し、同じ位置へ再度書き込んでもよい。この場合、タスクは、ユーザ定義の境界において自明に細分化することができる。特定の場合として、ユーザアプリケーションが、実行されるタスクとしてこれらの読み込み/修正/書き込みを100万回リクエストする場合、50万スレッドの2つのタスク、25万スレッドの4つのタスク等へ細分化することができる。これは、さらなる制御構造の作成が待ち時間削減よりも重要であるという最適条件に役立つ。
この細分化を防止する関係を有するより大きいスレッドのグループ分けも存在する。極端な例は、逆にする必要がある数々の100万の項目であり、この場合、各スレッドは、最初および最後の要素、2番目および最後から2番目の要素等の入れ替えに割り当てられる。
コードは、さらに、アクセスパターン(NP完了停止問題)を判定できないほど十分に複雑であってもよい、または、アクセスパターンがデータ駆動である場合が存在してもよい(ランタイムにおいて要素アクセスのためのインデックスのリストが提供される)。これは、計算的に集約されすぎていて解析が効果を挙げられないため、さらに細分化することはしない。
これらの場合の混合は、典型的なアプリケーションで処理する場合、実生活において見られ、細分化を実行すべきものを判定するために「最善努力」解析が使用される。
これらの非依存タスクのそれぞれは、ジョブが実行するデバイス上において一貫性あるものにされる必要のあるものに関連付けられたリソースを有する。このため、CPU10は、タスクをそれらのターゲットデバイス上で正常に実行するために、何の一貫性動作を実行することが必要かを判定する。
この例において、画像処理装置20上で実行されるタスクを考える。このため、CPU10は、GPU20上で実行される非依存タスクを判定し、各タスクを実行できる前に何の一貫性動作を実行する必要があるかを判定する。スケジューラ12は、これらの一貫性動作のどれが最小コストを有するか、つまり、最も迅速に実行されるかを判定し、これらの動作を最初に実行する。以前にタスクを小さい非依存タスクに細分化していることにより、各タスクに関連付けられた一貫性動作の数は少なくなり、このため、一貫性タスクの実行の待機によって生じる待ち時間が短縮されることに留意されたい。
一貫性動作が完了すると、これらの一貫性動作に関連付けられたタスクは、実行できる場合に、GPU20へ送信される。CPU10は、次いで、さらなるタスクがGPU上で実行されるように一貫性動作を実行し、これらが完了すると、タスク記憶装置22に記憶される場合に、GPU20へさらなるタスクを伝送する。
CPUは、さらなるタスクについて一貫性動作を実行し、タスク記憶装置22がいっぱいになると、優先されるオペレーティングシステムによって所有される行列である優先される短い待ち時間または優先行列14に、これらを記憶する。この行列は、FIFOとして、またはメモリ30内のCPUに関連付けられたリングバッファとして実装されてもよい。CPU10が、タスク記憶装置22を有しないGPUと通信している場合に、次のタスクの処理の準備ができていることを示すGPUからの信号を待機するこの優先される行列に、未処理のタスクを記憶することを留意されたい。
図2は、タスクのスケジューリングおよび実行、ならびに複数のタスクの一貫性動作を概略的に示す。このため、これらに関連付けられた複数の一貫性動作C1〜C6を有する複数のタスクT1〜T6が存在する。図示されるように、一貫性動作C3は、コストが最小であり、このため、これらは、最初に実行され、T3を完了すると、GPU20による実行のために発行される。次いで一貫性動作C1が実行され、T1を完了すると、GPU20に発行され、タスク記憶行列22に配置される。この実施形態において、GPUは、実行しているコマンドを記憶するためのレジスタである2つの実行レジスタを構成する2つのディープ行列および未解決であるコマンドを記憶するための2つの影のレジスタを有し、これらはタスク記憶行列として使用される。このレジスタインタフェースは、バス上に構成され、GPUがタスク上で作業を開始するようにシグナル送信される時点においてGPUへと内部的に記憶され、これにより、同じレジスタを次のタスクのために準備することができることを留意されたい。
次いで、一貫性動作C2、C7およびC4がスケジューリングされ、完全なタスクT2、T7およびT4がCPU上の優先行列14に配置される。GPUがタスクT3を完了すると、影のレジスタが容量を有していることを示すCPUへ、中断を伝送する。この時点において、一貫性動作C2、C7およびC4が完了すると、未処理のタスクT7、T4およびT2が伝送され、タスク記憶装置として作用する影のレジスタに記憶される。タスクが共に送信される場合、影のレジスタのうちの1つにおいて、タスクリストとして共に記憶することができ、このように、タスク記憶装置は、多数のタスクを共に受信でき、いずれかの一時点において送信され、行列において未処理で配置されているタスク数を増加できるように、これらを共に記憶できる。
次いでタスクT1が実行され、これが完了すると、再び、容量を有する影のレジスタが存在し、このため、さらなる中断がCPUに送信され、C5およびC6であるタスクT5およびT6の同期動作が完了すると、タスクT5およびT6は、優先される行列において準備ができており、これらを伝送することもできる。
このように、多数のタスクの一貫性動作を事前に実行することができ、これらによって、パイプライン内のバブルなしに、次々にタスクを実行することができる。さらに、いくつかのタスクを同時に伝送する準備ができている場合に、これらを共に伝送および記憶することができ、こうして、帯域幅およびストレージ要件を低減する。
図3は、タスクAおよびBをいずれの順序でも実行することができる非依存タスクであり、一方で、タスクCは、完了した際に実行することが必要なタスクであることを概略的に示す。このため、タスクおよびBは、いずれの順序でもCPUによってスケジューリング可能なタスクである。これらのタスクは、共に、画像プロセッサGPU20によって実行され、これらに関連付けられた一貫性動作XおよびYを有する。この図に概略的に示されているように、一貫性動作Yは、一貫性動作Xより大きく、このため、CPU内のスケジューラは、最初に実行される一貫性動作Xをスケジューリングし、これらが完了すると、実行のためにGPU20にタスクAを発行する。次いで、一貫性タスクYが実行される。この実施形態において、一貫性タスクYが完了するとGPUにタスク行列は存在しないため、タスクBは、タスクAが完了したことを示すGPUからの信号を待機する優先行列に記憶される。この信号を受信すると、タスクBは実行のためにGPUに伝送される。
タスクBは、一貫性動作Yが完了した後すぐにGPUからの信号を待機する優先される行列に入れることができる、またはいくつかの実施形態において、CPUが、タスクAにかかる、およびGPUの準備ができることを計算する時点あたりで、行列にタスクBを入れる推定の長さを推定できることに留意されたい。このように、タスクBは、非常に長い間、優先行列に存在せず、他のタスクを優先行列に配置させることができる。
両方のタスクAおよびBが完了後、タスクCは、それに関連付けられる可能性のあるいずれかの一貫性動作が完了していることを条件として、処理が可能である。これらは、タスクAまたはBの実行中に実行されていてもよい。
図4は、本発明の一実施形態に従う方法のステップを示す流れ図を示す。
この方法では、最初、実行されるタスクは複数の非依存タスクに分割される。このタスク分割は、最小の要素のタスクに実行される。
非同期のデバイス上で複数の非依存タスクのそれぞれを実行するために実行される同期動作が判定される。どの同期動作が最小コストを有するか、およびこれらの同期動作が最初に実行されることが判定される。
これが完了すると、それらに関連付けられたタスクが非同期のデバイスへ発行され、実行されるさらなるタスクが存在するかどうかが判定される。存在する場合には、同期動作の次のセットが実行されてもよい。この前に、いくつかの実施形態では、(この図に示されていないが)いずれかの以前の依存タスクが同期動作の完了後、非依存であるかどうかを判定するステップが実行される。そうである場合には、それらに関連付けられた同期動作は、実行される同期動作のリストに追加され、それらのコストが低い場合に、次のセットとして選択されてもよい。
次の組の同期動作が実行されると、非同期のデバイス上のタスク行列がいっぱいであるかどうかが判定される。いっぱいである場合には、その同期動作が実行されたため実行の準備ができたタスクは、CPUまたはタスク行列にスペースがあることを示す非同期のデバイスからの信号を待機するメモリ内に行列される、または、タスク行列がない場合には、非同期のデバイスはタスクを実行する準備ができている。この信号が受信されると、非同期のデバイスにタスクが発行される。
非同期のデバイス上のタスク行列がいっぱいになっていない場合、完了した同期動作に関連付けられたタスクはすぐにその行列に発行され、同期動作が完了した。発行されるさらなるタスクが存在しない場合、方法は終了する。
図5は、使用し得る仮想マシン実装を示す。上述の実施形態は、関連する技術をサポートする特定の処理ハードウェアを作動するための装置および方法に関して、本発明を実施するが、ハードウェアデバイスのいわゆる仮想マシン実装を提供することも可能である。これらの仮想マシン実装は、仮想マシンプログラム510をサポートする典型的にはホストオペレーティングシステム520を実行するホストプロセッサ530上で実行する。典型的には、大規模で強力なプロセッサに、適した速度で実行する仮想マシン実装を提供することが必要とされているが、互換性または再利用の理由で、別のプロセッサが元来持つコードを実行したい場合等の特定の状況において、こうしたアプローチは正当化されてもよい。仮想マシンプログラム510は、こうした真のハードウェアデバイスによるプログラムの実行によって与えられるものと同じ結果を与えるために、アプリケーションプログラム(またはオペレーティングシステム)500を実行することが可能である。このため、非同期のデバイスによって実行されるタスクのスケジューリングは、仮想マシンプログラム510を使用して、アプリケーションプログラム500内において実行され得る。
添付の図面を参照し、本発明の例示的な実施形態が本明細書に詳細に記載されているが、本発明はこれらの完全な実施形態に制限されるものではなく、添付の請求項によって定義されるように、本発明の範囲および精神から逸脱せずに、当業者によって、本明細書において種々の変更および修正を適用することができることを理解されたい。

Claims (26)

  1. 非同期で動作する複数の処理デバイスのうちの1つによって処理されるタスクをスケジューリングするための方法であって、前記非同期で動作する複数の処理デバイスのうちの少なくとも2つは異種デバイスであり、前記タスクのうちの少なくともいくつかは前記非同期で動作する複数の処理デバイスのうちの特定の1つにターゲットされ、前記非同期で動作する複数の処理デバイスは、ローカルストレージと、前記非同期で動作する複数の処理デバイスのうちの少なくともいくつかによってアクセス可能なメモリとに記憶されるデータを処理し、前記方法は、
    前記非同期で動作する複数の処理デバイスのうちの1つによって処理される複数の非依存タスクのそれぞれについて一貫性動作を判定するステップであって、前記一貫性動作は前記非同期で動作する複数の処理デバイス間の一貫性を確保するための動作であり、該一貫性動作は前記非依存タスクの実行前に実行することを必要とする、前記判定するステップと、
    前記非依存タスクのうちの1つについて前記一貫性動作を実行するステップであって、完了時に、処理のために前記非同期で動作する複数の処理デバイスのうちの前記1つに複数の前記非依存タスクのうちの1つを発行する、前記一貫性動作を実行するステップと、
    前記一貫性動作の完了時に、前記非同期で動作する複数の処理デバイスがさらなる非依存タスクを処理できるように、前記さらなる非依存タスクについて一貫性動作を実行するステップであって、非依存タスクは、処理の前に一貫性動作を実行することが必要である全てのタスクに依存しないタスクである、前記さらなる非依存タスクについて一貫性動作を実行するステップと、
    前記さらなる非依存タスクについて一貫性動作を実行するステップが実行される前に、前記非依存タスクのうちの前記1つについて前記一貫性動作を実行するステップの後に続いて、前記非依存タスクのうちの前記1つへ依存するいずれかのタスクを再評価して、該いずれかのタスクが依存であるか非依存であるかを判定するステップと
    を含む、方法。
  2. 前記非同期で動作する複数の処理デバイスは、タスク行列記憶装置を備え、当該タスク行列記憶装置は、行列内に少なくとも1つのタスクをタスクの実行前に記憶するものであり、前記さらなる非依存タスクについての前記一貫性動作の完了時には、前記さらなる非依存タスクを、非同期で動作する複数の処理デバイスへ伝送することで処理される、または、前記非同期で動作する複数の処理デバイスがより前のタスクを処理している場合には処理を待機させるタスク行列に記憶される、ようにするものである、請求項1に記載の方法。
  3. 前記非同期で動作する複数の処理デバイスから前記タスク行列記憶装置が容量を有することを受信し、前記タスク行列記憶装置が容量を有することに応答して実行の準備ができているいずれかのさらなる非依存タスクを伝送することをさらに含む、請求項2に記載の方法。
  4. 前記非同期で動作する複数の処理デバイスから、前記タスク行列記憶装置が容量を有することを受信することと、前記タスク行列記憶装置が容量を有することおよび完了する一貫性動作を有するタスクがないことに応答して、未処理の同期動作の完了時において、対応するタスクを前記行列に配置できるように前記指示に留意することと、をさらに含む、請求項2または3に記載の方法。
  5. 互いに独立して実行できる前記タスクの部分を判定し、可能な場合に前記複数の非依存タスクに前記タスクを細分化する初期のステップを含む、請求項1乃至4のいずれか1つに記載の方法。
  6. 前記初期のステップは、前記タスクのうちの少なくともいくつかを最小限の可能なタスクに細分化することを含む、請求項5に記載の方法。
  7. 前記タスクの依存関係を判定することと、初期の待ち時間を低減するために前記タスクの順序付けを提供することと、の前記初期のステップ後に実行されるステップをさらに含む、請求項5または6に記載の方法。
  8. 前記さらなる非依存タスクについて前記一貫性動作を実行した後に、前記方法は、前記さらなる非依存タスクを処理する準備ができているという指示に応答して、前記非同期のデバイスへの出力の準備ができている優先される行列内に前記さらなる非依存タスクを記憶する、請求項1乃至7のいずれか1つに記載の方法。
  9. 前記一貫性動作は、前記複数の処理デバイスおよび前記メモリの間の一貫性を確実にするために、同期動作のうちの少なくとも1つと他のデータ伝送動作とを含む、請求項1乃至8のいずれか1つに記載の方法。
  10. 前記方法は、複数のさらなる非依存タスクについて一貫性動作を実行することと、前記複数のさらなる非依存タスクのそれぞれについての前記一貫性動作の完了時に、前記非同期で動作する複数の処理デバイスが前記さらなる非依存タスクを受信するための容量を有するかどうかを判定することと、前記非同期で動作する複数の処理デバイスが容量を有することに応答して、前記さらなる非依存タスクを前記非同期で動作する複数の処理デバイスに発行することと、をさらに含む、請求項1乃至9のいずれか1つに記載の方法。
  11. 前記非依存タスクのそれぞれについて実行される一貫性動作を判定する前記ステップは、前記タスクのどれがそれに関連付けられた最少の数の一貫性動作を有するかを判定することと、前記最少の数の一貫性動作を実行することと、他のタスクについて前記他の一貫性動作を実行する前に、前記非同期で動作する複数の処理デバイスへ前記タスクを発行することと、を含む、請求項1乃至10のいずれか1つに記載の方法。
  12. 前記タスクを処理する前記非同期で動作する複数の処理デバイスは、ディープパイプラインを有する画像処理装置を備える、請求項1乃至11のいずれか1つに記載の方法。
  13. 前記一貫性動作は非同期の中央処理装置上で実行される、請求項12に記載の方法。
  14. データ処理装置によって実行される場合に、請求項1乃至13のいずれか1つに記載の方法におけるステップを実行するための前記データ処理装置に対応する命令実行環境を提供する仮想マシンを提供するプログラムを非一時的な形態で記憶する、コンピュータプログラム記録媒体。
  15. データ処理装置であって、
    データ処理のための非同期で動作する複数の処理デバイスであって、前記非同期で動作する複数の処理デバイスのうちの少なくともいくつかはローカルデータストレージを含み、前記非同期で動作する複数の処理デバイスのうちの少なくとも2つは異種デバイスである、処理デバイスと、
    前記非同期で動作する複数の処理デバイスのうちの少なくともいくつかによってアクセス可能なデータを記憶するためのメモリと、
    前記非同期で動作する複数の処理デバイスのうちの特定の1つに対象とされるタスクのうちの少なくともいくつかにおいて前記非同期で動作する複数の処理デバイスのうちの少なくとも1つによって実行されるタスクをスケジューリングするためのスケジューリング回路と、を備え、
    前記非同期で動作する複数の処理デバイスのうちの前記特定の1つは、実行を待機する少なくとも1つのタスクを記憶するためのタスク行列記憶装置を備え、
    前記スケジューリング回路は、一貫性動作を判定することと、前記一貫性動作のパフォーマンスをスケジュールすることと、完了時に前記非同期で動作する複数の処理デバイスによって実行される前記非依存タスクを発行することと、さらなるタスクについて一貫性動作を実行するように、前記非同期で動作する複数の処理デバイスのうちの1つによって実行される複数の非依存タスクのそれぞれについて構成され、前記一貫性動作は前記非同期で動作する複数の処理デバイス間の一貫性を確保するための動作であり、該一貫性動作は前記非依存タスクの実行前に実行することを必要とし、非依存タスクは、処理前に一貫性動作を実行することが必要である全てのタスクに依存しないタスクであり、前記スケジューリング回路は、前記非依存タスクのうちの1つについての前記一貫性動作の完了の後に続いて、前記非依存タスクのうちの前記1つへ依存する前記タスクを評価し、評価された前記タスクのうちのいずれかが現在は非依存であるとの判定に応じて、前記一貫性動作のパフォーマンスをスケジューリングする際に、現在では非依存である前記タスクについての一貫性動作を含めるように構成される、データ処理装置。
  16. 前記非同期で動作する複数の処理デバイスは、タスク行列として少なくとも1つの未処理のタスクを記憶するように構成されるデータ記憶装置を備え、前記スケジューリング回路は、前記さらなるタスクについての対応する一貫性動作の完了時に前記さらなるタスクを発行するように構成され、前記さらなるタスクは、前記非同期のデバイスが前記タスクを完了していない場合に、前記タスク行列内に記憶される、請求項15に記載のデータ処理装置。
  17. 前記スケジューリング回路は、前記タスク行列記憶装置が容量を有することの前記非同期で動作する複数の処理デバイスからの受信に応答して、実行の準備ができているいずれかのさらなるタスクを転送するように構成される、請求項16に記載のデータ処理装置。
  18. 前記スケジューリング回路は、前記タスク行列記憶装置がタスクを記憶するための容量をいつ有するかを示す前記非同期で動作する複数の処理デバイスから、かつ、さらなるタスクの開始のための一貫性動作をスケジューリングするために、前記タスク行列記憶装置が容量を有することおよび完了する一貫性動作を有するタスクがないことに応答して、信号を受信するように構成される、請求項16または17に記載のデータ処理装置。
  19. 前記スケジューリング回路は、互いに独立して実行できる前記タスクの部分を判定し、かつ、可能な場合に、前記複数の非依存タスクへ前記タスクを細分化するようにさらに構成される、請求項15乃至18のいずれか1項に記載のデータ処理装置。
  20. 前記データ処理装置は、前記複数の非同期のデバイスのうちの少なくとも1つによって実行されるタスクを記憶するための優先される行列を備え、前記スケジューリング回路は、前記非同期のデバイスが前記タスクを完了していない場合に、前記さらなるタスクについての対応する一貫性動作の完了時に、前記非同期のデバイスへの出力の準備ができた前記優先される行列内に前記さらなるタスクを記憶するように構成される、請求項15乃至19のいずれか1つに記載のデータ処理装置。
  21. 前記一貫性動作は、前記複数の処理デバイスおよび前記メモリの間の一貫性を確保するために、同期動作および他のデータ伝送動作のうちの少なくとも1つを備える、請求項15乃至20のいずれか1つに記載のデータ処理装置。
  22. 前記スケジューリング回路は複数のさらなる非依存タスクについて一貫性動作を実行するように構成され、前記複数のさらなる非依存タスクのそれぞれについての前記一貫性動作の完了時に、前記非同期で動作する複数の処理デバイスが前記さらなる非依存タスクを受信するための容量を有するかどうかを判定し前記非同期で動作する複数の処理デバイスが容量を有することに応答して、前記さらなる非依存タスクを前記非同期で動作する複数の処理デバイス発行する、請求項15乃至21のいずれか1つに記載のデータ処理装置。
  23. 前記スケジューリング回路は、前記複数の非依存タスクのどれが実行される最少の一貫性動作を有するかを判定するように構成され、前記スケジューリング回路は、第1の組の一貫性動作として、かつ実行される前記対応するタスクを発行するための完了時に、実行される前記最少の一貫性動作をスケジュールするように構成される、請求項15乃至22のいずれか1つに記載のデータ処理装置。
  24. 前記タスクを処理する前記非同期で動作する複数の処理デバイスは、ディープパイプラインを有する画像処理装置を備える、請求項15乃至23のいずれか1項に記載のデータ処理装置。
  25. 中央処理装置を含み、前記中央処理装置は、前記スケジューリング回路からのリクエストに応答して前記一貫性動作を実行するように構成される、請求項15乃至24のいずれか1項に記載のデータ処理装置。
  26. データ処理装置によって実行される場合に、請求項15乃至25のいずれか1つに記載のデータ処理装置に対応する命令実行環境を提供する仮想マシンを提供するプログラムを非一時的な形態で記憶する、コンピュータプログラム記録媒体。
JP2012066901A 2011-03-24 2012-03-23 非同期のデバイスによって実行されるタスクのスケジューリングの向上 Active JP6368452B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1104958.2 2011-03-24
GB201104958A GB2489278B (en) 2011-03-24 2011-03-24 Improving the scheduling of tasks to be performed by a non-coherent device

Publications (2)

Publication Number Publication Date
JP2012203911A JP2012203911A (ja) 2012-10-22
JP6368452B2 true JP6368452B2 (ja) 2018-08-01

Family

ID=44067309

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012066901A Active JP6368452B2 (ja) 2011-03-24 2012-03-23 非同期のデバイスによって実行されるタスクのスケジューリングの向上

Country Status (4)

Country Link
US (1) US9015719B2 (ja)
JP (1) JP6368452B2 (ja)
CN (1) CN102736949B (ja)
GB (1) GB2489278B (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150033234A1 (en) * 2013-07-23 2015-01-29 Qualcomm Incorporated Providing queue barriers when unsupported by an i/o protocol or target device
US20170286301A1 (en) * 2016-04-01 2017-10-05 Intel Corporation Method, system, and apparatus for a coherency task list to minimize cache snooping between cpu and fpga
JP2022011746A (ja) * 2020-06-30 2022-01-17 富士通株式会社 情報処理プログラム、情報処理装置及び情報処理方法

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5845327A (en) * 1995-05-03 1998-12-01 Apple Computer, Inc. Cache coherency where multiple processors may access the same data over independent access paths
US7234144B2 (en) * 2002-01-04 2007-06-19 Microsoft Corporation Methods and system for managing computational resources of a coprocessor in a computing system
US7719540B2 (en) * 2004-03-31 2010-05-18 Intel Corporation Render-cache controller for multithreading, multi-core graphics processor
US7724263B2 (en) * 2004-05-14 2010-05-25 Nvidia Corporation System and method for a universal data write unit in a 3-D graphics pipeline including generic cache memories
US7091982B2 (en) * 2004-05-14 2006-08-15 Nvidia Corporation Low power programmable processor
US7454573B2 (en) * 2005-01-13 2008-11-18 International Business Machines Corporation Cost-conscious pre-emptive cache line displacement and relocation mechanisms
US7516309B2 (en) * 2005-06-03 2009-04-07 International Business Machines Corporation Method and apparatus for conditional memory ordering
US7694107B2 (en) * 2005-08-18 2010-04-06 Hewlett-Packard Development Company, L.P. Dynamic performance ratio proportionate distribution of threads with evenly divided workload by homogeneous algorithm to heterogeneous computing units
US7814279B2 (en) * 2006-03-23 2010-10-12 International Business Machines Corporation Low-cost cache coherency for accelerators
GB2443277B (en) * 2006-10-24 2011-05-18 Advanced Risc Mach Ltd Performing diagnostics operations upon an asymmetric multiprocessor apparatus
US8310491B2 (en) * 2007-06-07 2012-11-13 Apple Inc. Asynchronous notifications for concurrent graphics operations
US8122229B2 (en) * 2007-09-12 2012-02-21 Convey Computer Dispatch mechanism for dispatching instructions from a host processor to a co-processor
CN101246439B (zh) * 2008-03-18 2010-06-16 中兴通讯股份有限公司 一种基于任务调度的自动化测试方法及系统
US20100110069A1 (en) * 2008-10-31 2010-05-06 Sharp Laboratories Of America, Inc. System for rendering virtual see-through scenes
US8310492B2 (en) * 2009-09-03 2012-11-13 Ati Technologies Ulc Hardware-based scheduling of GPU work
US9128849B2 (en) * 2010-04-13 2015-09-08 Apple Inc. Coherent memory scheme for heterogeneous processors
JP5639274B2 (ja) * 2010-09-24 2014-12-10 インテル コーポレイション 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有

Also Published As

Publication number Publication date
GB2489278A (en) 2012-09-26
GB201104958D0 (en) 2011-05-11
CN102736949B (zh) 2017-08-11
GB2489278B (en) 2019-12-25
JP2012203911A (ja) 2012-10-22
US9015719B2 (en) 2015-04-21
US20120246656A1 (en) 2012-09-27
CN102736949A (zh) 2012-10-17

Similar Documents

Publication Publication Date Title
JP7313381B2 (ja) ハードウェアアクセラレーションのためのハードウェアリソースの埋込みスケジューリング
KR101332840B1 (ko) 병렬 컴퓨팅 프레임워크 기반의 클러스터 시스템, 호스트 노드, 계산 노드 및 어플리케이션 실행 방법
US10026145B2 (en) Resource sharing on shader processor of GPU
KR101640848B1 (ko) 멀티코어 시스템 상에서 단위 작업을 할당하는 방법 및 그 장치
JP2009265963A (ja) 情報処理システム及びタスクの実行制御方法
JP2006195823A (ja) Dma装置
US7590990B2 (en) Computer system
JP2010108153A (ja) スケジューラ、プロセッサシステム、プログラム生成方法およびプログラム生成用プログラム
CN109983440A (zh) 数据处理
CN104094235A (zh) 多线程计算
EP2565786A1 (en) Information processing device and task switching method
JP5660149B2 (ja) 情報処理装置、ジョブスケジューリング方法およびジョブスケジューリングプログラム
US9417924B2 (en) Scheduling in job execution
KR20130080663A (ko) 멀티-쓰레딩을 사용하는 그래픽 처리를 위한 방법 및 장치
JP6368452B2 (ja) 非同期のデバイスによって実行されるタスクのスケジューリングの向上
TWI457828B (zh) 執行緒陣列粒化執行的優先權計算
JP6515771B2 (ja) 並列処理装置及び並列処理方法
KR101332839B1 (ko) 병렬 컴퓨팅 프레임워크 기반 클러스터 시스템의 호스트 노드 및 메모리 관리 방법
JP7122299B2 (ja) 処理タスクを実行するための方法、装置、デバイス、および記憶媒体
KR20230124598A (ko) 높은 처리량 및 낮은 오버헤드 커널 개시를 위한 압축 커맨드 패킷
JP2007249635A (ja) データ転送装置及びデータ転送方法
JP5540799B2 (ja) データ入出力制御方法,データ入出力制御プログラムおよびデータ入出力制御装置
JP2007193744A (ja) 情報処理装置、プログラム、およびスケジューリング方法
US20090276777A1 (en) Multiple Programs for Efficient State Transitions on Multi-Threaded Processors
US20230145253A1 (en) Reducing latency in highly scalable hpc applications via accelerator-resident runtime management

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150304

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160224

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160322

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160622

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160819

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20170111

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170511

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20170605

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20170616

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20171121

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180501

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180709

R150 Certificate of patent or registration of utility model

Ref document number: 6368452

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