"演算処理装置において、前記演算処理装置に備えられた複数のプロセッサコアに計算処理を実行させる処理管理部と、前記プロセッサコアの計算処理による計算結果の他の計算ノードとの通信時間が、前記計算処理に要する計算時間よりも長いか否かを判定する条件判定部と、前記条件判定部が、前記通信時間が前記計算時間よりも長いと判定した場合に、前記計算処理を実行するプロセッサコアの数を制限するコア数制御部とを備えたことを特徴とする演算処理装置。前記演算処理装置において、前記条件判定部は、前記プロセッサコアの計算処理と前記他の計算ノードとの通信処理を並行して実行しないときのプロセッサコア数を制限した場合の計算時間が、前記計算処理と前記通信処理を並行して実行するときの通信時間以下である場合に、前記プロセッサコア数を制限した後の計算時間と通信時間の合計時間が前記プロセッサ数を制限する前の計算時間と通信時間の合計時間よりも小さいかを判定することを特徴とする請求項1記載の演算処理装置。前記演算処理装置はさらに、前記演算処理装置の計算処理による計算結果を記憶する主記憶装置に接続するとともに、プロセッサコア数と、前記主記憶装置に対する前記演算処理装置のアクセス速度であるメモリアクセス速度の組を保持するテーブルを有し、前記条件判定部は、前記計算処理と前記通信処理を並行して実行するときの、前記演算処理装置が有する最大プロセッサコア数による計算時間と通信時間を取得し、前記取得した計算時間と通信時間と、前記テーブルに保持されたプロセッサコア数とメモリアクセス速度の組から算出される通信時間に基づき、使用するプロセッサコア数を算出することを特徴とする請求項2記載の演算処理装置。前記演算処理装置において、前記条件判定部は、最大プロセッサコア数による計算処理と通信処理の並列実行に要する時間と、プロセッサコア数を制限した後の計算処理と通信処理の並列実行に要する時間とを比較した結果に基づき、使用するプロセッサコア数を算出することを特徴とする請求項3記載の演算処理装置。前記演算処理装置はさらに、前記演算処理装置が実行したメモリアクセス数を計測する計測部を有し、前記条件判定部は、最大プロセッサコア数による計算処理と前記他の計算ノードとの通信処理の並列実行時に、前記計測部が計測したメモリアクセス数が所定値以上である場合に、前記複数のプロセッサコアが計算結果の通信に要する通信時間が、前記計算処理に要する計算時間よりも長いと判定することを特徴とする請求項1~4のいずれか1項に記載の演算処理装置。並列計算機システムが備える計算ノードにおいて、前記演算処理装置に備えられた複数のプロセッサコアに計算処理を実行させる処理管理部と、前記プロセッサコアの計算処理による計算結果の他の計算ノードとの通信時間が、前記計算処理に要する計算時間よりも長いか否かを判定する条件判定部と、前記条件判定部が、前記通信時間が前記計算時間よりも長いと判定した場合に、前記計算処理を実行するプロセッサコアの数を制限するコア数制御部とを備えた複数の演算処理装置と、前記複数の演算処理装置に接続され、前記計算ノードの計算処理による計算結果を記憶する主記憶装置を有することを特徴とする計算ノード。互いに接続された一の計算ノードと他の計算ノードを有する並列計算機システムにおいて、前記一の計算ノードは、前記一の計算ノードが有する第1の演算処理装置に備えられた複数の第1のプロセッサコアに計算処理を実行させる第1の処理管理部と、前記第1のプロセッサコアの計算処理による第1の計算結果を前記他の計算ノードと通信する第1の通信部と、前記第1の通信部による第1の通信時間が、前記第1の計算時間よりも長いか否かを判定する条件判定部と、前記条件判定部が、前記第1の通信時間が前記第1の計算時間よりも長いと判定した場合に、前記第1の計算処理を実行する第1のプロセッサコアの数を制限するコア数制御部とを備えた複数の演算処理装置と、前記複数の演算処理装置に接続され、前記一の計算ノードの計算処理による計算結果を記憶する第1の主記憶装置を有し、前記他の計算ノードは、前記他の計算ノードが有する第2の演算処理装置に備えられた複数の第2のプロセッサコアに第2の計算処理を実行させる第2の処理管理部と、前記第2のプロセッサコアの第2の計算処理による第2の計算結果を前記一の計算ノードと通信する第2の通信部を有することを特徴とする並列計算機システム。並列計算機システムが備える計算ノードの各々に用いられる演算処理装置の演算処理方法において、前記演算処理装置が有する計算処理管理部が、複数のプロセッサコアに計算処理を実行させるステップと、前記演算処理装置が有する条件判定部が、前記プロセッサコアの計算処理による計算結果の他の計算ノードとの通信時間が、前記計算処理に要する計算時間よりも長いか否かを判定するステップと、前記条件判定部が、記通信時間が前記計算時間よりも長いと判定した場合に、前記演算処理装置が有するコア数制御部が、前記計算処理を分散するプロセッサコアの数を制限するステップを有することを特徴とする演算処理装置の演算処理方法。並列計算機システムが備える複数の計算ノードの各々に用いられる演算処理装置の演算処理プログラムにおいて、前記演算処理装置に、複数のプロセッサコアに計算処理を実行させるステップと、前記プロセッサコアの計算処理による計算結果の他の計算ノードとの通信時間が、前記計算処理に要する計算時間よりも長いか否かを判定するステップと、前記通信時間が前記計算時間よりも長いと判定された場合に、前記計算処理を分散するプロセッサコアの数を制限するステップを実行させることを特徴とする演算処理装置の演算処理プログラム。並列計算機では、計算と通信を並行して実行する、すなわち計算と通信をオーバーラップさせることで高速化を図るものがある。このように計算と通信をオーバーラップさせる場合、計算と通信によるメモリアクセスが処理速度のボトルネックになる場合がある。すなわち、計算と通信の同時実行による競合のため、性能が劣化するという問題点があった。開示の技術は、上述した従来技術にかかる問題点を解消するものであり、計算と通信の同時実行による競合に起因する性能劣化を抑えることを目的とする。開示の演算処理装置、計算ノード、並列計算機システム、演算処理方法および演算処理プログラムは、演算処理装置に備えられた複数のプロセッサコアに計算処理を実行させ、プロセッサコアの計算処理による計算結果の他の計算ノードとの通信時間が、計算処理に要する計算時間よりも長いか否かを判定し、通信時間が計算時間よりも長いと判定した場合に、計算処理を実行するプロセッサコアの数を制限する。開示の技術によれば、計算と通信の同時実行による競合に起因する性能劣化を抑えることができる。以下に添付図面を参照して、本発明にかかる演算処理装置、計算ノード、並列計算機システム、演算処理方法および演算処理プログラムの実施の形態を詳細に説明する。図1は、本実施例にかかる情報処理装置である計算ノード1の主要なハードウェアの構成要素と、ソフトウェアの構成要素との関係を示した機能プロック図である。図1に示した計算ノード1は、演算処理装置であるCPUCentralProcessingUnit100、メモリ210、ネットワークインタフェースカードNIC230が、メモリコントローラを有するチップセット220に接続した構成を有する。CPU100は、コア10,コア20を含む複数のプロセッサコアを有する。コア10は、CPU100のマスターとなるプロセッサコアであり、このコア10内に実現された処理管理部11、条件判定部12、コア数制御部13、計算処理部14および通信処理部15は以下の処理を実行する。処理管理部11は、計算処理を分割して自コアと他のコアに分散して実行させる。条件判定部12は、複数のプロセッサコアが計算結果の通信に要する通信時間が、計算処理に要する計算時間よりも長いかを判定する。また、条件判定部12は、最適なプロセッサコア数をプログラム実行初期に算出する判定、最大プロセッサコア数での計算と通信の並列実行に要する時間とプロセッサコア数を制限した場合の計算と通信の並列実行に要する時間とを比較して使用するプロセッサコア数を求める判定、最大プロセッサコア数での計算と通信の並列実行時にハードウェアカウンタによって計測されたメモリアクセスがメモリ性能の所定比率以上であるかの判定などを行うこともできる。コア数制御部13は、判定の結果、複数のプロセッサコアが計算結果の通信に要する通信時間が、計算処理に要する計算時間よりも長い場合値、計算処理を分散するプロセッサコアの数を制限する。計算処理部14は、処理管理部11が自コアコア10用に割り当てた計算処理を実行する処理部であり、通信処理部15は、他の計算ノードと通信し、計算に必要なデータや計算処理結果を送受信する処理部である。コア20は、コア10から計算処理の割り当てをうけるスレーブとなるプロセッサコアであり、処理管理部11および計算処理部14は、このコア20を使って、マスターであるコア10の処理管理部11が自コアであるコア20用に割り当てた計算処理を、他のコアであるコア10および別のスレーブのコアの計算処理と同期をとることにより、整合的に実行する。コア20の処理管理部11は、自コア20と他コア10の計算処理が整合的に実行されるよう同期制御等を実行する処理部である。コア20の計算処理部14は、マスターであるコア10の処理管理部11から自コア20用に割り当てられた計算処理を実行する処理部である。コア20の処理管理部11は、自コア20用に割り当てられた計算処理が、他のコア10および別のスレーブのコアの計算処理と同期をとって整合的に実行されるよう制御する。ここでは、スレーブのコアとしてコア20を例示したが、スレーブのコアは任意の数を設けることができる。図2に示したように、計算ノード1~4は、スイッチ等を介し高速のネットワーク5で接続されて並列計算機システムを構成する。計算ノード2~4は、計算ノード1と同様の構成を有する。図3は、マルチコアプロセッサであるCPU100の詳細内部構成を含む、計算ノードのハードウェア構成図である。CPU100は、4つのプロセッサコア、すなわちコア10,20,30,40を有する。加えて、プロセッサ部100は、L2Level2キャッシュコントローラ50,L2キャッシュRAMRandomAccessMemory60を有する。CPU100は、チップセット220を介して、メモリ210およびシステムバス190と接続する。システムバス190は、さらに、NIC230、ドライブ装置150、補助記憶装置140、直接アクセス記憶170、操作入力180等と接続する。なお、本実施例では、NIC230は、システムバスを介して、チップセット220と接続する構成としたが、システムバスを介することは本質ではなく、NIC230をチップセット220に直結する構成であってもよい。図1の計算ノードは、通信処理部15がメッセージパッシングインターフェースMPI:MessagePassingInterface等を用いて計算プロセスを割り当てることでプロセス並列計算を行う。そして、図3のCPU内部の各プロセッサコアには、処理管理部11がOpenMP等処理管理部11を用いて計算スレッドを割り当てることでスレッド並列計算を行う。このようにプロセス並列とスレッド並列を同時に行うことをハイブリッド並列と呼ぶことがある。基本的には、スレッド並列を行う際に設定されるスレッド数は最大の性能が期待されるので、スレッドを実行するプロセッサコア数と同等の値がスレッド数として設定される。また、同時マルチスレッディング機能SimultaneousMultithreading;SMTを搭載したCPUの場合にはプロセッサコア数の数倍のスレッド数が割り当てられる場合もある。並列計算機上において並列計算をする際に問題になるのが、計算ノード間でのデータのやりとりのための通信による遅延であり、通信遅延が支配的になると並列計算による台数効果が得られず、高速な計算実行ができなくなる。一方で、近年一般的なネットワークインターフェースカードNICには、ダイレクトメモリアクセスDMA転送機能が搭載されており、通信の際のCPU負荷が少なくて済む。このDMA転送機能を用いて、CPUによる計算処理とNICによる通信を同時実行することで、通信遅延を隠蔽することができる。図4は、計算と通信の同時実行による高速化の説明図である。図4に示したように、計算の後に通信を行う場合に比べ、計算と通信を同時に実行すると、実行時間が少なくて済む。図5のaは、マルチコア上で計算と通信の同時実行オーバーラップ実行を行う際のプログラムの説明図である。ここで、communicationstartでは通信を開始し、communicationwaitでは通信の終了を待つ。通信とオーバーラップさせる形で、計算calculationをOpenMPによるスレッド並列によって実行する。OMPPARALLELDOはOpenMPによる並列化パラレルリージョン:マルチスレッドで実行されるプログラム領域の開始を意味し、OMPENDPARALLELDOはOpenMPによる並列化の終了を意味する。マルチコア上で計算と通信の同時実行するプログラムでは、図4の計算と通信を同時実行するケースに示したように、計算と通信がオーバーラップ実行される。一方、図5のbの計算実行後に通信を実行するプログラムでは、図4の計算の後に通信をするケースのように計算と通信をオーバーラップ実行されない。計算と通信の同時実行による通信遅延の隠蔽に関しては、FFTFastFourierTransform:高速フーリエ変換の計算と通信の同時実行による高速化手法などがある。ここで、Vm,V,Ve,Vn,Vneを以下のように定義する。なお、マルチコアCPU上の計算実行においては全てのコアを使用していることを前提とする。VmBytes:NICもしくはCPUまたはその双方からメモリへの最大アクセス速度であり、計算機システムのスペックに依存して決まるもの。VcBytes:CPUからメモリへの最大アクセス速度であり、計算機システムのスペックとCPU中の使用コア数に依存して決まるもの。常に、Vc≦Vmを満たす。VBytes:CPU内の処理が必要とする、CPUからメモリへのアクセス速度。VeBytes:CPUからメモリへの実際のアクセス速度。V≧Vcの場合には、計算機システムのスペック性能に律速され、CPU内の処理に依存せず、同時に行っている通信がない場合には、Ve=Vcで飽和する。Ve≦Vcを常に満たす。VnBytes:異なる2つの計算ノードのNIC間での通信速度の最大値で計算機システムのスペックに依存して決まるもの。NICはVnの速度で別のノードのNICにデータを送信するために、メモリにもVnの速度でアクセスすることになる。Vn≦Vmを常に満たす。VneBytes:異なる2つの計算ノードのNIC間での実際の通信速度。Vne≦Vnを常に満たす。図6は、通信がない場合Vn=0のV,Ve,Vcの関係の説明図である。図6に示したように、V,Ve,Vcは以下を満たす。Ve=VV≦VcVe=VcV>Vc図7は、Vm,Vc,V,Ve,Vn,Vneが計算ノードにおけるどの部分の速度を表すかについての説明図である。計算と通信の同時実行時には、計算においても通信においても、メモリへのアクセスが必要となる。その際、メモリコントローラを含むチップセットとメモリ間のアクセスバスを共有する。すなわち、計算と通信の同時実行時のメモリへのアクセス速度はVeVn≦Vmとなる。ここで、Vが十分に小さく、VVn≦Vmを満たしている場合には、計算によるメモリアクセスと通信によるメモリアクセスはほとんど干渉することなく、Ve=V,Vne=Vnの速度で、同時実行される。図8は、メモリアクセスの説明図である。図8では、VVn≦Vmの状況で、計算のみを行った場合と通信のみを行った場合と、計算と通信を同時実行した場合のメモリアクセス速度の例を示している。Vが大きく、VVn>Vmの場合には、資源不足のためV及びVnはそれぞれ、Ve<V,Vne<Vnに減少する。その上、同時実行の競合による性能劣化が起き、全体としての転送速度も減少し、VeVne<Vmとなることがある。VVn>Vmの場合のメモリアクセス速度を図9に示す。図中ではVm=10としている。この性能劣化によって、計算と通信の同時実行による高速化効果は目減りすることになる。例えば、各ノードのNIC間での通信でSnByteのデータを通信し、計算においてSByteのメモリアクセスをする時に、VVn≦Vmの場合の経過時間Tsは、計算のためのメモリアクセス時間S/Vsと通信のためのメモリアクセス時間Sn/Vnsのどちらか長い方と同等になる。つまり以下の式が成り立つ。T=MAXS/V,Sn/Vn1しかしながら、VVn>Vmの場合には、まず計算と通信の同時実行が、MINS/Ve,Sn/Vneで完了する。その後、同時実行時間内に送りきれなかった残りのデータS-VeSn/VneByteまたはSn-VneS/VeByteを送信する。したがってトータルの経過時間Tは、T=Sn/VneS-VeSn/Vne/V=Sn/VneS/V-Ve/VSn/Vne=S/V1-Ve/VSn/VneS/Ve>Sn/Vne3T=S/VeSn-VneS/Ve/Vn=S/VeSn/Vn-Vne/VnS/Ve=Sn/Vn1-Vne/VnS/VeS/Ve<Sn/Vne4となり、全体の経過時間が式1に比べ、Ve,Vneに応じて、1-Ve/VSn/Vnes,または、1-Vne/VnS/Ves遅くなることになる。転送性能が劣化するVVn>Vmの状況にある場合に、計算に用いるメモリアクセスVe≦Vcxを、使用コア数xを意図的に減少させ、転送性能が劣化しないVeVn≦Vmの状況に持ち込むことで、メモリアクセスの競合による性能劣化を回避することができる。ここで、Vneの制御は通常は容易ではないため、Veの制御を使用コア数xを変えVeの最大値であるVcx≧Veを変化させることで行うことを考える。その際、S/Ve>Sn/Vne通信時間よりも計算時間が長いの場合にVeを減少させると全体の処理時間が延びてしまうことになる。そこでS/Ve<Sn/Vne通信時間のほうが計算時間よりも長いの場合を対象にする。システムの計算に用いるメモリアクセス速度の最大値Vcxを測定するためのベンチマークは、任意のものを用いることができる。ベンチマークの一例として、STREAMがある。1CPUあたり4コアのCPUを2つ搭載したサーバ1サーバあたり8コア搭載の使用コア数xとメモリアクセス速度との関係Vcxを測定すると、次のようになる。使用コア数xメモリアクセスVcxMByte/s1~37002~55004~62008~6200例示のシステムに関わらず、一般的には使用コア数が小さい場合には、メモリアクセス速度は小さく、Vcx≦Vcx11≦x≦N_coreが成り立つ。ここで、VcN_core例示のシステムの場合、N_core=8はシステムのメモリバスを全て使っており、かつ、通信も行っていないため、Vmと等しくなる。また、通信のためのメモリアクセス速度=通信速度Vnを所定のベンチマークによって測定したところ、約1200MB/sの値であった。上述したコア数とメモリアクセス速度の性質を利用すれば、計算に使用するプロセッサコアの数xを減少させることで、計算に用いるメモリアクセス速度Ve≦Vcxを調整することができる。ただし、コア数を減少させすぎると、通信時間よりも計算時間が長くなり、結果として全体の処理時間がむしろ遅くなる可能性があるので注意が必要である。すなわち、VcN_coreを適切なVcxに変更することにより、メモリアクセスの競合を起こさないための以下の条件式5を満たし、且つ、処理時間が元々の処理時間よりも短いという以下の条件式6を満たせばよい。ここで、5が満たされるときには、Vx>Vcxの場合にはVe=Vcxとなる。Vx<Vcxの場合にはVe=Vxとなる。VcxVn≦Vm5MAXS/Vcx,Sn/Vn≦Sn/Vn1-Vne/VnS/Ve6本発明は、以上の考えに基づき、条件判定部12によって、メモリアクセの競合により転送性能が劣化するVVn>Vmの状況にあるかを判定し、VVn>Vmの状況にあると判定された場合に、コア数制御部13によって、計算処理を分散するコア数を制限することで、性能劣化を回避することを特徴とする。さらに、本実施例では、上記の式5、6に基づいて、そのような状況を回避する上で最適なコア数xを、条件判定部12で決定する。そして、x個のコアに計算処理を分散するように、コア数制御部13が制御する。なお、使用コア数の変更は、各コアに割り当てるスレッド数の調整によって行う。スレッド数の調整には、例えば、OpenMPに準じた処理管理部11を用いる場合は、omp_set_num_threads関数をプログラム中で用いる等の方法がある。スレッド数を調整しながら、計算と通信をオーバーラップ実行するコードの例が図10である。ここで、xは、omp_set_num_threadsによって適切な値を指定する。図10のコードを実行している際の各CPUの動作を図11に示す。通信の命令communication_startとcommunication_waitは、通信処理部15の呼び出しに、omp_set_num_threadsxは、コア数制御部13の呼び出しに相当し、マスタースレッドが割り当てられているコア0例えばコア10が行う。その後、パラレルリージョンOMPPARALLELDO~OMPPARALLELの計算処理を、処理管理部11が、omp_set_num_threadsによって指定されたx個のコア0からコアx-1に振り分け、各コアの計算処理部14が、計算を並列に実行する。図11は1ノード内での各コアの動作を示すが、複数ノード上でMPI等を用いてプロセス並列実行を行う際には、各ノード内で図11と同様に各コアが動作する。条件判定部12が、上述の式5、6を満たす使用コア数xを見つけるために3通りの方法が考えられる。<方法0>実行可能なスレッド数1~N_coreSMTの場合はN_coreの数倍に関して、一旦全てに関して、該当するオーバーラップ部分を実行し経過時間T_overxを測定して、最速のものを採用する。しかしながら、この方法は最適なスレッド数の検索のための、最適でないスレッド数での実行によるオーバーヘッドが大きくなるために望ましくない。特に16コアや32コアなどのメニーコアCPU上ではオーバーヘッドが大きくなる。そこで、無駄な検索を回避し、最適なコア数を簡単な測定と基準に基づいて決定する方法が方法1と方法2である。<方法1>次式7が満たされれば式6は成り立つ。S/Vcx≦Sn/Vn7なぜならば、7⇔MAXS/Vcx,Sn/Vn=Sn/Vnより、6⇔Sn/Vn≦Sn/Vn1-Vne/VnS/Ve⇔0≦1-Vne/VnS/Ve⇔Vne≦Vnとなるからである。そこで、6の代わりに、両辺が容易に測定可能な式7を満たすxを見つける。実際には、7を満たさず、Sn/Vn<S/Vcxであっても、次式を満たせば、6は満たされる。Sn/Vn<S/Vcx≦Sn/Vn1-Vne/VnS/Veしかしながら、ここでは、条件を限定することになるが、単純な測定で判定可能なため、式7を式6の代わりに判定条件として用いる。つまり、コア数の最適化後のコードが最適化前のコードよりも高速であるという条件を、計算と通信をオーバーラップしないときのコア数を減少させた計算時間が、計算と通信をオーバーラップしない時の通信時間以下であるという条件に置き換えることになる。ここで、以下を定義する。T_comm=Sn/VnT_calc=S/VcN_coreT_comm,T_calcはどちらも測定可能である。次に、以下を定義する。Rcx=VcN_core/Vcxこれらを用いて、7は以下のように書き換えられる。7⇔S/Vcx≦Sn/Vn⇔RcxT_calc≦T_comm⇔Rcx≦T_comm/T_calc8つぎに、5を満たすためには、VcN_core≦Vmであるため、5VcxVn≦VcN_core⇔Vcx≦VcN_core-Vn9より、9を満たせば、5は満たされる。以上より、まず、上述したコア数とメモリアクセス速度の関係を事前に測定し、テーブルVcx,Rcxを準備し、次に、図5に示した計算実行後に通信を行なうコードよりN_coreを用いてオーバーラップしない際の計算と通信に要するそれぞれの時間T_calc,T_commを測定し、T_comm/T_calcを算出する。その後、式8Rcx≦T_comm/T_calcを成り立たせ、かつ、式9Vcx≦VcN_core-Vnを満たす最大のxを算出し、その値を採用する。つまり、8を満たし、且つ、通信分のメモリ使用量を計算側で減少させることのできる最大のxを採用することになる。ここで、式8、式9を満たすxの中で最大のものを選択する理由は、コア数を減少させすぎることで、CPUの処理速度が遅くなりすぎ、メモリアクセス速度ではなく、CPUの処理速度がボトルネックとなり計算が遅くなる可能性が考えられるためである。例えば、上述したコア数とメモリアクセス速度の関係をもつCPUを用いた場合の例について図12に示した。T_comm=3s、T_calc=2sの時、T_comm/T_calc=1.5となり、計算速度が1.5倍遅くなっても、通信よりも早く計算が終了することになる。一方で、上述したコア数とメモリアクセス速度の関係を参照すると、8コアから4コアにコア数を減少させることで、計算時間は1倍Rc4=1に、8コアから2コアにコア数を減少させることで、計算時間は6200/5500=1.12倍Rc2=1.12に、8コアから1コアにコア数を減少させることで、計算時間は1.67倍Rc1=1.67に遅くなることがわかる。この場合、Rcx≦1.5を満たす最大のxはRc2=1.12である2コアということになる。したがって、2コアを用いて計算を行えば、計算に用いるメモリバンド幅を節約した上で、通信が終了する以前に計算が終了することが期待される。多くの並列計算コードは、基本的に同様の処理を繰り返し行う。たとえば、時間発展問題などがそれにあたる。図13にコードの例を示した。tが繰り返し処理の各ステップをあらわす変数で、t=1からt=Ntまで同じ処理を繰り返す。したがって、計算開始前にを行い、t=1の際にを行い、t=2,...,Ntにを行えば、プログラムはその環境上で自己最適化を行うことになる。ここで、上記の計算については、メモリアクセスがボトルネックとなり、メモリアクセス速度のみで性能が決まる場合を対象にしていることに注意が必要である。メモリアクセスがボトルネックでない計算に対して、同様の方法でコア数を決定しようとすると逆に遅くなる可能性がある。なぜならば、使用コア数を減少させると、メモリアクセスがボトルネックとなるような計算の場合以上に計算速度が遅くなってしまう場合があるためである。たとえば、上述したコア数とメモリアクセス速度の関係表に示したCPU上で、メモリアクセスがボトルネックとなるような計算では8コアでの実行時に比べ、1コアでの実行は1.67倍しか遅くならないが、メモリアクセスがボトルネックでない計算では理想的には8倍遅くなることが想定される。しかしながら、上記の計算については、メモリアクセスがボトルネックかどうかを判断することができないため、x=N_calcで計算した場合と、上記方法で決定したxで計算した場合とを比較し、性能がより高くなるケースを採用する必要がある。以上の点を考慮した、方法1のフローチャートを図14に示す。まず、マスターコアは、Vcx、Rcx、Vnを取得し、t=1とするS101。つぎにオーバーラップ以外の部分を計算しS102、T_calcの測定S103とT_commの測定S104を行なう。さらにオーバーラップ以外の部分を計算しS105、T_comm/T_calcが1より大きいかを判定するS106。T_comm/T_calcが1より大きければS106,Yes、マスターコアは、最適なコア数xを算出しS107、t=2とするS108。そして、オーバーラップ以外の部分を計算しS109、計算にxコアを用いてオーバーラップ実行し、経過時間T_overxを測定するS110。その後、オーバーラップ以外の部分を計算しS111、t=3としてS112、さらにオーバーラップ以外の部分を計算するS113。その後、計算にN_coreを用いてオーバーラップ実行し、経過時間T_overN_coreを測定するS114。その後、オーバーラップ以外の部分を計算しS115、T_overxがT_overN_coreより小さいかを判定するS116。T_comm/T_calcが1以下である場合S106,NoおよびT_overxがT_overN_core以上である場合S116,No、x=N_coreとするS117。T_overxがT_overN_coreより小さい場合S116,Yes、またはステップS117の後、マスターコアは、t=t1としS118、オーバーラップ以外の部分を計算するS119。その後、計算にxコアを用いてオーバーラップ実行しS120、オーバーラップ以外の部分を計算するS121。その後、マスターコアは、t=Ntであるかを判定しS122、t=NtでなければS122,NoステップS118に戻り、t=Ntとなった場合S122,Yesに処理を終了する。図15は、図14に示した最適なコアxの算出S107の詳細を説明するフローチャートである。マスターコアは、y=N_core-1,x=N_coreとおきS201、Rcy≦T_comm/T_calcであるかを判定するS202。Rcy≦T_comm/T_calcであると判定された場合S202,Yes、マスターコアは、y=y-1,x=yとしS203、Vcx≦VcN_core-Vnであるかを判定するS204。Vcx≦VcN_core-VnでなければS204,No、ステップ202に戻る。そして、Vcx≦VcN_core-Vnであると判定された場合S204,YesまたはRcy≦T_comm/T_calcでない場合S202,Noに、処理を終了する。<方法2>ハードウェアカウンタ値が取得可能な場合方法1では実際にはメモリアクセスの競合による性能劣化が発生していない場合に関しても最適な使用コア数を検索することになり無駄が発生する場合がある。そこで方法2では、CPUのハードウェアカウンタ値の値を取得できる環境を用意し、キャッシュミスの回数を表すカウンタ値から、計算と通信の同時実行時のメモリアクセスを測定し、その値がVm付近性能劣化や測定誤差を考慮し、例えばVmの10の範囲の場合のみ、方法1を行う。図16は、方法2のフローチャートである。マスターコアは、Vcx、Rcx、Vnを取得し、t=1とするS301。つぎにオーバーラップ以外の部分を計算しS302、計算にN_coreを用いてオーバーラップ実行し、経過時間T_overN_coreを測定するとともに、ハードウェアカウンタからオーバーラップ時のメモリ使用量を測定するS303。その後、オーバーラップ以外の部分を計算しS304、メモリ使用量が0.9Vm以上であるならばS305,Yes、t=2とおくS306。その後、オーバーラップ以外の部分を計算しS307、T_calcの測定S308とT_commの測定S309を行なう。さらにオーバーラップ以外の部分を計算しS310、T_comm/T_calcが1より大きいかを判定するS311。T_comm/T_calcが1より大きければS311,Yes、マスターコアは、最適なコア数xを算出しS312、t=3とするS313。そして、オーバーラップ以外の部分を計算しS314、計算にxコアを用いてオーバーラップ実行し、経過時間T_overxを測定するS315。その後、オーバーラップ以外の部分を計算しS316、T_overxがT_overN_coreより小さいかを判定するS317。メモリ使用量が0.9Vm未満である場合S305,No、T_comm/T_calcが1以下である場合S311,NoおよびT_overxがT_overN_core以上である場合S317,No、x=N_coreとするSぬ8。T_overxがT_overN_coreより小さい場合S317,Yes、またはステップS318の後、マスターコアは、t=t1としS319、オーバーラップ以外の部分を計算するS320。その後、計算にxコアを用いてオーバーラップ実行しS321、オーバーラップ以外の部分を計算するS322。その後、マスターコアは、t=Ntであるかを判定しS323、t=NtでなければS323,NoステップS319に戻り、t=Ntとなった場合S323,Yesに処理を終了する。以上の方法1,2によって、計算と通信の同時実行時に問題となっていた、計算のためのメモリアクセスと通信のためのメモリアクセスとの競合による性能劣化を、使用コア数を適切に制限し計算のためのメモリアクセスを減らすことで、回避できるようになった。これによりアプリケーションの高速化が可能となる。図17は、サーバにおける、計算と通信の同時実行に要する時間の、計算に使用するスレッド数=コア数を変更した場合の測定結果の一例である。同じケースをオーバーラップせずに測定した、計算時間と通信時間はそれぞれ、T_calc=0.21、T_comm=0.86となった。したがって、T_comm/T_calc=4.13となる。この場合最適なコア数を決めるとx=1となる。このケースでは、1スレッドで実行したケースが8スレッドで実行したケースに比べ、0.06秒速く、最速である。また、方法2によれば、本発明の効果が見込める、計算と通信によるメモリアクセスが、システムによるメモリ性能の限界近くまで使用されているケースにおいてのみ、方法1を適用すればよいので、無駄な検証作業を回避できる。以上説明してきたように、演算処理装置、計算ノード、並列計算機システム、演算処理方法および演算処理プログラムは、処理管理部11が複数のプロセッサコアに計算処理を分散して実行させる。そして、複数のプロセッサコアが計算結果の通信に要する通信時間が、計算処理に要する計算時間よりも長いかを条件判定部12が判定する。判定の結果、複数のプロセッサコアが計算結果の通信に要する通信時間が、計算処理に要する計算時間よりも長い場合、最適なプロセッサコア数を条件判定部12が算出し、計算処理を分散するプロセッサコアの数をコア数制御部13が制限する。このため、開示の技術では、計算と通信の同時実行による競合に起因する性能劣化を抑えることができる。"