"複数のバンクで構成されるメモリに接続された複数の演算コアに対する命令を生成する情報処理装置であって、前記命令は、当該命令によって指定された演算コアが互いに同期して、初期データを前記演算コアが保持するレジスタへと読み込む読込サイクルと、前記演算コアごとに予め対応付けられたバンク内の領域から読み込んだデータと、前記演算コアが保持するレジスタ内のデータとを用いて演算を行い、演算結果を前記演算コアが保持するレジスタに格納する演算サイクルと、前記メモリへ前記演算コアが保持するレジスタ内のデータを書き込む書込サイクルとを含み、前記情報処理装置は、1回の前記演算サイクルにおいて演算コアがアクセスするアクセス回数をそれぞれのバンクごとに保持する保持手段と、前記複数の演算コアのうち、対応するバンクについての前記アクセス回数が所定回数未満である演算コアを、他の演算コアからデータを受信する継続演算コアとして選択する第1の選択手段と、前記継続演算コアに対してデータを送信する送信演算コアを選択する第2の選択手段と、前記送信演算コアに、前記書込サイクルにおいて、レジスタ内のデータを前記継続演算コアに対応付けられたバンク内の領域に書き込ませる命令と、前記継続演算コアに、当該書込サイクルに続く前記演算サイクルにおいて、当該継続演算コアに対応付けられたバンク内の領域からデータを読み込ませる命令と、を生成する生成手段と、前記生成手段が命令を生成する際に、前記継続演算コアに対応する前記予め定められたバンクへのアクセス回数をインクリメントする更新手段と、を備えることを特徴とする情報処理装置。前記第1の選択手段及び前記第2の選択手段は、複数の前記演算コアの中から、1組の書込サイクルと続く演算サイクルとにおいてデータが送受信される前記継続演算コアと前記送信演算コアとのセットを繰り返し選択し、前記第1の選択手段は、対応付けられたバンクへのアクセス回数がより少ない演算コアを、前記継続演算コアとして選択し、前記第2の選択手段は、対応付けられたバンクへのアクセス回数がより多い演算コアを、前記送信演算コアとして選択することを特徴とする、請求項1に記載の情報処理装置。複数のバンクで構成されるメモリに接続された複数の演算コアに対する命令を生成する情報処理装置が行う情報処理方法であって、前記命令は、当該命令によって指定された演算コアが互いに同期して、初期データを前記演算コアが保持するレジスタへと読み込む読込サイクルと、演算コアごとに予め対応付けられたバンク内の領域から読み込んだデータと、前記演算コアが保持するレジスタ内のデータとを用いて演算を行い、演算結果を前記演算コアが保持するレジスタに格納する演算サイクルと、前記メモリへ前記演算コアが保持するレジスタ内のデータを書き込む書込サイクルとを含み、前記情報処理装置は、1回の前記演算サイクルにおいて演算コアがアクセスするアクセス回数をそれぞれのバンクごとに保持する保持手段を備え、前記情報処理方法は、前記情報処理装置の第1の選択手段が、前記複数の演算コアのうち、対応するバンクについての前記アクセス回数が所定回数未満である演算コアを、他の演算コアからデータを受信する継続演算コアとして選択する第1の選択工程と、前記情報処理装置の第2の選択手段が、前記継続演算コアに対してデータを送信する送信演算コアを選択する第2の選択工程と、前記情報処理装置の生成手段が、前記送信演算コアに、前記書込サイクルにおいて、レジスタ内のデータを前記継続演算コアに対応付けられたバンク内の領域に書き込ませる命令と、前記継続演算コアに、当該書込サイクルに続く前記演算サイクルにおいて、当該継続演算コアに対応付けられたバンク内の領域からデータを読み込ませる命令と、を生成する生成工程と、前記生成工程で命令を生成する際に、前記情報処理装置の更新手段が、前記継続演算コアに対応する前記予め定められたバンクへのアクセス回数をインクリメントする更新工程と、を備えることを特徴とする情報処理方法。コンピュータを、請求項1又は2に記載の情報処理装置の各手段として機能させるための、コンピュータプログラム。しかしながら特許文献1に記載の技術は、GPGPUのように複数のコアがSPMDで動作する場合が考慮されていない。すなわち、特許文献1に記載の技術によれば、複数のコアが異なる命令に従って動作するように指示される。しかしながらこのような動作を行わないGPGPUにおいては、特許文献1に記載の技術に従うとかえって動作速度が低下することが考えられる。本発明は、複数のスレッドが互いに通信しながら演算を行うシステムにおいて、メモリアクセスのコンフリクトを減らしながら演算コアの利用率を高め、演算速度を向上させることを目的とする。本発明の目的を達成するために、例えば、本発明の情報処理装置は以下の構成を備える。すなわち、複数のバンクで構成されるメモリに接続された複数の演算コアに対する命令を生成する情報処理装置であって、前記命令は、当該命令によって指定された演算コアが互いに同期して、初期データを前記演算コアが保持するレジスタへと読み込む読込サイクルと、前記演算コアごとに予め対応付けられたバンク内の領域から読み込んだデータと、前記演算コアが保持するレジスタ内のデータとを用いて演算を行い、演算結果を前記演算コアが保持するレジスタに格納する演算サイクルと、前記メモリへ前記演算コアが保持するレジスタ内のデータを書き込む書込サイクルとを含み、前記情報処理装置は、1回の前記演算サイクルにおいて演算コアがアクセスするアクセス回数をそれぞれのバンクごとに保持する保持手段と、前記複数の演算コアのうち、対応するバンクについての前記アクセス回数が所定回数未満である演算コアを、他の演算コアからデータを受信する継続演算コアとして選択する第1の選択手段と、前記継続演算コアに対してデータを送信する送信演算コアを選択する第2の選択手段と、前記送信演算コアに、前記書込サイクルにおいて、レジスタ内のデータを前記継続演算コアに対応付けられたバンク内の領域に書き込ませる命令と、前記継続演算コアに、当該書込サイクルに続く前記演算サイクルにおいて、当該継続演算コアに対応付けられたバンク内の領域からデータを読み込ませる命令と、を生成する生成手段と、前記生成手段が命令を生成する際に、前記継続演算コアに対応する前記予め定められたバンクへのアクセス回数をインクリメントする更新手段と、を備えることを特徴とする。本発明によれば、複数のスレッドが互いに通信しながら演算を行うシステムにおいて、メモリアクセスのコンフリクトを減らしながら演算コアの利用率を高め、演算速度を向上させることができる。以下、本発明の実施例を図面に基づいて説明する。ただし、本発明の範囲は以下の実施例に限定されるものではない。図1に、並列リダクション処理を行うシステムの構成例を示す。図1に示すシステムは、以下で詳細に示すように、本実施例に係る情報処理装置が定めたスケジューリングに従って処理を行う。演算部1は、複数の処理エレメントPE演算コアを備える。図1の例では、演算部1は8つの処理エレメントを備え、それぞれの処理エレメントをPE010~PE717と呼ぶことにする。また、各々の処理エレメントPEはクロスバスイッチ2を介して共有メモリ4へアクセスすることが可能である。共有メモリ4は複数のバンクに分かれており、各バンクはそれぞれ異なるメモリコントローラを経由してクロスバスイッチ2と接続される。図1の例では、共有メモリ4は4つのバンクに分かれており、それぞれのバンクをバンク040~バンク343と呼ぶことにする。また、図1のシステムはバンク0~バンク3のそれぞれに対応するメモリコントローラを備え、それぞれメモリコントローラ030~メモリコントローラ333と呼ぶことにする。演算部1が有するそれぞれの処理エレメントPEが、共有メモリ4に対して同時にアクセス要求を発行する場合がある。異なるバンクへのアクセス要求が発行された場合であれば、演算部1は遅延なく共有メモリ4にアクセスすることができる。しかし、同一バンクへのアクセス要求が同時に発行された場合これをバンクコンフリクトと呼ぶ、メモリコントローラがこれらのアクセス要求を処理するためにはある程度の時間を要する。またバンクコンフリクトによる処理遅延は、同一のメモリコントローラに対するアクセス要求が多いほど、大きくなる。図2は処理エレメントPE010~PE717のひとつの構成をさらに詳細に示した例である。処理ユニットPU100はあらゆる演算を行う。処理ソフトウェアには、処理動作の主体であるスレッドが、この処理ユニットPU100上で動作しているように見える。なお、以降の説明では、処理ユニットPEn内の処理ユニットPU100PEで動作しているスレッドのことを、スレッドnと呼ぶ。すなわち、処理ユニットPE0~PE7のそれぞれで動作しているスレッドを、スレッド1~7と呼ぶ。本実施例において、全スレッドは同一プログラムの同一行を実行する。このため、いくつかのスレッドは必要のない処理を行うことがある。このような場合、不図示のマスクレジスタによって処理結果は破棄される。リダクション処理は、処理エレメントが複数のデータから1つのデータを算出することを繰り返すことにより行われる。この処理を本明細書では統合処理と呼ぶことにする。例えば、多数のデータのうち2個ずつを統合することを繰り返すことにより、多数のデータから1つの処理結果演算処理結果を得ることができる。統合処理の例としては、複数のデータを加算すること、複数のデータの最大値を求めること、複数のデータの最小値を求めること、などがある。もっとも、その他の統合処理が本実施例において採用されてもよい。リダクション処理においては多数のデータからいくつかのデータを選択することと選択されたデータを統合することとが繰り返されるが、どのデータを先に選択しても通常は同じ結果が得られる。統合処理においてPU100は、処理レジスタ内101の値と、データレジスタ内内102の値とを用いて演算を行い、演算結果を処理レジスタ101に書き戻す。データレジスタ102は、1以上のレジスタで構成されうる。図2の例では、データレジスタ102はデータレジスタ01020及びデータレジスタ11021を有する。また、リダクション処理を開始するにあたって、各処理エレメントのローカルレジスタ103は、予め初期データを格納している。この初期データは、リダクション処理を開始するにあたって不図示の記憶媒体からローカルレジスタ103へと読み込まれてもよい。本実施例において処理エレメントPEは2つのデータレジスタ1020,1021を有する。しかしながら、処理エレメントPEが有するデータレジスタの数は1つでもよいし、3つ以上でもよい。図3は、共有メモリ4のメモリ領域がどのようにバンクにマップされているかを表す。図3において、1番目のデータはバンク0に、2番目のデータはバンク1に、3番目のデータはバンク2に、4番目のデータはバンク3に、それぞれマップされている。そして、5~8番目のデータもまた、それぞれバンク0~バンク3にマップされている。図4は共有メモリ4に格納されるデータに対する、メモリ領域の割当て例である。それぞれの四角形はデータが格納される1つの領域を表し、四角形の内部に書かれている番号は、マップされているバンクの番号である。つまり、それぞれのメモリ領域にアクセスする場合には、番号で示されるバンク内へのアクセスが行われる。本実施例においては、10グループの初期データ群のそれぞれについて、リダクション処理が行われるものとする。すなわち、1グループの初期データ群を構成するそれぞれのデータが各処理エレメントPEに格納されている。本実施例においては、1グループの初期データ群は8個の初期データで構成され、それぞれの初期データは各処理エレメントPEのローカルレジスタ103に格納されている。もっとも、1グループの初期データ群を構成する初期データの数が、処理エレメントPEの数に一致している必要はない。各処理エレメントPEは、この1グループの初期データ群についてリダクション処理を行い、処理結果を得る。同様に各処理エレメントPEは、他の9グループについても、初期データ群を構成するデータを格納している。そして各処理エレメントPEは、他の9グループの初期データ群についてもリダクション処理を行い、9個の処理結果を得る。このように得られたリダクション処理結果は、共有メモリ内の結果出力領域51に出力される。結果出力領域51は10グループのそれぞれに対応する10個の領域510~519を有し、10個の出力結果は先頭から順に格納される。また、共有メモリ4は通信用エリア52を備える。この通信用エリア52は、スレッド間の通信のために用いられる。各スレッドには、予め通信用エリアが割り当てられて対応付けられている。具体的には、通信領域520~527は、それぞれスレッド0~スレッド7に割り当てられている。そしてスレッド0~スレッド7は、それぞれに割り当てられた通信領域520~527内のデータを読み込むように構成されている。また、それぞれの通信領域520~527は、それぞれのデータレジスタ1020,1021に対応するデータ領域を有している。本実施例においては1つの処理エレメントPEは2つのデータレジスタ1020,1021を有するため、それぞれの通信領域520~527は2つのデータ領域を有する。具体的には、通信領域520はデータ領域5200と5201とを有し、通信領域527はデータ領域5270と5271とを有する。それぞれのデータレジスタは、対応するデータ領域内のデータを読み込むように構成されている。例えばスレッド3からスレッド2へと通信を行う場合について、具体的に説明する。まずスレッド3は、データ領域5220又はデータ領域5221にデータを書き込む。次にスレッド2は、データ領域5220又はデータ領域5221内のデータを、データレジスタ1020又は1021に書き込む。この際、データ領域5220内のデータはデータレジスタ01020へと、データ領域5221内のデータはデータレジスタ11021へと、それぞれ読み込まれる。このように、各データレジスタが読み込むデータが格納されているデータ領域は、予め固定的に定められている。図5は、並列リダクション処理における、処理ユニットPU100上で動作している1つのスレッドが行う統合処理を示すフローチャートである。ここで、この1つのスレッドをスレッドAと呼ぶ。ステップS11でスレッドAは、ローカルレジスタ103内の初期データを処理レジスタ101に読み込む。ステップS12でスレッドAは、他のスレッドからリダクション対象データが送られてきている場合、通信用エリア52からデータレジスタ0,11020,1021にデータを読み込む。ステップS13でスレッドAは、処理レジスタ101内のデータとデータレジスタ0,11020,1021内のデータとの統合処理を行う。例えば、統合処理として最大値を求める場合、処理レジスタ101内の値が3、データレジスタ01020内の値が5であるならば、処理結果として5が得られる。そしてスレッドAは、得られた処理結果を処理レジスタ101に書き戻す。この例では、統合処理により処理レジスタ101内の値は5に更新される。なお、初期データをローカルレジスタ103から読み出し、統合処理をすることなく読み出した値を他のスレッドに渡す場合は、ステップS12およびS13の処理は省略される。ステップS19でスレッドAは、さらにリダクション処理を行うか否かを判定する。例えば、他のスレッドからリダクション対象データが送られてきている場合に、送られてきたデータを用いてリダクション処理を行うことができる。さらにリダクション処理を行う場合、処理はステップS12に戻る。さらなるリダクション処理を行わずに処理結果を共有メモリ4に書き込む場合、処理はステップS14に進む。ステップS14においてスレッドAは、処理レジスタ101内の値を共有メモリ4に書き込む。例えば、処理結果を他のスレッドに渡す場合、スレッドAは、通信用エリア52内の相手スレッドについてのデータ領域に、処理レジスタ101内の値を書き込む。またもし1グループの初期データ群に対するリダクション処理が完了したのであれば、スレッドAは結果出力領域51内の対応する領域510~519に処理レジスタ101内の値を書き込む。並列リダクション処理においては、ステップS12及びステップS13における繰り返し回数は、それぞれのスレッドによって異なる。したがって、あるスレッドがステップS12を実行しようとする際に、別のスレッドではステップS14を実行しようとしていることがありえる。しかしながら上述のように、本実施例においては各スレッドは一度に同じ命令を実行するように構成されている。したがって、このように異なるスレッドが異なるステップを実行しようとすることは、実行速度に大きなペナルティをもたらしうる。本実施例においては、図6のように、1回の統合処理が、初期データ設定フェーズステップS21、読込サイクル、読込統合処理フェーズステップS22、演算サイクル、及び結果書込みフェーズステップS23、書込サイクルの3つに分けられる。そして、命令によって指定された各スレッドが同期して各々のフェーズを開始するように、本実施例に係る情報処理装置はスケジューリングを行う。図5と図6とを比較すると、ステップS21はステップS11に、ステップS22はステップS12およびS13に、ステップS23はステップS14に、それぞれ対応する。これらのフェーズを繰り返すことにより、リダクション処理の結果がメモリに書き込まれる。本実施例によれば、あるスレッドで読込統合処理フェーズS22共有メモリ読込S12及び統合処理S13を実行している場合、他のスレッドも読込統合処理フェーズS22を実行するように、スケジューリングが行われる。読込統合処理フェーズS22を実行する必要のないスレッドによる処理結果はマスクレジスタによって破棄されるため、実質的にはこのようなスレッドは何も処理をしていない状態アイドル状態となる。本実施例の方法によれば、一見アイドル状態の時間が増えるように見える。しかしながら、異なる処理を複数のスレッドが同時に実行しようとすると、一方が処理をしている間、他方のスレッドはアイドル状態となる。もちろん逆も成り立つため、アイドル状態にある時間がかえって増えてしまう。そのため、本実施例のように複数のスレッドに同期して同じ処理を行わせることにより、アイドル状態にある時間が減り、より効率的な処理が実現されることが期待される。スレッド間通信は共有メモリ4上の通信用エリア52を介して行われ、リダクション結果は結果出力領域51に書き込まれる。この際、複数のスレッドから共有メモリ4の同じバンクに対して同時にアクセスが行われると、バンクコンフリクトが起きるため、このことは速度的に大きなペナルティとなる。そこで本実施例では、バンクへの同時アクセス数は、許容できる限界の数以下、許容アクセス数と呼ぶ以下となるように制御される。なお、以下の説明において、バンクコンフリクト数=同時アクセス数-1であり、許容バンクコンフリクト数=許容アクセス数-1である。本実施例に係る情報処理装置であるスケジューリングシステム6は、各スレッドに対する命令を順次生成することにより、各スレッドの動作をスケジューリングする。スケジューリングシステム6は、図1に示した実行環境に接続されていてもよいし、接続されていなくてもよい。例えば、実行環境とは独立なスケジューリングシステム6が、以下で説明する処理を行い、各スレッドに対する命令を生成してもよい。生成された命令は命令出力バッファ61に出力される。命令は例えば、実行環境におけるプログラムたとえばCUDAのソースコードという形で出力されうる。出力された命令は、例えば記憶媒体を介して、図1に示される実行環境へと入力されてもよい。そして、出力された命令に従って、各スレッドは動作を行う。こうして、それぞれのスレッドの動作がスケジューリングされる。スケジューリング処理を予め行っておくことは、実行速度を向上させる点で有利である。また、命令出力バッファ61に出力された命令は、図1に示される実行環境によって直接アクセスされてもよい。この場合命令出力バッファ61は、それぞれの処理エレメントPEに対して各スレッドに対して備えられていてもよい。そしてそれぞれのスレッドは、対応する命令出力バッファ61に格納された値に従って動作する。こうして、それぞれのスレッドの動作がスケジューリングされる。このようなスケジューリングシステム6は、例えば通常のコンピュータを用いて実現することもできる。図17は、このようなコンピュータの基本構成を示す図である。このコンピュータにおいて図7に示すスケジューリングシステム6の機能を実行するためには、各機能構成をプログラムにより表現し、このコンピュータに読み込ませればよい。こうして、このコンピュータでスケジューリングシステム6の全ての機能を実現することができる。この場合、図7をはじめとする構成要素の各々は関数、若しくはCPUが実行するサブルーチンで機能させればよい。また、コンピュータプログラムは通常、CD-ROM等のコンピュータが読み取り可能な記憶媒体に格納されている。この記憶媒体を、コンピュータが有する読み取り装置CD-ROMドライブ等にセットし、システムにコピー若しくはインストールすることで実行可能になる。従って、係るコンピュータが読み取り可能な記憶媒体も本発明の範疇にあることは明らかである。図17においてCPU1701は、コンピュータ全体の動作をコントロールする。例えCPU1701は、一次記憶1702に格納されたプログラムの実行等を行う。一次記憶1702は、主にRAM等のメモリであり、二次記憶1703に記憶されたプログラム等を読み込んで格納する。二次記憶1703は、例えばハードディスク、CD-ROM等がこれに該当する。プログラムは二次記憶1703に格納され、プログラム実行時に一次記憶1702に読み込んで、CPU1701が実行処理を行う。入力デバイス1704とはコンピュータに情報を入力するデバイスであって、例えばマウスやキーボード等がこれに該当する。入力デバイス1704を用いることにより、ユーザがコンピュータに情報を入力することが可能であってもよい。出力デバイス1705とはコンピュータが情報を出力するデバイスであって、モニタ及びプリンタを含む。読込デバイス1706は、外部の情報を取得するためのデバイスである。読込デバイス1706は、メモリカードリーダ及びネットワークカードを含む。バス1708は、上述の各部を接続し、データのやりとりを可能とする。図7に本実施例に係るスケジューリング方法を用いて処理エレメントPEに対する命令を生成する、スケジューリングシステム6の構成例を示す。スケジューリングシステム6は、以下の処理を行うことにより、命令出力バッファ61に命令を書き込む。なお、GPGPU上で動作するプログラムの開発においては、同一処理は、同一コードを用いてコーディングすることが通常である。しかしながら、こうしたプログラムを書くためのノウハウは既に知られていることから、本明細書においてはこうしたノウハウについては省略する。以下では図7を参照しながら、本実施例におけるリダクション処理についてより詳しく説明する。本実施例では上述のように、10グループの初期データ群のそれぞれについてリダクション処理が行われる。以下の説明では、それぞれの初期データ群データグループをデータ0、データ1、、データ9と呼ぶことにする。リダクションスケジューリング部62は、ワークメモリ63を参照しながら、命令出力バッファ61に命令を書き込む。リダクションスケジューリング部62が行う処理の流れを図8に示す。ステップS31においてリダクションスケジューリング部62は、全てのデータグループについてリダクション処理が終了したか否かをチェックする。リダクション処理が終了している場合、リダクションスケジューリング部62の処理は終了する。リダクション処理が終了していない場合、リダクションスケジューリング部62は以下の1ループのリダクション処理ステップS32~ステップS36を行う。ステップS32においてリダクションスケジューリング部62は、初期データ設定フェーズS21のスケジューリングを行う。ステップS33においてリダクションスケジューリング部62は、読込統合処理フェーズS22のスケジューリングを行う。またステップS34及びS35においてリダクションスケジューリング部62は、結果書き込みフェーズS23のスケジューリングを行う。リダクションスケジューリング部62は、共有メモリ4のバンクコンフリクト数を含むリソース使用状況を、ワークメモリ63上でシミュレーションしながら、これらのスケジューリングを行う。ステップS36においてリダクションスケジューリング部62は、次のループにおけるスケジューリングを行うのに先立って、処理対象データテーブル634を更新する。図9A~Dは、ワークメモリ63上でシミュレーションされたリソース使用状況を示すデータテーブルの例である。以下に、図9A~Dを参照しながら、これらの処理についてより詳しく説明する。ステップS32において、リダクションスケジューリング部62の初期設定スケジューリング部621は、初期データ設定フェーズS21のスケジューリングを行う。本実施例においては、スレッド0からスレッド7までの全スレッドに対して、順番にスケジューリングを行う。具体的な例としては、初期設定スケジューリング部621はまず、命令出力バッファ61にスレッド0についての命令を書き込む。その後初期設定スケジューリング部621は、スレッド1~7についても、命令出力バッファ61に順次命令を書き込む。こうして初期設定スケジューリング部621は、スケジューリングを行うことができる。図10Aは、ステップS32の詳細なフローチャートである。ステップS32においては、スレッド0~7のそれぞれについて図10Aに示される処理が行われ、それぞれのスレッドに対する処理は同様である。以下では、スレッド0についての処理について説明する。ステップS41において初期設定スケジューリング部621は、命令出力バッファ61に同期命令を出力する。同期命令によって、各スレッドが初期データ設定フェーズS21を同期して行うことができる。同期命令としては、例えばCUDAではsyncthreadsという命令が用意されている。ステップS42において初期設定スケジューリング部621は、ローカルレジスタ103から処理レジスタ101へのデータの読み込みをスケジューリングする。具体的には初期設定スケジューリング部621は、データ0からデータ9までのそれぞれに順次着目する。そして、着目データグループについての初期データをローカルレジスタ103から処理レジスタ101へと読み込ませるか否かを判定する。図10Bは、ステップS42のより具体的な処理のフローチャートである。ステップS421で初期設定スケジューリング部621は、スレッド0がいずれかのデータグループに属するデータを処理するようにスケジューリングされているか否かを判定する。この判定は、処理対象データテーブル634を参照して行うことができる。処理対象データテーブル634は、スレッド数分の要素本実施例の場合8個を持つ配列である。それぞれの要素は、各スレッドがどのデータグループを処理対象としているかを示す。各要素は無効を示す値Fで初期化されている。スケジューリングシステム6が、あるデータグループについての初期データをあるスレッドに読み込ませる命令を生成した際に、そのスレッドに対応する要素には、そのデータグループを示す数値が設定される。例えば図9Aにおいては、グループ1についての初期データを読み込む命令が生成されたスレッドに対応する要素には、数値1が書き込まれている。また、スケジューリングシステム6が、あるスレッドに対してあるデータグループについてのリダクション処理を完了させる命令を生成した際には、そのスレッドに対応する要素は再度Fで初期化される。例えばスケジューリングシステム6が、あるスレッドに処理レジスタ101内のデータを出力させる命令を生成した際に、そのスレッドに対応する要素は再度Fで初期化される。具体的には、処理対象データテーブル634において着目データグループに対応する要素がFではなければ、スレッド0はいずれかのデータグループに属するデータを処理するようにスケジューリングされていると判定することができる。このような場合初期設定スケジューリング部621は、着目データグループについてのスケジューリングを終了し、次のデータグループに着目して図10Bの処理を行う。一方で処理対象データテーブル634においてスレッド0に対応する要素がFである場合、処理はステップS422に進む。この場合、スレッド0はデータを処理するようにはスケジューリングされていない。そこで、次に初期設定スケジューリング部621は、着目データグループに属する初期データをスレッド0に読み込ませる命令を生成するか否かを判定する。具体的にはステップS422において初期設定スケジューリング部621は、着目データグループに属する初期データをスレッド0に読み込ませる命令を既に生成しているか否かを判定する。ステップS422の処理は、データタッチテーブル632を参照して行うことができる。データタッチテーブル632はスレッド数×データグループ数本実施例の場合、8×10の二次元配列であり、各要素は予めFで初期化されている。各要素はそれぞれのスレッド及びデータグループに対応している。あるスレッドがあるデータグループに属する初期データを読み込む命令が生成された場合、対応する要素にTが設定される。初期設定スケジューリング部621は、スレッド0と着目データグループとに対応する要素にTが設定されている場合には、着目データグループに属する初期データをスレッド0に読み込ませる命令は既に生成されているものと判定することができる。この場合、初期設定スケジューリング部621は、着目データグループについてのスケジューリングを終了し、次のデータグループに着目して図10Bの処理を行う。一方でスレッド0と着目データグループとに対応する要素にFが設定されている場合には、着目データグループに属する初期データをスレッド0に読み込ませる命令はまだ生成されていないものと判定することができる。この場合、処理はステップS423に進む。ステップS423において初期設定スケジューリング部621は、命令出力バッファ61に、着目データグループについての初期データをローカルレジスタ103から処理レジスタ101へと読み込むことをスレッド0に指示する命令を書き込む。さらに初期設定スケジューリング部621は、データタッチテーブル632のスレッド0と着目データグループとに対応する要素を、Tで更新する。さらに初期設定スケジューリング部621は、処理対象データテーブル634のスレッド0に対応する要素に、着目データグループを示す番号を設定する。以上の図10Aの処理をスレッド0~7のそれぞれについて行うことにより、初期データ設定フェーズS21の処理が完了する。ステップS33において、リダクションスケジューリング部62の読込統合スケジューリング部622は、読込統合処理フェーズS22のスケジューリングを行う。ステップS33においても、ステップS32と同様に、読込統合スケジューリング部622はスレッド0からスレッド7までの全スレッドに対して順にスケジューリングを行う。図11Aは、ステップS33の詳細なフローチャートである。ステップS33においても、ステップS32と同様に、スレッド0~7のそれぞれについて図11Aに示される処理が行われ、それぞれのスレッドに対する処理は同様である。以下では、スレッド0についての処理について説明する。ステップS51において読込統合スケジューリング部622は、ステップS41と同様に、命令出力バッファ61に同期命令を出力する。ステップS52において読込統合スケジューリング部622は、通信用エリア52からのデータの読み込み及び統合処理をスケジューリングする。図11Bは、ステップS42のより具体的な処理のフローチャートである。ステップS521において読込統合スケジューリング部622は、スレッド0が継続スレッドであるか否かを判定する。この判定は、継続スレッドテーブル633を参照して行うことができる。継続スレッド継続演算コアとは、前の次の結果書き込みフェーズS23において、処理レジスタ101の値を通信用エリア52に出力しないように命令されたスレッドである。継続スレッドは、読込統合処理フェーズS22において、他スレッドからの通信データを読み込み、統合処理を行うただし、データを読み込まない場合もある。本実施例においては、後述する通信スレッド決定部624によって、各スレッドが継続スレッドであるか否かが判定されている。継続スレッドテーブルは、スレッド数分の要素本実施例の場合8個を持つ配列であり、それぞれのスレッドに対していくつのスレッドからデータが送られてきているのかを示す。すなわち、継続スレッドテーブルの要素の最小値は0であり、最大値は各処理エレメントPE内のデータレジスタの数本実施例では2である。また、継続スレッドではないスレッドに対応する要素は、値Fを有する。このように、スレッド0に対応する継続スレッドテーブル内の要素がFである場合、読込統合スケジューリング部622は、スレッド0は継続スレッドではないと判定することができる。ステップS521で継続スレッドではないと判断された場合、スレッド0についてのスケジューリング処理は終了し、読込統合スケジューリング部622は次のスレッドについて図11Aの処理を行う。ステップS521で継続スレッドであると判断された場合、処理はステップS522に進む。ステップS522において読込統合スケジューリング部622は、通信用エリア52からデータをデータレジスタ102に読み込むことを示す命令を命令出力バッファ61に出力する。それぞれのスレッドが通信用エリアから読み込むデータの数は、継続スレッドテーブル内の、それぞれのスレッドに対応する要素に格納されている。本実施例においては、スレッド0に対応する継続スレッドテーブル内の要素が1である場合、読込統合スケジューリング部622は、スレッド0にデータ領域5200内の値をデータレジスタ0に読み込ませる命令を生成する。また、スレッド0に対応する継続スレッドテーブル内の要素が2である場合、読込統合スケジューリング部622は、スレッド0にデータ領域5200内の値をデータレジスタ0に読み込ませる命令を生成する。スレッド0に対応する継続スレッドテーブル内の要素が2である場合、読込統合スケジューリング部622はさらに、スレッド0にデータ領域5201内の値をデータレジスタ1に読み込ませる命令を生成する。このように本実施例においては、各スレッドに対応する継続スレッドテーブル内の要素が示す値がデータレジスタ102の数よりも少ない場合、この要素が示す数のデータを通信用エリアから読み込ませる命令が生成される。この場合読込統合スケジューリング部622は、より先頭側に位置するデータを優先して読み込ませるように、命令を生成する。しかしながら別の実施例において読込統合スケジューリング部622は、継続スレッドテーブル内の要素がFではない場合に、全てのデータレジスタ102へと通信用エリア52から値を読み込む命令を生成してもよい。ステップS523において読込統合スケジューリング部622は、処理レジスタ101とデータレジスタ102の間で統合処理を行うことを示す命令を命令出力バッファ61に出力する。この統合処理は、処理レジスタ101と各データレジスタ102の間で順次行われる。このような命令を受けたスレッドは、まず処理レジスタ101とデータレジスタ01020との間での統合処理を行い、結果を処理レジスタ101に書き込む。さらにこのスレッドは、処理レジスタ101とデータレジスタ11021との間で統合処理を行って結果を処理レジスタ101に書き込む。この統合処理は、ステップS522においてデータレジスタ102へと読み込まれた値の数だけ繰り返されれば十分である。例えば、データレジスタ1020にのみ値が読み込まれた場合、すなわちスレッド0に対応する継続スレッドテーブル内の要素が1である場合、処理レジスタ101とデータレジスタ01020との間でのみ統合が行われればよい。しかしながら、データレジスタ102へと読み込まれた値の数に従って分岐処理を行うと、実行環境によってはかえって実行時間がかかってしまうことがある。そこで本実施例においては、ステップS522とステップS523との間で読込統合スケジューリング部622は、統合処理を行う必要がないデータレジスタ102のデータを書き換える命令を命令出力バッファ61に出力する。ここで読込統合スケジューリング部622は、データレジスタ102の値を、統合処理を行っても結果に影響しない値に書き換えればよい。具体的な例としては、統合処理として各要素の加算が行われ、スレッド0に対応する継続スレッドテーブル内の要素が1である場合、読込統合スケジューリング部622は0をデータレジスタ11021にセットする命令を出力すればよい。統合処理として最大値を求める場合も同様である。このような処理を行うことにより、ステップS523において読込統合スケジューリング部622は、単純に処理レジスタ101と全てのデータレジスタ102との統合処理を行う命令を出力すればよい。この場合、実行時に条件分岐を行わなくてもよい。ステップS34及びS35において、リダクションスケジューリング部62の結果出力スケジューリング部623及び通信スレッド決定部624は、結果書込みフェーズS23のスケジューリングを行う。結果書込みフェーズS23において各スレッドは、結果出力領域51にリダクション結果を出力するか、又は他のスレッドに対しデータを送信する。本実施例においては、どちらの場合にも共有メモリ4に対する書き込みが行われる。したがって、これらの動作は同一コードで実行可能である。また、1つのスレッドが1回の結果書き込みフェーズS23において両方の動作を行うことはない。したがって本実施例においてそれぞれのスレッドは、1回の結果書込みフェーズS23において、結果出力領域51へリダクション結果を出力するか、他のスレッドに対してデータを送信するか、あるいはアイドル状態にあるようにスケジューリングされる。もし、結果出力領域51へのリダクション結果の出力と、他のスレッドに対するデータの送信とを、同一コードで実行することが困難であるときは、これらを異なるフェーズにおいて行えばよい。例えば、これらの間でメモリへの書込み手順が大きく異なる場合が挙げられる。この場合、各フェーズの先頭で同期命令出力を行う点を除いて、以下に示す本実施例と同様にスケジューリング処理を行えばよい。まず、結果出力領域51にリダクション処理の結果が出力されるステップS34について説明する。ステップS34の開始時に、結果出力スケジューリング部623は、バンクコンフリクトテーブル631と継続スレッドテーブル633とを初期化する。具体的には結果出力スケジューリング部623は、バンクコンフリクトテーブル631の各要素に値0を格納する。また結果出力スケジューリング部623は、継続スレッドテーブル633の各要素に値Fを格納する。ステップS34においても、ステップS32と同様に、結果出力スケジューリング部623はスレッド0からスレッド7までの全スレッドに対して順にスケジューリングを行う。図12Aは、ステップS34の詳細なフローチャートである。ステップS34においても、ステップS32と同様に、スレッド0~7のそれぞれについて図12Aに示される処理が行われ、それぞれのスレッドに対する処理は同様である。以下では、スレッド0についての処理について説明する。ステップS61において結果出力スケジューリング部623は、ステップS41と同様に、命令出力バッファ61に同期命令を出力する。ステップS62において結果出力スケジューリング部623は、スレッド0の処理レジスタ101に格納されているデータを、結果出力領域51に出力するか否かを判定する。図12Bは、ステップS62のより具体的な処理のフローチャートである。ステップS621において結果出力スケジューリング部623は、スレッド0が処理レジスタ101に格納しているデータが、結果出力領域51に出力されるか否かを判定する。処理レジスタ101に格納されているデータが、各データグループについての最終的な処理結果である場合に、このデータは結果出力領域51に出力される。この判定は例えば、データタッチテーブル632及び処理対象データテーブル634を参照して行うことができる。ここで、スレッド0が処理しているデータグループを着目データグループとする。着目データグループについての処理を予め定められた数のスレッドが開始しており、かつ着目データグループを処理しているスレッドがスレッド0だけである場合に、スレッド0が処理レジスタ101に格納しているデータは結果出力領域51に出力される。ここで、予め定められた数は通常、着目データグループに属する初期データをローカルレジスタ103に有しているスレッドの数に一致する。着目データグループについての処理を予め定められた数のスレッドが開始している場合、データタッチテーブルにおいて着目データグループに対応する要素Tの数は予め定められた数に一致する。本実施例においては10スレッドのそれぞれが各データグループを処理するため、着目データグループに対応する要素Tの数が10である場合に、着目データグループについての処理を予め定められた数のスレッドが開始していると判定できる。また、処理対象データテーブル634において着目データグループに対応する値を有する要素の数が1つである場合、着目データグループを処理しているスレッドはスレッド0だけであると判定することができる。スレッド0が処理レジスタ101に格納しているデータが、結果出力領域51に出力されない場合、ステップS62の処理は終了し、次のスレッドについて図12Aの処理が行われる。スレッド0が処理レジスタ101に格納しているデータが、結果出力領域51に出力される場合、処理はステップS622に進む。ステップS622において、結果出力スケジューリング部623は、着目データグループについての処理結果を書き込むバンクへのアクセス要求の数アクセス回数を確認する。本実施例においては上述のように、そこで同一バンクに対して同時にアクセスすることが可能なスレッド数の上限許容アクセス数を予め定めておき、この上限に従ってスケジューリングを行う。各バンクに対するアクセス要求の数管理情報は、バンクコンフリクトテーブル631で管理され保持される。バンクコンフリクトテーブル631はバンク数分の要素本実施例では4つを持つ配列である。バンクコンフリクトテーブル631の各要素は予め0に初期化されている。そして、結果出力スケジューリング部623が各バンクへのアクセスをスケジューリングするたびに、各バンクに対応する要素に1が加えられる。そして結果出力スケジューリング部623は、着目データグループについての処理結果を書き込むバンクへのアクセス要求の数が、予め定められた許容アクセス数未満所定回数未満であるか否かを確認する。許容アクセス数未満である場合、処理はステップS623に進む。許容アクセス数以上であった場合、スレッド0についての図12Aの処理は終了する。すなわち、現在の結果書込みフェーズS23においてスレッド0に結果出力領域51へと結果を書き込ませる命令は生成されず、次回以降の結果書込みフェーズS23においてスレッド0に結果を書き込ませる命令が生成される。ステップS623で結果出力スケジューリング部623は、処理レジスタ101内の値を、結果出力領域51内の着目データグループに対応する領域に書き込むことを、スレッド0についての命令出力バッファ61に出力する。さらに結果出力スケジューリング部623は、着目データグループについての処理結果を書き込むバンクに対応する、バンクコンフリクトテーブル631の要素の値に1を加える。次に、他のスレッドに対しデータが送信されるステップS35における、通信スレッド決定部624の処理について説明する。ステップS35においては、通信スレッド決定部624はスレッド0~スレッド7について順次スケジューリングを行うのではなく、以下のように処理を行う。図13Aは、ステップS35の詳細なフローチャートである。ステップS71において通信スレッド決定部624は、全データグループのそれぞれについて、データを送信するスレッド送信スレッド、送信演算コアとデータを受信するスレッド継続スレッドとを決定する。本実施例では通信スレッド決定部624は、データ0からデータ9までのそれぞれに順次着目し、着目データグループについて送信スレッドと継続スレッドとを決定する。図13Bは、ステップS71の詳細なフローチャートである。ステップS711で通信スレッド決定部624の継続スレッド決定部6241は、継続スレッドを1つ選択する第1の選択。もし継続スレッドがなければ、着目データグループについての図13Bの処理を終了し、次の着目データグループについて図13Bの処理を行う。ステップS712で通信スレッド決定部624の送信スレッド決定部6242は、ステップS711で選択された継続スレッドにデータを送信する送信スレッドを判定する第2の選択。ステップS711及びステップS712を繰り返すことにより、1組の結果書込フェーズと続く読込統合処理フェーズとにおいてデータが送受信される継続スレッドと送信スレッドとのセットが繰り返し選択される。ステップS711のより詳細なフローチャートを図14に示す。ステップS81で継続スレッド決定部6241は、着目データグループを処理しているスレッドから1つを選択する。ここで継続スレッド決定部6241は、通信用エリア52内の対応するデータ領域が属するバンクへの同時アクセス数が最も少ないスレッドを選択する。どのスレッドが着目データグループを処理しているのかは、処理対象データテーブル634を参照して判定することができる。例えば継続スレッド決定部6241は、処理対象データテーブル634における、各スレッドに対応する要素の値が、着目データグループの番号と一致するか否かを判定すればよい。一致する場合、そのスレッドは着目データグループを処理している。また継続スレッド決定部6241は、バンクコンフリクトテーブル631を参照して、それぞれのバンクに対する同時アクセス数を判定することができる。上述のように、バンクコンフリクトテーブル631は、それぞれのバンクに対する同時アクセス数を要素として有している。本実施例のように、対応するデータ領域が属するバンクへの同時アクセス数が最も少ないスレッドを継続スレッドとして選択することにより、それぞれのバンクへの同時アクセス数を平準化させることができる。なお、1つのスレッドが複数のデータ領域からデータを読み込む場合、このスレッドは複数のバンクからデータを読み込むかもしれない。このような場合、継続スレッド決定部6241は、それぞれのバンクについての同時アクセス数を判定する。そして継続スレッド決定部6241は、同時アクセス数の最大値を、スレッドに対応するデータ領域が属するバンクへの同時アクセス数として用いる。こうすることにより、全てのバンクのバンクコンフリクト数を許容アクセス数以下に抑えることができる。ステップS82において継続スレッド決定部6241は、ステップS711においてスレッドが選択されたか否かを判定する。スレッドが選択されなかった場合、継続スレッド決定部6241は、着目データグループについては継続スレッドがないものと判定する。そして、継続スレッド決定部6241は図13Bの処理を終了し、次の着目データグループについて送信スレッドと継続スレッドとを決定する。ステップS83において継続スレッド決定部6241は、ステップS711において選択されたスレッドについて、対応するデータ領域が属するバンクへの同時アクセス数が許容アクセス数未満であるかを否かを判定する。同時アクセス数が許容アクセス数以上である場合、継続スレッド決定部6241は、着目データグループについては更なる継続スレッドがないものと判定する。そして継続スレッド決定部6241は、図13Bの処理を終了し、次の着目データグループについて送信スレッドと継続スレッドとを決定する。同時アクセス数が許容アクセス数未満である場合、継続スレッド決定部6241はステップS711において選択されたスレッドを継続スレッドとして判定する。ステップS84において継続スレッド決定部6241は、継続スレッドテーブル633のうちステップS711において選択された継続スレッドに対応する要素を0で更新する。さらに継続スレッド決定部6241は、バンクコンフリクトテーブル631において、ステップS711において選択された継続スレッドに対応するデータ領域が属するバンクについての要素の値をインクリメントする例えば1を加える。こうして継続スレッド決定部6241は、バンクコンフリクトテーブル631を更新する。そして、処理はステップS712に進む。ステップS712のより詳細なフローチャートを図15に示す。ステップS91で送信スレッド決定部6242は、ステップS711で選択された継続スレッドにデータを送信する送信スレッドを決定する。具体的には送信スレッド決定部6242は、着目データグループを処理対象としているスレッドのうち、まだ継続スレッド又は送信スレッドとして選択されていないスレッドを送信スレッドとして選択する。各スレッドが継続スレッド又は送信スレッドとして選択されているか否かは、継続スレッドテーブル633を参照して判定することができる。本実施例においては、スレッドに対応する継続スレッドテーブル633内の要素がFであり、かつ着目データグループを処理対象としているスレッドを、送信スレッド決定部6242は送信スレッドとして選択すればよい。本実施例において送信スレッド決定部6242は、1つの継続スレッドに対応する送信スレッドを、継続スレッドが有するデータレジスタ102の数だけ選択する。この場合、各送信スレッドからのデータが、それぞれのデータレジスタ102へと読み込まれる。着目データグループを処理対象としており、かつ継続スレッド又は送信スレッドとして選択されていないスレッドの数がデータレジスタ102の数よりも多い場合、送信スレッド決定部6242は以下のようにして送信スレッドを選択することができる。すなわち送信スレッド決定部6242は、各スレッドに対応するデータ領域が属するバンクに対する同時アクセス数がより多いスレッドを選択する。本実施例において、送信スレッドに対応するデータ領域には、データの書き込みは行われない。したがって、このように対応するデータ領域が属するバンクに対する同時アクセス数がより多いスレッドを送信スレッドとして選択する継続スレッドとして選択しないことにより、各バンクへの同時アクセス数を平準化することができる。一方で、着目データグループを処理対象としており、かつ継続スレッド又は送信スレッドとして選択されていないスレッドの数が、継続スレッドが有するデータレジスタ102の数よりも少ない場合、送信スレッド決定部6242は全てのスレッドを選択できる。ステップS92において送信スレッド決定部6242は、継続スレッドテーブル633のうち、ステップS711で決定された継続スレッドに対応する要素を更新する。具体的には送信スレッド決定部6242は、継続スレッドにデータを送信する送信スレッドの数を、継続スレッドに対応する要素として継続スレッドテーブル633に格納する。ステップS93において送信スレッド決定部6242は、ステップS91で選択された送信スレッドに対して、中間書込み処理を行うように命令を出力する。具体的には送信スレッド決定部6242は、送信スレッドのそれぞれが、処理レジスタ101の内容を、継続スレッドが読み込むデータ領域にコピーすることを示す命令を、命令出力バッファ61に出力する。例えば継続スレッドがスレッド0、送信スレッドがスレッド2とスレッド3である場合、送信スレッド決定部6242は、スレッド2が処理レジスタ101の内容をデータ領域5200へコピーすることを示す命令を命令出力バッファ61に出力する。また送信スレッド決定部6242は、スレッド3が処理レジスタ101の内容をデータ領域5201へコピーすることを示す命令を命令出力バッファ61に出力する。図16は、ステップS36のより具体的な処理のフローチャートである。ステップS101でデータテーブル修正部625は、ステップS34においていずれかのスレッドに結果出力領域51に処理レジスタ101の内容を出力させる命令が生成されたか否かを判定する。またデータテーブル修正部625は、ステップS35においていずれかのスレッドに通信用エリア52に処理レジスタ101の内容を出力させる命令が生成されたか否かを判定する。どちらの命令も生成されていないのであれば、図16の処理は終了する。どちらかの命令が生成された場合、処理はステップS102に進む。ステップS102においてデータテーブル修正部625は、処理対象データテーブル634内の、処理レジスタ101の内容を出力する命令の対象となるスレッドに対応する要素を、無効を示す値Fで更新する。上述の実施例では、共有メモリのバンク数およびメモリコントローラの数を4、処理エレメントの数を8、処理エレメント内のデータレジスタの数を2、リダクション処理を行うデータグループの数を10とした。しかしながら、本発明はこれらの数に限定されない。また、上述の実施例に係るシステムにおいては、データレジスタ数及び許容アクセス数を変化させることにより、処理時間も変動する。また、最適なデータレジスタ数及び許容アクセス数は、ハードウェアの構成によって異なる。したがって、これらの値を適宜選択することにより、処理時間をより短くすることが可能である。他の実施形態本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェアプログラムをネットワーク又は各種記憶媒体を介してシステム或いは装置に供給する。そして、そのシステム或いは装置のコンピュータ又はCPUやMPU等がプログラムコードを読み出して実行する。この場合、そのプログラム、及び該プログラムを記憶した記憶媒体は本発明を構成することになる。"