JP6040937B2 - 並列処理装置、並列処理方法、最適化装置、最適化方法、および、コンピュータ・プログラム - Google Patents
並列処理装置、並列処理方法、最適化装置、最適化方法、および、コンピュータ・プログラム Download PDFInfo
- Publication number
- JP6040937B2 JP6040937B2 JP2013515244A JP2013515244A JP6040937B2 JP 6040937 B2 JP6040937 B2 JP 6040937B2 JP 2013515244 A JP2013515244 A JP 2013515244A JP 2013515244 A JP2013515244 A JP 2013515244A JP 6040937 B2 JP6040937 B2 JP 6040937B2
- Authority
- JP
- Japan
- Prior art keywords
- thread
- task
- array
- threads
- tasks
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5017—Task decomposition
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Image Processing (AREA)
Description
例えば、1次元配列データの処理を並列に行う場合は、CTA IDおよびスレッドIDは、それぞれを1次元で定義される。この場合、図24(b)に示すように、各スレッドが処理するデータの位置data_idxは、CTA ID(cta_id)、CTA内のスレッド数(cta_size)、および、スレッドID(thread_id)から算出可能である。
また、例えば、2次元配列データの処理を並列に行う場合は、CTA IDおよびスレッドIDは、それぞれ2次元で定義される。この場合、図25(b)に示すように、各スレッドが処理するデータの位置data_idxのx座標、y座標は、それぞれCTA ID、CTA内スレッド数、および、スレッドIDそれぞれのx値、y値により算出可能である。
また、この仮想アーキテクチャにおいて、各スレッドは、他のスレッドとメモリを介してデータを共有することも可能である。論理的なスレッドと物理的なプロセッサコアは1対1対応でなくともよく、プロセッサコア数以上のスレッドが存在しても良い。この仮想アーキテクチャでは、プロセッサコア数以上の多数のスレッドやCTAが生成されると、全スレッドおよび全CTAのうち一部が同時に実行される。また、CTA内のスレッド同士は協調して動作するが、個々のCTAの動作は互いに独立である。
また、特許文献2には、マルチスレッドの処理において、メモリアクセスレイテンシを隠蔽する技術が記載されている。この技術は、レイテンシ(遅延時間)の短い算術演算命令と、レイテンシの長いメモリアクセス命令とが混在している複数のスレッドの処理において、あるスレッドのメモリアクセス命令の後、そのスレッドの処理から、他のスレッドの処理にスワップする。つまり、この技術は、あるスレッドにおけるメモリアクセスを待っている間に他のスレッドの演算を行うことにより、メモリアクセスレイテンシを隠蔽する。この技術を採用した装置の動作の一例を図26に示す。図26の例では、スレッドnは、算術演算i〜i+2を順次実行する。次に、この装置は、スレッドnがメモリアクセス(メモリロードj)を行うと、メモリがロードされるのを待つ間に、スレッドnから他のスレッドmにスワップする。そして、スレッドmは、算術演算s〜s+1を順次実行する。そして、この装置は、スレッドmがメモリアクセス(メモリロードt)を行うと、スレッドmから、メモリロードjを終了したスレッドnにスワップする。なお、ここで、nおよびmはスレッドの識別子である。また、i、s、j、tは、それぞれ正の整数であり、各スレッド内における算術演算およびメモリロード命令の処理順序を表している。特許文献2に記載の技術は、同一プロセッサ上で多くのスレッドが同時に実行可能な処理において、特に有効である。一方、特許文献2に記載の技術は、同時に実行可能なスレッドが少ない処理では、あるスレッドのメモリアクセスを待つ間に演算可能な他のスレッドがないケースが多くなり、メモリアクセスレイテンシを隠蔽できないことがある。
また、特許文献1に述べられている仮想アーキテクチャの実装の一つとして、CUDA(Compute Unified Device Architecture)が、非特許文献3に記載されている。このCUDAでは、同時に実行出来るCTA数に上限がある。この制限は、CTA内のスレッド数とは関連がないため、CTA内のスレッド数が少なければ、CTA数の上限により全スレッド総数が少なくなる。そして、プロセッサコアあたりのスレッド数も少なくなる。したがって、CUDAを採用した装置は、CTA内のスレッド数が少ない処理では、メモリアクセスレイテンシを隠蔽できない。
また、特許文献1には、高品位テレビ画像生成を例として、複数のCTAを使用して処理を行う装置が記載されている。この場合、処理対象となる画像が2次元であるため、スレッドおよびCTAは、図25(a)に示したように、2次元で定義される。そして、各スレッドは、1つの画素を処理する。ここで、高品位テレビ画像の画素数は、単一CTA内で処理可能なスレッド数を超過する。このため、この装置は、画像を適当な領域で分割する。そして、図25(a)に示すように、各CTAは、分割された各領域の処理を行う。各スレッドは、図25(b)に示すように、CTA IDおよびスレッドIDを用いて、入力データを読み出す場所および出力データを書き込む場所(data_idx)を決定する。以下、高品位テレビ画像生成のようなアプリケーション全体の処理を、各CTA向けに分割した各処理をタスクと呼ぶ。
このような特許文献1に記載された技術を採用した並列処理装置の構成を図27に示す。この並列処理装置は、CPU(Central Processing Unit)と、メニコアのアクセラレータであるGPU(Graphics Processing Unit)とを含む。また、この並列処理装置は、機能ブロックとして、CTA内スレッド数設定部911と、CTA数設定部912と、タスク分割部913と、CTA制御部924と、処理タスク決定部925と、タスク実行部926とを備える。ここで、CTA内スレッド数設定部911と、CTA数設定部912と、タスク分割部913は、CPUによって実行される。また、CTA制御部924と、処理タスク決定部925と、タスク実行部926とは、GPUによって実行される。CTA内スレッド数設定部911は、CTA内スレッド数を設定する。このCTA内スレッド数は、例えば、CTA内で処理可能なスレッド数を考慮してユーザによって入力された値が設定される。CTA数設定部912は、CTA内スレッド数を用いてCTA数を設定する。高品位テレビ画像生成の場合、スレッド総数は画素数であり固定である。したがって、CTA内スレッド数が決定されれば、CTA数が決定される。タスク分割部913は、図28に示すように、CTA内スレッド数に合わせて、全体の処理をタスクに分割する。CTA制御部924は、入力されたCTA内スレッド数および算出されたCTA数を元に、スレッドおよびCTAを生成する。また、CTA制御部924は、各スレッドおよび各CTAにIDを付け、これらの実行を制御する。処理タスク決定部925およびタスク実行部926は、各CTAで個別に動作する。処理タスク決定部925は、CTA内スレッド数およびCTA IDに基づいて、該当するCTAが処理するタスクを決定する。タスク実行部926は、処理タスク決定部925によって決定されたタスクを実行する。
次に、このような特許文献1に記載された技術を採用した並列処理装置の動作を図29に示す。まず、図29(a)に示すように、CTA内スレッド数設定部911は、例えば、CTA内で処理可能なスレッド数を考慮してユーザによって入力された値を、CTA内スレッド数として設定する(ステップS801)。次に、タスク分割部913は、CTA内スレッド数に合わせて、全体の処理をタスクに分割する(ステップS802)。このとき、タスク分割部913は、タスク番号を図28に示したように1次元の値で定義する。図28におけるkは、x方向のタスク数である。CTA内のスレッドは2次元で定義されている。次に、CTA数設定部912は、CTA内スレッド数を用いてCTA数を1次元で設定する(ステップS803)。なお、ステップS802およびステップS803の実行順序は逆でも良い。次に、CTA制御部924は、設定された数のCTAおよびスレッドを生成する。そして、CTA制御部924は、各CTAおよび各スレッドにIDを付与する(ステップS804)。次に、CTA制御部924は、各CTAおよび各スレッドの実行を制御する(ステップS805)。このようなCTA制御部924による制御の基に、各CTAにおいて実行される処理を図29(b)に示す。ここでは、まず、処理タスク決定部925は、CTAのID nを取得する(ステップS806)。そして、処理タスク決定部925は、CTA内の各スレッドがn番目のタスクを処理する際の対象データの位置を計算する。次に、タスク実行部926は、各スレッドにおいてn番目のタスクを実行する(ステップS807)。なお、ステップS801〜S803は、CPUによって実行される。また、ステップS804〜S805は、GPUによって実行される。また、ステップS806〜S807は、GPUによって各CTAで実行される。
このような並列処理装置は、高品位テレビ画像生成処理のように各要素における演算が同一で処理フローが等しい処理を行う場合であれば、全体の処理をどのようなサイズのタスクに分割してもよい。したがって、このような並列処理装置は、CTA内のスレッド数およびCTA数をどのように設定することも可能である。そのため、このような並列処理装置は、同時実行CTA数に制限がある場合でも、CTAあたりのスレッド数を増やすことにより同時実行スレッド数を増加させ、その結果、メモリアクセスレイテンシを隠蔽することが可能である。例えば、このような並列処理装置は、CTA数を多くしたいときにはCTAあたりのスレッド数を減らし、CTAあたりのスレッド数を多くしたいときにはCTA数を減らせば良い。例えば、図28に示すケースよりCTA数を多くすることを考える。この場合、このような並列処理装置は、図30に示すように、タスクあたりの領域を狭くすることにより、CTAあたりのスレッド数を減らす。ここでは、タスクあたりの領域が16画素から4画素に減少することにより、CTAあたりのスレッド数が16から4に減少している。これにより、このような並列処理装置は、CTA数を多くする調整を行うことができる。
また、最適な同時実行CTA数は実行環境によって変化する。このため、実行環境に応じてCTA数およびCTAあたりのスレッド数を自動的にチューニングする手法が非特許文献1に記載されている。この非特許文献1に記載された技術は、CTA内スレッド数を様々に変化させてそれぞれの処理時間を計測し、最も高速に実行できたCTA内スレッド数を最終的な最適値として用いる。
非特許文献1に記載の技術の構成を図31に示す。非特許文献1に記載の技術は、図27に示した並列処理装置と同様の機能ブロックを備えるアプリケーション実行部900と、パラメータ変更部931と、実行時間取得部932と、最適パラメータ選択部933とを含む。パラメータ変更部931は、数種類のCTA内スレッド数をCTA内スレッド数設定部911に出力する。実行時間取得部932は、アプリケーションの実行にかかった時間を測定する。最適パラメータ選択部933は、最も処理時間の短かったCTA内スレッド数を最適値として決定する。
非特許文献1に記載の技術の動作を図32に示す。パラメータ変更部931は、全てのパラメータ、つまりCTA内スレッド数の試行が終了していなければ(ステップS1101でNo)、新たなCTA内スレッド数を設定する(ステップS1102)。次に、アプリケーション実行部900は、設定されたパラメータのCTA内スレッド数を用いてアプリケーションを実行する(ステップS1103)。次に、実行時間取得部932は、アプリケーション実行にかかった時間を測定する(ステップS1104)。次に、最適パラメータ選択部933は、実行時間取得部932によって測定された時間が、それまでのパラメータでの試行時間に比べて短ければ(ステップS1105でYes)、最適パラメータを更新する(ステップS1106)。この装置は、ステップS1101からステップS1106までの処理を、全てのパラメータの試行が終了するまで繰り返す。
ところで、メニコアアクセラレータにおいて、各プロセッサコアの稼働率が低くなる原因のひとつとして、アプリケーションの処理に必要な総スレッド数が少ないことが挙げられる。例えば、上述の高品位テレビ画像生成処理の例では、処理対象となる画素数が少ない場合がある。このような場合、上述の並列処理装置は、どのようにCTA内のスレッド数を変更しても、充分なスレッド数がないためプロセッサコアの稼働率の低下を抑制することができない。そこで、非特許文献2には、図33に示すように、必要な総スレッド数の少ない複数のアプリケーションをまとめて並列に実行することにより、プロセッサコアの稼働率を向上させる技術が記載されている。図33では、この技術は、実行環境に合わせて適当なサイズにタスクを分割する。ここで、タスク数が3のアプリケーションAと、タスク数が8のアプリケーションBとは、それぞれ並列に実行可能なタスク数がメニコアアクセラレータの処理能力よりも少ないと想定する。この場合、上述の並列処理装置は、アプリケーションAおよびBを、それぞれ個別にメニコアアクセラレータを用いて実行しても、並列性が低いためプロセッサコアの稼働率を低下させることになる。そこで、非特許文献2に記載の技術は、アプリケーションAとアプリケーションBとを並列に実行することで、個別に実行した場合よりも多くのタスクを同時に処理する。これにより、この技術は、プロセッサコアの稼働率を向上させることができる。
非特許文献2に記載の技術の構成を、図34に示す。図34において、非特許文献2に記載の技術は、図27に示した特許文献1に記載の技術と同一の機能ブロック構成に加えて、アプリケーション合成部941と、処理アプリケーション選択部942とをさらに備えている。アプリケーション合成部941は、CPUによって実行される。また、処理アプリケーション選択部942は、各CTAにおいて、GPUによって実行される。
非特許文献2に記載の技術の動作を図35に示す。まず、図35(a)に示すように、CTA内スレッド数設定部911は、ユーザ入力等によりCTA内のスレッド数を設定する(ステップS801)。次に、タスク分割部913は、CTA内スレッド数に応じて、各アプリケーションの処理をCTAサイズのタスクに分割する(ステップS802)。次に、アプリケーション合成部941は、複数のアプリケーションを合成して並列に実行出来る状態にする(ステップS903)。次に、CTA数設定部912は、各アプリケーションに必要なCTA数の合計を、全体のCTA数として設定する(ステップS904)。次に、CTA制御部924は、入力されたCTA内スレッド数およびCTA数を元に、スレッドおよびCTAを生成する。そして、CTA制御部924は、各スレッドおよびCTAにIDを付ける(ステップS804)。そして、CTA制御部924は、各CTAの実行を制御する(ステップS805)。このようなCTA制御部924の制御の元に、各CTAで実行される処理を図35(b)に示す。ここでは、まず、処理アプリケーション選択部942は、CTA IDに基づいて(ステップS806)、各CTAが処理するアプリケーションを選択する(ステップS907)。次に、処理タスク決定部925は、CTA ID等に基づいて、選択したアプリケーション内のどのタスクを処理するかを決定する。そして、タスク実行部926は、各スレッドにおいて、処理タスク決定部925によって決定されたタスクを実行する(ステップS908)。
Guo,Ping;Wang,Liqiang;,″Auto−Tuning CUDA Parameters for Sparse Matrix−Vector Multiplication on GPUs″,Computational and Information Sciences(ICCIS),2010 International Conference on,pp.1154−1157,Dec.2010. M.Guevara,C.Gregg,K.Hazelwood,and K.Skadron,"Enabling Task Parallelism in the CUDA Scheduler",Workshop on Programming Models for Emerging Architectures,Sep.2009. "NVIDIA CUDA C Programming Guide",2010.
一例として、動画像エンコーディングの並列処理について述べる。動画像エンコーディングでは、上述の高品位テレビ画像生成処理のように画像内のすべての画素の処理が同じではない。動画像エンコーディングでは、マクロブロックと呼ばれる画像領域毎に処理フローが異なることがある。例えば、マクロブロックごとに、画面内予測を元に圧縮を行うか、画面間予測を元に圧縮を行うかといった処理が異なる場合がある。また、動画像エンコーディングでは、マクロブロック内部の画素毎の並列処理も可能である。このように、動画像エンコーディングは、図36のように、マクロブロック毎の並列化と、マクロブロック内部の画素毎の並列化との2階層での並列化が可能な処理である。ここで、上述の特許文献1に記載された並列処理装置では、CTA間の処理は独立であるため、各CTAは、異なるフローの処理を並列に実行可能である。このため、特許文献1に記載された並列処理装置を用いて動画像エンコーディングを行う場合、異なる処理を行うマクロブロック単位の並列処理をCTAの処理にマッピングし、同一処理を行う画素単位の並列処理をスレッドの処理にマッピングするのが自然である。この場合、CTA数はマクロブロック数となり、CTA内のスレッド数はマクロブロック内の画素数となる。また、1マクロブロックの処理が1タスクとなる。
例えば、特許文献1に記載の並列処理装置が、このような動画像エンコーディングを行う動作例を図37に示す。ここでは、まず、タスク分割部913は、全体の処理を、マクロブロックの処理であるタスクに分割する(ステップS811)。次に、CTA内スレッド数設定部911は、CTA内スレッド数を設定する(ステップS812)。このとき、CTA内スレッド数設定部911は、前述の高品位テレビ画像生成処理の場合のように、任意のCTA内のスレッド数を設定することができない。動画像エンコーディング処理の場合、CTA内スレッド数設定部911は、分割されたタスク内の並列性に基づいて、CTA内スレッド数を設定することになる。以降、ステップS803〜S807までの動作は、図29に示した高品位テレビ画像生成処理を行う場合のこの並列処理装置の動作と同様である。
ここで、前述のように、動画像エンコーディング処理では、1つのタスクに必要なスレッド数が固定されている。したがって、特許文献1に記載の並列処理装置で動画像エンコーディングを行う場合において、CTAとマクロブロックとのマッピング、および、スレッドと画素とのマッピングを変更して、CTA内のスレッド数を自由にユーザが変更することは難しい。そのため、非特許文献3に記載されているように同時に実行出来るCTA数に上限がある場合に、特許文献1に記載の並列処理装置は、CTAあたりのスレッド数を増やしてスレッド総数を充分にすることができない。つまり、このような場合、特許文献1に記載の並列処理装置は、特許文献2に記載の技術を採用してメモリアクセスレイテンシを隠蔽することができない。
また、非特許文献1および非特許文献2に記載の技術は、いずれもプロセッサコア稼働率向上技術である。しかしながら、これらの技術は、動画像エンコーディングのようなタスク内の並列性が充分になくタスク数が多い処理には対応できない。
ここで、非特許文献1および非特許文献2に記載された技術の適用によりプロセッサコアの稼働率向上が可能なアプリケーションを、図38に示す。1つのタスクあたりに必要なスレッド数が少なくタスク数も少ないようなアプリケーションは、そもそもメニコアアクセラレータでの処理には不向きである。タスクあたりのスレッド数を充分多く設定できるが、タスク数が少ないようなアプリケーションは、非特許文献2に記載の技術を適用可能である。また、タスクあたりのスレッド数を充分多く設定でき、タスク数も充分多いようなアプリケーションは、非特許文献1に記載の技術を適用可能である。図38からわかるように、タスクあたりのスレッド数を多く設定できないが、タスク数が多いアプリケーションを特許文献1に記載の並列処理装置で実行する場合、非特許文献1および非特許文献2に記載の技術を適用して、プロセッサコアの稼働率を十分に向上させることができない。
本発明は、上述の課題を解決するためになされたもので、タスク内の並列性は低いが並列処理可能なタスクが多数存在する処理において、複数のプロセッサコアを有する演算装置における各コアの稼働率を向上させる並列処理装置を提供することを目的とする。
また、本発明の最適化装置は、並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する処理が記述されたコンピュータ・プログラムを最適化する最適化装置であって、処理対象とするアプリケーションが並列処理可能に分割された各タスクの処理を実行させるためのスレッドアレイ、および、各タスクの処理がさらに並列処理可能に分割されたスレッドを生成するステップと、前記各タスクの処理に必要なリソースを前記スレッドアレイにおいて確保して割り当てるステップと、前記各スレッドが処理するタスクを決定するステップと、割り当てられたリソースを用いて、決定されたタスクを各スレッドに実行させるステップと、を含むコンピュータ・プログラムを表す情報を取得するプログラム取得部と、前記タスクに関連するタスク情報および前記演算装置の構成に関連する演算装置構成情報の少なくとも1つに基づいて、各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する同時実行タスク数設定部と、前記各タスクに必要となるスレッド数および前記同時実行タスク数に基づいて、前記アレイ内スレッド数を設定するアレイ内スレッド数設定部と、前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定するアレイ総数設定部と、前記コンピュータ・プログラムの、前記スレッドおよび前記スレッドアレイを生成するステップを、前記アレイ内スレッド数および前記アレイ総数に基づいて生成を行うよう変更し、前記スレッドアレイにおいてリソースを確保して割り当てるステップを、前記同時実行タスク数分のタスクの実行に必要なリソースを確保して割り当てるよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記スレッドアレイ内で実行させる同時実行タスク数のタスクのいずれかに決定するよう変更し、前記スレッドに前記タスクを実行させるステップを、該タスクに割り当てられたリソースを使用するよう変更するプログラム変更部と、を備える。
また、本発明の並列処理方法は、並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する並列処理方法であって、処理対象となるアプリケーションの処理が並列処理可能に分割された各タスクを表す情報を取得し、前記各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定し、前記各タスクにおいてさらに並列処理可能なスレッド数および前記同時実行タスク数に基づいて、前記各スレッドアレイ内のスレッド数であるアレイ内スレッド数を設定し、前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定し、前記アレイ内スレッド数および前記アレイ総数に基づいて各スレッドおよび各スレッドアレイを生成し、各スレッドアレイの処理を前記演算装置に並列に実行させるよう制御し、前記各スレッドアレイにおいて、前記同時実行タスク数のタスクの処理に必要なリソースを確保し、確保したリソースを各タスクに配分し、前記スレッドアレイ内の各スレッドが処理するタスクを決定し、前記リソース割当部によって配分されたリソースを用いて、前記処理タスク決定部によって決定されたタスクを各スレッドに実行させることにより、前記各スレッドアレイにおいて前記同時実行タスク数のタスクを実行する。
また、本発明のコンピュータ・プログラムは、並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する並列処理装置に、処理対象となるアプリケーションの処理が並列処理可能に分割された各タスクを表す情報を取得する分割タスク取得ステップと、前記各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する同時実行タスク数設定ステップと、前記各タスクにおいてさらに並列処理可能なスレッド数および前記同時実行タスク数に基づいて、前記各スレッドアレイ内のスレッド数であるアレイ内スレッド数を設定するアレイ内スレッド数設定ステップと、前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定するアレイ総数設定ステップと、前記アレイ内スレッド数および前記アレイ総数に基づいて各スレッドおよび各スレッドアレイを生成し、各スレッドアレイの処理を前記演算装置に並列に実行させるよう制御するスレッドアレイ制御ステップと、前記各スレッドアレイにおいて、前記同時実行タスク数のタスクの処理に必要なリソースを確保し、確保したリソースを各タスクに配分するリソース割当ステップと、前記スレッドアレイ内の各スレッドが処理するタスクを決定する処理タスク決定ステップと、前記リソース割当部によって配分されたリソースを用いて、前記処理タスク決定部によって決定されたタスクを各スレッドに実行させることにより、前記各スレッドアレイにおいて前記同時実行タスク数のタスクを実行するタスク実行ステップと、を実行させる。
また、本発明の最適化方法は、並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する処理が記述されたコンピュータ・プログラムを最適化する最適化方法であって、処理対象とするアプリケーションが並列処理可能に分割された各タスクの処理を実行させるためのスレッドアレイ、および、各タスクの処理がさらに並列処理可能に分割されたスレッドを生成するステップと、前記各タスクの処理に必要なリソースを前記スレッドアレイにおいて確保して割り当てるステップと、前記各スレッドが処理するタスクを決定するステップと、割り当てられたリソースを用いて、決定されたタスクを各スレッドに実行させるステップと、を含むコンピュータ・プログラムを表す情報を取得し、前記タスクに関連するタスク情報および前記演算装置の構成に関連する演算装置構成情報の少なくとも1つに基づいて、各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定し、前記各タスクに必要となるスレッド数および前記同時実行タスク数に基づいて、前記アレイ内スレッド数を設定し、前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定し、前記コンピュータ・プログラムの、前記スレッドおよび前記スレッドアレイを生成するステップを、前記アレイ内スレッド数および前記アレイ総数に基づいて生成を行うよう変更し、前記スレッドアレイにおいてリソースを確保して割り当てるステップを、前記同時実行タスク数分のタスクの実行に必要なリソースを確保して割り当てるよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記スレッドアレイ内で実行させる同時実行タスク数のタスクのいずれかに決定するよう変更し、前記スレッドに前記タスクを実行させるステップを、該タスクに割り当てられたリソースを使用するよう変更する。
また、本発明のコンピュータ・プログラムは、並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する処理が記述されたコンピュータ・プログラムを最適化するためのコンピュータ・プログラムであって、処理対象とするアプリケーションが並列処理可能に分割された各タスクの処理を実行させるためのスレッドアレイ、および、各タスクの処理がさらに並列処理可能に分割されたスレッドを生成するステップと、前記各タスクの処理に必要なリソースを前記スレッドアレイにおいて確保して割り当てるステップと、前記各スレッドが処理するタスクを決定するステップと、割り当てられたリソースを用いて、決定されたタスクを各スレッドに実行させるステップと、を含むコンピュータ・プログラムを表す情報を取得するプログラム取得ステップと、前記タスクに関連するタスク情報および前記演算装置の構成に関連する演算装置構成情報の少なくとも1つに基づいて、各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する同時実行タスク数設定ステップと、前記各タスクに必要となるスレッド数および前記同時実行タスク数に基づいて、前記アレイ内スレッド数を設定するアレイ内スレッド数設定ステップと、前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定するアレイ総数設定ステップと、前記コンピュータ・プログラムの、前記スレッドおよび前記スレッドアレイを生成するステップを、前記アレイ内スレッド数および前記アレイ総数に基づいて生成を行うよう変更し、前記スレッドアレイにおいてリソースを確保して割り当てるステップを、前記同時実行タスク数分のタスクの実行に必要なリソースを確保して割り当てるよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記スレッドアレイ内で実行させる同時実行タスク数のタスクのいずれかに決定するよう変更し、前記スレッドに前記タスクを実行させるステップを、該タスクに割り当てられたリソースを使用するよう変更するプログラム変更ステップと、をコンピュータ装置に実行させる。
(第1の実施の形態)
本発明の第1の実施の形態としての並列処理装置1のハードウェア構成を図1に示す。
図1において、並列処理装置1は、CPU(Central Processing Unit)1001と、RAM(Random Access Memory)1002と、ROM(Read Only Memory)1003と、GPU(Graphics Processing Unit)1004と、ハードディスク等の記憶装置1005と、入力装置1006とを含むコンピュータ装置によって構成されている。
CPU1001は、ROM1003または記憶装置1005に記憶されたコンピュータ・プログラムモジュールを読み込んでRAM1002を作業領域として実行する。
GPU1004は、複数のプロセッサコアを有する演算装置である。以下、GPU1004をメニコアアクセラレータとも記載する。GPU1004には、例えば、非特許文献3に記載のCUDAが対象とするデバイスを適用可能である。この場合、GPU1004は、複数のStreaming Processorおよび共有メモリを含むStreaming Multiprocessorを1つ以上と、スレッドスケジューラと、グローバルメモリとを少なくとも搭載している。GPU1004では、CPU1001からの呼び出しに従って、スレッドスケジューラが各処理を各Streaming Multiprocessorに並列処理させる。
記憶装置1005は、並列処理対象となるアプリケーションを表すコンピュータ・プログラムを記憶している。また、記憶装置1005は、そのアプリケーションを並列処理するためにCPU1001およびGPU1004に実行させるコンピュータ・プログラムを記憶している。さらに、記憶装置1005は、そのアプリケーションが処理するデータ、および、コンピュータ装置を並列処理装置1として機能させるために必要な各種データを記憶している。
入力装置1006は、コンピュータ装置を並列処理装置1として機能させるために必要な各種データを外部から取得する。
並列処理装置1は、GPU1004を用いることにより、並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、さらに並列処理することが可能となっている。なお、スレッドアレイの1タイプとして、背景技術で述べたCTAがあるが、以下に述べる本発明の各実施の形態は、CTAに限らず、他のタイプのスレッドアレイを並列処理する並列処理装置にも適用可能である。
次に、並列処理装置1の機能ブロック構成を図2に示す。図2において、並列処理装置1は、分割タスク取得部101と、同時実行タスク数設定部102と、アレイ内スレッド数設定部103と、アレイ総数設定部104と、スレッドアレイ制御部105と、リソース割当部106と、処理タスク決定部107と、タスク実行部108とを備えている。ここで、分割タスク取得部101と、同時実行タスク数設定部102と、アレイ内スレッド数設定部103と、アレイ総数設定部104とは、ROM1003または記憶装置1005に記憶されたコンピュータ・プログラムモジュールおよび各種情報を読み込んでRAM1002を作業領域として実行するCPU1001によって構成される。また、スレッドアレイ制御部105と、リソース割当部106と、処理タスク決定部107と、タスク実行部108とは、CPU1001の制御の基に、ROM1003または記憶装置1005に記憶されたコンピュータ・プログラムモジュールおよび各種情報を読み込んで並列処理を実行するGPU1004によって構成される。例えば、GPU1004に非特許文献3に記載のCUDAが対象とするデバイスが適用されている場合、スレッドアレイ制御部105は、スレッドスケジューラによって構成され、リソース割当部106と、処理タスク決定部107と、タスク実行部108とは、各Streaming Processorによって構成される。なお、並列処理装置1の各機能ブロックを構成するハードウェア構成は、上述の構成に限定されない。
分割タスク取得部101は、処理対象となるアプリケーションの処理が並列処理可能に分割された各タスクを表す情報を取得する。ここで、各タスクは、互いに依存関係がなく並列に処理可能な処理に分割されているものとする。また、各タスクには、各タスクを一意に識別可能な識別情報(タスク番号)が付与されているものとする。また、このような各タスクを表す情報は、記憶装置1005に記憶されているものとする。例えば、処理対象のアプリケーションが動画像エンコーディング処理であれば、分割タスク取得部101は、マクロブロック毎の処理に分割された各タスクの処理内容を表す情報を取得してもよい。また、例えば、処理対象のアプリケーションが画像処理の場合、分割タスク取得部101は、画像の右半分の領域を処理するタスクA、および、左半分の領域を処理するタスクBの各処理内容を表す情報を取得してもよい。
同時実行タスク数設定部102は、各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する。例えば、同時実行タスク数設定部102は、入力装置1006を介して同時実行タスク数を取得してもよい。あるいは、同時実行タスク数設定部102は、記憶装置1005にあらかじめ記憶された同時実行タスク数を取得してもよい。
ここで、同時実行タスク数は、各タスクに必要なスレッド数を考慮して、タスクのメモリアクセスレイテンシ隠蔽に充分な数のスレッドを同時に実行出来るように設定されることが好ましい。
例えば、非特許文献3に記載のCUDAが対象とするデバイスでは、メモリアクセスレイテンシ隠蔽のためには、1つのStreaming Multiprocessor上で同時に実行されるスレッド数が700程度以上あるのが望ましいとされる。また、このデバイスでは、1つのStreaming Multiprocessorにおいて8つのスレッドアレイまで同時に実行可能となっている。例えば、1タスクの処理に最適なスレッド数が32である場合、同時実行タスク数を3にすると、Streaming Multiprocessorあたりのスレッド数は768となり、メモリアクセスレイテンシ隠蔽に充分な数のスレッドを用いた並列処理が可能となる。したがって、この場合、同時実行タスク数として3が好ましい。
また、同時実行タスク数としては、タスクが使用するメモリ量、および、並列処理に用いるメニコアアクセラレータのメモリ量やプロセッサ数に基づいて、同時実行可能なタスク数の上限値が設定されてもよい。例えば、上述のCUDAが対象とするデバイスでは、1つのStreaming Multiprocessor上に16Kバイトのメモリがあり、8つのスレッドアレイの同時実行の場合、1スレッドアレイあたり2Kバイトのメモリが使用可能となっている。もし、1つのタスクが1Kバイトのメモリを使用する場合、1つのスレッドアレイ内で2つのタスクまでが同時実行可能となる。したがって、この場合、同時実行タスク数として2が好ましい。
このように、好ましい値の同時実行タスク数は、各タスクを表すタスク情報、および、並列処理の実行に用いるメニコアアクセラレータの構成情報の少なくとも1つを用いて算出可能である。
アレイ内スレッド数設定部103は、各タスクにおいてさらに並列処理可能なスレッド数および同時実行タスク数に基づいて、各スレッドアレイ内のスレッド数であるアレイ内スレッド数を設定する。例えば、アレイ内スレッド数設定部103は、各タスクに必要なスレッド数に、同時実行タスク数を乗じた値を、アレイ内スレッド数として設定してもよい。
アレイ総数設定部104は、アプリケーションの処理に必要な総スレッド数およびアレイ内スレッド数に基づいて、スレッドアレイの総数であるアレイ総数を設定する。例えば、アレイ総数設定部104は、処理対象のアプリケーションに必要なスレッド総数を取得し、取得したスレッド総数を、アレイ内スレッド数で除算することにより、アレイ総数を決定してもよい。
このように、アレイ内スレッド数およびアレイ総数は、同時実行タスク数によって増減する。例えば、1つのスレッドアレイ内で2タスク同時に実行する場合(同時実行タスク数が2)を考える。この場合、1つのスレッドアレイあたりのアレイ内スレッド数は、1タスクの実行に必要なスレッド数の倍になるので、アレイ総数は、アプリケーションの処理を構成する全タスク数の半分となる。
スレッドアレイ制御部105は、アレイ内スレッド数に基づいて、スレッドアレイおよびスレッドを生成する。また、スレッドアレイ制御部105は、各スレッドアレイおよび各スレッドに、これらをそれぞれ一意に識別する識別情報(スレッドアレイIDおよびスレッドID)を付与して、これらの並列処理を制御する。
リソース割当部106は、各スレッドアレイにおいて、同時実行タスク数分のタスクの処理に必要なリソースを確保し、確保したリソースを各タスクに配分する。ここで、リソースとは、例えば、メモリ領域等である。
処理タスク決定部107は、スレッドアレイ内の各スレッドが処理するタスクを決定する。具体的には、処理タスク決定部107は、同時実行タスク数と、各スレッドアレイIDと、各スレッドIDとに基づいて、各スレッドが処理するタスク番号を算出する。例えば、同時実行タスク数が2であり、各スレッドアレイ内でスレッドIDが連番となっている場合について説明する。この場合、処理タスク決定部107は、スレッドアレイIDがnのスレッドアレイ内において、スレッドIDの値が前半のスレッドが処理するタスク番号を2nとし、後半のスレッドが処理するタスク番号を2n+1としてもよい。
また、処理タスク決定部107は、各スレッドが処理するタスクを決定すると同時に、そのスレッドがそのタスクによって処理するデータ(処理位置)も決定する。例えば、処理対象のアプリケーションが動画像エンコーディングの場合、処理タスク決定部107は、各スレッドがそのタスクによって処理する画素の位置を、スレッドIDに基づいて決定可能である。
タスク実行部108は、リソース割当部106により割り当てられたリソースを用いて、処理タスク決定部107によって決定されたタスクを、各スレッドに実行させる。これにより、タスク実行部108は、各スレッドアレイにおいて、同時実行タスク数分のタスクを実行する。
なお、リソース割当部106は、スレッドアレイ制御部105によって生成された各スレッドアレイにおいて機能する。また、処理タスク決定部107、および、タスク実行部108は、各スレッドアレイにおいて、タスク単位で機能する。したがって、図2には、リソース割当部106をスレッドアレイ単位で示し、処理タスク決定部107およびタスク実行部108をタスク単位で示している。
以上のように構成された並列処理装置1の動作について、図3〜図4のフローチャートを参照して説明する。
まず、分割タスク取得部101は、処理対象となるアプリケーションの処理が分割された各タスクを表す情報を取得する(ステップS101)。
例えば、分割タスク取得部101は、動画像エンコーディング処理がマクロブロック毎の処理に分割されたタスクを表す情報を取得する。このとき、タスクを表す情報には、タスクを識別する情報(タスク番号)が含まれているものとする。
次に、同時実行タスク数設定部102は、1つのスレッドアレイにおける同時実行タスク数を設定する(ステップS102)。
例えば、同時実行タスク数設定部102は、入力装置1006を介して取得した値を、同時実行タスク数として設定する。
次に、アレイ内スレッド数設定部103は、各タスクの処理に必要なスレッド数および同時実行タスク数の乗算値を、アレイ内スレッド数として設定する(ステップS103)。
次に、アレイ総数設定部104は、アプリケーションの実行に必要な総スレッド数およびアレイ内スレッド数に基づいて、アレイ総数を設定する(ステップS104)。
例えば、アレイ総数設定部104は、アプリケーション全体の処理を構成する全タスクの実行に必要な総スレッド数をアレイ内スレッド数で除算した値をアレイ総数とする。
次に、スレッドアレイ制御部105は、アレイ内スレッド数およびアレイ総数に基づいて、スレッドおよびスレッドアレイを生成する。そして、スレッドアレイ制御部105は、各スレッドおよび各スレッドアレイに、スレッドIDおよびスレッドアレイIDを付与する(ステップS105)。
次に、スレッドアレイ制御部105は、生成した各スレッドアレイ内における各スレッドおよび各スレッドアレイの並列処理を制御する(ステップS106)。
次に、ステップS106で、スレッドアレイ制御部105によって制御されることにより、各スレッドアレイにおける並列処理装置1の動作について、図4を参照して説明する。なお、ここでは、同時実行タスク数として2が設定されている例について説明する。また、スレッドIDは、各スレッドアレイ内で連番となっているものとする。
ここでは、まず、処理タスク決定部107は、各スレッドアレイにおいて、そのスレッドアレイIDおよび各スレッドのスレッドIDを取得する(ステップS107)。
次に、リソース割当部106は、各スレッドアレイにおいて、同時実行タスク数(ここでは2つ)のタスクの処理に必要なリソースを確保し、各タスクにリソースを割り当てる(ステップS108)。
次に、処理タスク決定部107は、各スレッドアレイ内でのスレッドIDの値に基づいて、各スレッドが処理するタスクを判定する。ここでは、処理タスク決定部107は、スレッドIDがスレッドアレイ内で前半に属するか否かを判断する(ステップS109)。
ここで、スレッドIDの値がスレッドアレイ内で前半に属する場合、処理タスク決定部107は、該当するスレッドが処理するタスク番号を2nに決定する。ここで、nは、ステップS107で取得したスレッドアレイIDである。このとき、処理タスク決定部107は、該当するスレッドがタスク2nによって処理するデータの位置も同時に決定する。そして、タスク実行部108は、割り当てられたリソースを用いて、該当するスレッドにタスク2nを実行させる(ステップS110)。
一方、スレッドIDの値がスレッドアレイ内で後半に属する場合、処理タスク決定部107は、該当するスレッドが処理するタスク番号を2n+1に決定する。このとき、処理タスク決定部107は、該当するスレッドがタスク2n+1によって処理するデータの位置も同時に決定する。そして、タスク実行部108は、割り当てられたリソースを用いて、該当するスレッドにタスク2n+1を実行させる(ステップS111)。
なお、図3および図4において、S101〜S104の各ステップは、CPU1001によって実行され、ステップS105〜S111の各ステップは、GPU1004などのメニコアアクセラレータによって実行される。
以上で、並列処理装置1の動作の説明を終了する。
なお、本実施の形態において、スレッドアレイ制御部105は、特許文献1に記載されているように、スレッドアレイ内の各スレッドが協調して並列動作するように制御してもよい。この場合、1つのスレッドアレイ(CTA)内の各スレッドは、各タスクに固有に割り当てられている共有リソースを用いて、同一タスクを実行しているスレッド同士でアトミック(不可分)命令などを用いて同期をとることにより、協調して動作する。また、特に、非特許文献3に記載の技術における同一warp内のスレッドのように、同一タスクを実行している全てのスレッドが同時に同じ演算を行っている場合には、自動的に同期が取られるため、明示的な同期処理は不要である。
次に、本発明の第1の実施の形態の効果について述べる。
本発明の第1の実施の形態としての並列処理装置は、タスク内の並列性は低いが並列処理可能なタスクが多数存在する処理において、複数のプロセッサコアを有する演算装置における各コアの稼働率を向上させることができる。
その理由について、図5を参照して説明する。本発明の第1の実施の形態としての並列処理装置は、同時実行タスク設定部が、各スレッドアレイ内で同時に実行するタスク数を設定し、処理タスク決定部が、各スレッドが各スレッドアレイ内でいずれのタスクを処理するかを決定し、タスク実行部が、決定されたタスクを各スレッドに実行させることにより、各スレッドアレイにおいて同時実行タスク数のタスクを同時に実行するからである。例えば、図5に示すように、同時実行タスク数が2であれば、本実施の形態としての並列処理装置は、1つのスレッドアレイで2つのタスクを実行する。これにより、本実施の形態としての並列処理装置は、スレッドアレイの数以上のタスクを同時に実行可能となる。このため、本実施の形態としての並列処理装置は、スレッドアレイ数と同数のタスクしか同時に実行できないことにより、メモリアクセスレイテンシの隠蔽ができずにプロセッサコアを遊休させてしまうことがない。したがって、本実施の形態としての並列処理装置は、遊休していたプロセッサコアを用いてより多くのスレッドを実行し、より多くのタスクを並列処理可能となる。その結果、本実施の形態としての並列処理装置は、各コアの稼働率を向上させ、全体の処理時間を短縮することができる。
(第2の実施の形態)
次に、本発明の第2の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第1の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
まず、本発明の第2の実施の形態としての並列処理装置2の機能ブロック構成について、図6を参照して説明する。なお、並列処理装置2のハードウェア構成は、本発明の第1の実施の形態としての並列処理装置1と同様であるため、本実施の形態における説明を省略する。並列処理装置2は、本発明の第1の実施の形態としての並列処理装置1に対して、アレイ内スレッド数設定部103に替えてアレイ内スレッド数設定部203と、リソース割当部106に替えてリソース割当部206と、処理タスク決定部107に替えて処理タスク決定部207とを備える点が異なる。
アレイ内スレッド数設定部203は、各タスクの処理に必要なスレッド構成の次元に、タスク決定次元を加えた多次元で表されるスレッド構成を設定する。ここで、タスク決定次元とは、各スレッドの処理対象となるタスクを識別するための次元である。タスク決定次元の大きさは、同時実行タスク数となる。
例えば、特許文献1に記載された技術では、スレッドアレイは、多次元空間で定義され、各スレッドアレイおよび各スレッドには、多次元のIDが付与される。そこで、アレイ内スレッド数設定部203は、このような特許文献1に記載された技術で定義されるスレッド構成の次元に、さらにタスク決定次元を加えた多次元のスレッド構成に基づいて、アレイ内スレッド数を設定すればよい。このとき、アレイ内スレッド数設定部203は、元来のタスクを処理するためのスレッド構成に基づく次元の値をそのまま用いて、タスク決定次元を追加すればよい。
処理タスク決定部207は、各スレッドIDのタスク決定次元を用いて、該スレッドが処理するタスクを決定する。このとき、処理タスク決定部207は、各スレッドIDの各次元の情報を用いて、該当するタスクにおいて処理するデータの位置を決定可能である。
例えば、各タスクの処理に必要なスレッド構成が、図24(a)に示したように1次元の構成(x次元)である場合について、図7を参照して説明する。また、図7では、同時実行タスク数は2であるものとする。この場合、アレイ内スレッド数設定部203は、スレッドアレイ内のスレッド構成を2次元(x,y)とする。図2(a)に示すように、y次元は、タスク決定次元である。同じく図2(a)に示すように、x次元の大きさは8であり、0〜7の整数値をとる。y次元の大きさは2であり、0〜1の整数値をとる。そして、アレイ内スレッド数設定部203は、x次元の大きさとy次元の大きさを乗じた数を、アレイ内スレッド数とする。
また、図7の例では、処理タスク決定部207は、スレッドID(y)が同値のスレッド群を、同一タスクを実行するものとして決定する。そして、処理タスク決定部207は、図7の(b)に示すように、スレッドアレイID(cta.id)、スレッドアレイのx次元の大きさ(cta_size.x)、y次元の大きさ(cta_size.y)、スレッドIDのx次元の値(thread id.x)、および、y次元の値(thread_id.y)に基づいて、そのスレッドIDがそのタスクによって処理するデータの要素番号を決定可能である。
また、例えば、各タスクの処理に必要なスレッド構成が、図25に示したように2次元の構成(x,y)である場合について説明する。この場合、アレイ内スレッド数設定部203は、スレッドアレイ内のスレッド構成を3次元(x,y,z)とする。z次元は、タスク決定次元である。また、この場合、処理タスク決定部207は、スレッドID(z)が同値のスレッド群を、同一タスクを実行するものとして決定する。
リソース割当部206は、各スレッドアレイ内において、同時実行タスク数分の配列としてリソースを確保する。そして、リソース割当部206は、スレッドIDのz次元に基づいて、各タスクにリソースを配分する。
以上のように構成された並列処理装置2の動作について、図8を参照して説明する。なお、図8では、各タスクの処理に必要なスレッド構成が2次元(x,y)であるものとする。
まず、並列処理装置2は、ステップS101〜S102まで、本発明の第1の実施の形態としての並列処理装置1と同様に動作することにより、分割されたタスクを取得し、同時実行タスク数を設定する。ここでは、同時実行タスク数として2が設定されたものとする。
次に、アレイ内スレッド数設定部203は、各タスクの処理に必要なスレッド構成(ここでは2次元構成(x,y))に、タスク決定次元(ここでは(z))を加えた多次元構成(ここでは3次元(x,y,z))を、スレッドアレイ内のスレッド構成とする。ここでは、同時実行タスク数が2であるため、タスク決定次元のサイズは2となる(ステップS203)。
その後、並列処理装置2は、ステップS104〜S106まで、本発明の第1の実施の形態としての並列処理装置1と同様に動作することにより、設定されたスレッド構成のスレッドアレイを生成し、各スレッドアレイおよび各スレッドの並列処理を制御する。
次に、スレッドアレイ制御部105によって制御される各スレッドアレイにおける並列処理装置1の動作について、図9を参照して説明する。なお、スレッドIDのz次元は、0または1の値をとるものとする。
ここでは、まず、処理タスク決定部207は、本発明の第1の実施の形態における処理タスク決定部107と同様に、各スレッドアレイにおいて、そのスレッドアレイIDおよび各スレッドIDを取得する(ステップS107)。
次に、リソース割当部206は、各スレッドアレイ内において、同時実行タスク数分の配列としてリソースを確保し、スレッドIDのz次元に基づいて、確保したリソースを各タスクの各スレッドに配分する(ステップS207)。例えば、スレッドIDのz次元が0のスレッドには、リソース配列の要素0のリソースを配分する。
次に、処理タスク決定部207は、スレッドIDのz次元の値に基づいて、処理するタスクを判定する。ここでは、処理タスク決定部207は、スレッドIDのz次元が0であるか否かを判断する(ステップS208)。
ここで、スレッドIDのz次元が0である場合、処理タスク決定部207は、該当するスレッドが処理するタスク番号を2nに決定する。ここで、nは、ステップS107で取得されたスレッドアレイIDである。このとき、処理タスク決定部207は、該当するスレッドが、タスク2nによって処理するデータの位置も同時に決定する。そして、タスク実行部108は、割り当てられたリソースを用いて、該当するスレッドにタスク2nを実行させる(ステップS110)。
一方、スレッドIDのz次元が0ではない場合、処理タスク決定部207は、該当するスレッドが処理するタスク番号を2n+1に決定する。このとき、処理タスク決定部107は、該当するスレッドがタスク2n+1によって処理するデータの位置も同時に決定する。そして、タスク実行部108は、割り当てられたリソースを用いて、該当するスレッドにタスク2n+1を実行させる(ステップS111)。
なお、図8および図9において、S101、S102、S203、S104の各ステップは、CPU1001によって実行され、ステップS105〜S107、S208、S209、S110、S111の各ステップは、GPU1004などのメニコアアクセラレータによって実行される。
以上で、並列処理装置2の動作の説明を終了する。
次に、以上のように並列処理装置2を動作させるため記憶装置1005に記憶されるコンピュータ・プログラムの一例を図10に示す。また、比較のため、特許文献1等の関連技術に記載された並列処理装置に同様の並列処理を実行させるためのコンピュータ・プログラムの一例を図11に示す。
図10および図11において、mainには、CPU1001によって実現される各部を機能させるためのコードが記載されている。また、kernel1およびkernel2には、GPU1004によって実現される各部を機能させるためのコードが記載されている。
図10において、mainにおける1行目では、各タスクの処理に必要なスレッド構成の次元(x,y)に、タスク決定次元(z)が追加された3次元でスレッド構成が定義されている。なお、ここでは、タスクの処理に必要なスレッド構成の次元(x,y)のサイズおよび同時実行タスク数zは、図示しない定義ファイルに記載されているか、入力装置1006を介して読み込まれるものとする。この行のコードは、図8のステップS203に相当する。これに対して、図11に示した関連技術では、mainにおける1行目では、各タスクの処理に必要なスレッド構成の次元(x,y)でスレッド構成が定義されている。
また、図10において、mainにおける2行目では、アプリケーションの処理を構成するタスク数numTaskを、同時実行タスク数zで除した値が、アレイ総数numCTAとして設定されている。この行のコードは、図8におけるステップS104に相当する。なお、アプリケーションの処理を構成するタスク数numTaskは、図示しない定義ファイルに記載されているか、入力装置1006を介して読み込まれるものとする。これに対して、図11に示した関連技術では、mainにおける2行目では、アプリケーションの処理を構成するタスク数numTaskが、そのままアレイ総数として設定されている。
また、図10において、kernel2における1行目では、同時実行タスク数zサイズの配列としてリソースが確保されている。なお、各スレッドは、この行のコードを実行することにより、静的に確保されているリソース配列の要素のうち、自身が対象とするタスクに配分された要素のアドレスを取得することになる。この行のコードは、図9におけるステップS208に相当する。これに対して、図11に示した関連技術では、kernel1における1行目で、共有メモリ上にこのスレッドアレイで共有するリソースが確保されている。
また、図10において、kernel2における2行目では、スレッドアレイIDのx次元の値cta_id.xに加えて、同時実行タスク数cta_size.zと、該当するスレッドのタスク決定次元の値thread_id.zとに基づいて、該当するスレッドの処理するタスク番号task_idxが決定されている。この行のコードは、図9におけるステップS107、S209に相当する。これに対して、図11に示した関連技術では、kernel1における2行目で、スレッドアレイIDのx次元の値cta_id.xが、そのまま、該当するスレッドが処理するタスク番号task_idxとなっている。
また、図10において、kernel2における3行目では、算出されたtask_idxのタスクtaskを実行する際に、リソース配列のうち、該当するタスクに配分された要素のリソースを用いている。なお、taskの処理内容は、図示しない定義ファイル等にあらかじめ記載され
ているものとする。この行のコードは、図9におけるステップS208、S110、S111に相当する。これに対して、図11に示した関連技術では、kernel1における3行目では、算出されたtask_idxのタスクを、確保されたリソースを用いて実行する。
このように、コンピュータ装置を、本発明の第2の実施の形態としての並列処理装置2を動作させるため記憶装置1005に記憶されるコンピュータ・プログラム(図10)は、関連技術の並列処理装置を動作させるためのコンピュータプログラム(図11)に対して、図10の下線部分が変更されたものとなる。アプリケーションの処理が並列処理可能に分割されたタスクの処理内容taskは、関連技術におけるタスクの処理内容に対して変更の必要はない。
次に、本発明の第2の実施の形態の効果について述べる。
本発明の第2の実施の形態としての並列処理装置は、タスク内の並列性は低いが並列処理可能なタスクが多数存在する処理において、複数のプロセッサコアを有する演算装置における各コアの稼働率を、容易に向上させることができる。
その理由は、アレイ内スレッド数設定部が、スレッドアレイのスレッド構成が多次元空間で定義されていることを利用して、タスクの処理に必要なスレッド構成の次元にタスク決定次元を加えた多次元でスレッドアレイ内のスレッド構成を定義するからである。これにより、処理タスク決定部およびタスク実行部は、タスク決定次元を用いて各スレッドアレイ内で複数のタスクを同時に実行可能となるからである。このとき、各タスクを処理するスレッド構成は、関連技術でも適用されていたスレッド構成と同じであるため、タスク実行部は、タスク内の処理(特にスレッドIDを用いた処理)を変更する必要がないためである。また、リソース割当部が、各タスク処理に必要なリソースを同時実行タスク数分の配列として確保することにより、スレッドIDのタスク決定次元のインデックスに基づいて、各タスクにおいて共有されるリソースを簡便に配分できるためである。
(第3の実施の形態)
次に、本発明の第3の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第1の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
まず、本発明の第3の実施の形態としての並列処理装置3の機能ブロック構成について、図12を参照して説明する。なお、並列処理装置3のハードウェア構成は、本発明の第1の実施の形態としての並列処理装置1と同様であるため、本実施の形態における説明を省略する。図12において、並列処理装置3は、本発明の第1の実施の形態としての並列処理装置1に対して、同時実行タスク数設定部102に替えて同時実行タスク数設定部302と、アレイ内スレッド数設定部103に替えてアレイ内スレッド数設定部303と、アレイ総数設定部104に替えてアレイ総数設定部304と、リソース割当部106に替えてリソース割当部306と、処理タスク決定部107に替えて処理タスク決定部307とを備え、さらに、タスク情報取得部310と、アレイ−タスク対応表311とを備えている点が異なる。ここで、タスク情報取得部310は、CPU1001によって構成される。CPU1001は、ROM1003または記憶装置1005に記憶されたコンピュータ・プログラムモジュールおよび各種情報を読み込んで、RAM1002を作業領域としてコンピュータプログラムを実行する。また、アレイ−タスク対応表311は、RAM1002または記憶装置1005によって構成される。また、同時実行タスク数設定部302は、タスク情報取得部310およびアレイ−タスク対応表311と共に、本発明における同時実行タスク数設定部を構成する。
タスク情報取得部310は、分割タスク取得部101が取得した各タスクに関連するタスク情報を取得する。例えば、タスク情報は、各タスクの負荷を表す情報であってもよい。
アレイ総数設定部304は、処理対象となるアプリケーションの並列処理において使用するスレッドアレイの総数を設定する。例えば、アレイ総数は、GPU1004が有するプロセッサコア数に基づいて算出された値が、入力装置1006を介して取得されたものであってもよい。例えば、GPU1004として非特許文献3に記載されたCUDAが対象とするデバイスを適用している場合、アレイ総数は、Streaming Multiprocessor(SM)の個数の倍数に設定されるのが好ましい。このようにすると、スレッドアレイあたりの負荷が均等であれば、SMあたりの負荷も均等になる。
同時実行タスク数設定部302は、スレッドアレイ毎に個別の同時実行タスク数を設定する。例えば、同時実行タスク数設定部302は、タスク情報取得部310によって得られたタスクの負荷情報を用いて、アレイ総数設定部304が設定した数のスレッドアレイにタスクを振り分ける。例えば、同時実行タスク数設定部302は、負荷がより小さいタスクを1つのスレッドアレイにまとめて割り当ててもよい。また、同時実行タスク数設定部302は、負荷のより大きいタスクを1つのスレッドアレイに割り当ててもよい。このように、同時実行タスク数設定部302は、各スレッドアレイの負荷が等しくなるように、タスクをスレッドアレイに割り当ててもよい。
また、同時実行タスク数設定部302は、スレッドアレイと、該スレッドアレイに割り当てたタスクとの対応関係を、アレイ−タスク対応表311に記録する。すなわち、アレイ−タスク対応表311は、どのスレッドアレイが、いくつの、どのタスクを実行するかを表す情報を記憶している。
アレイ内スレッド数設定部303は、各スレッドアレイ内の同時実行タスク数に応じて、アレイ内スレッド数を設定する。
処理タスク決定部307は、アレイ−タスク対応表311、スレッドアレイIDおよびスレッドIDに基づいて、各スレッドが処理するタスクを決定する。
リソース割当部306は、アレイ−タスク対応表311に基づいて各スレッドアレイに対応付けられたタスクの数を取得し、取得したタスク数分の処理に必要なリソースを確保する。
以上のように構成された並列処理装置3の動作について、図13を参照して説明する。
まず、アプリケーションの処理が分割されたタスクを表す情報が取得された後(ステップS101)後、アレイ総数設定部304は、アレイ総数を設定する(ステップS302)。例えば、アレイ総数設定部304は、アレイ総数として、入力装置1006を介して取得される値を設定してもよい。
次に、タスク情報取得部310は、分割された各タスクに関連するタスク情報を取得する(ステップS303)。例えば、タスク情報取得部310は、各タスク情報として、各タスクの実際の負荷量ではなくその推定値を取得してもよい。
次に、同時実行タスク数設定部302は、各タスク情報に基づいて、各スレッドアレイにタスクを割り当てる。そして、同時実行タスク数設定部302は、アレイ−タスク対応表311に、どのスレッドアレイが、いくつの、どのタスクを実行するかを記録する(ステップS304)。
次に、アレイ内スレッド数設定部303は、アレイ−タスク対応表311を参照することにより、各スレッドアレイにおける同時実行タスク数を取得する。そして、アレイ内スレッド数設定部303は、本発明の第2の実施の形態におけるアレイ内スレッド数設定部203と同様に、各タスクの処理に必要なスレッド構成(ここでは2次元構成(x,y))に、タスク決定次元(ここでは(z))を加えた多次元構成(ここでは3次元(x,y,z))を、スレッドアレイ内のスレッド構成としてもよい。各スレッドアレイにおいて、タスク決定次元のサイズは、そのスレッドアレイにおける同時実行タスク数となる(ステップS305)。
次に、スレッドアレイ制御部105は、設定されたアレイ総数および各アレイ内のスレッド構成に基づいて、各スレッドアレイおよび各スレッドを生成する。そして、スレッドアレイ制御部105は、生成した各スレッドアレイおよび各スレッドに、スレッドアレイIDおよびスレッドIDを付与する(ステップS105)。
次に、スレッドアレイ制御部105は、生成した各スレッドおよび各スレッドアレイの並列処理を制御する(ステップS106)。
次に、スレッドアレイ制御部105によって制御される各スレッドアレイにおける並列処理装置3の動作について、図14を参照して説明する。なお、ここでは、アレイ−タスク対応表311において、1つのスレッドアレイに対応付けられている各タスク番号は連番になっているものとする。また、各スレッドIDにおいて、タスク決定次元のとる値は、0以上同時実行タスク数未満の整数であるものとする。
ここでは、まず、処理タスク決定部207は、本発明の第1の実施の形態における処理タスク決定部107と同様に、各スレッドアレイにおいて、そのスレッドアレイIDおよび各スレッドIDを取得する(ステップS107)。
次に、リソース割当部306は、アレイ−タスク対応表311を参照することにより、該当するスレッドアレイにおける同時実行タスク数を取得する(ステップS308)。
次に、リソース割当部306は、各スレッドアレイ内において、それぞれ同時実行タスク数分の配列としてリソースを確保する。リソース割当部306は、確保したリソースを、スレッドIDのz次元に基づいて、各タスクの各スレッドに配分する(ステップS309)。
次に、処理タスク決定部307は、アレイ−タスク対応表311を参照することにより、該当するスレッドアレイにおいて処理するタスクの開始番号mを取得する(ステップS310)。
次に、処理タスク決定部307は、スレッドIDのタスク決定次元の値を、タスクの開始番号mに加算した番号のタスクを、該当するスレッドが処理するタスクとして決定する(ステップS311)。
次に、タスク実行部108は、各スレッドについて、処理タスク決定部307によって決定された番号のタスクを実行させる(ステップS312)。
以上で、並列処理装置3の動作の説明を終了する。
次に、本発明の第3の実施の形態の効果について述べる。
本発明の第3の実施の形態としての並列処理装置は、タスク内の並列性は低いが並列処理可能なタスクが多数存在する処理において、各プロセッサコアの処理時間を均一化することができ、全体の処理時間を削減することができる。
その理由について、図15を参照して説明する。図15に示すように、本発明の第3の実施の形態としての並列処理装置は、同時実行タスク数設定部が、各スレッドアレイに個別の同時実行タスク数を設定する。例えば、同時実行タスク数設定部は、各タスクの負荷等のタスク情報に基づいてスレッドアレイに個別の同時実行タスク数を設定する。これにより、本発明の第3の実施の形態としての並列処理装置は、アプリケーションの処理が分割されたタスクの負荷が一様ではない場合に、タスク内の処理を変えることなく、各プロセッサコアの負荷を均一化することができるからである。
次に、本発明の第3の実施の形態の他の態様について、図16および図17を参照して説明する。
本発明の第3の実施の形態の他の態様において、同時実行タスク数設定部302は、タスク情報の代わりに、メニコアアクセラレータの構成情報を用いて、各スレッドアレイに個別の同時実行タスク数を設定してもよい。
この場合の並列処理装置3の構成を図16に示す。図16において、並列処理装置3は、タスク情報取得部310の代わりに、演算装置構成情報取得部312と、コア−アレイ対応表313とを有している。この場合、同時実行タスク数設定部302は、演算装置構成情報取得部312およびコア−アレイ対応表312と共に、本発明の同時実行タスク数設定部の一実施形態を構成している。
演算装置構成情報取得部312は、並列処理装置3を構成するコンピュータ装置が有するメニコアアクセラレータ(GPU1004)の構成を表す情報を取得する。例えば、演算装置構成情報取得部312は、GPU1004が有する各プロセッサコアの性能を表す情報を取得してもよい。そして、演算装置構成情報取得部312は、取得したメニコアアクセラレータの構成情報に基づいて、アレイ総数設定部304が設定した数のスレッドアレイと、プロセッサコアとの対応関係を決定し、コア−アレイ対応表313に記録する。
この場合、同時実行タスク数設定部302は、コア−アレイ対応表313を参照することにより、アレイ総数設定部304が設定した数のスレッドアレイにタスクを振り分ける。例えば、同時実行タスク数設定部302は、より高性能のプロセッサコアに対応付けられたスレッドアレイには、より多くのタスクをまとめて割り当ててもよい。また、同時実行タスク数設定部302は、より性能が低いプロセッサコアに対応付けられたスレッドアレイには、より少ない数のタスクを割り当てるようにしてもよい。
以上のように構成した場合の並列処理装置3の動作を図17に示す。図17において、並列処理装置3は、図13に示した動作におけるステップS303〜S304、S106の代わりに、ステップS403〜S404、S406を実行する。
ステップS403では、演算装置構成情報取得部312は、メニコアアクセラレータ(GPU1004)の構成を表す情報を取得する。そして、演算装置構成情報取得部312は、取得したメニコアアクセラレータ構成情報に基づいて、アレイ総数設定部304が設定した数のスレッドアレイと、プロセッサコアとの対応関係を決定し、コア−アレイ対応表313に記録する。
また、ステップS404では、同時実行タスク数設定部302は、コア−アレイ対応表313に基づいて、スレッドアレイ毎に個別の同時実行タスク数のタスクを割り当てる。
また、ステップS406では、スレッドアレイ制御部105は、コア−アレイ対応表313にしたがって、各スレッドアレイを、該当するプロセッサコアに並列処理させるよう制御する。
その他のステップでは、並列処理装置3は、図13に示した各ステップと同様に動作する。そして、スレッドアレイ制御部105によって生成された各スレッドアレイにおいて、並列処理装置3は、図14に示した動作を同様に実行する。これにより、各スレッドアレイに個別の同時実行タスク数分のタスクが、同時に実行される。
以上のように構成された本発明の第3の実施の形態の他の態様の並列処理装置は、本発明の第3の実施の形態の並列処理装置と同様に、各プロセッサコアの処理時間を均一化することができ、全体の処理時間を削減することができる。
その理由は、同時実行タスク数設定部が、メニコアアクセラレータの構成情報に基づいて、各スレッドアレイに個別の同時実行タスク数を設定するからである。これにより、本発明の第3の実施の形態の他の態様としての並列処理装置は、並列処理に用いるメニコアアクセラレータが有するプロセッサコアの処理能力に偏りがある場合にも、各プロセッサコア上で実行するスレッドアレイの同時実行タスク数を調整することができる。その結果、本発明の第3の実施の形態の他の態様としての並列処理装置は、プロセッサ間の処理時間を均一化することができ、処理の高速化を可能とする。
なお、本発明の第3の実施の形態において、同時実行タスク数設定部が、各スレッドアレイに個別の同時実行タスク数を、タスクの負荷情報や、プロセッサコアの性能情報に基づいて設定する例について説明した。これに限らず、本発明の第3の実施の形態における同時実行タスク数設定部は、各タスクが使用するメモリ量など、各タスクに関連するその他のタスク情報を用いて、各スレッドアレイに個別の同時実行タスク数を設定してもよい。あるいは、本発明の第3の実施の形態における同時実行タスク数設定部は、メニコアアクセラレータの有するメモリ量やプロセッサ数等、メニコアアクセラレータの構成に関連するその他の情報に基づいて、各スレッドアレイに個別の同時実行タスク数を設定してもよい。
(第4の実施の形態)
次に、本発明の第4の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第1の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
まず、本発明の第4の実施の形態としての並列処理装置4の機能ブロック構成について、図18を参照して説明する。なお、並列処理装置4のハードウェア構成は、本発明の第1の実施の形態としての並列処理装置1と同様であるため、本実施の形態における説明を省略する。図18において、並列処理装置4は、本発明の第1の実施の形態としての並列処理装置1に対して、同時実行タスク数設定部102に替えて同時実行タスク数設定部402を備え、さらに、実行時情報取得部414を備える点が異なる。なお、同時実行タスク数設定部402は、実行時情報取得部414と共に、本発明の同時実行タスク数設定部の一実施形態を構成する。
実行時情報取得部414は、タスク情報および演算装置構成情報の少なくとも1つを、アプリケーション実行時に取得する。例えば、実行時情報取得部414は、タスク情報として、各タスクが使用するメモリ量等のリソース量や、各タスクに必要なスレッド数、各タスクの負荷量を表す情報等を取得してもよい。また、例えば、実行時情報取得部414は、演算装置構成情報として、並列処理装置4を構成するコンピュータ装置が有するメニコアアクセラレータが有するプロセッサコア数、メモリ量、各プロセッサコアの性能情報等を取得してもよい。
同時実行タスク数設定部402は、実行時情報取得部414によって取得された情報に基づいて、同時実行タスク数を設定する。このとき、同時実行タスク数設定部402は、本発明の第1および第2の実施の形態における同時実行タスク数設定部102のように、各スレッドアレイに同一の同時実行タスク数を設定してもよい。あるいは、同時実行タスク数設定部402は、本発明の第3の実施の形態における同時実行タスク数設定部302のように、各スレッドアレイに個別の同時実行タスク数を設定してもよい。
例えば、同時実行タスク数設定部402は、各タスクが使用するメモリ量(タスク情報)および各スレッドアレイで使用可能な最大メモリ量(演算装置構成情報)に基づいて、各スレッドアレイで、同時実行されるタスクの使用する合計メモリ量が最大メモリ量以下になる最大のタスク数を、同時実行タスク数として設定してもよい。
また、例えば、同時実行タスク数設定部402は、GPU1004が有する各プロセッサコアの性能が均一でないという演算装置構成情報が得られている場合、より高速なプロセッサコアで実行されるスレッドアレイにより多くの同時実行タスク数を設定してもよい。
また、例えば、同時実行タスク数設定部402は、GPU1004が有する各プロセッサコアのメモリ量が均一でないという演算装置構成情報が得られている場合、よりメモリ量の多いプロセッサコアで実行されるスレッドアレイにより多くの同時実行タスク数を設定してもよい。
以上のように構成された並列処理装置4の動作について、図19を参照して説明する。
まず、分割タスク取得部101によって、アプリケーションの処理が分割された各タスクを表す情報が取得されると(ステップS101)、実行時情報取得部414は、タスク情報および演算装置構成情報の少なくとも1つを、動的に取得する(ステップS501)。
次に、同時実行タスク数設定部402は、ステップS501で取得された情報に基づいて、同時実行タスク数を設定する(ステップS502)。例えば、前述のように、同時実行タスク数設定部402は、各スレッドアレイで、同実行されるタスクの使用する合計メモリ量が、1つのスレッドアレイで使用可能な最大メモリ量以下になる最大のタスク数を、同時実行タスク数として設定してもよい。
以降、ステップS103〜S106まで、並列処理装置4は、本発明の第1の実施の形態と同様に動作することにより、各スレッドアレイおよび各スレッドを生成して、その並列処理を制御する。そして、各スレッドアレイにおいて、図4に示した並列処理装置1の動作と同様に動作することにより、各スレッドアレイにおいて、ステップS502で設定された同時実行タスク数のタスクが並列処理される。
以上で、並列処理装置4の動作の説明を終了する。
なお、本実施の形態において、同時実行タスク数設定部402が、実行時情報に基づいて、各スレッドアレイに個別の同時実行タスク数を設定する場合について説明する。この場合、並列処理装置4は、本発明の第3の実施の形態におけるアレイ−タスク対応表311をさらに備えるようにする。そして、この場合、並列処理装置4は、図19に示した動作においてステップS501を実行した後、ステップS502、S103、S104の代わりに、図13に示したステップS302、S304、および、S305を実行すればよい。
次に、本発明の第4の実施の形態の効果について述べる。
本発明の第4の実施の形態としての並列処理装置は、タスク内の並列性は低いが並列処理可能なタスクが多数存在する処理において、複数のプロセッサコアを有する演算装置の多様な環境に対応して、各プロセッサコアの稼働率を向上させることができる。
その理由について、図20を参照して説明する。図20に示すように、本実施の形態の並列処理装置は、タスクの内容およびその並列処理に用いるメニコアアクセラレータの環境に応じて、各スレッドアレイ内の同時実行タスク数を動的に変化させることができるからである。その結果、本実施の形態の並列処理装置は、タスクの処理内容を変更することなく、より多様な実行環境において、各プロセッサコアの稼働率を向上させて高速に各タスク処理を完了することが可能になるからである。
(第5の実施の形態)
次に、本発明の第5の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第1の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
本実施の形態では、本発明の第1〜第4の実施の形態としての並列処理装置に実行させるためのコンピュータ・プログラムを最適化する最適化装置について説明する。本実施の形態としての最適化装置は、メニコアアクセラレータを用いた各タスクの並列処理が記述されたコンピュータ・プログラムを、実行環境に応じて最適化する。
まず、本発明の第5の実施の形態としての最適化装置5の機能ブロック構成について、図21を参照して説明する。なお、最適化装置5のハードウェア構成は、本発明の第1の実施の形態としての並列処理装置1と同様のコンピュータ装置を適用可能であるため、本実施の形態における説明を省略する。図21において、最適化装置5は、プログラム取得部521と、タスク情報取得部522と、演算装置構成情報取得部523と、同時実行タスク数設定部524と、アレイ内スレッド数設定部203と、アレイ総数設定部104と、プログラム変更部525とを備えている。なお、各機能ブロックは、ROM1003または記憶装置1005に記憶されたコンピュータ・プログラムモジュールおよび各種情報を読み込んでRAM1002を作業領域として実行するCPU1001によって構成される。また、同時実行タスク数設定部524は、タスク情報取得部522および演算装置構成情報取得部523と共に、本発明の同時実行タスク数設定部を構成する。
プログラム取得部521は、メニコアアクセラレータを用いた各タスクの並列処理が記述されたコンピュータ・プログラムを表す情報を取得する。ここで取得されるコンピュータ・プログラムは、少なくとも、処理対象とするアプリケーションが並列処理可能に分割された各タスクの処理を実行させるためのスレッドアレイ、および、各タスクの処理がさらに並列処理可能に分割されたスレッドを生成するステップと、各タスクの処理に必要なリソースを各スレッドアレイにおいて確保して割り当てるステップと、各スレッドが処理するタスクを決定するステップと、割り当てられたリソースを用いて、決定されたタスクを各スレッドに実行させるステップと、を含むものである。
タスク情報取得部522は、タスクに関連するタスク情報を取得する。例えば、タスク情報取得部522は、タスク情報として、各タスクの処理に必要なリソース量、各タスクの処理に必要なスレッド数、または、各タスクの負荷情報等を取得してもよい。
演算装置構成情報取得部523は、GPU1004の構成に関連する演算装置構成情報を取得する。例えば、演算装置構成情報取得部523は、演算装置構成情報として、GPU1004が有するリソース量、プロセッサコア数、または、各プロセッサコア性能情報を取得してもよい。
同時実行タスク数設定部524は、タスク情報および演算装置構成情報の少なくと1つに基づいて、各スレッドアレイにおいて同時に実行する同時実行タスク数を設定る。例えば、同時実行タスク数設定部524は、各タスクが使用するメモリ量(タスク情報)および各スレッドアレイで使用可能な最大メモリ量(演算装置構成情報)に基づいて、各スレッドアレイで、同時実行されるタスクの使用する合計メモリ量が、1つのスレッドアレイで使用可能な最大メモリ量以下になる最大のタスク数を、同時実行タスク数として設定してもよい。
アレイ内スレッド数設定部203は、本発明の第2の実施の形態におけるアレイ内スレッド数設定部203と同様に、各タスクの処理に必要なスレッド構成に、同時実行タスク数サイズのタスク決定次元を追加した多次元のスレッド構成を設定する。
アレイ総数設定部104は、本発明の第2の実施の形態におけるアレイ総数設定部104と同様に、アプリケーションを構成するタスク数を同時実行タスク数で除した値をアレイ総数として設定する。ただし、端数は切り上げる。
プログラム変更部525は、プログラム取得部521によって取得されたコンピュータ・プログラムに対して、アレイ内スレッド数、アレイ総数、および、同時実行タスク数を適用するよう変更する。具体的には、プログラム変更部525は、スレッドおよびスレッドアレイを生成するステップを、アレイ内スレッド数およびアレイ総数に基づいて生成を行うよう変更する。また、プログラム変更部525は、各スレッドアレイにおいてタスクにリソースを割り当てるステップを、同時実行タスク数分のタスクの実行に必要なリソースを確保して各タスクに割り当てるよう変更する。また、プログラム変更部525は、各スレッドが実行するタスクを決定するステップを、各スレッドアレイ内で実行させる同時実行タスク数のタスクのいずれかに決定するよう変更する。また、プログラム変更部525は、各スレッドに該当するタスクを実行させるステップを、各スレッドアレイにおいて確保されたリソースのうち、該当するタスクに割り当てられたリソースを使用して該タスクを実行するよう変更する。
以上のように構成された最適化装置5の動作について、図22を参照して説明する。なお、ここでは、プログラム取得部521は、既に該当するコンピュータ・プログラムを取得しているものとする。また、ここでは、最適化装置5が、取得したコンピュータ・プログラムを、本発明の第2の実施の形態としての並列処理装置2に実行させるためのコンピュータ・プログラムに最適化する動作例について説明する。
ここでは、まず、タスク情報取得部522は、コンピュータ・プログラムに記載された各タスクに関連するタスク情報を取得する。例えば、タスク情報取得部522は、各タスクで使用するメモリ量を取得する(ステップS601)。
次に、演算装置構成情報取得部523は、GPU1004の構成に関連する演算装構成情報を取得する。例えば、演算装置構成情報取得部523は、GPU1004において、各スレッドアレイで使用可能な最大のメモリ量を取得する(ステップS602)。
次に、同時実行タスク数設定部524は、タスク情報および演算装置構成情報の少なくとも1つに基づいて、各スレッドアレイで同時に実行する同時実行タスク数を設定する。例えば、同時実行タスク数設定部524は、各スレッドアレイ内で同時実行する各タスクの使用メモリ量の合計が、各スレッドアレイで使用可能な最大メモリ量以下となるような最大のタスク数を、同時実行タスク数として設定する(ステップS603)。
次に、アレイ総数設定部104は、アレイ総数として、総タスク数を同時実行タスク数で除した値(端数切り上げ)に設定する(ステップS604)。
次に、アレイ内スレッド数設定部103は、各タスクの処理に必要なスレッド構成に、同時実行タスク数サイズのタスク数決定次元を追加した多次元のスレッド構成を設定する(ステップS605)。
次に、プログラム変更部525は、取得されたコンピュータ・プログラムにおいて、生成するスレッドアレイの総数をアレイ総数に変更する(ステップS606)。
次に、プログラム変更部525は、取得されたコンピュータ・プログラムにおいて、生成するスレッドアレイ内のスレッド構成を、ステップS605で設定したスレッド構成に変更する(ステップS607)。
次に、プログラム変更部525は、取得されたコンピュータ・プログラムにおいて、各スレッドが処理するタスク番号を算出する部分を、各スレッドIDのタスク決定次元に基づいて算出を行うよう変更する(ステップS608)。
次に、プログラム変更部525は、取得されたコンピュータ・プログラムにおいて、各スレッドにおいてリソースを確保する部分を、同時実行タスク数分のリソース配列として確保するよう変更する(ステップS609)。
次に、プログラム変更部525は、取得されたコンピュータ・プログラムにおいて、各スレッドにタスク実行させる部分で、そのスレッドIDのタスク決定次元に基づいて該当するタスクに割り当てられたリソースを使用するよう変更する(ステップS610)。
以上で、最適化装置5は動作を終了する。
このように、最適化装置5は、入力されたコンピュータ・プログラムにおいて、各タスクの処理内容を変更する必要はない。
以上のように動作する最適化装置5は、例えば、図11に示したコンピュータ・プログラムを取得して、図10に示したコンピュータ・プログラムを出力することが可能である。
次に、本発明の第5の実施の形態の効果について述べる。
本発明の第5の実施の形態としての最適化装置は、タスク内の並列性は低いが並列処理可能なタスク数が多い並列処理が記述されたコンピュータ・プログラムを、機種や世代の変化等により多様な構成を有するメニコアアクセラレータに応じて、各プロセッサコアの稼働率の向上に適したコンピュータ・プログラムに変更することが可能である。
その理由は、同時実行タスク数設定部が、タスクの内容およびメニコアアクセラレータの構成に応じて、各スレッドアレイでの同時実行タスク数を変更するからである。そして、プログラム変更部が、その同時実行タスク数に基づいて設定されたスレッドアレイ総数およびアレイ内スレッド数に基づいて、入力されたコンピュータ・プログラムを変更するからである。メニコアアクセラレータでは、コア数やアーキテクチャが異なると、特に並列化に関する最適なスレッド数などのパラメータは変化する。そして、これらのパラメータは、プログラムの性能に大きく影響する。そのため、プログラマは、環境に応じて、パラメータを変更する必要がある。しかし、実行環境ごとにパラメータを変更するのは容易ではなく、煩雑である。したがって、本実施の形態の最適化装置は、プログラマが実行環境に応じてプログラミングを行う煩雑さを解消することができる。
なお、上述した本発明の各実施の形態において、各フローチャートを参照して説明した並列処理装置および最適化装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータ装置の記憶装置(記憶媒体)に格納しておき、係るコンピュータ・プログラムを当該CPUおよびGPUが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコード或いは記憶媒体によって構成される。
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。
また、上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
(付記1)
並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する並列処理装置において、
処理対象となるアプリケーションの処理が並列処理可能に分割された各タスクを表す情報を取得する分割タスク取得部と、
前記各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する同時実行タスク数設定部と、
前記各タスクにおいてさらに並列処理可能なスレッド数および前記同時実行タスク数に基づいて、前記各スレッドアレイ内のスレッド数であるアレイ内スレッド数を設定するアレイ内スレッド数設定部と、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定するアレイ総数設定部と、
前記アレイ内スレッド数および前記アレイ総数に基づいて各スレッドおよび各スレッドアレイを生成し、各スレッドアレイの処理を前記演算装置に並列に実行させるよう制御するスレッドアレイ制御部と、
前記各スレッドアレイにおいて、前記同時実行タスク数のタスクの処理に必要なリソースを確保し、確保したリソースを各タスクに配分するリソース割当部と、
前記スレッドアレイ内の各スレッドが処理するタスクを決定する処理タスク決定部と、
前記リソース割当部によって配分されたリソースを用いて、前記処理タスク決定部によって決定されたタスクを各スレッドに実行させることにより、前記各スレッドアレイにおいて前記同時実行タスク数のタスクを実行するタスク実行部と、
を備えた並列処理装置。
(付記2)
前記アレイ内スレッド数設定部は、前記各タスクの処理に必要なスレッド構成の次元に、各スレッドの処理対象となるタスクを識別するためのタスク決定次元を加えた多次元で表されるスレッド構成を設定し、
前記処理タスク決定部は、前記各スレッドのタスク決定次元に基づいて、前記各スレッドが処理するタスクを決定することを特徴とする付記1に記載の並列処理装置。
(付記3)
前記同時実行タスク数設定部は、前記スレッドアレイ毎に個別の前記同時実行タスク数を設定することを特徴とする付記1または付記2に記載の並列処理装置。
(付記4)
前記同時実行タスク数設定部は、前記各タスクに関連するタスク情報および前記演算装置の構成に関連する演算装置構成情報の少なくとも1つに基づいて、前記同時実行タスク数を設定することを特徴とする付記1から付記3のいずれかに記載の並列処理装置。
(付記5)
前記同時実行タスク数設定部は、前記タスク情報および前記演算装置構成情報の少なくとも1つを前記アプリケーション実行時に取得することにより、取得した情報に基づいて前記同時実行タスク数を設定することを特徴とする付記4に記載の並列処理装置。
(付記6)
前記タスク情報は、前記各タスクの処理に必要なリソース量、前記各タスクの処理に必要なスレッド数、および、前記各タスクの負荷情報の少なくとも1つであることを特徴とする付記4または付記5に記載の並列処理装置。
(付記7)
前記演算装置構成情報は、前記演算装置が有するリソース量、プロセッサコア数、および、各プロセッサコア性能情報の少なくとも1つであることを特徴とする付記4から付記6のいずれかに記載の並列処理装置。
(付記8)
並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する処理が記述されたコンピュータ・プログラムを最適化する最適化装置であって、
処理対象とするアプリケーションが並列処理可能に分割された各タスクの処理を実行させるためのスレッドアレイ、および、各タスクの処理がさらに並列処理可能に分割されたスレッドを生成するステップと、前記各タスクの処理に必要なリソースを前記スレッドアレイにおいて確保して割り当てるステップと、前記各スレッドが処理するタスクを決定するステップと、割り当てられたリソースを用いて、決定されたタスクを各スレッドに実行させるステップと、を含むコンピュータ・プログラムを表す情報を取得するプログラム取得部と、
前記タスクに関連するタスク情報および前記演算装置の構成に関連する演算装置構成情報の少なくとも1つに基づいて、各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する同時実行タスク数設定部と、
前記各タスクに必要となるスレッド数および前記同時実行タスク数に基づいて、前記アレイ内スレッド数を設定するアレイ内スレッド数設定部と、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定するアレイ総数設定部と、
前記コンピュータ・プログラムの、前記スレッドおよび前記スレッドアレイを生成するステップを、前記アレイ内スレッド数および前記アレイ総数に基づいて生成を行うよう変更し、前記スレッドアレイにおいてリソースを確保して割り当てるステップを、前記同時実行タスク数分のタスクの実行に必要なリソースを確保して割り当てるよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記スレッドアレイ内で実行させる同時実行タスク数のタスクのいずれかに決定するよう変更し、前記スレッドに前記タスクを実行させるステップを、該タスクに割り当てられたリソースを使用するよう変更するプログラム変更部と、
を備えた最適化装置。
(付記9)
前記アレイ内スレッド数設定部は、前記各タスクの処理に必要なスレッド構成の次元に、各スレッドの処理対象となるタスクを識別するためのタスク決定次元を加えた多次元で表されるスレッド構成を決定し、
前記プログラム変更部は、前記スレッドおよび前記スレッドアレイを生成するステップを、前記スレッド構成に基づいて、前記アレイ内スレッド数のスレッドを有する各スレッドアレイを生成するよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記タスク決定次元に基づいて該スレッドが処理するタスクを決定するよう変更し、前記各スレッドに前記タスクを実行させるステップを、前記タスク決定次元に基づき選択されるリソースを使用するよう変更することを特徴とする付記8に記載の最適化装置。
(付記10)
並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する並列処理方法であって、
処理対象となるアプリケーションの処理が並列処理可能に分割された各タスクを表す情報を取得し、
前記各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定し、
前記各タスクにおいてさらに並列処理可能なスレッド数および前記同時実行タスク数に基づいて、前記各スレッドアレイ内のスレッド数であるアレイ内スレッド数を設定し、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定し、
前記アレイ内スレッド数および前記アレイ総数に基づいて各スレッドおよび各スレッドアレイを生成し、各スレッドアレイの処理を前記演算装置に並列に実行させるよう制御し、
前記各スレッドアレイにおいて、前記同時実行タスク数のタスクの処理に必要なリソースを確保し、確保したリソースを各タスクに配分し、
前記スレッドアレイ内の各スレッドが処理するタスクを決定し、
前記リソース割当部によって配分されたリソースを用いて、前記処理タスク決定部によって決定されたタスクを各スレッドに実行させることにより、前記各スレッドアレイにおいて前記同時実行タスク数のタスクを実行する、並列処理方法。
(付記11)
前記アレイ内スレッド数を設定する際に、前記各タスクの処理に必要なスレッド構成の次元に、各スレッドの処理対象となるタスクを識別するためのタスク決定次元を加えた多次元で表されるスレッド構成を決定し、
前記各スレッドが処理するタスクを決定する際に、前記各スレッドのタスク決定次元に基づいて、前記各スレッドが処理するタスクを決定することを特徴とする付記10に記載の並列処理方法。
(付記12)
並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する並列処理装置に、
処理対象となるアプリケーションの処理が並列処理可能に分割された各タスクを表す情報を取得する分割タスク取得ステップと、
前記各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する同時実行タスク数設定ステップと、
前記各タスクにおいてさらに並列処理可能なスレッド数および前記同時実行タスク数に基づいて、前記各スレッドアレイ内のスレッド数であるアレイ内スレッド数を設定するアレイ内スレッド数設定ステップと、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定するアレイ総数設定ステップと、
前記アレイ内スレッド数および前記アレイ総数に基づいて各スレッドおよび各スレッドアレイを生成し、各スレッドアレイの処理を前記演算装置に並列に実行させるよう制御するスレッドアレイ制御ステップと、
前記各スレッドアレイにおいて、前記同時実行タスク数のタスクの処理に必要なリソースを確保し、確保したリソースを各タスクに配分するリソース割当ステップと、
前記スレッドアレイ内の各スレッドが処理するタスクを決定する処理タスク決定ステップと、
前記リソース割当部によって配分されたリソースを用いて、前記処理タスク決定部によって決定されたタスクを各スレッドに実行させることにより、前記各スレッドアレイにおいて前記同時実行タスク数のタスクを実行するタスク実行ステップと、
を実行させるコンピュータ・プログラム。
(付記13)
前記アレイ内スレッド数設定ステップにおいて、前記各タスクの処理に必要なスレッド構成の次元に、各スレッドの処理対象となるタスクを識別するためのタスク決定次元を加えた多次元で表されるスレッド構成を設定し、
前記処理タスク決定ステップにおいて、前記各スレッドのタスク決定次元に基づいて、前記各スレッドが処理するタスクを決定することを特徴とする付記12に記載のコンピュータ・プログラム。
(付記14)
並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する処理が記述されたコンピュータ・プログラムを最適化する最適化方法であって、
処理対象とするアプリケーションが並列処理可能に分割された各タスクの処理を実行させるためのスレッドアレイ、および、各タスクの処理がさらに並列処理可能に分割されたスレッドを生成するステップと、前記各タスクの処理に必要なリソースを前記スレッドアレイにおいて確保して割り当てるステップと、前記各スレッドが処理するタスクを決定するステップと、割り当てられたリソースを用いて、決定されたタスクを各スレッドに実行させるステップと、を含むコンピュータ・プログラムを表す情報を取得し、
前記タスクに関連するタスク情報および前記演算装置の構成に関連する演算装置構成情報の少なくとも1つに基づいて、各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定し、
前記各タスクに必要となるスレッド数および前記同時実行タスク数に基づいて、前記アレイ内スレッド数を設定し、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定し、
前記コンピュータ・プログラムの、前記スレッドおよび前記スレッドアレイを生成するステップを、前記アレイ内スレッド数および前記アレイ総数に基づいて生成を行うよう変更し、前記スレッドアレイにおいてリソースを確保して割り当てるステップを、前記同時実行タスク数分のタスクの実行に必要なリソースを確保して割り当てるよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記スレッドアレイ内で実行させる同時実行タスク数のタスクのいずれかに決定するよう変更し、前記スレッドに前記タスクを実行させるステップを、該タスクに割り当てられたリソースを使用するよう変更する、最適化方法。
(付記15)
前記アレイ内スレッド数を設定する際に、前記各タスクの処理に必要なスレッド構成の次元に、各スレッドの処理対象となるタスクを識別するためのタスク決定次元を加えた多次元で表されるスレッド構成を決定し、
前記プログラムの各ステップを変更する際に、前記スレッドおよび前記スレッドアレイを生成するステップを、前記スレッド構成に基づいて、前記アレイ内スレッド数のスレッドを有する各スレッドアレイを生成するよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記タスク決定次元に基づいて該スレッドが処理するタスクを決定するよう変更し、前記各スレッドに前記タスクを実行させるステップを、前記タスク決定次元に基づき選択されるリソースを使用するよう変更することを特徴とする付記14に記載の最適化方法。
(付記16)
並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する処理が記述されたコンピュータ・プログラムを最適化するためのコンピュータ・プログラムであって、
処理対象とするアプリケーションが並列処理可能に分割された各タスクの処理を実行させるためのスレッドアレイ、および、各タスクの処理がさらに並列処理可能に分割されたスレッドを生成するステップと、前記各タスクの処理に必要なリソースを前記スレッドアレイにおいて確保して割り当てるステップと、前記各スレッドが処理するタスクを決定するステップと、割り当てられたリソースを用いて、決定されたタスクを各スレッドに実行させるステップと、を含むコンピュータ・プログラムを表す情報を取得するプログラム取得ステップと、
前記タスクに関連するタスク情報および前記演算装置の構成に関連する演算装置構成情報の少なくとも1つに基づいて、各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する同時実行タスク数設定ステップと、
前記各タスクに必要となるスレッド数および前記同時実行タスク数に基づいて、前記アレイ内スレッド数を設定するアレイ内スレッド数設定ステップと、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定するアレイ総数設定ステップと、
前記コンピュータ・プログラムの、前記スレッドおよび前記スレッドアレイを生成するステップを、前記アレイ内スレッド数および前記アレイ総数に基づいて生成を行うよう変更し、前記スレッドアレイにおいてリソースを確保して割り当てるステップを、前記同時実行タスク数分のタスクの実行に必要なリソースを確保して割り当てるよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記スレッドアレイ内で実行させる同時実行タスク数のタスクのいずれかに決定するよう変更し、前記スレッドに前記タスクを実行させるステップを、該タスクに割り当てられたリソースを使用するよう変更するプログラム変更ステップと、
をコンピュータ装置に実行させるコンピュータ・プログラム。
(付記17)
前記アレイ内スレッド数設定ステップにおいて、前記各タスクの処理に必要なスレッド構成の次元に、各スレッドの処理対象となるタスクを識別するためのタスク決定次元を加えた多次元で表されるスレッド構成を決定し、
前記プログラム変更ステップにおいて、前記スレッドおよび前記スレッドアレイを生成するステップを、前記スレッド構成に基づいて、前記アレイ内スレッド数のスレッドを有する各スレッドアレイを生成するよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記タスク決定次元に基づいて該スレッドが処理するタスクを決定するよう変更し、前記各スレッドに前記タスクを実行させるステップを、前記タスク決定次元に基づき選択されるリソースを使用するよう変更することを特徴とする付記16に記載のコンピュータ・プログラム。
この出願は、2011年5月19日に出願された日本出願特願2011−112331を基礎とする優先権を主張し、その開示の全てをここに取り込む。
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
5 最適化装置
101 分割タスク取得部
102、302、402、524 同時実行タスク数設定部
103、203、303 アレイ内スレッド数設定部
104、304 アレイ総数設定部
105 スレッドアレイ制御部
106、206、306 リソース割当部
107、207、307 処理タスク決定部
108 タスク実行部
310、522 タスク情報取得部
311 アレイ−タスク対応表
312、523 演算装置構成情報取得部
313 コア−アレイ対応表
414 実行時情報取得部
521 プログラム取得部
525 プログラム変更部
900 アプリケーション実行部
911 CTA内スレッド数設定部
912 CTA数設定部
913 タスク分割部
924 CTA制御部
925 処理タスク決定部
926 タスク実行部
931 パラメータ変更部
932 実行時間取得部
933 最適パラメータ選択部
941 アプリケーション合成部
942 処理アプリケーション選択部
1001 CPU
1002 RAM
1003 ROM
1004 GPU
1005 記憶装置
1006 入力装置
Claims (10)
- 並列処理可能なスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いて並列処理する並列処理装置において、
処理対象となるアプリケーションの処理が並列処理可能に分割された各タスクを表す情報を取得する分割タスク取得部と、
前記各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する同時実行タスク数設定部と、
前記各タスクにおいて並列処理可能なスレッド数および前記同時実行タスク数に基づいて、前記各スレッドアレイ内のスレッド数であるアレイ内スレッド数を設定するアレイ内スレッド数設定部と、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定するアレイ総数設定部と、
前記アレイ内スレッド数および前記アレイ総数に基づいて各スレッドおよび各スレッドアレイを生成し、各スレッドアレイの処理を前記演算装置に並列に実行させるよう制御するスレッドアレイ制御部と、
前記各スレッドアレイにおいて、前記同時実行タスク数のタスクの処理に必要なリソースを確保し、確保したリソースを各タスクに配分するリソース割当部と、
前記スレッドアレイ内の各スレッドが処理するタスクを決定する処理タスク決定部と、
前記リソース割当部によって配分されたリソースを用いて、前記処理タスク決定部によって決定されたタスクを各スレッドに実行させることにより、前記各スレッドアレイにおいて前記同時実行タスク数のタスクを実行するタスク実行部と、
を備えた並列処理装置。 - 前記アレイ内スレッド数設定部は、前記各タスクの処理に必要なスレッドアレイ内の構成の次元に、各スレッドの処理対象となるタスクを識別するためのタスク決定次元を加えた多次元で表されるスレッドアレイ内の構成を設定し、
前記処理タスク決定部は、前記各スレッドのタスク決定次元に基づいて、前記各スレッドが処理するタスクを決定することを特徴とする請求項1に記載の並列処理装置。 - 前記同時実行タスク数設定部は、前記スレッドアレイ毎に個別の前記同時実行タスク数を設定することを特徴とする請求項1または請求項2に記載の並列処理装置。
- 前記同時実行タスク数設定部は、前記各タスクに関連するタスク情報および前記演算装置の構成に関連する演算装置構成情報の少なくとも1つに基づいて、前記同時実行タスク数を設定することを特徴とする請求項1から請求項3のいずれかに記載の並列処理装置。
- 前記同時実行タスク数設定部は、前記タスク情報および前記演算装置構成情報の少なくとも1つを前記アプリケーションの実行時に取得することにより、取得した情報に基づいて前記同時実行タスク数を設定することを特徴とする請求項4に記載の並列処理装置。
- 並列処理可能なスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いて並列処理する処理が記述されたコンピュータ・プログラムを最適化する最適化装置であって、
処理対象とするアプリケーションが並列処理可能に分割された各タスクの処理を実行させるためのスレッドアレイ、および、各タスクの処理が並列処理可能に分割されたスレッドを生成するステップと、前記各タスクの処理に必要なリソースを前記スレッドアレイにおいて確保して割り当てるステップと、前記各スレッドが処理するタスクを決定するステップと、割り当てられたリソースを用いて、決定されたタスクを各スレッドに実行させるステップと、を含むコンピュータ・プログラムを表す情報を取得するプログラム取得部と、
前記タスクに関連するタスク情報および前記演算装置の構成に関連する演算装置構成情報の少なくとも1つに基づいて、各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する同時実行タスク数設定部と、
前記各タスクに必要となるスレッド数および前記同時実行タスク数に基づいて、前記各スレッドアレイ内のスレッド数であるアレイ内スレッド数を設定するアレイ内スレッド数設定部と、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定するアレイ総数設定部と、
前記コンピュータ・プログラムの、前記スレッドおよび前記スレッドアレイを生成するステップを、前記アレイ内スレッド数および前記アレイ総数に基づいて生成を行うよう変更し、前記スレッドアレイにおいてリソースを確保して割り当てるステップを、前記同時実行タスク数分のタスクの実行に必要なリソースを確保して割り当てるよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記スレッドアレイ内で実行させる同時実行タスク数のタスクのいずれかに決定するよう変更し、前記スレッドに前記タスクを実行させるステップを、該タスクに割り当てられたリソースを使用するよう変更するプログラム変更部と、
を備えた最適化装置。 - 並列処理可能なスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いて並列処理する並列処理方法であって、
処理対象となるアプリケーションの処理が並列処理可能に分割された各タスクを表す情報を取得し、
前記各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定し、
前記各タスクにおいて並列処理可能なスレッド数および前記同時実行タスク数に基づいて、前記各スレッドアレイ内のスレッド数であるアレイ内スレッド数を設定し、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定し、
前記アレイ内スレッド数および前記アレイ総数に基づいて各スレッドおよび各スレッドアレイを生成し、各スレッドアレイの処理を前記演算装置に並列に実行させるよう制御し、
前記各スレッドアレイにおいて、前記同時実行タスク数のタスクの処理に必要なリソースを確保し、確保したリソースを各タスクに配分し、
前記スレッドアレイ内の各スレッドが処理するタスクを決定し、
配分されたリソースを用いて、決定されたタスクを各スレッドに実行させることにより、前記各スレッドアレイにおいて前記同時実行タスク数のタスクを実行する、並列処理方法。 - 並列処理可能なスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いて並列処理する並列処理装置に、
処理対象となるアプリケーションの処理が並列処理可能に分割された各タスクを表す情報を取得する分割タスク取得ステップと、
前記各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する同時実行タスク数設定ステップと、
前記各タスクにおいて並列処理可能なスレッド数および前記同時実行タスク数に基づいて、前記各スレッドアレイ内のスレッド数であるアレイ内スレッド数を設定するアレイ内スレッド数設定ステップと、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定するアレイ総数設定ステップと、
前記アレイ内スレッド数および前記アレイ総数に基づいて各スレッドおよび各スレッドアレイを生成し、各スレッドアレイの処理を前記演算装置に並列に実行させるよう制御するスレッドアレイ制御ステップと、
前記各スレッドアレイにおいて、前記同時実行タスク数のタスクの処理に必要なリソースを確保し、確保したリソースを各タスクに配分するリソース割当ステップと、
前記スレッドアレイ内の各スレッドが処理するタスクを決定する処理タスク決定ステップと、
配分されたリソースを用いて、決定されたタスクを各スレッドに実行させることにより、前記各スレッドアレイにおいて前記同時実行タスク数のタスクを実行するタスク実行ステップと、
を実行させるコンピュータ・プログラム。 - 並列処理可能なスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いて並列処理する処理が記述されたコンピュータ・プログラムを最適化する最適化方法であって、
処理対象とするアプリケーションが並列処理可能に分割された各タスクの処理を実行させるためのスレッドアレイ、および、各タスクの処理が並列処理可能に分割されたスレッドを生成するステップと、前記各タスクの処理に必要なリソースを前記スレッドアレイにおいて確保して割り当てるステップと、前記各スレッドが処理するタスクを決定するステップと、割り当てられたリソースを用いて、決定されたタスクを各スレッドに実行させるステップと、を含むコンピュータ・プログラムを表す情報を取得し、
前記タスクに関連するタスク情報および前記演算装置の構成に関連する演算装置構成情報の少なくとも1つに基づいて、各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定し、
前記各タスクに必要となるスレッド数および前記同時実行タスク数に基づいて、前記各スレッドアレイ内のスレッド数であるアレイ内スレッド数を設定し、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定し、
前記コンピュータ・プログラムの、前記スレッドおよび前記スレッドアレイを生成するステップを、前記アレイ内スレッド数および前記アレイ総数に基づいて生成を行うよう変更し、前記スレッドアレイにおいてリソースを確保して割り当てるステップを、前記同時実行タスク数分のタスクの実行に必要なリソースを確保して割り当てるよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記スレッドアレイ内で実行させる同時実行タスク数のタスクのいずれかに決定するよう変更し、前記スレッドに前記タスクを実行させるステップを、該タスクに割り当てられたリソースを使用するよう変更する、最適化方法。 - 並列処理可能なスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する処理が記述されたコンピュータ・プログラムを最適化するためのコンピュータ・プログラムであって、
処理対象とするアプリケーションが並列処理可能に分割された各タスクの処理を実行させるためのスレッドアレイ、および、各タスクの処理が並列処理可能に分割されたスレッドを生成するステップと、前記各タスクの処理に必要なリソースを前記スレッドアレイにおいて確保して割り当てるステップと、前記各スレッドが処理するタスクを決定するステップと、割り当てられたリソースを用いて、決定されたタスクを各スレッドに実行させるステップと、を含むコンピュータ・プログラムを表す情報を取得するプログラム取得ステップと、
前記タスクに関連するタスク情報および前記演算装置の構成に関連する演算装置構成情報の少なくとも1つに基づいて、各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する同時実行タスク数設定ステップと、
前記各タスクに必要となるスレッド数および前記同時実行タスク数に基づいて、前記各スレッドアレイ内のスレッド数であるアレイ内スレッド数を設定するアレイ内スレッド数設定ステップと、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定するアレイ総数設定ステップと、
前記コンピュータ・プログラムの、前記スレッドおよび前記スレッドアレイを生成するステップを、前記アレイ内スレッド数および前記アレイ総数に基づいて生成を行うよう変更し、前記スレッドアレイにおいてリソースを確保して割り当てるステップを、前記同時実行タスク数分のタスクの実行に必要なリソースを確保して割り当てるよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記スレッドアレイ内で実行させる同時実行タスク数のタスクのいずれかに決定するよう変更し、前記スレッドに前記タスクを実行させるステップを、該タスクに割り当てられたリソースを使用するよう変更するプログラム変更ステップと、
をコンピュータ装置に実行させるコンピュータ・プログラム。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2011112331 | 2011-05-19 | ||
JP2011112331 | 2011-05-19 | ||
PCT/JP2012/063405 WO2012157786A1 (ja) | 2011-05-19 | 2012-05-18 | 並列処理装置、並列処理方法、最適化装置、最適化方法、および、コンピュータ・プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JPWO2012157786A1 JPWO2012157786A1 (ja) | 2014-07-31 |
JP6040937B2 true JP6040937B2 (ja) | 2016-12-07 |
Family
ID=47177100
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013515244A Expired - Fee Related JP6040937B2 (ja) | 2011-05-19 | 2012-05-18 | 並列処理装置、並列処理方法、最適化装置、最適化方法、および、コンピュータ・プログラム |
Country Status (4)
Country | Link |
---|---|
US (1) | US9152462B2 (ja) |
EP (1) | EP2711839A4 (ja) |
JP (1) | JP6040937B2 (ja) |
WO (1) | WO2012157786A1 (ja) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8813245B1 (en) | 2013-01-25 | 2014-08-19 | Amazon Technologies, Inc. | Securing content using pipelines |
US9183049B1 (en) * | 2013-01-25 | 2015-11-10 | Amazon Technologies, Inc. | Processing content using pipelines |
US9223621B1 (en) | 2013-01-25 | 2015-12-29 | Amazon Technologies, Inc. | Organizing content using pipelines |
US10235732B2 (en) * | 2013-12-27 | 2019-03-19 | Intel Corporation | Scheduling and dispatch of GPGPU workloads |
CN106681824A (zh) * | 2015-11-10 | 2017-05-17 | 阿里巴巴集团控股有限公司 | 用于分布式系统的调度方法、装置及电子设备 |
US10169275B2 (en) | 2015-11-27 | 2019-01-01 | International Business Machines Corporation | System, method, and recording medium for topology-aware parallel reduction in an accelerator |
EP3208712B1 (en) * | 2016-02-22 | 2020-02-19 | Karlsruher Institut für Technologie | Computer system and method for parallel program code optimization and deployment |
US10565017B2 (en) * | 2016-09-23 | 2020-02-18 | Samsung Electronics Co., Ltd. | Multi-thread processor and controlling method thereof |
KR102592330B1 (ko) * | 2016-12-27 | 2023-10-20 | 삼성전자주식회사 | OpenCL 커널을 처리하는 방법과 이를 수행하는 컴퓨팅 장치 |
US10346166B2 (en) * | 2017-04-28 | 2019-07-09 | Intel Corporation | Intelligent thread dispatch and vectorization of atomic operations |
CN108170528A (zh) * | 2017-12-25 | 2018-06-15 | 深圳豪客互联网有限公司 | 一种通知展示方法及装置 |
CN108710538B (zh) * | 2018-05-14 | 2023-06-02 | 中国平安人寿保险股份有限公司 | 一种线程配置方法、计算机可读存储介质及终端设备 |
US10678594B2 (en) | 2020-01-09 | 2020-06-09 | Alipay Labs (singapore) Pte. Ltd. | System and method for optimizing resource allocation using GPU |
CN113535346B (zh) * | 2020-04-21 | 2024-03-19 | 中移动信息技术有限公司 | 线程数量调整的方法、装置、设备及计算机存储介质 |
WO2022053183A1 (en) * | 2020-09-10 | 2022-03-17 | NEC Laboratories Europe GmbH | Method and system for supporting throughput-oriented computing |
CN113076181B (zh) * | 2021-03-04 | 2023-09-26 | 山东英信计算机技术有限公司 | 一种数据处理流程优化方法、系统及存储介质 |
US20230297426A1 (en) * | 2022-03-18 | 2023-09-21 | Nvidia Corporation | Reconfiguring register and shared memory usage in thread arrays |
CN114579284B (zh) * | 2022-03-30 | 2024-10-18 | 阿里巴巴(中国)有限公司 | 任务调度方法及装置 |
CN115185677A (zh) * | 2022-06-24 | 2022-10-14 | 湖南长银五八消费金融股份有限公司 | 业务数据合并总账方法、装置、计算机设备及介质 |
CN115756794A (zh) * | 2022-11-22 | 2023-03-07 | 北京地平线信息技术有限公司 | 任务调度执行方法、任务调度执行指令的生成方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009259241A (ja) * | 2008-04-09 | 2009-11-05 | Nvidia Corp | 汎用プロセッサによるリターゲティングされたグラフィックプロセッサ加速コードの実行 |
JP2011523140A (ja) * | 2008-06-06 | 2011-08-04 | アップル インコーポレイテッド | マルチプロセッサのための多次元スレッドグループ化 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5724512A (en) * | 1995-04-17 | 1998-03-03 | Lucent Technologies Inc. | Methods and apparatus for storage and retrieval of name space information in a distributed computing system |
US6272486B1 (en) * | 1998-04-16 | 2001-08-07 | International Business Machines Corporation | Determining the optimal number of tasks for building a database index |
JP4448784B2 (ja) * | 2005-03-15 | 2010-04-14 | 株式会社日立製作所 | 並列計算機の同期方法及びプログラム |
US7788468B1 (en) | 2005-12-15 | 2010-08-31 | Nvidia Corporation | Synchronization of threads in a cooperative thread array |
US20070143582A1 (en) | 2005-12-16 | 2007-06-21 | Nvidia Corporation | System and method for grouping execution threads |
US7526634B1 (en) * | 2005-12-19 | 2009-04-28 | Nvidia Corporation | Counter-based delay of dependent thread group execution |
US7925860B1 (en) * | 2006-05-11 | 2011-04-12 | Nvidia Corporation | Maximized memory throughput using cooperative thread arrays |
US8321849B2 (en) | 2007-01-26 | 2012-11-27 | Nvidia Corporation | Virtual architecture and instruction set for parallel thread computing |
US8312464B2 (en) * | 2007-08-28 | 2012-11-13 | International Business Machines Corporation | Hardware based dynamic load balancing of message passing interface tasks by modifying tasks |
US8336056B1 (en) * | 2009-12-22 | 2012-12-18 | Gadir Omar M A | Multi-threaded system for data management |
BR112012032060A2 (pt) * | 2010-06-29 | 2016-11-08 | Exxonmobil Upstream Res Co | método e sistema para modelos de simulação paralela. |
US8732713B2 (en) * | 2010-09-29 | 2014-05-20 | Nvidia Corporation | Thread group scheduler for computing on a parallel thread processor |
US9110717B2 (en) * | 2012-07-05 | 2015-08-18 | International Business Machines Corporation | Managing use of lease resources allocated on fallover in a high availability computing environment |
-
2012
- 2012-05-18 WO PCT/JP2012/063405 patent/WO2012157786A1/ja active Application Filing
- 2012-05-18 JP JP2013515244A patent/JP6040937B2/ja not_active Expired - Fee Related
- 2012-05-18 EP EP12785393.5A patent/EP2711839A4/en not_active Withdrawn
- 2012-05-18 US US14/118,283 patent/US9152462B2/en not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009259241A (ja) * | 2008-04-09 | 2009-11-05 | Nvidia Corp | 汎用プロセッサによるリターゲティングされたグラフィックプロセッサ加速コードの実行 |
JP2011523140A (ja) * | 2008-06-06 | 2011-08-04 | アップル インコーポレイテッド | マルチプロセッサのための多次元スレッドグループ化 |
Also Published As
Publication number | Publication date |
---|---|
EP2711839A1 (en) | 2014-03-26 |
US20140089935A1 (en) | 2014-03-27 |
EP2711839A4 (en) | 2014-12-03 |
WO2012157786A1 (ja) | 2012-11-22 |
US9152462B2 (en) | 2015-10-06 |
JPWO2012157786A1 (ja) | 2014-07-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6040937B2 (ja) | 並列処理装置、並列処理方法、最適化装置、最適化方法、および、コンピュータ・プログラム | |
US11797348B2 (en) | Hierarchical task scheduling in a multi-threaded processing system | |
US8650384B2 (en) | Method and system for dynamically parallelizing application program | |
KR102299581B1 (ko) | 멀티 스레드 데이터 처리장치에서의 스레드 스케줄링 구성 | |
US8144149B2 (en) | System and method for dynamically load balancing multiple shader stages in a shared pool of processing units | |
US8327123B2 (en) | Maximized memory throughput on parallel processing devices | |
US20110310107A1 (en) | Information processing apparatus, method for controlling information processing apparatus, and program | |
CN104823215A (zh) | 子画面图形渲染系统 | |
KR20130123645A (ko) | 그래픽 처리 장치를 위한 동적 로드 밸런싱 장치 및 방법 | |
JP5778343B2 (ja) | グラフィックス処理ユニットでの命令カリング | |
US10388056B2 (en) | Split frame rendering | |
KR20140122835A (ko) | 프로세스 병렬 처리 장치 및 방법 | |
CN110308982A (zh) | 一种共享内存复用方法及装置 | |
CN107977444A (zh) | 基于大数据的海量数据并行处理方法 | |
Cojean et al. | Resource aggregation for task-based cholesky factorization on top of modern architectures | |
US12067640B2 (en) | Dynamically reconfigurable register file | |
TWI619074B (zh) | 用於資料處理裝置之可配置執行緒排序 | |
JP6823251B2 (ja) | 情報処理装置、情報処理方法及びプログラム | |
CN108108242A (zh) | 基于大数据的存储层智能分发控制方法 | |
US20220100543A1 (en) | Feedback mechanism for improved bandwidth and performance in virtual environment usecases | |
CN108062249A (zh) | 基于大数据的云端数据分配调度方法 | |
US20150035843A1 (en) | Graphics processing unit management system for computed tomography | |
CN118312327B (zh) | 硬件资源分配方法、电子设备与存储介质 | |
Yu et al. | A study of scientific visualization on heterogeneous processors using Legion | |
CN118312327A (zh) | 硬件资源分配方法、电子设备与存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20150417 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20160517 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20160715 |
|
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: 20161011 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20161024 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6040937 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |