(57)【要約】［課題］タスク内の並列性は低いが並列処理可能なタスクが多数存在する処理において、複数のプロセッサコアを有する演算装置における各コアの稼働率を向上させる並列処理装置を提供すること。［解決手段］アプリケーションが分割された各タスクを取得する分割タスク取得部１０１と、各スレッドアレイにおける同時実行タスク数を設定する同時実行タスク数設定部１０２と、各スレッドアレイ内のスレッド数を設定するアレイ内スレッド数設定部１０３と、アレイ総数を設定するアレイ総数設定部１０４と、各スレッドおよび各スレッドアレイを生成するスレッドアレイ制御部１０５と、各スレッドアレイにおいて同時実行タスク数のリソースを確保するリソース割当部１０６と、各スレッドが処理するタスクを決定する処理タスク決定部１０７と、決定されたタスクを各スレッドに実行させるタスク実行部１０８と、を備える。
2012157786.tif 000002
【特許請求の範囲】
【請求項１】
並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いて並列処理する並列処理装置において、
処理対象となるアプリケーションの処理が並列処理可能に分割された各タスクを表す情報を取得する分割タスク取得部と、
前記各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する同時実行タスク数設定部と、
前記各タスクにおいて並列処理可能なスレッド数および前記同時実行タスク数に基づいて、前記各スレッドアレイ内のスレッド数であるアレイ内スレッド数を設定するアレイ内スレッド数設定部と、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定するアレイ総数設定部と、
前記アレイ内スレッド数および前記アレイ総数に基づいて各スレッドおよび各スレッドアレイを生成し、各スレッドアレイの処理を前記演算装置に並列に実行させるよう制御するスレッドアレイ制御部と、
前記各スレッドアレイにおいて、前記同時実行タスク数のタスクの処理に必要なリソースを確保し、確保したリソースを各タスクに配分するリソース割当部と、
前記スレッドアレイ内の各スレッドが処理するタスクを決定する処理タスク決定部と、
前記リソース割当部によって配分されたリソースを用いて、前記処理タスク決定部によって決定されたタスクを各スレッドに実行させることにより、前記各スレッドアレイにおいて前記同時実行タスク数のタスクを実行するタスク実行部と、
を備えた並列処理装置。
【請求項２】
前記アレイ内スレッド数設定部は、前記各タスクの処理に必要なスレッド構成の次元に、各スレッドの処理対象となるタスクを識別するためのタスク決定次元を加えた多次元で表されるスレッド構成を設定し、
前記処理タスク決定部は、前記各スレッドのタスク決定次元に基づいて、前記各スレッドが処理するタスクを決定することを特徴とする請求項１に記載の並列処理装置。
【請求項３】
前記同時実行タスク数設定部は、前記スレッドアレイ毎に個別の前記同時実行タスク数を設定することを特徴とする請求項１または請求項２に記載の並列処理装置。
【請求項４】
前記同時実行タスク数設定部は、前記各タスクに関連するタスク情報および前記演算装置の構成に関連する演算装置構成情報の少なくとも１つに基づいて、前記同時実行タスク数を設定することを特徴とする請求項１から請求項３のいずれかに記載の並列処理装置。
【請求項５】
前記同時実行タスク数設定部は、前記タスク情報および前記演算装置構成情報の少なくとも１つを前記アプリケーション実行時に取得することにより、取得した情報に基づいて前記同時実行タスク数を設定することを特徴とする請求項４に記載の並列処理装置。
【請求項６】
並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いて並列処理する処理が記述されたコンピュータ・プログラムを最適化する最適化装置であって、
処理対象とするアプリケーションが並列処理可能に分割された各タスクの処理を実行させるためのスレッドアレイ、および、各タスクの処理が並列処理可能に分割されたスレッドを生成するステップと、前記各タスクの処理に必要なリソースを前記スレッドアレイにおいて確保して割り当てるステップと、前記各スレッドが処理するタスクを決定するステップと、割り当てられたリソースを用いて、決定されたタスクを各スレッドに実行させるステップと、を含むコンピュータ・プログラムを表す情報を取得するプログラム取得部と、
前記タスクに関連するタスク情報および前記演算装置の構成に関連する演算装置構成情報の少なくとも１つに基づいて、各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する同時実行タスク数設定部と、
前記各タスクに必要となるスレッド数および前記同時実行タスク数に基づいて、前記アレイ内スレッド数を設定するアレイ内スレッド数設定部と、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定するアレイ総数設定部と、
前記コンピュータ・プログラムの、前記スレッドおよび前記スレッドアレイを生成するステップを、前記アレイ内スレッド数および前記アレイ総数に基づいて生成を行うよう変更し、前記スレッドアレイにおいてリソースを確保して割り当てるステップを、前記同時実行タスク数分のタスクの実行に必要なリソースを確保して割り当てるよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記スレッドアレイ内で実行させる同時実行タスク数のタスクのいずれかに決定するよう変更し、前記スレッドに前記タスクを実行させるステップを、該タスクに割り当てられたリソースを使用するよう変更するプログラム変更部と、
を備えた最適化装置。
【請求項７】
並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いて並列処理する並列処理方法であって、
処理対象となるアプリケーションの処理が並列処理可能に分割された各タスクを表す情報を取得し、
前記各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定し、
前記各タスクにおいて並列処理可能なスレッド数および前記同時実行タスク数に基づいて、前記各スレッドアレイ内のスレッド数であるアレイ内スレッド数を設定し、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定し、
前記アレイ内スレッド数および前記アレイ総数に基づいて各スレッドおよび各スレッドアレイを生成し、各スレッドアレイの処理を前記演算装置に並列に実行させるよう制御し、
前記各スレッドアレイにおいて、前記同時実行タスク数のタスクの処理に必要なリソースを確保し、確保したリソースを各タスクに配分し、
前記スレッドアレイ内の各スレッドが処理するタスクを決定し、
前記リソース割当部によって配分されたリソースを用いて、前記処理タスク決定部によって決定されたタスクを各スレッドに実行させることにより、前記各スレッドアレイにおいて前記同時実行タスク数のタスクを実行する、並列処理方法。
【請求項８】
並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いて並列処理する並列処理装置に、
処理対象となるアプリケーションの処理が並列処理可能に分割された各タスクを表す情報を取得する分割タスク取得ステップと、
前記各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する同時実行タスク数設定ステップと、
前記各タスクにおいて並列処理可能なスレッド数および前記同時実行タスク数に基づいて、前記各スレッドアレイ内のスレッド数であるアレイ内スレッド数を設定するアレイ内スレッド数設定ステップと、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定するアレイ総数設定ステップと、
前記アレイ内スレッド数および前記アレイ総数に基づいて各スレッドおよび各スレッドアレイを生成し、各スレッドアレイの処理を前記演算装置に並列に実行させるよう制御するスレッドアレイ制御ステップと、
前記各スレッドアレイにおいて、前記同時実行タスク数のタスクの処理に必要なリソースを確保し、確保したリソースを各タスクに配分するリソース割当ステップと、
前記スレッドアレイ内の各スレッドが処理するタスクを決定する処理タスク決定ステップと、
前記リソース割当部によって配分されたリソースを用いて、前記処理タスク決定部によって決定されたタスクを各スレッドに実行させることにより、前記各スレッドアレイにおいて前記同時実行タスク数のタスクを実行するタスク実行ステップと、
を実行させるコンピュータ・プログラム。
【請求項９】
並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いて並列処理する処理が記述されたコンピュータ・プログラムを最適化する最適化方法であって、
処理対象とするアプリケーションが並列処理可能に分割された各タスクの処理を実行させるためのスレッドアレイ、および、各タスクの処理が並列処理可能に分割されたスレッドを生成するステップと、前記各タスクの処理に必要なリソースを前記スレッドアレイにおいて確保して割り当てるステップと、前記各スレッドが処理するタスクを決定するステップと、割り当てられたリソースを用いて、決定されたタスクを各スレッドに実行させるステップと、を含むコンピュータ・プログラムを表す情報を取得し、
前記タスクに関連するタスク情報および前記演算装置の構成に関連する演算装置構成情報の少なくとも１つに基づいて、各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定し、
前記各タスクに必要となるスレッド数および前記同時実行タスク数に基づいて、前記アレイ内スレッド数を設定し、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定し、
前記コンピュータ・プログラムの、前記スレッドおよび前記スレッドアレイを生成するステップを、前記アレイ内スレッド数および前記アレイ総数に基づいて生成を行うよう変更し、前記スレッドアレイにおいてリソースを確保して割り当てるステップを、前記同時実行タスク数分のタスクの実行に必要なリソースを確保して割り当てるよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記スレッドアレイ内で実行させる同時実行タスク数のタスクのいずれかに決定するよう変更し、前記スレッドに前記タスクを実行させるステップを、該タスクに割り当てられたリソースを使用するよう変更する、最適化方法。
【請求項１０】
並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する処理が記述されたコンピュータ・プログラムを最適化するためのコンピュータ・プログラムであって、
処理対象とするアプリケーションが並列処理可能に分割された各タスクの処理を実行させるためのスレッドアレイ、および、各タスクの処理が並列処理可能に分割されたスレッドを生成するステップと、前記各タスクの処理に必要なリソースを前記スレッドアレイにおいて確保して割り当てるステップと、前記各スレッドが処理するタスクを決定するステップと、割り当てられたリソースを用いて、決定されたタスクを各スレッドに実行させるステップと、を含むコンピュータ・プログラムを表す情報を取得するプログラム取得ステップと、
前記タスクに関連するタスク情報および前記演算装置の構成に関連する演算装置構成情報の少なくとも１つに基づいて、各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する同時実行タスク数設定ステップと、
前記各タスクに必要となるスレッド数および前記同時実行タスク数に基づいて、前記アレイ内スレッド数を設定するアレイ内スレッド数設定ステップと、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定するアレイ総数設定ステップと、
前記コンピュータ・プログラムの、前記スレッドおよび前記スレッドアレイを生成するステップを、前記アレイ内スレッド数および前記アレイ総数に基づいて生成を行うよう変更し、前記スレッドアレイにおいてリソースを確保して割り当てるステップを、前記同時実行タスク数分のタスクの実行に必要なリソースを確保して割り当てるよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記スレッドアレイ内で実行させる同時実行タスク数のタスクのいずれかに決定するよう変更し、前記スレッドに前記タスクを実行させるステップを、該タスクに割り当てられたリソースを使用するよう変更するプログラム変更ステップと、
をコンピュータ装置に実行させるコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサコアを有する演算装置を用いた並列処理装置、並列処理方法、および、コンピュータ・プログラム、ならびに、複数のプロセッサコアを有する演算装置を搭載したコンピュータ装置に実行させるコンピュータ・プログラムを最適化する最適化装置、最適化方法、および、コンピュータ・プログラムに関する。
【背景技術】
【０００２】
複数のプロセッサコアを１つの演算装置に集積するマルチコアと呼ばれる技術が知られている。特に、多数のプロセッサコアを有する演算装置は、メニコアアクセラレータとも呼ばれる。このようなマルチコアやメニコアのアクセラレータ向けの並列コンピューティングの仮想アーキテクチャおよび命令セットの一例が、特許文献１に記載されている。この仮想アーキテクチャでは、ＣＴＡ（Ｃｏｏｐｅｒａｔｉｖｅ  Ｔｈｒｅａｄ  Ａｒｒａｙ：協調的スレッドアレイ）により並列処理が実行される。ＣＴＡとは、同じプログラムを同時に実行するｎ個のスレッドのグループである。複数のＣＴＡが並列に動作しても良い。また、並列に動作するＣＴＡの集合は、グリッドと呼ばれる。グリッド、ＣＴＡ、スレッドの包含関係を図２３に示す。グリッド、ＣＴＡ、スレッドには、それぞれＩＤが付けられる。このような仮想アーキテクチャでは、ＩＤを用いることにより、各グリッド、各ＣＴＡ、および、各スレッドが異なるデータを処理することが出来る。スレッドＩＤ、ＣＴＡ  ＩＤ、および、グリッドＩＤは、それぞれ多次元に定義されてもよい。図２３では、スレッドＩＤおよびＣＴＡ  ＩＤは、それぞれ２次元で定義されている。
例えば、１次元配列データの処理を並列に行う場合は、ＣＴＡ  ＩＤおよびスレッドＩＤは、それぞれを１次元で定義される。この場合、図２４（ｂ）に示すように、各スレッドが処理するデータの位置ｄａｔａ＿ｉｄｘは、ＣＴＡ  ＩＤ（ｃｔａ＿ｉｄ）、ＣＴＡ内のスレッド数（ｃｔａ＿ｓｉｚｅ）、および、スレッドＩＤ（ｔｈｒｅａｄ＿ｉｄ）から算出可能である。
また、例えば、２次元配列データの処理を並列に行う場合は、ＣＴＡ  ＩＤおよびスレッドＩＤは、それぞれ２次元で定義される。この場合、図２５（ｂ）に示すように、各スレッドが処理するデータの位置ｄａｔａ＿ｉｄｘのｘ座標、ｙ座標は、それぞれＣＴＡ  ＩＤ、ＣＴＡ内スレッド数、および、スレッドＩＤそれぞれのｘ値、ｙ値により算出可能である。
また、この仮想アーキテクチャにおいて、各スレッドは、他のスレッドとメモリを介してデータを共有することも可能である。論理的なスレッドと物理的なプロセッサコアは１対１対応でなくともよく、プロセッサコア数以上のスレッドが存在しても良い。この仮想アーキテクチャでは、プロセッサコア数以上の多数のスレッドやＣＴＡが生成されると、全スレッドおよび全ＣＴＡのうち一部が同時に実行される。また、ＣＴＡ内のスレッド同士は協調して動作するが、個々のＣＴＡの動作は互いに独立である。
また、特許文献２には、マルチスレッドの処理において、メモリアクセスレイテンシを隠蔽する技術が記載されている。この技術は、レイテンシ（遅延時間）の短い算術演算命令と、レイテンシの長いメモリアクセス命令とが混在している複数のスレッドの処理において、あるスレッドのメモリアクセス命令の後、そのスレッドの処理から、他のスレッドの処理にスワップする。つまり、この技術は、あるスレッドにおけるメモリアクセスを待っている間に他のスレッドの演算を行うことにより、メモリアクセスレイテンシを隠蔽する。この技術を採用した装置の動作の一例を図２６に示す。図２６の例では、スレッドｎは、算術演算ｉ〜ｉ＋２を順次実行する。次に、この装置は、スレッドｎがメモリアクセス（メモリロードｊ）を行うと、メモリがロードされるのを待つ間に、スレッドｎから他のスレッドｍにスワップする。そして、スレッドｍは、算術演算ｓ〜ｓ＋１を順次実行する。そして、この装置は、スレッドｍがメモリアクセス（メモリロードｔ）を行うと、スレッドｍから、メモリロードｊを終了したスレッドｎにスワップする。なお、ここで、ｎおよびｍはスレッドの識別子である。また、ｉ、ｓ、ｊ、ｔは、それぞれ正の整数であり、各スレッド内における算術演算およびメモリロード命令の処理順序を表している。特許文献２に記載の技術は、同一プロセッサ上で多くのスレッドが同時に実行可能な処理において、特に有効である。一方、特許文献２に記載の技術は、同時に実行可能なスレッドが少ない処理では、あるスレッドのメモリアクセスを待つ間に演算可能な他のスレッドがないケースが多くなり、メモリアクセスレイテンシを隠蔽できないことがある。
また、特許文献１に述べられている仮想アーキテクチャの実装の一つとして、ＣＵＤＡ（Ｃｏｍｐｕｔｅ  Ｕｎｉｆｉｅｄ  Ｄｅｖｉｃｅ  Ａｒｃｈｉｔｅｃｔｕｒｅ）が、非特許文献３に記載されている。このＣＵＤＡでは、同時に実行出来るＣＴＡ数に上限がある。この制限は、ＣＴＡ内のスレッド数とは関連がないため、ＣＴＡ内のスレッド数が少なければ、ＣＴＡ数の上限により全スレッド総数が少なくなる。そして、プロセッサコアあたりのスレッド数も少なくなる。したがって、ＣＵＤＡを採用した装置は、ＣＴＡ内のスレッド数が少ない処理では、メモリアクセスレイテンシを隠蔽できない。
また、特許文献１には、高品位テレビ画像生成を例として、複数のＣＴＡを使用して処理を行う装置が記載されている。この場合、処理対象となる画像が２次元であるため、スレッドおよびＣＴＡは、図２５（ａ）に示したように、２次元で定義される。そして、各スレッドは、１つの画素を処理する。ここで、高品位テレビ画像の画素数は、単一ＣＴＡ内で処理可能なスレッド数を超過する。このため、この装置は、画像を適当な領域で分割する。そして、図２５（ａ）に示すように、各ＣＴＡは、分割された各領域の処理を行う。各スレッドは、図２５（ｂ）に示すように、ＣＴＡ  ＩＤおよびスレッドＩＤを用いて、入力データを読み出す場所および出力データを書き込む場所（ｄａｔａ＿ｉｄｘ）を決定する。以下、高品位テレビ画像生成のようなアプリケーション全体の処理を、各ＣＴＡ向けに分割した各処理をタスクと呼ぶ。
このような特許文献１に記載された技術を採用した並列処理装置の構成を図２７に示す。この並列処理装置は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、メニコアのアクセラレータであるＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）とを含む。また、この並列処理装置は、機能ブロックとして、ＣＴＡ内スレッド数設定部９１１と、ＣＴＡ数設定部９１２と、タスク分割部９１３と、ＣＴＡ制御部９２４と、処理タスク決定部９２５と、タスク実行部９２６とを備える。ここで、ＣＴＡ内スレッド数設定部９１１と、ＣＴＡ数設定部９１２と、タスク分割部９１３は、ＣＰＵによって実行される。また、ＣＴＡ制御部９２４と、処理タスク決定部９２５と、タスク実行部９２６とは、ＧＰＵによって実行される。ＣＴＡ内スレッド数設定部９１１は、ＣＴＡ内スレッド数を設定する。このＣＴＡ内スレッド数は、例えば、ＣＴＡ内で処理可能なスレッド数を考慮してユーザによって入力された値が設定される。ＣＴＡ数設定部９１２は、ＣＴＡ内スレッド数を用いてＣＴＡ数を設定する。高品位テレビ画像生成の場合、スレッド総数は画素数であり固定である。したがって、ＣＴＡ内スレッド数が決定されれば、ＣＴＡ数が決定される。タスク分割部９１３は、図２８に示すように、ＣＴＡ内スレッド数に合わせて、全体の処理をタスクに分割する。ＣＴＡ制御部９２４は、入力されたＣＴＡ内スレッド数および算出されたＣＴＡ数を元に、スレッドおよびＣＴＡを生成する。また、ＣＴＡ制御部９２４は、各スレッドおよび各ＣＴＡにＩＤを付け、これらの実行を制御する。処理タスク決定部９２５およびタスク実行部９２６は、各ＣＴＡで個別に動作する。処理タスク決定部９２５は、ＣＴＡ内スレッド数およびＣＴＡ  ＩＤに基づいて、該当するＣＴＡが処理するタスクを決定する。タスク実行部９２６は、処理タスク決定部９２５によって決定されたタスクを実行する。
次に、このような特許文献１に記載された技術を採用した並列処理装置の動作を図２９に示す。まず、図２９（ａ）に示すように、ＣＴＡ内スレッド数設定部９１１は、例えば、ＣＴＡ内で処理可能なスレッド数を考慮してユーザによって入力された値を、ＣＴＡ内スレッド数として設定する（ステップＳ８０１）。次に、タスク分割部９１３は、ＣＴＡ内スレッド数に合わせて、全体の処理をタスクに分割する（ステップＳ８０２）。このとき、タスク分割部９１３は、タスク番号を図２８に示したように１次元の値で定義する。図２８におけるｋは、ｘ方向のタスク数である。ＣＴＡ内のスレッドは２次元で定義されている。次に、ＣＴＡ数設定部９１２は、ＣＴＡ内スレッド数を用いてＣＴＡ数を１次元で設定する（ステップＳ８０３）。なお、ステップＳ８０２およびステップＳ８０３の実行順序は逆でも良い。次に、ＣＴＡ制御部９２４は、設定された数のＣＴＡおよびスレッドを生成する。そして、ＣＴＡ制御部９２４は、各ＣＴＡおよび各スレッドにＩＤを付与する（ステップＳ８０４）。次に、ＣＴＡ制御部９２４は、各ＣＴＡおよび各スレッドの実行を制御する（ステップＳ８０５）。このようなＣＴＡ制御部９２４による制御の基に、各ＣＴＡにおいて実行される処理を図２９（ｂ）に示す。ここでは、まず、処理タスク決定部９２５は、ＣＴＡのＩＤ  ｎを取得する（ステップＳ８０６）。そして、処理タスク決定部９２５は、ＣＴＡ内の各スレッドがｎ番目のタスクを処理する際の対象データの位置を計算する。次に、タスク実行部９２６は、各スレッドにおいてｎ番目のタスクを実行する（ステップＳ８０７）。なお、ステップＳ８０１〜Ｓ８０３は、ＣＰＵによって実行される。また、ステップＳ８０４〜Ｓ８０５は、ＧＰＵによって実行される。また、ステップＳ８０６〜Ｓ８０７は、ＧＰＵによって各ＣＴＡで実行される。
このような並列処理装置は、高品位テレビ画像生成処理のように各要素における演算が同一で処理フローが等しい処理を行う場合であれば、全体の処理をどのようなサイズのタスクに分割してもよい。したがって、このような並列処理装置は、ＣＴＡ内のスレッド数およびＣＴＡ数をどのように設定することも可能である。そのため、このような並列処理装置は、同時実行ＣＴＡ数に制限がある場合でも、ＣＴＡあたりのスレッド数を増やすことにより同時実行スレッド数を増加させ、その結果、メモリアクセスレイテンシを隠蔽することが可能である。例えば、このような並列処理装置は、ＣＴＡ数を多くしたいときにはＣＴＡあたりのスレッド数を減らし、ＣＴＡあたりのスレッド数を多くしたいときにはＣＴＡ数を減らせば良い。例えば、図２８に示すケースよりＣＴＡ数を多くすることを考える。この場合、このような並列処理装置は、図３０に示すように、タスクあたりの領域を狭くすることにより、ＣＴＡあたりのスレッド数を減らす。ここでは、タスクあたりの領域が１６画素から４画素に減少することにより、ＣＴＡあたりのスレッド数が１６から４に減少している。これにより、このような並列処理装置は、ＣＴＡ数を多くする調整を行うことができる。
また、最適な同時実行ＣＴＡ数は実行環境によって変化する。このため、実行環境に応じてＣＴＡ数およびＣＴＡあたりのスレッド数を自動的にチューニングする手法が非特許文献１に記載されている。この非特許文献１に記載された技術は、ＣＴＡ内スレッド数を様々に変化させてそれぞれの処理時間を計測し、最も高速に実行できたＣＴＡ内スレッド数を最終的な最適値として用いる。
非特許文献１に記載の技術の構成を図３１に示す。非特許文献１に記載の技術は、図２７に示した並列処理装置と同様の機能ブロックを備えるアプリケーション実行部９００と、パラメータ変更部９３１と、実行時間取得部９３２と、最適パラメータ選択部９３３とを含む。パラメータ変更部９３１は、数種類のＣＴＡ内スレッド数をＣＴＡ内スレッド数設定部９１１に出力する。実行時間取得部９３２は、アプリケーションの実行にかかった時間を測定する。最適パラメータ選択部９３３は、最も処理時間の短かったＣＴＡ内スレッド数を最適値として決定する。
非特許文献１に記載の技術の動作を図３２に示す。パラメータ変更部９３１は、全てのパラメータ、つまりＣＴＡ内スレッド数の試行が終了していなければ（ステップＳ１１０１でＮｏ）、新たなＣＴＡ内スレッド数を設定する（ステップＳ１１０２）。次に、アプリケーション実行部９００は、設定されたパラメータのＣＴＡ内スレッド数を用いてアプリケーションを実行する（ステップＳ１１０３）。次に、実行時間取得部９３２は、アプリケーション実行にかかった時間を測定する（ステップＳ１１０４）。次に、最適パラメータ選択部９３３は、実行時間取得部９３２によって測定された時間が、それまでのパラメータでの試行時間に比べて短ければ（ステップＳ１１０５でＹｅｓ）、最適パラメータを更新する（ステップＳ１１０６）。この装置は、ステップＳ１１０１からステップＳ１１０６までの処理を、全てのパラメータの試行が終了するまで繰り返す。
ところで、メニコアアクセラレータにおいて、各プロセッサコアの稼働率が低くなる原因のひとつとして、アプリケーションの処理に必要な総スレッド数が少ないことが挙げられる。例えば、上述の高品位テレビ画像生成処理の例では、処理対象となる画素数が少ない場合がある。このような場合、上述の並列処理装置は、どのようにＣＴＡ内のスレッド数を変更しても、充分なスレッド数がないためプロセッサコアの稼働率の低下を抑制することができない。そこで、非特許文献２には、図３３に示すように、必要な総スレッド数の少ない複数のアプリケーションをまとめて並列に実行することにより、プロセッサコアの稼働率を向上させる技術が記載されている。図３３では、この技術は、実行環境に合わせて適当なサイズにタスクを分割する。ここで、タスク数が３のアプリケーションＡと、タスク数が８のアプリケーションＢとは、それぞれ並列に実行可能なタスク数がメニコアアクセラレータの処理能力よりも少ないと想定する。この場合、上述の並列処理装置は、アプリケーションＡおよびＢを、それぞれ個別にメニコアアクセラレータを用いて実行しても、並列性が低いためプロセッサコアの稼働率を低下させることになる。そこで、非特許文献２に記載の技術は、アプリケーションＡとアプリケーションＢとを並列に実行することで、個別に実行した場合よりも多くのタスクを同時に処理する。これにより、この技術は、プロセッサコアの稼働率を向上させることができる。
非特許文献２に記載の技術の構成を、図３４に示す。図３４において、非特許文献２に記載の技術は、図２７に示した特許文献１に記載の技術と同一の機能ブロック構成に加えて、アプリケーション合成部９４１と、処理アプリケーション選択部９４２とをさらに備えている。アプリケーション合成部９４１は、ＣＰＵによって実行される。また、処理アプリケーション選択部９４２は、各ＣＴＡにおいて、ＧＰＵによって実行される。
非特許文献２に記載の技術の動作を図３５に示す。まず、図３５（ａ）に示すように、ＣＴＡ内スレッド数設定部９１１は、ユーザ入力等によりＣＴＡ内のスレッド数を設定する（ステップＳ８０１）。次に、タスク分割部９１３は、ＣＴＡ内スレッド数に応じて、各アプリケーションの処理をＣＴＡサイズのタスクに分割する（ステップＳ８０２）。次に、アプリケーション合成部９４１は、複数のアプリケーションを合成して並列に実行出来る状態にする（ステップＳ９０３）。次に、ＣＴＡ数設定部９１２は、各アプリケーションに必要なＣＴＡ数の合計を、全体のＣＴＡ数として設定する（ステップＳ９０４）。次に、ＣＴＡ制御部９２４は、入力されたＣＴＡ内スレッド数およびＣＴＡ数を元に、スレッドおよびＣＴＡを生成する。そして、ＣＴＡ制御部９２４は、各スレッドおよびＣＴＡにＩＤを付ける（ステップＳ８０４）。そして、ＣＴＡ制御部９２４は、各ＣＴＡの実行を制御する（ステップＳ８０５）。このようなＣＴＡ制御部９２４の制御の元に、各ＣＴＡで実行される処理を図３５（ｂ）に示す。ここでは、まず、処理アプリケーション選択部９４２は、ＣＴＡ  ＩＤに基づいて（ステップＳ８０６）、各ＣＴＡが処理するアプリケーションを選択する（ステップＳ９０７）。次に、処理タスク決定部９２５は、ＣＴＡ  ＩＤ等に基づいて、選択したアプリケーション内のどのタスクを処理するかを決定する。そして、タスク実行部９２６は、各スレッドにおいて、処理タスク決定部９２５によって決定されたタスクを実行する（ステップＳ９０８）。
【非特許文献１】Ｇｕｏ，Ｐｉｎｇ；Ｗａｎｇ，Ｌｉｑｉａｎｇ；，″Ａｕｔｏ−Ｔｕｎｉｎｇ  ＣＵＤＡ  Ｐａｒａｍｅｔｅｒｓ  ｆｏｒ  Ｓｐａｒｓｅ  Ｍａｔｒｉｘ−Ｖｅｃｔｏｒ  Ｍｕｌｔｉｐｌｉｃａｔｉｏｎ  ｏｎ  ＧＰＵｓ″，Ｃｏｍｐｕｔａｔｉｏｎａｌ  ａｎｄ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｓｃｉｅｎｃｅｓ（ＩＣＣＩＳ），２０１０  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ，ｐｐ．１１５４−１１５７，Ｄｅｃ．２０１０．
【非特許文献２】Ｍ．Ｇｕｅｖａｒａ，Ｃ．Ｇｒｅｇｇ，Ｋ．Ｈａｚｅｌｗｏｏｄ，ａｎｄ  Ｋ．Ｓｋａｄｒｏｎ，“Ｅｎａｂｌｉｎｇ  Ｔａｓｋ  Ｐａｒａｌｌｅｌｉｓｍ  ｉｎ  ｔｈｅ  ＣＵＤＡ  Ｓｃｈｅｄｕｌｅｒ”，Ｗｏｒｋｓｈｏｐ  ｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｍｏｄｅｌｓ  ｆｏｒ  Ｅｍｅｒｇｉｎｇ  Ａｒｃｈｉｔｅｃｔｕｒｅｓ，Ｓｅｐ．２００９．
【非特許文献３】“ＮＶＩＤＩＡ  ＣＵＤＡ  Ｃ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｇｕｉｄｅ”，２０１０．
【特許文献１】特開２００８−２７６７４０号公報
【特許文献２】特開２００７−２００２８８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
メニコアアクセラレータがそのコア数に見合った性能を達成するためには、処理の並列性が高いことが重要である。しかしながら、処理自体の並列性が高くても、実行環境の制約により処理の並列性を使い切れず、プロセッサコアの稼働率が低下することがある。
一例として、動画像エンコーディングの並列処理について述べる。動画像エンコーディングでは、上述の高品位テレビ画像生成処理のように画像内のすべての画素の処理が同じではない。動画像エンコーディングでは、マクロブロックと呼ばれる画像領域毎に処理フローが異なることがある。例えば、マクロブロックごとに、画面内予測を元に圧縮を行うか、画面間予測を元に圧縮を行うかといった処理が異なる場合がある。また、動画像エンコーディングでは、マクロブロック内部の画素毎の並列処理も可能である。このように、動画像エンコーディングは、図３６のように、マクロブロック毎の並列化と、マクロブロック内部の画素毎の並列化との２階層での並列化が可能な処理である。ここで、上述の特許文献１に記載された並列処理装置では、ＣＴＡ間の処理は独立であるため、各ＣＴＡは、異なるフローの処理を並列に実行可能である。このため、特許文献１に記載された並列処理装置を用いて動画像エンコーディングを行う場合、異なる処理を行うマクロブロック単位の並列処理をＣＴＡの処理にマッピングし、同一処理を行う画素単位の並列処理をスレッドの処理にマッピングするのが自然である。この場合、ＣＴＡ数はマクロブロック数となり、ＣＴＡ内のスレッド数はマクロブロック内の画素数となる。また、１マクロブロックの処理が１タスクとなる。
例えば、特許文献１に記載の並列処理装置が、このような動画像エンコーディングを行う動作例を図３７に示す。ここでは、まず、タスク分割部９１３は、全体の処理を、マクロブロックの処理であるタスクに分割する（ステップＳ８１１）。次に、ＣＴＡ内スレッド数設定部９１１は、ＣＴＡ内スレッド数を設定する（ステップＳ８１２）。このとき、ＣＴＡ内スレッド数設定部９１１は、前述の高品位テレビ画像生成処理の場合のように、任意のＣＴＡ内のスレッド数を設定することができない。動画像エンコーディング処理の場合、ＣＴＡ内スレッド数設定部９１１は、分割されたタスク内の並列性に基づいて、ＣＴＡ内スレッド数を設定することになる。以降、ステップＳ８０３〜Ｓ８０７までの動作は、図２９に示した高品位テレビ画像生成処理を行う場合のこの並列処理装置の動作と同様である。
ここで、前述のように、動画像エンコーディング処理では、１つのタスクに必要なスレッド数が固定されている。したがって、特許文献１に記載の並列処理装置で動画像エンコーディングを行う場合において、ＣＴＡとマクロブロックとのマッピング、および、スレッドと画素とのマッピングを変更して、ＣＴＡ内のスレッド数を自由にユーザが変更することは難しい。そのため、非特許文献３に記載されているように同時に実行出来るＣＴＡ数に上限がある場合に、特許文献１に記載の並列処理装置は、ＣＴＡあたりのスレッド数を増やしてスレッド総数を充分にすることができない。つまり、このような場合、特許文献１に記載の並列処理装置は、特許文献２に記載の技術を採用してメモリアクセスレイテンシを隠蔽することができない。
また、非特許文献１および非特許文献２に記載の技術は、いずれもプロセッサコア稼働率向上技術である。しかしながら、これらの技術は、動画像エンコーディングのようなタスク内の並列性が充分になくタスク数が多い処理には対応できない。
ここで、非特許文献１および非特許文献２に記載された技術の適用によりプロセッサコアの稼働率向上が可能なアプリケーションを、図３８に示す。１つのタスクあたりに必要なスレッド数が少なくタスク数も少ないようなアプリケーションは、そもそもメニコアアクセラレータでの処理には不向きである。タスクあたりのスレッド数を充分多く設定できるが、タスク数が少ないようなアプリケーションは、非特許文献２に記載の技術を適用可能である。また、タスクあたりのスレッド数を充分多く設定でき、タスク数も充分多いようなアプリケーションは、非特許文献１に記載の技術を適用可能である。図３８からわかるように、タスクあたりのスレッド数を多く設定できないが、タスク数が多いアプリケーションを特許文献１に記載の並列処理装置で実行する場合、非特許文献１および非特許文献２に記載の技術を適用して、プロセッサコアの稼働率を十分に向上させることができない。
本発明は、上述の課題を解決するためになされたもので、タスク内の並列性は低いが並列処理可能なタスクが多数存在する処理において、複数のプロセッサコアを有する演算装置における各コアの稼働率を向上させる並列処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００４】
本発明の並列処理装置は、並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する並列処理装置において、処理対象となるアプリケーションの処理が並列処理可能に分割された各タスクを表す情報を取得する分割タスク取得部と、前記各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する同時実行タスク数設定部と、前記各タスクにおいてさらに並列処理可能なスレッド数および前記同時実行タスク数に基づいて、前記各スレッドアレイ内のスレッド数であるアレイ内スレッド数を設定するアレイ内スレッド数設定部と、前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定するアレイ総数設定部と、前記アレイ内スレッド数および前記アレイ総数に基づいて各スレッドおよび各スレッドアレイを生成し、各スレッドアレイの処理を前記演算装置に並列に実行させるよう制御するスレッドアレイ制御部と、前記各スレッドアレイにおいて、前記同時実行タスク数のタスクの処理に必要なリソースを確保し、確保したリソースを各タスクに配分するリソース割当部と、前記スレッドアレイ内の各スレッドが処理するタスクを決定する処理タスク決定部と、前記リソース割当部によって配分されたリソースを用いて、前記処理タスク決定部によって決定されたタスクを各スレッドに実行させることにより、前記各スレッドアレイにおいて前記同時実行タスク数のタスクを実行するタスク実行部と、を備える。
また、本発明の最適化装置は、並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する処理が記述されたコンピュータ・プログラムを最適化する最適化装置であって、処理対象とするアプリケーションが並列処理可能に分割された各タスクの処理を実行させるためのスレッドアレイ、および、各タスクの処理がさらに並列処理可能に分割されたスレッドを生成するステップと、前記各タスクの処理に必要なリソースを前記スレッドアレイにおいて確保して割り当てるステップと、前記各スレッドが処理するタスクを決定するステップと、割り当てられたリソースを用いて、決定されたタスクを各スレッドに実行させるステップと、を含むコンピュータ・プログラムを表す情報を取得するプログラム取得部と、前記タスクに関連するタスク情報および前記演算装置の構成に関連する演算装置構成情報の少なくとも１つに基づいて、各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する同時実行タスク数設定部と、前記各タスクに必要となるスレッド数および前記同時実行タスク数に基づいて、前記アレイ内スレッド数を設定するアレイ内スレッド数設定部と、前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定するアレイ総数設定部と、前記コンピュータ・プログラムの、前記スレッドおよび前記スレッドアレイを生成するステップを、前記アレイ内スレッド数および前記アレイ総数に基づいて生成を行うよう変更し、前記スレッドアレイにおいてリソースを確保して割り当てるステップを、前記同時実行タスク数分のタスクの実行に必要なリソースを確保して割り当てるよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記スレッドアレイ内で実行させる同時実行タスク数のタスクのいずれかに決定するよう変更し、前記スレッドに前記タスクを実行させるステップを、該タスクに割り当てられたリソースを使用するよう変更するプログラム変更部と、を備える。
また、本発明の並列処理方法は、並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する並列処理方法であって、処理対象となるアプリケーションの処理が並列処理可能に分割された各タスクを表す情報を取得し、前記各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定し、前記各タスクにおいてさらに並列処理可能なスレッド数および前記同時実行タスク数に基づいて、前記各スレッドアレイ内のスレッド数であるアレイ内スレッド数を設定し、前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定し、前記アレイ内スレッド数および前記アレイ総数に基づいて各スレッドおよび各スレッドアレイを生成し、各スレッドアレイの処理を前記演算装置に並列に実行させるよう制御し、前記各スレッドアレイにおいて、前記同時実行タスク数のタスクの処理に必要なリソースを確保し、確保したリソースを各タスクに配分し、前記スレッドアレイ内の各スレッドが処理するタスクを決定し、前記リソース割当部によって配分されたリソースを用いて、前記処理タスク決定部によって決定されたタスクを各スレッドに実行させることにより、前記各スレッドアレイにおいて前記同時実行タスク数のタスクを実行する。
また、本発明のコンピュータ・プログラムは、並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する並列処理装置に、処理対象となるアプリケーションの処理が並列処理可能に分割された各タスクを表す情報を取得する分割タスク取得ステップと、前記各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する同時実行タスク数設定ステップと、前記各タスクにおいてさらに並列処理可能なスレッド数および前記同時実行タスク数に基づいて、前記各スレッドアレイ内のスレッド数であるアレイ内スレッド数を設定するアレイ内スレッド数設定ステップと、前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定するアレイ総数設定ステップと、前記アレイ内スレッド数および前記アレイ総数に基づいて各スレッドおよび各スレッドアレイを生成し、各スレッドアレイの処理を前記演算装置に並列に実行させるよう制御するスレッドアレイ制御ステップと、前記各スレッドアレイにおいて、前記同時実行タスク数のタスクの処理に必要なリソースを確保し、確保したリソースを各タスクに配分するリソース割当ステップと、前記スレッドアレイ内の各スレッドが処理するタスクを決定する処理タスク決定ステップと、前記リソース割当部によって配分されたリソースを用いて、前記処理タスク決定部によって決定されたタスクを各スレッドに実行させることにより、前記各スレッドアレイにおいて前記同時実行タスク数のタスクを実行するタスク実行ステップと、を実行させる。
また、本発明の最適化方法は、並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する処理が記述されたコンピュータ・プログラムを最適化する最適化方法であって、処理対象とするアプリケーションが並列処理可能に分割された各タスクの処理を実行させるためのスレッドアレイ、および、各タスクの処理がさらに並列処理可能に分割されたスレッドを生成するステップと、前記各タスクの処理に必要なリソースを前記スレッドアレイにおいて確保して割り当てるステップと、前記各スレッドが処理するタスクを決定するステップと、割り当てられたリソースを用いて、決定されたタスクを各スレッドに実行させるステップと、を含むコンピュータ・プログラムを表す情報を取得し、前記タスクに関連するタスク情報および前記演算装置の構成に関連する演算装置構成情報の少なくとも１つに基づいて、各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定し、前記各タスクに必要となるスレッド数および前記同時実行タスク数に基づいて、前記アレイ内スレッド数を設定し、前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定し、前記コンピュータ・プログラムの、前記スレッドおよび前記スレッドアレイを生成するステップを、前記アレイ内スレッド数および前記アレイ総数に基づいて生成を行うよう変更し、前記スレッドアレイにおいてリソースを確保して割り当てるステップを、前記同時実行タスク数分のタスクの実行に必要なリソースを確保して割り当てるよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記スレッドアレイ内で実行させる同時実行タスク数のタスクのいずれかに決定するよう変更し、前記スレッドに前記タスクを実行させるステップを、該タスクに割り当てられたリソースを使用するよう変更する。
また、本発明のコンピュータ・プログラムは、並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する処理が記述されたコンピュータ・プログラムを最適化するためのコンピュータ・プログラムであって、処理対象とするアプリケーションが並列処理可能に分割された各タスクの処理を実行させるためのスレッドアレイ、および、各タスクの処理がさらに並列処理可能に分割されたスレッドを生成するステップと、前記各タスクの処理に必要なリソースを前記スレッドアレイにおいて確保して割り当てるステップと、前記各スレッドが処理するタスクを決定するステップと、割り当てられたリソースを用いて、決定されたタスクを各スレッドに実行させるステップと、を含むコンピュータ・プログラムを表す情報を取得するプログラム取得ステップと、前記タスクに関連するタスク情報および前記演算装置の構成に関連する演算装置構成情報の少なくとも１つに基づいて、各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する同時実行タスク数設定ステップと、前記各タスクに必要となるスレッド数および前記同時実行タスク数に基づいて、前記アレイ内スレッド数を設定するアレイ内スレッド数設定ステップと、前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定するアレイ総数設定ステップと、前記コンピュータ・プログラムの、前記スレッドおよび前記スレッドアレイを生成するステップを、前記アレイ内スレッド数および前記アレイ総数に基づいて生成を行うよう変更し、前記スレッドアレイにおいてリソースを確保して割り当てるステップを、前記同時実行タスク数分のタスクの実行に必要なリソースを確保して割り当てるよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記スレッドアレイ内で実行させる同時実行タスク数のタスクのいずれかに決定するよう変更し、前記スレッドに前記タスクを実行させるステップを、該タスクに割り当てられたリソースを使用するよう変更するプログラム変更ステップと、をコンピュータ装置に実行させる。
【発明の効果】
【０００５】
本発明は、タスク内の並列性は低いが並列処理可能なタスクが多数存在する処理において、複数のプロセッサコアを有する演算装置における各コアの稼働率を向上させる並列処理装置を提供することができる。
【図面の簡単な説明】
【０００６】
【図１】本発明の第１の実施の形態としての並列処理装置のハードウェア構成図である。
【図２】本発明の第１の実施の形態としての並列処理装置の機能ブロック図である。
【図３】本発明の第１の実施の形態としての並列処理装置の動作を説明するフローチャートである。
【図４】図３に続くフローチャートである。
【図５】本発明の第１の実施の形態としての並列処理装置の効果を説明するための模式図である。
【図６】本発明の第２の実施の形態としての並列処理装置の機能ブロック図である。
【図７】本発明の第２の実施の形態におけるタスク決定次元を説明するための模式図である。
【図８】本発明の第２の実施の形態としての並列処理装置の動作を説明するフローチャートである。
【図９】図８に続くフローチャートである。
【図１０】本発明の第２の実施の形態の並列処理装置を動作させるコンピュータ・プログラムの一例を示す図である。
【図１１】関連技術の並列処理装置を動作させるコンピュータ・プログラムの一例を示す図である。
【図１２】本発明の第３の実施の形態としての並列処理装置の機能ブロック図である。
【図１３】本発明の第３の実施の形態としての並列処理装置の動作を説明するフローチャートである。
【図１４】図１３に続くフローチャートである。
【図１５】本発明の第３の実施の形態としての並列処理装置の効果を説明するための模式図である。
【図１６】本発明の第３の実施の形態の他の態様としての並列処理装置の機能ブロック図である。
【図１７】本発明の第３の実施の形態の他の態様としての並列処理装置の動作を説明するフローチャートである。
【図１８】本発明の第４の実施の形態としての並列処理装置の機能ブロック図である。
【図１９】本発明の第４の実施の形態としての並列処理装置の動作を説明するフローチャートである。
【図２０】本発明の第４の実施の形態としての並列処理装置の効果を説明するための模式図である。
【図２１】本発明の第５の実施の形態としての最適化装置の機能ブロック図である。
【図２２】本発明の第５の実施の形態としての最適化装置の動作を説明するフローチャートである。
【図２３】関連技術におけるＧｒｉｄ、スレッドアレイ、スレッドの包含関係を説明する模式図である。
【図２４】関連技術において１次元構成のスレッドおよびスレッドアレイの一例を示す模式図である。
【図２５】関連技術において２次元構成のスレッドおよびスレッドアレイの一例を示す模式図である。
【図２６】関連技術においてメモリアクセスレイテンシを隠蔽するスレッドスワップを説明するフローチャートである。
【図２７】関連技術の並列処理装置の構成を示すブロック図である。
【図２８】関連技術におけるタスクとＣＴＡのマッピングを説明する図である。
【図２９】関連技術の並列処理装置の動作を示すフローチャートである。
【図３０】関連技術においてタスクサイズを小さくした場合のタスクとＣＴＡのマッピングを説明する図である。
【図３１】他の関連技術の並列処理装置の構成を示すブロック図である。
【図３２】他の関連技術の並列処理装置の動作を示すフローチャートである。
【図３３】関連技術において複数のアプリケーションをまとめて実行することを説明するための模式図である。
【図３４】さらに他の関連技術の並列処理装置の構成を示すブロック図である。
【図３５】さらに他の関連技術の並列処理装置の動作を示すフローチャートである。
【図３６】動画像エンコーディング処理における、階層的な並列化の一例を示す図である。
【図３７】関連技術において動画像エンコーディング処理を行う場合の課題を説明するためのフローチャートである。
【図３８】関連技術が対象とするアプリケーションおよび本発明の課題を説明する図である。
【発明を実施するための形態】
【０００７】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
（第１の実施の形態）
本発明の第１の実施の形態としての並列処理装置１のハードウェア構成を図１に示す。
図１において、並列処理装置１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１００１と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１００２と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１００３と、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１００４と、ハードディスク等の記憶装置１００５と、入力装置１００６とを含むコンピュータ装置によって構成されている。
ＣＰＵ１００１は、ＲＯＭ１００３または記憶装置１００５に記憶されたコンピュータ・プログラムモジュールを読み込んでＲＡＭ１００２を作業領域として実行する。
ＧＰＵ１００４は、複数のプロセッサコアを有する演算装置である。以下、ＧＰＵ１００４をメニコアアクセラレータとも記載する。ＧＰＵ１００４には、例えば、非特許文献３に記載のＣＵＤＡが対象とするデバイスを適用可能である。この場合、ＧＰＵ１００４は、複数のＳｔｒｅａｍｉｎｇ  Ｐｒｏｃｅｓｓｏｒおよび共有メモリを含むＳｔｒｅａｍｉｎｇ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒを１つ以上と、スレッドスケジューラと、グローバルメモリとを少なくとも搭載している。ＧＰＵ１００４では、ＣＰＵ１００１からの呼び出しに従って、スレッドスケジューラが各処理を各Ｓｔｒｅａｍｉｎｇ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒに並列処理させる。
記憶装置１００５は、並列処理対象となるアプリケーションを表すコンピュータ・プログラムを記憶している。また、記憶装置１００５は、そのアプリケーションを並列処理するためにＣＰＵ１００１およびＧＰＵ１００４に実行させるコンピュータ・プログラムを記憶している。さらに、記憶装置１００５は、そのアプリケーションが処理するデータ、および、コンピュータ装置を並列処理装置１として機能させるために必要な各種データを記憶している。
入力装置１００６は、コンピュータ装置を並列処理装置１として機能させるために必要な各種データを外部から取得する。
並列処理装置１は、ＧＰＵ１００４を用いることにより、並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、さらに並列処理することが可能となっている。なお、スレッドアレイの１タイプとして、背景技術で述べたＣＴＡがあるが、以下に述べる本発明の各実施の形態は、ＣＴＡに限らず、他のタイプのスレッドアレイを並列処理する並列処理装置にも適用可能である。
次に、並列処理装置１の機能ブロック構成を図２に示す。図２において、並列処理装置１は、分割タスク取得部１０１と、同時実行タスク数設定部１０２と、アレイ内スレッド数設定部１０３と、アレイ総数設定部１０４と、スレッドアレイ制御部１０５と、リソース割当部１０６と、処理タスク決定部１０７と、タスク実行部１０８とを備えている。ここで、分割タスク取得部１０１と、同時実行タスク数設定部１０２と、アレイ内スレッド数設定部１０３と、アレイ総数設定部１０４とは、ＲＯＭ１００３または記憶装置１００５に記憶されたコンピュータ・プログラムモジュールおよび各種情報を読み込んでＲＡＭ１００２を作業領域として実行するＣＰＵ１００１によって構成される。また、スレッドアレイ制御部１０５と、リソース割当部１０６と、処理タスク決定部１０７と、タスク実行部１０８とは、ＣＰＵ１００１の制御の基に、ＲＯＭ１００３または記憶装置１００５に記憶されたコンピュータ・プログラムモジュールおよび各種情報を読み込んで並列処理を実行するＧＰＵ１００４によって構成される。例えば、ＧＰＵ１００４に非特許文献３に記載のＣＵＤＡが対象とするデバイスが適用されている場合、スレッドアレイ制御部１０５は、スレッドスケジューラによって構成され、リソース割当部１０６と、処理タスク決定部１０７と、タスク実行部１０８とは、各Ｓｔｒｅａｍｉｎｇ  Ｐｒｏｃｅｓｓｏｒによって構成される。なお、並列処理装置１の各機能ブロックを構成するハードウェア構成は、上述の構成に限定されない。
分割タスク取得部１０１は、処理対象となるアプリケーションの処理が並列処理可能に分割された各タスクを表す情報を取得する。ここで、各タスクは、互いに依存関係がなく並列に処理可能な処理に分割されているものとする。また、各タスクには、各タスクを一意に識別可能な識別情報（タスク番号）が付与されているものとする。また、このような各タスクを表す情報は、記憶装置１００５に記憶されているものとする。例えば、処理対象のアプリケーションが動画像エンコーディング処理であれば、分割タスク取得部１０１は、マクロブロック毎の処理に分割された各タスクの処理内容を表す情報を取得してもよい。また、例えば、処理対象のアプリケーションが画像処理の場合、分割タスク取得部１０１は、画像の右半分の領域を処理するタスクＡ、および、左半分の領域を処理するタスクＢの各処理内容を表す情報を取得してもよい。
同時実行タスク数設定部１０２は、各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する。例えば、同時実行タスク数設定部１０２は、入力装置１００６を介して同時実行タスク数を取得してもよい。あるいは、同時実行タスク数設定部１０２は、記憶装置１００５にあらかじめ記憶された同時実行タスク数を取得してもよい。
ここで、同時実行タスク数は、各タスクに必要なスレッド数を考慮して、タスクのメモリアクセスレイテンシ隠蔽に充分な数のスレッドを同時に実行出来るように設定されることが好ましい。
例えば、非特許文献３に記載のＣＵＤＡが対象とするデバイスでは、メモリアクセスレイテンシ隠蔽のためには、１つのＳｔｒｅａｍｉｎｇ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ上で同時に実行されるスレッド数が７００程度以上あるのが望ましいとされる。また、このデバイスでは、１つのＳｔｒｅａｍｉｎｇ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒにおいて８つのスレッドアレイまで同時に実行可能となっている。例えば、１タスクの処理に最適なスレッド数が３２である場合、同時実行タスク数を３にすると、Ｓｔｒｅａｍｉｎｇ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒあたりのスレッド数は７６８となり、メモリアクセスレイテンシ隠蔽に充分な数のスレッドを用いた並列処理が可能となる。したがって、この場合、同時実行タスク数として３が好ましい。
また、同時実行タスク数としては、タスクが使用するメモリ量、および、並列処理に用いるメニコアアクセラレータのメモリ量やプロセッサ数に基づいて、同時実行可能なタスク数の上限値が設定されてもよい。例えば、上述のＣＵＤＡが対象とするデバイスでは、１つのＳｔｒｅａｍｉｎｇ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ上に１６Ｋバイトのメモリがあり、８つのスレッドアレイの同時実行の場合、１スレッドアレイあたり２Ｋバイトのメモリが使用可能となっている。もし、１つのタスクが１Ｋバイトのメモリを使用する場合、１つのスレッドアレイ内で２つのタスクまでが同時実行可能となる。したがって、この場合、同時実行タスク数として２が好ましい。
このように、好ましい値の同時実行タスク数は、各タスクを表すタスク情報、および、並列処理の実行に用いるメニコアアクセラレータの構成情報の少なくとも１つを用いて算出可能である。
アレイ内スレッド数設定部１０３は、各タスクにおいてさらに並列処理可能なスレッド数および同時実行タスク数に基づいて、各スレッドアレイ内のスレッド数であるアレイ内スレッド数を設定する。例えば、アレイ内スレッド数設定部１０３は、各タスクに必要なスレッド数に、同時実行タスク数を乗じた値を、アレイ内スレッド数として設定してもよい。
アレイ総数設定部１０４は、アプリケーションの処理に必要な総スレッド数およびアレイ内スレッド数に基づいて、スレッドアレイの総数であるアレイ総数を設定する。例えば、アレイ総数設定部１０４は、処理対象のアプリケーションに必要なスレッド総数を取得し、取得したスレッド総数を、アレイ内スレッド数で除算することにより、アレイ総数を決定してもよい。
このように、アレイ内スレッド数およびアレイ総数は、同時実行タスク数によって増減する。例えば、１つのスレッドアレイ内で２タスク同時に実行する場合（同時実行タスク数が２）を考える。この場合、１つのスレッドアレイあたりのアレイ内スレッド数は、１タスクの実行に必要なスレッド数の倍になるので、アレイ総数は、アプリケーションの処理を構成する全タスク数の半分となる。
スレッドアレイ制御部１０５は、アレイ内スレッド数に基づいて、スレッドアレイおよびスレッドを生成する。また、スレッドアレイ制御部１０５は、各スレッドアレイおよび各スレッドに、これらをそれぞれ一意に識別する識別情報（スレッドアレイＩＤおよびスレッドＩＤ）を付与して、これらの並列処理を制御する。
リソース割当部１０６は、各スレッドアレイにおいて、同時実行タスク数分のタスクの処理に必要なリソースを確保し、確保したリソースを各タスクに配分する。ここで、リソースとは、例えば、メモリ領域等である。
処理タスク決定部１０７は、スレッドアレイ内の各スレッドが処理するタスクを決定する。具体的には、処理タスク決定部１０７は、同時実行タスク数と、各スレッドアレイＩＤと、各スレッドＩＤとに基づいて、各スレッドが処理するタスク番号を算出する。例えば、同時実行タスク数が２であり、各スレッドアレイ内でスレッドＩＤが連番となっている場合について説明する。この場合、処理タスク決定部１０７は、スレッドアレイＩＤがｎのスレッドアレイ内において、スレッドＩＤの値が前半のスレッドが処理するタスク番号を２ｎとし、後半のスレッドが処理するタスク番号を２ｎ＋１としてもよい。
また、処理タスク決定部１０７は、各スレッドが処理するタスクを決定すると同時に、そのスレッドがそのタスクによって処理するデータ（処理位置）も決定する。例えば、処理対象のアプリケーションが動画像エンコーディングの場合、処理タスク決定部１０７は、各スレッドがそのタスクによって処理する画素の位置を、スレッドＩＤに基づいて決定可能である。
タスク実行部１０８は、リソース割当部１０６により割り当てられたリソースを用いて、処理タスク決定部１０７によって決定されたタスクを、各スレッドに実行させる。これにより、タスク実行部１０８は、各スレッドアレイにおいて、同時実行タスク数分のタスクを実行する。
なお、リソース割当部１０６は、スレッドアレイ制御部１０５によって生成された各スレッドアレイにおいて機能する。また、処理タスク決定部１０７、および、タスク実行部１０８は、各スレッドアレイにおいて、タスク単位で機能する。したがって、図２には、リソース割当部１０６をスレッドアレイ単位で示し、処理タスク決定部１０７およびタスク実行部１０８をタスク単位で示している。
以上のように構成された並列処理装置１の動作について、図３〜図４のフローチャートを参照して説明する。
まず、分割タスク取得部１０１は、処理対象となるアプリケーションの処理が分割された各タスクを表す情報を取得する（ステップＳ１０１）。
例えば、分割タスク取得部１０１は、動画像エンコーディング処理がマクロブロック毎の処理に分割されたタスクを表す情報を取得する。このとき、タスクを表す情報には、タスクを識別する情報（タスク番号）が含まれているものとする。
次に、同時実行タスク数設定部１０２は、１つのスレッドアレイにおける同時実行タスク数を設定する（ステップＳ１０２）。
例えば、同時実行タスク数設定部１０２は、入力装置１００６を介して取得した値を、同時実行タスク数として設定する。
次に、アレイ内スレッド数設定部１０３は、各タスクの処理に必要なスレッド数および同時実行タスク数の乗算値を、アレイ内スレッド数として設定する（ステップＳ１０３）。
次に、アレイ総数設定部１０４は、アプリケーションの実行に必要な総スレッド数およびアレイ内スレッド数に基づいて、アレイ総数を設定する（ステップＳ１０４）。
例えば、アレイ総数設定部１０４は、アプリケーション全体の処理を構成する全タスクの実行に必要な総スレッド数をアレイ内スレッド数で除算した値をアレイ総数とする。
次に、スレッドアレイ制御部１０５は、アレイ内スレッド数およびアレイ総数に基づいて、スレッドおよびスレッドアレイを生成する。そして、スレッドアレイ制御部１０５は、各スレッドおよび各スレッドアレイに、スレッドＩＤおよびスレッドアレイＩＤを付与する（ステップＳ１０５）。
次に、スレッドアレイ制御部１０５は、生成した各スレッドアレイ内における各スレッドおよび各スレッドアレイの並列処理を制御する（ステップＳ１０６）。
次に、ステップＳ１０６で、スレッドアレイ制御部１０５によって制御されることにより、各スレッドアレイにおける並列処理装置１の動作について、図４を参照して説明する。なお、ここでは、同時実行タスク数として２が設定されている例について説明する。また、スレッドＩＤは、各スレッドアレイ内で連番となっているものとする。
ここでは、まず、処理タスク決定部１０７は、各スレッドアレイにおいて、そのスレッドアレイＩＤおよび各スレッドのスレッドＩＤを取得する（ステップＳ１０７）。
次に、リソース割当部１０６は、各スレッドアレイにおいて、同時実行タスク数（ここでは２つ）のタスクの処理に必要なリソースを確保し、各タスクにリソースを割り当てる（ステップＳ１０８）。
次に、処理タスク決定部１０７は、各スレッドアレイ内でのスレッドＩＤの値に基づいて、各スレッドが処理するタスクを判定する。ここでは、処理タスク決定部１０７は、スレッドＩＤがスレッドアレイ内で前半に属するか否かを判断する（ステップＳ１０９）。
ここで、スレッドＩＤの値がスレッドアレイ内で前半に属する場合、処理タスク決定部１０７は、該当するスレッドが処理するタスク番号を２ｎに決定する。ここで、ｎは、ステップＳ１０７で取得したスレッドアレイＩＤである。このとき、処理タスク決定部１０７は、該当するスレッドがタスク２ｎによって処理するデータの位置も同時に決定する。そして、タスク実行部１０８は、割り当てられたリソースを用いて、該当するスレッドにタスク２ｎを実行させる（ステップＳ１１０）。
一方、スレッドＩＤの値がスレッドアレイ内で後半に属する場合、処理タスク決定部１０７は、該当するスレッドが処理するタスク番号を２ｎ＋１に決定する。このとき、処理タスク決定部１０７は、該当するスレッドがタスク２ｎ＋１によって処理するデータの位置も同時に決定する。そして、タスク実行部１０８は、割り当てられたリソースを用いて、該当するスレッドにタスク２ｎ＋１を実行させる（ステップＳ１１１）。
なお、図３および図４において、Ｓ１０１〜Ｓ１０４の各ステップは、ＣＰＵ１００１によって実行され、ステップＳ１０５〜Ｓ１１１の各ステップは、ＧＰＵ１００４などのメニコアアクセラレータによって実行される。
以上で、並列処理装置１の動作の説明を終了する。
なお、本実施の形態において、スレッドアレイ制御部１０５は、特許文献１に記載されているように、スレッドアレイ内の各スレッドが協調して並列動作するように制御してもよい。この場合、１つのスレッドアレイ（ＣＴＡ）内の各スレッドは、各タスクに固有に割り当てられている共有リソースを用いて、同一タスクを実行しているスレッド同士でアトミック（不可分）命令などを用いて同期をとることにより、協調して動作する。また、特に、非特許文献３に記載の技術における同一ｗａｒｐ内のスレッドのように、同一タスクを実行している全てのスレッドが同時に同じ演算を行っている場合には、自動的に同期が取られるため、明示的な同期処理は不要である。
次に、本発明の第１の実施の形態の効果について述べる。
本発明の第１の実施の形態としての並列処理装置は、タスク内の並列性は低いが並列処理可能なタスクが多数存在する処理において、複数のプロセッサコアを有する演算装置における各コアの稼働率を向上させることができる。
その理由について、図５を参照して説明する。本発明の第１の実施の形態としての並列処理装置は、同時実行タスク設定部が、各スレッドアレイ内で同時に実行するタスク数を設定し、処理タスク決定部が、各スレッドが各スレッドアレイ内でいずれのタスクを処理するかを決定し、タスク実行部が、決定されたタスクを各スレッドに実行させることにより、各スレッドアレイにおいて同時実行タスク数のタスクを同時に実行するからである。例えば、図５に示すように、同時実行タスク数が２であれば、本実施の形態としての並列処理装置は、１つのスレッドアレイで２つのタスクを実行する。これにより、本実施の形態としての並列処理装置は、スレッドアレイの数以上のタスクを同時に実行可能となる。このため、本実施の形態としての並列処理装置は、スレッドアレイ数と同数のタスクしか同時に実行できないことにより、メモリアクセスレイテンシの隠蔽ができずにプロセッサコアを遊休させてしまうことがない。したがって、本実施の形態としての並列処理装置は、遊休していたプロセッサコアを用いてより多くのスレッドを実行し、より多くのタスクを並列処理可能となる。その結果、本実施の形態としての並列処理装置は、各コアの稼働率を向上させ、全体の処理時間を短縮することができる。
（第２の実施の形態）
次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第１の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
まず、本発明の第２の実施の形態としての並列処理装置２の機能ブロック構成について、図６を参照して説明する。なお、並列処理装置２のハードウェア構成は、本発明の第１の実施の形態としての並列処理装置１と同様であるため、本実施の形態における説明を省略する。並列処理装置２は、本発明の第１の実施の形態としての並列処理装置１に対して、アレイ内スレッド数設定部１０３に替えてアレイ内スレッド数設定部２０３と、リソース割当部１０６に替えてリソース割当部２０６と、処理タスク決定部１０７に替えて処理タスク決定部２０７とを備える点が異なる。
アレイ内スレッド数設定部２０３は、各タスクの処理に必要なスレッド構成の次元に、タスク決定次元を加えた多次元で表されるスレッド構成を設定する。ここで、タスク決定次元とは、各スレッドの処理対象となるタスクを識別するための次元である。タスク決定次元の大きさは、同時実行タスク数となる。
例えば、特許文献１に記載された技術では、スレッドアレイは、多次元空間で定義され、各スレッドアレイおよび各スレッドには、多次元のＩＤが付与される。そこで、アレイ内スレッド数設定部２０３は、このような特許文献１に記載された技術で定義されるスレッド構成の次元に、さらにタスク決定次元を加えた多次元のスレッド構成に基づいて、アレイ内スレッド数を設定すればよい。このとき、アレイ内スレッド数設定部２０３は、元来のタスクを処理するためのスレッド構成に基づく次元の値をそのまま用いて、タスク決定次元を追加すればよい。
処理タスク決定部２０７は、各スレッドＩＤのタスク決定次元を用いて、該スレッドが処理するタスクを決定する。このとき、処理タスク決定部２０７は、各スレッドＩＤの各次元の情報を用いて、該当するタスクにおいて処理するデータの位置を決定可能である。
例えば、各タスクの処理に必要なスレッド構成が、図２４（ａ）に示したように１次元の構成（ｘ次元）である場合について、図７を参照して説明する。また、図７では、同時実行タスク数は２であるものとする。この場合、アレイ内スレッド数設定部２０３は、スレッドアレイ内のスレッド構成を２次元（ｘ，ｙ）とする。図２（ａ）に示すように、ｙ次元は、タスク決定次元である。同じく図２（ａ）に示すように、ｘ次元の大きさは８であり、０〜７の整数値をとる。ｙ次元の大きさは２であり、０〜１の整数値をとる。そして、アレイ内スレッド数設定部２０３は、ｘ次元の大きさとｙ次元の大きさを乗じた数を、アレイ内スレッド数とする。
また、図７の例では、処理タスク決定部２０７は、スレッドＩＤ（ｙ）が同値のスレッド群を、同一タスクを実行するものとして決定する。そして、処理タスク決定部２０７は、図７の（ｂ）に示すように、スレッドアレイＩＤ（ｃｔａ．ｉｄ）、スレッドアレイのｘ次元の大きさ（ｃｔａ＿ｓｉｚｅ．ｘ）、ｙ次元の大きさ（ｃｔａ＿ｓｉｚｅ．ｙ）、スレッドＩＤのｘ次元の値（ｔｈｒｅａｄ  ｉｄ．ｘ）、および、ｙ次元の値（ｔｈｒｅａｄ＿ｉｄ．ｙ）に基づいて、そのスレッドＩＤがそのタスクによって処理するデータの要素番号を決定可能である。
また、例えば、各タスクの処理に必要なスレッド構成が、図２５に示したように２次元の構成（ｘ，ｙ）である場合について説明する。この場合、アレイ内スレッド数設定部２０３は、スレッドアレイ内のスレッド構成を３次元（ｘ，ｙ，ｚ）とする。ｚ次元は、タスク決定次元である。また、この場合、処理タスク決定部２０７は、スレッドＩＤ（ｚ）が同値のスレッド群を、同一タスクを実行するものとして決定する。
リソース割当部２０６は、各スレッドアレイ内において、同時実行タスク数分の配列としてリソースを確保する。そして、リソース割当部２０６は、スレッドＩＤのｚ次元に基づいて、各タスクにリソースを配分する。
以上のように構成された並列処理装置２の動作について、図８を参照して説明する。なお、図８では、各タスクの処理に必要なスレッド構成が２次元（ｘ，ｙ）であるものとする。
まず、並列処理装置２は、ステップＳ１０１〜Ｓ１０２まで、本発明の第１の実施の形態としての並列処理装置１と同様に動作することにより、分割されたタスクを取得し、同時実行タスク数を設定する。ここでは、同時実行タスク数として２が設定されたものとする。
次に、アレイ内スレッド数設定部２０３は、各タスクの処理に必要なスレッド構成（ここでは２次元構成（ｘ，ｙ））に、タスク決定次元（ここでは（ｚ））を加えた多次元構成（ここでは３次元（ｘ，ｙ，ｚ））を、スレッドアレイ内のスレッド構成とする。ここでは、同時実行タスク数が２であるため、タスク決定次元のサイズは２となる（ステップＳ２０３）。
その後、並列処理装置２は、ステップＳ１０４〜Ｓ１０６まで、本発明の第１の実施の形態としての並列処理装置１と同様に動作することにより、設定されたスレッド構成のスレッドアレイを生成し、各スレッドアレイおよび各スレッドの並列処理を制御する。
次に、スレッドアレイ制御部１０５によって制御される各スレッドアレイにおける並列処理装置１の動作について、図９を参照して説明する。なお、スレッドＩＤのｚ次元は、０または１の値をとるものとする。
ここでは、まず、処理タスク決定部２０７は、本発明の第１の実施の形態における処理タスク決定部１０７と同様に、各スレッドアレイにおいて、そのスレッドアレイＩＤおよび各スレッドＩＤを取得する（ステップＳ１０７）。
次に、リソース割当部２０６は、各スレッドアレイ内において、同時実行タスク数分の配列としてリソースを確保し、スレッドＩＤのｚ次元に基づいて、確保したリソースを各タスクの各スレッドに配分する（ステップＳ２０７）。例えば、スレッドＩＤのｚ次元が０のスレッドには、リソース配列の要素０のリソースを配分する。
次に、処理タスク決定部２０７は、スレッドＩＤのｚ次元の値に基づいて、処理するタスクを判定する。ここでは、処理タスク決定部２０７は、スレッドＩＤのｚ次元が０であるか否かを判断する（ステップＳ２０８）。
ここで、スレッドＩＤのｚ次元が０である場合、処理タスク決定部２０７は、該当するスレッドが処理するタスク番号を２ｎに決定する。ここで、ｎは、ステップＳ１０７で取得されたスレッドアレイＩＤである。このとき、処理タスク決定部２０７は、該当するスレッドが、タスク２ｎによって処理するデータの位置も同時に決定する。そして、タスク実行部１０８は、割り当てられたリソースを用いて、該当するスレッドにタスク２ｎを実行させる（ステップＳ１１０）。
一方、スレッドＩＤのｚ次元が０ではない場合、処理タスク決定部２０７は、該当するスレッドが処理するタスク番号を２ｎ＋１に決定する。このとき、処理タスク決定部１０７は、該当するスレッドがタスク２ｎ＋１によって処理するデータの位置も同時に決定する。そして、タスク実行部１０８は、割り当てられたリソースを用いて、該当するスレッドにタスク２ｎ＋１を実行させる（ステップＳ１１１）。
なお、図８および図９において、Ｓ１０１、Ｓ１０２、Ｓ２０３、Ｓ１０４の各ステップは、ＣＰＵ１００１によって実行され、ステップＳ１０５〜Ｓ１０７、Ｓ２０８、Ｓ２０９、Ｓ１１０、Ｓ１１１の各ステップは、ＧＰＵ１００４などのメニコアアクセラレータによって実行される。
以上で、並列処理装置２の動作の説明を終了する。
次に、以上のように並列処理装置２を動作させるため記憶装置１００５に記憶されるコンピュータ・プログラムの一例を図１０に示す。また、比較のため、特許文献１等の関連技術に記載された並列処理装置に同様の並列処理を実行させるためのコンピュータ・プログラムの一例を図１１に示す。
図１０および図１１において、ｍａｉｎには、ＣＰＵ１００１によって実現される各部を機能させるためのコードが記載されている。また、ｋｅｒｎｅｌ１およびｋｅｒｎｅｌ２には、ＧＰＵ１００４によって実現される各部を機能させるためのコードが記載されている。
図１０において、ｍａｉｎにおける１行目では、各タスクの処理に必要なスレッド構成の次元（ｘ，ｙ）に、タスク決定次元（ｚ）が追加された３次元でスレッド構成が定義されている。なお、ここでは、タスクの処理に必要なスレッド構成の次元（ｘ，ｙ）のサイズおよび同時実行タスク数ｚは、図示しない定義ファイルに記載されているか、入力装置１００６を介して読み込まれるものとする。この行のコードは、図８のステップＳ２０３に相当する。これに対して、図１１に示した関連技術では、ｍａｉｎにおける１行目では、各タスクの処理に必要なスレッド構成の次元（ｘ，ｙ）でスレッド構成が定義されている。
また、図１０において、ｍａｉｎにおける２行目では、アプリケーションの処理を構成するタスク数ｎｕｍＴａｓｋを、同時実行タスク数ｚで除した値が、アレイ総数ｎｕｍＣＴＡとして設定されている。この行のコードは、図８におけるステップＳ１０４に相当する。なお、アプリケーションの処理を構成するタスク数ｎｕｍＴａｓｋは、図示しない定義ファイルに記載されているか、入力装置１００６を介して読み込まれるものとする。これに対して、図１１に示した関連技術では、ｍａｉｎにおける２行目では、アプリケーションの処理を構成するタスク数ｎｕｍＴａｓｋが、そのままアレイ総数として設定されている。
また、図１０において、ｋｅｒｎｅｌ２における１行目では、同時実行タスク数ｚサイズの配列としてリソースが確保されている。なお、各スレッドは、この行のコードを実行することにより、静的に確保されているリソース配列の要素のうち、自身が対象とするタスクに配分された要素のアドレスを取得することになる。この行のコードは、図９におけるステップＳ２０８に相当する。これに対して、図１１に示した関連技術では、ｋｅｒｎｅｌ１における１行目で、共有メモリ上にこのスレッドアレイで共有するリソースが確保されている。
また、図１０において、ｋｅｒｎｅｌ２における２行目では、スレッドアレイＩＤのｘ次元の値ｃｔａ＿ｉｄ．ｘに加えて、同時実行タスク数ｃｔａ＿ｓｉｚｅ．ｚと、該当するスレッドのタスク決定次元の値ｔｈｒｅａｄ＿ｉｄ．ｚとに基づいて、該当するスレッドの処理するタスク番号ｔａｓｋ＿ｉｄｘが決定されている。この行のコードは、図９におけるステップＳ１０７、Ｓ２０９に相当する。これに対して、図１１に示した関連技術では、ｋｅｒｎｅｌ１における２行目で、スレッドアレイＩＤのｘ次元の値ｃｔａ＿ｉｄ．ｘが、そのまま、該当するスレッドが処理するタスク番号ｔａｓｋ＿ｉｄｘとなっている。
また、図１０において、ｋｅｒｎｅｌ２における３行目では、算出されたｔａｓｋ＿ｉｄｘのタスクｔａｓｋを実行する際に、リソース配列のうち、該当するタスクに配分された要素のリソースを用いている。なお、ｔａｓｋの処理内容は、図示しない定義ファイル等にあらかじめ記載され
ているものとする。この行のコードは、図９におけるステップＳ２０８、Ｓ１１０、Ｓ１１１に相当する。これに対して、図１１に示した関連技術では、ｋｅｒｎｅｌ１における３行目では、算出されたｔａｓｋ＿ｉｄｘのタスクを、確保されたリソースを用いて実行する。
このように、コンピュータ装置を、本発明の第２の実施の形態としての並列処理装置２を動作させるため記憶装置１００５に記憶されるコンピュータ・プログラム（図１０）は、関連技術の並列処理装置を動作させるためのコンピュータプログラム（図１１）に対して、図１０の下線部分が変更されたものとなる。アプリケーションの処理が並列処理可能に分割されたタスクの処理内容ｔａｓｋは、関連技術におけるタスクの処理内容に対して変更の必要はない。
次に、本発明の第２の実施の形態の効果について述べる。
本発明の第２の実施の形態としての並列処理装置は、タスク内の並列性は低いが並列処理可能なタスクが多数存在する処理において、複数のプロセッサコアを有する演算装置における各コアの稼働率を、容易に向上させることができる。
その理由は、アレイ内スレッド数設定部が、スレッドアレイのスレッド構成が多次元空間で定義されていることを利用して、タスクの処理に必要なスレッド構成の次元にタスク決定次元を加えた多次元でスレッドアレイ内のスレッド構成を定義するからである。これにより、処理タスク決定部およびタスク実行部は、タスク決定次元を用いて各スレッドアレイ内で複数のタスクを同時に実行可能となるからである。このとき、各タスクを処理するスレッド構成は、関連技術でも適用されていたスレッド構成と同じであるため、タスク実行部は、タスク内の処理（特にスレッドＩＤを用いた処理）を変更する必要がないためである。また、リソース割当部が、各タスク処理に必要なリソースを同時実行タスク数分の配列として確保することにより、スレッドＩＤのタスク決定次元のインデックスに基づいて、各タスクにおいて共有されるリソースを簡便に配分できるためである。
（第３の実施の形態）
次に、本発明の第３の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第１の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
まず、本発明の第３の実施の形態としての並列処理装置３の機能ブロック構成について、図１２を参照して説明する。なお、並列処理装置３のハードウェア構成は、本発明の第１の実施の形態としての並列処理装置１と同様であるため、本実施の形態における説明を省略する。図１２において、並列処理装置３は、本発明の第１の実施の形態としての並列処理装置１に対して、同時実行タスク数設定部１０２に替えて同時実行タスク数設定部３０２と、アレイ内スレッド数設定部１０３に替えてアレイ内スレッド数設定部３０３と、アレイ総数設定部１０４に替えてアレイ総数設定部３０４と、リソース割当部１０６に替えてリソース割当部３０６と、処理タスク決定部１０７に替えて処理タスク決定部３０７とを備え、さらに、タスク情報取得部３１０と、アレイ−タスク対応表３１１とを備えている点が異なる。ここで、タスク情報取得部３１０は、ＣＰＵ１００１によって構成される。ＣＰＵ１００１は、ＲＯＭ１００３または記憶装置１００５に記憶されたコンピュータ・プログラムモジュールおよび各種情報を読み込んで、ＲＡＭ１００２を作業領域としてコンピュータプログラムを実行する。また、アレイ−タスク対応表３１１は、ＲＡＭ１００２または記憶装置１００５によって構成される。また、同時実行タスク数設定部３０２は、タスク情報取得部３１０およびアレイ−タスク対応表３１１と共に、本発明における同時実行タスク数設定部を構成する。
タスク情報取得部３１０は、分割タスク取得部１０１が取得した各タスクに関連するタスク情報を取得する。例えば、タスク情報は、各タスクの負荷を表す情報であってもよい。
アレイ総数設定部３０４は、処理対象となるアプリケーションの並列処理において使用するスレッドアレイの総数を設定する。例えば、アレイ総数は、ＧＰＵ１００４が有するプロセッサコア数に基づいて算出された値が、入力装置１００６を介して取得されたものであってもよい。例えば、ＧＰＵ１００４として非特許文献３に記載されたＣＵＤＡが対象とするデバイスを適用している場合、アレイ総数は、Ｓｔｒｅａｍｉｎｇ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ（ＳＭ）の個数の倍数に設定されるのが好ましい。このようにすると、スレッドアレイあたりの負荷が均等であれば、ＳＭあたりの負荷も均等になる。
同時実行タスク数設定部３０２は、スレッドアレイ毎に個別の同時実行タスク数を設定する。例えば、同時実行タスク数設定部３０２は、タスク情報取得部３１０によって得られたタスクの負荷情報を用いて、アレイ総数設定部３０４が設定した数のスレッドアレイにタスクを振り分ける。例えば、同時実行タスク数設定部３０２は、負荷がより小さいタスクを１つのスレッドアレイにまとめて割り当ててもよい。また、同時実行タスク数設定部３０２は、負荷のより大きいタスクを１つのスレッドアレイに割り当ててもよい。このように、同時実行タスク数設定部３０２は、各スレッドアレイの負荷が等しくなるように、タスクをスレッドアレイに割り当ててもよい。
また、同時実行タスク数設定部３０２は、スレッドアレイと、該スレッドアレイに割り当てたタスクとの対応関係を、アレイ−タスク対応表３１１に記録する。すなわち、アレイ−タスク対応表３１１は、どのスレッドアレイが、いくつの、どのタスクを実行するかを表す情報を記憶している。
アレイ内スレッド数設定部３０３は、各スレッドアレイ内の同時実行タスク数に応じて、アレイ内スレッド数を設定する。
処理タスク決定部３０７は、アレイ−タスク対応表３１１、スレッドアレイＩＤおよびスレッドＩＤに基づいて、各スレッドが処理するタスクを決定する。
リソース割当部３０６は、アレイ−タスク対応表３１１に基づいて各スレッドアレイに対応付けられたタスクの数を取得し、取得したタスク数分の処理に必要なリソースを確保する。
以上のように構成された並列処理装置３の動作について、図１３を参照して説明する。
まず、アプリケーションの処理が分割されたタスクを表す情報が取得された後（ステップＳ１０１）後、アレイ総数設定部３０４は、アレイ総数を設定する（ステップＳ３０２）。例えば、アレイ総数設定部３０４は、アレイ総数として、入力装置１００６を介して取得される値を設定してもよい。
次に、タスク情報取得部３１０は、分割された各タスクに関連するタスク情報を取得する（ステップＳ３０３）。例えば、タスク情報取得部３１０は、各タスク情報として、各タスクの実際の負荷量ではなくその推定値を取得してもよい。
次に、同時実行タスク数設定部３０２は、各タスク情報に基づいて、各スレッドアレイにタスクを割り当てる。そして、同時実行タスク数設定部３０２は、アレイ−タスク対応表３１１に、どのスレッドアレイが、いくつの、どのタスクを実行するかを記録する（ステップＳ３０４）。
次に、アレイ内スレッド数設定部３０３は、アレイ−タスク対応表３１１を参照することにより、各スレッドアレイにおける同時実行タスク数を取得する。そして、アレイ内スレッド数設定部３０３は、本発明の第２の実施の形態におけるアレイ内スレッド数設定部２０３と同様に、各タスクの処理に必要なスレッド構成（ここでは２次元構成（ｘ，ｙ））に、タスク決定次元（ここでは（ｚ））を加えた多次元構成（ここでは３次元（ｘ，ｙ，ｚ））を、スレッドアレイ内のスレッド構成としてもよい。各スレッドアレイにおいて、タスク決定次元のサイズは、そのスレッドアレイにおける同時実行タスク数となる（ステップＳ３０５）。
次に、スレッドアレイ制御部１０５は、設定されたアレイ総数および各アレイ内のスレッド構成に基づいて、各スレッドアレイおよび各スレッドを生成する。そして、スレッドアレイ制御部１０５は、生成した各スレッドアレイおよび各スレッドに、スレッドアレイＩＤおよびスレッドＩＤを付与する（ステップＳ１０５）。
次に、スレッドアレイ制御部１０５は、生成した各スレッドおよび各スレッドアレイの並列処理を制御する（ステップＳ１０６）。
次に、スレッドアレイ制御部１０５によって制御される各スレッドアレイにおける並列処理装置３の動作について、図１４を参照して説明する。なお、ここでは、アレイ−タスク対応表３１１において、１つのスレッドアレイに対応付けられている各タスク番号は連番になっているものとする。また、各スレッドＩＤにおいて、タスク決定次元のとる値は、０以上同時実行タスク数未満の整数であるものとする。
ここでは、まず、処理タスク決定部２０７は、本発明の第１の実施の形態における処理タスク決定部１０７と同様に、各スレッドアレイにおいて、そのスレッドアレイＩＤおよび各スレッドＩＤを取得する（ステップＳ１０７）。
次に、リソース割当部３０６は、アレイ−タスク対応表３１１を参照することにより、該当するスレッドアレイにおける同時実行タスク数を取得する（ステップＳ３０８）。
次に、リソース割当部３０６は、各スレッドアレイ内において、それぞれ同時実行タスク数分の配列としてリソースを確保する。リソース割当部３０６は、確保したリソースを、スレッドＩＤのｚ次元に基づいて、各タスクの各スレッドに配分する（ステップＳ３０９）。
次に、処理タスク決定部３０７は、アレイ−タスク対応表３１１を参照することにより、該当するスレッドアレイにおいて処理するタスクの開始番号ｍを取得する（ステップＳ３１０）。
次に、処理タスク決定部３０７は、スレッドＩＤのタスク決定次元の値を、タスクの開始番号ｍに加算した番号のタスクを、該当するスレッドが処理するタスクとして決定する（ステップＳ３１１）。
次に、タスク実行部１０８は、各スレッドについて、処理タスク決定部３０７によって決定された番号のタスクを実行させる（ステップＳ３１２）。
以上で、並列処理装置３の動作の説明を終了する。
次に、本発明の第３の実施の形態の効果について述べる。
本発明の第３の実施の形態としての並列処理装置は、タスク内の並列性は低いが並列処理可能なタスクが多数存在する処理において、各プロセッサコアの処理時間を均一化することができ、全体の処理時間を削減することができる。
その理由について、図１５を参照して説明する。図１５に示すように、本発明の第３の実施の形態としての並列処理装置は、同時実行タスク数設定部が、各スレッドアレイに個別の同時実行タスク数を設定する。例えば、同時実行タスク数設定部は、各タスクの負荷等のタスク情報に基づいてスレッドアレイに個別の同時実行タスク数を設定する。これにより、本発明の第３の実施の形態としての並列処理装置は、アプリケーションの処理が分割されたタスクの負荷が一様ではない場合に、タスク内の処理を変えることなく、各プロセッサコアの負荷を均一化することができるからである。
次に、本発明の第３の実施の形態の他の態様について、図１６および図１７を参照して説明する。
本発明の第３の実施の形態の他の態様において、同時実行タスク数設定部３０２は、タスク情報の代わりに、メニコアアクセラレータの構成情報を用いて、各スレッドアレイに個別の同時実行タスク数を設定してもよい。
この場合の並列処理装置３の構成を図１６に示す。図１６において、並列処理装置３は、タスク情報取得部３１０の代わりに、演算装置構成情報取得部３１２と、コア−アレイ対応表３１３とを有している。この場合、同時実行タスク数設定部３０２は、演算装置構成情報取得部３１２およびコア−アレイ対応表３１２と共に、本発明の同時実行タスク数設定部の一実施形態を構成している。
演算装置構成情報取得部３１２は、並列処理装置３を構成するコンピュータ装置が有するメニコアアクセラレータ（ＧＰＵ１００４）の構成を表す情報を取得する。例えば、演算装置構成情報取得部３１２は、ＧＰＵ１００４が有する各プロセッサコアの性能を表す情報を取得してもよい。そして、演算装置構成情報取得部３１２は、取得したメニコアアクセラレータの構成情報に基づいて、アレイ総数設定部３０４が設定した数のスレッドアレイと、プロセッサコアとの対応関係を決定し、コア−アレイ対応表３１３に記録する。
この場合、同時実行タスク数設定部３０２は、コア−アレイ対応表３１３を参照することにより、アレイ総数設定部３０４が設定した数のスレッドアレイにタスクを振り分ける。例えば、同時実行タスク数設定部３０２は、より高性能のプロセッサコアに対応付けられたスレッドアレイには、より多くのタスクをまとめて割り当ててもよい。また、同時実行タスク数設定部３０２は、より性能が低いプロセッサコアに対応付けられたスレッドアレイには、より少ない数のタスクを割り当てるようにしてもよい。
以上のように構成した場合の並列処理装置３の動作を図１７に示す。図１７において、並列処理装置３は、図１３に示した動作におけるステップＳ３０３〜Ｓ３０４、Ｓ１０６の代わりに、ステップＳ４０３〜Ｓ４０４、Ｓ４０６を実行する。
ステップＳ４０３では、演算装置構成情報取得部３１２は、メニコアアクセラレータ（ＧＰＵ１００４）の構成を表す情報を取得する。そして、演算装置構成情報取得部３１２は、取得したメニコアアクセラレータ構成情報に基づいて、アレイ総数設定部３０４が設定した数のスレッドアレイと、プロセッサコアとの対応関係を決定し、コア−アレイ対応表３１３に記録する。
また、ステップＳ４０４では、同時実行タスク数設定部３０２は、コア−アレイ対応表３１３に基づいて、スレッドアレイ毎に個別の同時実行タスク数のタスクを割り当てる。
また、ステップＳ４０６では、スレッドアレイ制御部１０５は、コア−アレイ対応表３１３にしたがって、各スレッドアレイを、該当するプロセッサコアに並列処理させるよう制御する。
その他のステップでは、並列処理装置３は、図１３に示した各ステップと同様に動作する。そして、スレッドアレイ制御部１０５によって生成された各スレッドアレイにおいて、並列処理装置３は、図１４に示した動作を同様に実行する。これにより、各スレッドアレイに個別の同時実行タスク数分のタスクが、同時に実行される。
以上のように構成された本発明の第３の実施の形態の他の態様の並列処理装置は、本発明の第３の実施の形態の並列処理装置と同様に、各プロセッサコアの処理時間を均一化することができ、全体の処理時間を削減することができる。
その理由は、同時実行タスク数設定部が、メニコアアクセラレータの構成情報に基づいて、各スレッドアレイに個別の同時実行タスク数を設定するからである。これにより、本発明の第３の実施の形態の他の態様としての並列処理装置は、並列処理に用いるメニコアアクセラレータが有するプロセッサコアの処理能力に偏りがある場合にも、各プロセッサコア上で実行するスレッドアレイの同時実行タスク数を調整することができる。その結果、本発明の第３の実施の形態の他の態様としての並列処理装置は、プロセッサ間の処理時間を均一化することができ、処理の高速化を可能とする。
なお、本発明の第３の実施の形態において、同時実行タスク数設定部が、各スレッドアレイに個別の同時実行タスク数を、タスクの負荷情報や、プロセッサコアの性能情報に基づいて設定する例について説明した。これに限らず、本発明の第３の実施の形態における同時実行タスク数設定部は、各タスクが使用するメモリ量など、各タスクに関連するその他のタスク情報を用いて、各スレッドアレイに個別の同時実行タスク数を設定してもよい。あるいは、本発明の第３の実施の形態における同時実行タスク数設定部は、メニコアアクセラレータの有するメモリ量やプロセッサ数等、メニコアアクセラレータの構成に関連するその他の情報に基づいて、各スレッドアレイに個別の同時実行タスク数を設定してもよい。
（第４の実施の形態）
次に、本発明の第４の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第１の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
まず、本発明の第４の実施の形態としての並列処理装置４の機能ブロック構成について、図１８を参照して説明する。なお、並列処理装置４のハードウェア構成は、本発明の第１の実施の形態としての並列処理装置１と同様であるため、本実施の形態における説明を省略する。図１８において、並列処理装置４は、本発明の第１の実施の形態としての並列処理装置１に対して、同時実行タスク数設定部１０２に替えて同時実行タスク数設定部４０２を備え、さらに、実行時情報取得部４１４を備える点が異なる。なお、同時実行タスク数設定部４０２は、実行時情報取得部４１４と共に、本発明の同時実行タスク数設定部の一実施形態を構成する。
実行時情報取得部４１４は、タスク情報および演算装置構成情報の少なくとも１つを、アプリケーション実行時に取得する。例えば、実行時情報取得部４１４は、タスク情報として、各タスクが使用するメモリ量等のリソース量や、各タスクに必要なスレッド数、各タスクの負荷量を表す情報等を取得してもよい。また、例えば、実行時情報取得部４１４は、演算装置構成情報として、並列処理装置４を構成するコンピュータ装置が有するメニコアアクセラレータが有するプロセッサコア数、メモリ量、各プロセッサコアの性能情報等を取得してもよい。
同時実行タスク数設定部４０２は、実行時情報取得部４１４によって取得された情報に基づいて、同時実行タスク数を設定する。このとき、同時実行タスク数設定部４０２は、本発明の第１および第２の実施の形態における同時実行タスク数設定部１０２のように、各スレッドアレイに同一の同時実行タスク数を設定してもよい。あるいは、同時実行タスク数設定部４０２は、本発明の第３の実施の形態における同時実行タスク数設定部３０２のように、各スレッドアレイに個別の同時実行タスク数を設定してもよい。
例えば、同時実行タスク数設定部４０２は、各タスクが使用するメモリ量（タスク情報）および各スレッドアレイで使用可能な最大メモリ量（演算装置構成情報）に基づいて、各スレッドアレイで、同時実行されるタスクの使用する合計メモリ量が最大メモリ量以下になる最大のタスク数を、同時実行タスク数として設定してもよい。
また、例えば、同時実行タスク数設定部４０２は、ＧＰＵ１００４が有する各プロセッサコアの性能が均一でないという演算装置構成情報が得られている場合、より高速なプロセッサコアで実行されるスレッドアレイにより多くの同時実行タスク数を設定してもよい。
また、例えば、同時実行タスク数設定部４０２は、ＧＰＵ１００４が有する各プロセッサコアのメモリ量が均一でないという演算装置構成情報が得られている場合、よりメモリ量の多いプロセッサコアで実行されるスレッドアレイにより多くの同時実行タスク数を設定してもよい。
以上のように構成された並列処理装置４の動作について、図１９を参照して説明する。
まず、分割タスク取得部１０１によって、アプリケーションの処理が分割された各タスクを表す情報が取得されると（ステップＳ１０１）、実行時情報取得部４１４は、タスク情報および演算装置構成情報の少なくとも１つを、動的に取得する（ステップＳ５０１）。
次に、同時実行タスク数設定部４０２は、ステップＳ５０１で取得された情報に基づいて、同時実行タスク数を設定する（ステップＳ５０２）。例えば、前述のように、同時実行タスク数設定部４０２は、各スレッドアレイで、同実行されるタスクの使用する合計メモリ量が、１つのスレッドアレイで使用可能な最大メモリ量以下になる最大のタスク数を、同時実行タスク数として設定してもよい。
以降、ステップＳ１０３〜Ｓ１０６まで、並列処理装置４は、本発明の第１の実施の形態と同様に動作することにより、各スレッドアレイおよび各スレッドを生成して、その並列処理を制御する。そして、各スレッドアレイにおいて、図４に示した並列処理装置１の動作と同様に動作することにより、各スレッドアレイにおいて、ステップＳ５０２で設定された同時実行タスク数のタスクが並列処理される。
以上で、並列処理装置４の動作の説明を終了する。
なお、本実施の形態において、同時実行タスク数設定部４０２が、実行時情報に基づいて、各スレッドアレイに個別の同時実行タスク数を設定する場合について説明する。この場合、並列処理装置４は、本発明の第３の実施の形態におけるアレイ−タスク対応表３１１をさらに備えるようにする。そして、この場合、並列処理装置４は、図１９に示した動作においてステップＳ５０１を実行した後、ステップＳ５０２、Ｓ１０３、Ｓ１０４の代わりに、図１３に示したステップＳ３０２、Ｓ３０４、および、Ｓ３０５を実行すればよい。
次に、本発明の第４の実施の形態の効果について述べる。
本発明の第４の実施の形態としての並列処理装置は、タスク内の並列性は低いが並列処理可能なタスクが多数存在する処理において、複数のプロセッサコアを有する演算装置の多様な環境に対応して、各プロセッサコアの稼働率を向上させることができる。
その理由について、図２０を参照して説明する。図２０に示すように、本実施の形態の並列処理装置は、タスクの内容およびその並列処理に用いるメニコアアクセラレータの環境に応じて、各スレッドアレイ内の同時実行タスク数を動的に変化させることができるからである。その結果、本実施の形態の並列処理装置は、タスクの処理内容を変更することなく、より多様な実行環境において、各プロセッサコアの稼働率を向上させて高速に各タスク処理を完了することが可能になるからである。
（第５の実施の形態）
次に、本発明の第５の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第１の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
本実施の形態では、本発明の第１〜第４の実施の形態としての並列処理装置に実行させるためのコンピュータ・プログラムを最適化する最適化装置について説明する。本実施の形態としての最適化装置は、メニコアアクセラレータを用いた各タスクの並列処理が記述されたコンピュータ・プログラムを、実行環境に応じて最適化する。
まず、本発明の第５の実施の形態としての最適化装置５の機能ブロック構成について、図２１を参照して説明する。なお、最適化装置５のハードウェア構成は、本発明の第１の実施の形態としての並列処理装置１と同様のコンピュータ装置を適用可能であるため、本実施の形態における説明を省略する。図２１において、最適化装置５は、プログラム取得部５２１と、タスク情報取得部５２２と、演算装置構成情報取得部５２３と、同時実行タスク数設定部５２４と、アレイ内スレッド数設定部２０３と、アレイ総数設定部１０４と、プログラム変更部５２５とを備えている。なお、各機能ブロックは、ＲＯＭ１００３または記憶装置１００５に記憶されたコンピュータ・プログラムモジュールおよび各種情報を読み込んでＲＡＭ１００２を作業領域として実行するＣＰＵ１００１によって構成される。また、同時実行タスク数設定部５２４は、タスク情報取得部５２２および演算装置構成情報取得部５２３と共に、本発明の同時実行タスク数設定部を構成する。
プログラム取得部５２１は、メニコアアクセラレータを用いた各タスクの並列処理が記述されたコンピュータ・プログラムを表す情報を取得する。ここで取得されるコンピュータ・プログラムは、少なくとも、処理対象とするアプリケーションが並列処理可能に分割された各タスクの処理を実行させるためのスレッドアレイ、および、各タスクの処理がさらに並列処理可能に分割されたスレッドを生成するステップと、各タスクの処理に必要なリソースを各スレッドアレイにおいて確保して割り当てるステップと、各スレッドが処理するタスクを決定するステップと、割り当てられたリソースを用いて、決定されたタスクを各スレッドに実行させるステップと、を含むものである。
タスク情報取得部５２２は、タスクに関連するタスク情報を取得する。例えば、タスク情報取得部５２２は、タスク情報として、各タスクの処理に必要なリソース量、各タスクの処理に必要なスレッド数、または、各タスクの負荷情報等を取得してもよい。
演算装置構成情報取得部５２３は、ＧＰＵ１００４の構成に関連する演算装置構成情報を取得する。例えば、演算装置構成情報取得部５２３は、演算装置構成情報として、ＧＰＵ１００４が有するリソース量、プロセッサコア数、または、各プロセッサコア性能情報を取得してもよい。
同時実行タスク数設定部５２４は、タスク情報および演算装置構成情報の少なくと１つに基づいて、各スレッドアレイにおいて同時に実行する同時実行タスク数を設定る。例えば、同時実行タスク数設定部５２４は、各タスクが使用するメモリ量（タスク情報）および各スレッドアレイで使用可能な最大メモリ量（演算装置構成情報）に基づいて、各スレッドアレイで、同時実行されるタスクの使用する合計メモリ量が、１つのスレッドアレイで使用可能な最大メモリ量以下になる最大のタスク数を、同時実行タスク数として設定してもよい。
アレイ内スレッド数設定部２０３は、本発明の第２の実施の形態におけるアレイ内スレッド数設定部２０３と同様に、各タスクの処理に必要なスレッド構成に、同時実行タスク数サイズのタスク決定次元を追加した多次元のスレッド構成を設定する。
アレイ総数設定部１０４は、本発明の第２の実施の形態におけるアレイ総数設定部１０４と同様に、アプリケーションを構成するタスク数を同時実行タスク数で除した値をアレイ総数として設定する。ただし、端数は切り上げる。
プログラム変更部５２５は、プログラム取得部５２１によって取得されたコンピュータ・プログラムに対して、アレイ内スレッド数、アレイ総数、および、同時実行タスク数を適用するよう変更する。具体的には、プログラム変更部５２５は、スレッドおよびスレッドアレイを生成するステップを、アレイ内スレッド数およびアレイ総数に基づいて生成を行うよう変更する。また、プログラム変更部５２５は、各スレッドアレイにおいてタスクにリソースを割り当てるステップを、同時実行タスク数分のタスクの実行に必要なリソースを確保して各タスクに割り当てるよう変更する。また、プログラム変更部５２５は、各スレッドが実行するタスクを決定するステップを、各スレッドアレイ内で実行させる同時実行タスク数のタスクのいずれかに決定するよう変更する。また、プログラム変更部５２５は、各スレッドに該当するタスクを実行させるステップを、各スレッドアレイにおいて確保されたリソースのうち、該当するタスクに割り当てられたリソースを使用して該タスクを実行するよう変更する。
以上のように構成された最適化装置５の動作について、図２２を参照して説明する。なお、ここでは、プログラム取得部５２１は、既に該当するコンピュータ・プログラムを取得しているものとする。また、ここでは、最適化装置５が、取得したコンピュータ・プログラムを、本発明の第２の実施の形態としての並列処理装置２に実行させるためのコンピュータ・プログラムに最適化する動作例について説明する。
ここでは、まず、タスク情報取得部５２２は、コンピュータ・プログラムに記載された各タスクに関連するタスク情報を取得する。例えば、タスク情報取得部５２２は、各タスクで使用するメモリ量を取得する（ステップＳ６０１）。
次に、演算装置構成情報取得部５２３は、ＧＰＵ１００４の構成に関連する演算装構成情報を取得する。例えば、演算装置構成情報取得部５２３は、ＧＰＵ１００４において、各スレッドアレイで使用可能な最大のメモリ量を取得する（ステップＳ６０２）。
次に、同時実行タスク数設定部５２４は、タスク情報および演算装置構成情報の少なくとも１つに基づいて、各スレッドアレイで同時に実行する同時実行タスク数を設定する。例えば、同時実行タスク数設定部５２４は、各スレッドアレイ内で同時実行する各タスクの使用メモリ量の合計が、各スレッドアレイで使用可能な最大メモリ量以下となるような最大のタスク数を、同時実行タスク数として設定する（ステップＳ６０３）。
次に、アレイ総数設定部１０４は、アレイ総数として、総タスク数を同時実行タスク数で除した値（端数切り上げ）に設定する（ステップＳ６０４）。
次に、アレイ内スレッド数設定部１０３は、各タスクの処理に必要なスレッド構成に、同時実行タスク数サイズのタスク数決定次元を追加した多次元のスレッド構成を設定する（ステップＳ６０５）。
次に、プログラム変更部５２５は、取得されたコンピュータ・プログラムにおいて、生成するスレッドアレイの総数をアレイ総数に変更する（ステップＳ６０６）。
次に、プログラム変更部５２５は、取得されたコンピュータ・プログラムにおいて、生成するスレッドアレイ内のスレッド構成を、ステップＳ６０５で設定したスレッド構成に変更する（ステップＳ６０７）。
次に、プログラム変更部５２５は、取得されたコンピュータ・プログラムにおいて、各スレッドが処理するタスク番号を算出する部分を、各スレッドＩＤのタスク決定次元に基づいて算出を行うよう変更する（ステップＳ６０８）。
次に、プログラム変更部５２５は、取得されたコンピュータ・プログラムにおいて、各スレッドにおいてリソースを確保する部分を、同時実行タスク数分のリソース配列として確保するよう変更する（ステップＳ６０９）。
次に、プログラム変更部５２５は、取得されたコンピュータ・プログラムにおいて、各スレッドにタスク実行させる部分で、そのスレッドＩＤのタスク決定次元に基づいて該当するタスクに割り当てられたリソースを使用するよう変更する（ステップＳ６１０）。
以上で、最適化装置５は動作を終了する。
このように、最適化装置５は、入力されたコンピュータ・プログラムにおいて、各タスクの処理内容を変更する必要はない。
以上のように動作する最適化装置５は、例えば、図１１に示したコンピュータ・プログラムを取得して、図１０に示したコンピュータ・プログラムを出力することが可能である。
次に、本発明の第５の実施の形態の効果について述べる。
本発明の第５の実施の形態としての最適化装置は、タスク内の並列性は低いが並列処理可能なタスク数が多い並列処理が記述されたコンピュータ・プログラムを、機種や世代の変化等により多様な構成を有するメニコアアクセラレータに応じて、各プロセッサコアの稼働率の向上に適したコンピュータ・プログラムに変更することが可能である。
その理由は、同時実行タスク数設定部が、タスクの内容およびメニコアアクセラレータの構成に応じて、各スレッドアレイでの同時実行タスク数を変更するからである。そして、プログラム変更部が、その同時実行タスク数に基づいて設定されたスレッドアレイ総数およびアレイ内スレッド数に基づいて、入力されたコンピュータ・プログラムを変更するからである。メニコアアクセラレータでは、コア数やアーキテクチャが異なると、特に並列化に関する最適なスレッド数などのパラメータは変化する。そして、これらのパラメータは、プログラムの性能に大きく影響する。そのため、プログラマは、環境に応じて、パラメータを変更する必要がある。しかし、実行環境ごとにパラメータを変更するのは容易ではなく、煩雑である。したがって、本実施の形態の最適化装置は、プログラマが実行環境に応じてプログラミングを行う煩雑さを解消することができる。
なお、上述した本発明の各実施の形態において、各フローチャートを参照して説明した並列処理装置および最適化装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータ装置の記憶装置（記憶媒体）に格納しておき、係るコンピュータ・プログラムを当該ＣＰＵおよびＧＰＵが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコード或いは記憶媒体によって構成される。
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。
また、上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
（付記１）
並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する並列処理装置において、
処理対象となるアプリケーションの処理が並列処理可能に分割された各タスクを表す情報を取得する分割タスク取得部と、
前記各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する同時実行タスク数設定部と、
前記各タスクにおいてさらに並列処理可能なスレッド数および前記同時実行タスク数に基づいて、前記各スレッドアレイ内のスレッド数であるアレイ内スレッド数を設定するアレイ内スレッド数設定部と、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定するアレイ総数設定部と、
前記アレイ内スレッド数および前記アレイ総数に基づいて各スレッドおよび各スレッドアレイを生成し、各スレッドアレイの処理を前記演算装置に並列に実行させるよう制御するスレッドアレイ制御部と、
前記各スレッドアレイにおいて、前記同時実行タスク数のタスクの処理に必要なリソースを確保し、確保したリソースを各タスクに配分するリソース割当部と、
前記スレッドアレイ内の各スレッドが処理するタスクを決定する処理タスク決定部と、
前記リソース割当部によって配分されたリソースを用いて、前記処理タスク決定部によって決定されたタスクを各スレッドに実行させることにより、前記各スレッドアレイにおいて前記同時実行タスク数のタスクを実行するタスク実行部と、
を備えた並列処理装置。
（付記２）
前記アレイ内スレッド数設定部は、前記各タスクの処理に必要なスレッド構成の次元に、各スレッドの処理対象となるタスクを識別するためのタスク決定次元を加えた多次元で表されるスレッド構成を設定し、
前記処理タスク決定部は、前記各スレッドのタスク決定次元に基づいて、前記各スレッドが処理するタスクを決定することを特徴とする付記１に記載の並列処理装置。
（付記３）
前記同時実行タスク数設定部は、前記スレッドアレイ毎に個別の前記同時実行タスク数を設定することを特徴とする付記１または付記２に記載の並列処理装置。
（付記４）
前記同時実行タスク数設定部は、前記各タスクに関連するタスク情報および前記演算装置の構成に関連する演算装置構成情報の少なくとも１つに基づいて、前記同時実行タスク数を設定することを特徴とする付記１から付記３のいずれかに記載の並列処理装置。
（付記５）
前記同時実行タスク数設定部は、前記タスク情報および前記演算装置構成情報の少なくとも１つを前記アプリケーション実行時に取得することにより、取得した情報に基づいて前記同時実行タスク数を設定することを特徴とする付記４に記載の並列処理装置。
（付記６）
前記タスク情報は、前記各タスクの処理に必要なリソース量、前記各タスクの処理に必要なスレッド数、および、前記各タスクの負荷情報の少なくとも１つであることを特徴とする付記４または付記５に記載の並列処理装置。
（付記７）
前記演算装置構成情報は、前記演算装置が有するリソース量、プロセッサコア数、および、各プロセッサコア性能情報の少なくとも１つであることを特徴とする付記４から付記６のいずれかに記載の並列処理装置。
（付記８）
並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する処理が記述されたコンピュータ・プログラムを最適化する最適化装置であって、
処理対象とするアプリケーションが並列処理可能に分割された各タスクの処理を実行させるためのスレッドアレイ、および、各タスクの処理がさらに並列処理可能に分割されたスレッドを生成するステップと、前記各タスクの処理に必要なリソースを前記スレッドアレイにおいて確保して割り当てるステップと、前記各スレッドが処理するタスクを決定するステップと、割り当てられたリソースを用いて、決定されたタスクを各スレッドに実行させるステップと、を含むコンピュータ・プログラムを表す情報を取得するプログラム取得部と、
前記タスクに関連するタスク情報および前記演算装置の構成に関連する演算装置構成情報の少なくとも１つに基づいて、各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する同時実行タスク数設定部と、
前記各タスクに必要となるスレッド数および前記同時実行タスク数に基づいて、前記アレイ内スレッド数を設定するアレイ内スレッド数設定部と、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定するアレイ総数設定部と、
前記コンピュータ・プログラムの、前記スレッドおよび前記スレッドアレイを生成するステップを、前記アレイ内スレッド数および前記アレイ総数に基づいて生成を行うよう変更し、前記スレッドアレイにおいてリソースを確保して割り当てるステップを、前記同時実行タスク数分のタスクの実行に必要なリソースを確保して割り当てるよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記スレッドアレイ内で実行させる同時実行タスク数のタスクのいずれかに決定するよう変更し、前記スレッドに前記タスクを実行させるステップを、該タスクに割り当てられたリソースを使用するよう変更するプログラム変更部と、
を備えた最適化装置。
（付記９）
前記アレイ内スレッド数設定部は、前記各タスクの処理に必要なスレッド構成の次元に、各スレッドの処理対象となるタスクを識別するためのタスク決定次元を加えた多次元で表されるスレッド構成を決定し、
前記プログラム変更部は、前記スレッドおよび前記スレッドアレイを生成するステップを、前記スレッド構成に基づいて、前記アレイ内スレッド数のスレッドを有する各スレッドアレイを生成するよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記タスク決定次元に基づいて該スレッドが処理するタスクを決定するよう変更し、前記各スレッドに前記タスクを実行させるステップを、前記タスク決定次元に基づき選択されるリソースを使用するよう変更することを特徴とする付記８に記載の最適化装置。
（付記１０）
並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する並列処理方法であって、
処理対象となるアプリケーションの処理が並列処理可能に分割された各タスクを表す情報を取得し、
前記各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定し、
前記各タスクにおいてさらに並列処理可能なスレッド数および前記同時実行タスク数に基づいて、前記各スレッドアレイ内のスレッド数であるアレイ内スレッド数を設定し、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定し、
前記アレイ内スレッド数および前記アレイ総数に基づいて各スレッドおよび各スレッドアレイを生成し、各スレッドアレイの処理を前記演算装置に並列に実行させるよう制御し、
前記各スレッドアレイにおいて、前記同時実行タスク数のタスクの処理に必要なリソースを確保し、確保したリソースを各タスクに配分し、
前記スレッドアレイ内の各スレッドが処理するタスクを決定し、
前記リソース割当部によって配分されたリソースを用いて、前記処理タスク決定部によって決定されたタスクを各スレッドに実行させることにより、前記各スレッドアレイにおいて前記同時実行タスク数のタスクを実行する、並列処理方法。
（付記１１）
前記アレイ内スレッド数を設定する際に、前記各タスクの処理に必要なスレッド構成の次元に、各スレッドの処理対象となるタスクを識別するためのタスク決定次元を加えた多次元で表されるスレッド構成を決定し、
前記各スレッドが処理するタスクを決定する際に、前記各スレッドのタスク決定次元に基づいて、前記各スレッドが処理するタスクを決定することを特徴とする付記１０に記載の並列処理方法。
（付記１２）
並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する並列処理装置に、
処理対象となるアプリケーションの処理が並列処理可能に分割された各タスクを表す情報を取得する分割タスク取得ステップと、
前記各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する同時実行タスク数設定ステップと、
前記各タスクにおいてさらに並列処理可能なスレッド数および前記同時実行タスク数に基づいて、前記各スレッドアレイ内のスレッド数であるアレイ内スレッド数を設定するアレイ内スレッド数設定ステップと、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定するアレイ総数設定ステップと、
前記アレイ内スレッド数および前記アレイ総数に基づいて各スレッドおよび各スレッドアレイを生成し、各スレッドアレイの処理を前記演算装置に並列に実行させるよう制御するスレッドアレイ制御ステップと、
前記各スレッドアレイにおいて、前記同時実行タスク数のタスクの処理に必要なリソースを確保し、確保したリソースを各タスクに配分するリソース割当ステップと、
前記スレッドアレイ内の各スレッドが処理するタスクを決定する処理タスク決定ステップと、
前記リソース割当部によって配分されたリソースを用いて、前記処理タスク決定部によって決定されたタスクを各スレッドに実行させることにより、前記各スレッドアレイにおいて前記同時実行タスク数のタスクを実行するタスク実行ステップと、
を実行させるコンピュータ・プログラム。
（付記１３）
前記アレイ内スレッド数設定ステップにおいて、前記各タスクの処理に必要なスレッド構成の次元に、各スレッドの処理対象となるタスクを識別するためのタスク決定次元を加えた多次元で表されるスレッド構成を設定し、
前記処理タスク決定ステップにおいて、前記各スレッドのタスク決定次元に基づいて、前記各スレッドが処理するタスクを決定することを特徴とする付記１２に記載のコンピュータ・プログラム。
（付記１４）
並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する処理が記述されたコンピュータ・プログラムを最適化する最適化方法であって、
処理対象とするアプリケーションが並列処理可能に分割された各タスクの処理を実行させるためのスレッドアレイ、および、各タスクの処理がさらに並列処理可能に分割されたスレッドを生成するステップと、前記各タスクの処理に必要なリソースを前記スレッドアレイにおいて確保して割り当てるステップと、前記各スレッドが処理するタスクを決定するステップと、割り当てられたリソースを用いて、決定されたタスクを各スレッドに実行させるステップと、を含むコンピュータ・プログラムを表す情報を取得し、
前記タスクに関連するタスク情報および前記演算装置の構成に関連する演算装置構成情報の少なくとも１つに基づいて、各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定し、
前記各タスクに必要となるスレッド数および前記同時実行タスク数に基づいて、前記アレイ内スレッド数を設定し、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定し、
前記コンピュータ・プログラムの、前記スレッドおよび前記スレッドアレイを生成するステップを、前記アレイ内スレッド数および前記アレイ総数に基づいて生成を行うよう変更し、前記スレッドアレイにおいてリソースを確保して割り当てるステップを、前記同時実行タスク数分のタスクの実行に必要なリソースを確保して割り当てるよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記スレッドアレイ内で実行させる同時実行タスク数のタスクのいずれかに決定するよう変更し、前記スレッドに前記タスクを実行させるステップを、該タスクに割り当てられたリソースを使用するよう変更する、最適化方法。
（付記１５）
前記アレイ内スレッド数を設定する際に、前記各タスクの処理に必要なスレッド構成の次元に、各スレッドの処理対象となるタスクを識別するためのタスク決定次元を加えた多次元で表されるスレッド構成を決定し、
前記プログラムの各ステップを変更する際に、前記スレッドおよび前記スレッドアレイを生成するステップを、前記スレッド構成に基づいて、前記アレイ内スレッド数のスレッドを有する各スレッドアレイを生成するよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記タスク決定次元に基づいて該スレッドが処理するタスクを決定するよう変更し、前記各スレッドに前記タスクを実行させるステップを、前記タスク決定次元に基づき選択されるリソースを使用するよう変更することを特徴とする付記１４に記載の最適化方法。
（付記１６）
並列処理可能な処理単位を表すスレッドの集合であるスレッドアレイの集合を、複数のプロセッサコアを有する演算装置を用いてさらに並列処理する処理が記述されたコンピュータ・プログラムを最適化するためのコンピュータ・プログラムであって、
処理対象とするアプリケーションが並列処理可能に分割された各タスクの処理を実行させるためのスレッドアレイ、および、各タスクの処理がさらに並列処理可能に分割されたスレッドを生成するステップと、前記各タスクの処理に必要なリソースを前記スレッドアレイにおいて確保して割り当てるステップと、前記各スレッドが処理するタスクを決定するステップと、割り当てられたリソースを用いて、決定されたタスクを各スレッドに実行させるステップと、を含むコンピュータ・プログラムを表す情報を取得するプログラム取得ステップと、
前記タスクに関連するタスク情報および前記演算装置の構成に関連する演算装置構成情報の少なくとも１つに基づいて、各スレッドアレイにおいて同時に実行するタスク数である同時実行タスク数を設定する同時実行タスク数設定ステップと、
前記各タスクに必要となるスレッド数および前記同時実行タスク数に基づいて、前記アレイ内スレッド数を設定するアレイ内スレッド数設定ステップと、
前記アプリケーションの処理に必要な総スレッド数および前記アレイ内スレッド数に基づいて、前記スレッドアレイの総数であるアレイ総数を設定するアレイ総数設定ステップと、
前記コンピュータ・プログラムの、前記スレッドおよび前記スレッドアレイを生成するステップを、前記アレイ内スレッド数および前記アレイ総数に基づいて生成を行うよう変更し、前記スレッドアレイにおいてリソースを確保して割り当てるステップを、前記同時実行タスク数分のタスクの実行に必要なリソースを確保して割り当てるよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記スレッドアレイ内で実行させる同時実行タスク数のタスクのいずれかに決定するよう変更し、前記スレッドに前記タスクを実行させるステップを、該タスクに割り当てられたリソースを使用するよう変更するプログラム変更ステップと、
をコンピュータ装置に実行させるコンピュータ・プログラム。
（付記１７）
前記アレイ内スレッド数設定ステップにおいて、前記各タスクの処理に必要なスレッド構成の次元に、各スレッドの処理対象となるタスクを識別するためのタスク決定次元を加えた多次元で表されるスレッド構成を決定し、
前記プログラム変更ステップにおいて、前記スレッドおよび前記スレッドアレイを生成するステップを、前記スレッド構成に基づいて、前記アレイ内スレッド数のスレッドを有する各スレッドアレイを生成するよう変更し、前記各スレッドが処理するタスクを決定するステップを、前記タスク決定次元に基づいて該スレッドが処理するタスクを決定するよう変更し、前記各スレッドに前記タスクを実行させるステップを、前記タスク決定次元に基づき選択されるリソースを使用するよう変更することを特徴とする付記１６に記載のコンピュータ・プログラム。
この出願は、２０１１年５月１９日に出願された日本出願特願２０１１−１１２３３１を基礎とする優先権を主張し、その開示の全てをここに取り込む。
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【０００８】
１、２、３、４    並列処理装置
５    最適化装置
１０１    分割タスク取得部
１０２、３０２、４０２、５２４    同時実行タスク数設定部
１０３、２０３、３０３    アレイ内スレッド数設定部
１０４、３０４    アレイ総数設定部
１０５    スレッドアレイ制御部
１０６、２０６、３０６    リソース割当部
１０７、２０７、３０７    処理タスク決定部
１０８  タスク実行部
３１０、５２２  タスク情報取得部
３１１  アレイ−タスク対応表
３１２、５２３  演算装置構成情報取得部
３１３  コア−アレイ対応表
４１４  実行時情報取得部
５２１  プログラム取得部
５２５  プログラム変更部
９００  アプリケーション実行部
９１１  ＣＴＡ内スレッド数設定部
９１２  ＣＴＡ数設定部
９１３  タスク分割部
９２４  ＣＴＡ制御部
９２５  処理タスク決定部
９２６  タスク実行部
９３１  パラメータ変更部
９３２  実行時間取得部
９３３  最適パラメータ選択部
９４１  アプリケーション合成部
９４２  処理アプリケーション選択部
１００１  ＣＰＵ
１００２  ＲＡＭ
１００３  ＲＯＭ
１００４  ＧＰＵ
１００５  記憶装置
１００６  入力装置
【図１】
2012157786.tif 000003
【図２】
2012157786.tif 000004
【図３】
2012157786.tif 000005
【図４】
2012157786.tif 000006
【図５】
2012157786.tif 000007
【図６】
2012157786.tif 000008
【図７】
2012157786.tif 000009
【図８】
2012157786.tif 000010
【図９】
2012157786.tif 000011
【図１０】
2012157786.tif 000012
【図１１】
2012157786.tif 000013
【図１２】
2012157786.tif 000014
【図１３】
2012157786.tif 000015
【図１４】
2012157786.tif 000016
【図１５】
2012157786.tif 000017
【図１６】
2012157786.tif 000018
【図１７】
2012157786.tif 000019
【図１８】
2012157786.tif 000020
【図１９】
2012157786.tif 000021
【図２０】
2012157786.tif 000022
【図２１】
2012157786.tif 000023
【図２２】
2012157786.tif 000024
【図２３】
2012157786.tif 000025
【図２４】
2012157786.tif 000026
【図２５】
2012157786.tif 000027
【図２６】
2012157786.tif 000028
【図２７】
2012157786.tif 000029
【図２８】
2012157786.tif 000030
【図２９】
2012157786.tif 000031
【図３０】
2012157786.tif 000032
【図３１】
2012157786.tif 000033
【図３２】
2012157786.tif 000034
【図３３】
2012157786.tif 000035
【図３４】
2012157786.tif 000036
【図３５】
2012157786.tif 000037
【図３６】
2012157786.tif 000038
【図３７】
2012157786.tif 000039
【図３８】
2012157786.tif 000040
【国際調査報告】
2012157786.tif 000041
2012157786.tif 000042