(57)【要約】【課題】行列要素間で演算内容が異なる場合、および行列要素を演算するために一度参照したデータ列を再参照する必要がある場合でも、高い並列処理効率による演算を実現して、行列の演算時間を短縮する。【解決手段】行列要素割当部３ａは、部分行列に含まれる複数の行列要素を演算器セットが有する複数の演算器に割り当てる。演算方式判定部４ａ１〜４ａ４は、行列要素の演算方式を判定する。判定結果に対応する第１演算処理部５ａ１〜５ａ４または第２演算処理部６ａ１〜６ａ４が演算器に指示して、当該演算器に割り当てられた複数の行列要素を並列に、記憶領域に格納されたデータ列を参照して判定された演算方式で演算させる。【選択図】図１
2016095764.tif 000002
【特許請求の範囲】
【請求項１】
行列に含まれる複数の部分行列を１以上の演算器セットに割り当てる部分行列割当部と、
前記演算器セットに割り当てられた前記部分行列の演算に使用するデータ列を、当該演算器セット内の記憶領域に格納するデータ管理部と、
前記演算器セットに割り当てられた前記部分行列に含まれる複数の行列要素を、当該演算器セットが有する複数の演算器に割り当てる行列要素割当部と、
１以上の演算方式の中から、前記演算器に割り当てられた複数の行列要素それぞれの演算方式を判定する演算方式判定部と、
前記演算器に割り当てられた前記複数の行列要素について、前記記憶領域に格納された前記データ列を参照して前記演算方式判定部により判定された演算方式で行列要素毎の演算を並列に実施させる演算処理部と、
前記演算器から前記複数の行列要素の演算結果を回収し、まだ演算されていない行列要素の割り当てを行うよう前記行列要素割当部に通知する行列要素回収部と、
前記行列要素回収部から前記部分行列の演算結果を回収し、まだ演算されていない部分行列の割り当てを行うよう前記部分行列割当部に通知する部分行列回収部とを備える並列処理装置。
【請求項２】
前記演算方式は、前記行列要素を演算する多重ループ構造を、当該多重ループ構造の演算と同じ順序で前記データ列を参照する一重ループ構造に変換した方式であることを特徴とする請求項１記載の並列処理装置。
【請求項３】
前記データ管理部は、前記一重ループ構造の長さに対応するデータ位置参照テーブルを作成し、前記演算器は、当該データ位置参照テーブルを介して前記記憶領域の前記データ列を参照することを特徴とする請求項２記載の並列処理装置。
【請求項４】
前記行列の演算結果は、境界積分方程式を解くことで得られるインピーダンス行列であり、
前記行列要素の演算に使用する前記データ列は、電磁界解析の目標物をセグメントと当該セグメントで構成される三角面とによってモデル化した多面体近似モデルを構成するベクトルデータ列であり、
前記データ管理部は、前記行列要素に対応するセグメントのペアと当該セグメントそれぞれに隣接する三角面のベクトルデータ列を、前記行列要素を含む部分行列が割り当てられた前記演算器セット内の記憶領域に格納し、
前記演算方式判定部は、前記演算器に割り当てられた前記行列要素に対応する前記セグメントのペア間の距離に基づいて前記演算方式を判定し、
前記演算処理部は、前記行列要素に対応する前記セグメントのペアの組み合わせ毎の二重積分と同じ順序で前記データ列を参照する一重ループ構造を並列に、前記記憶領域に格納された前記データ列を参照して前記演算方式判定部により判定された演算方式で演算させることを特徴とする請求項２または請求項３記載の並列処理装置。
【請求項５】
前記一重ループ構造の演算は、加算対象の数列の並列演算と当該数列の並列総和演算との二段階で構成され、当該一重ループ構造の反復数が前記演算器の並列度の倍数値に切り上げられていることを特徴とする請求項２から請求項４のうちのいずれか１項記載の並列処理装置。
【請求項６】
前記演算方式判定部は、前記演算器に割り当てられた前記複数の行列要素が異なる演算方式を用いる判定結果になった場合に、同一の演算方式を用いるように当該判定結果を訂正することを特徴とする請求項１から請求項５のうちのいずれか１項記載の並列処理装置。
【請求項７】
請求項１から請求項６のうちのいずれか１項記載の並列処理装置は、親機と１以上の子機との親子関係で構成され、
前記親機は、前記部分行列割当部および前記部分行列回収部を含み、前記部分行列割当部が前記部分行列に対応するデータ列を前記１以上の子機へ割り当てる処理を行い、
前記子機のそれぞれは、前記行列要素割当部、前記データ管理部、前記演算方式判定部、前記演算処理部および前記行列要素回収部を含み、前記行列要素回収部が当該子機に割り当てられた前記部分行列の演算結果を前記親機へ通知することを特徴とする並列処理装置。
【請求項８】
請求項７記載の並列処理装置は、前記親機と前記１以上の子機との間で送受信を行う構成であり、
前記親機は、前記部分行列回収部が前記子機から第１の部分行列の演算結果を受信しながら、前記部分行列割当部が前記子機に割り当てた第２の部分行列のデータ列を前記子機へ送信し、
前記子機のそれぞれは、前記親機との間での送受信と並行して第３の部分行列の演算を非同期に実施することを特徴とする並列処理装置。
【請求項９】
前記親機はＣＰＵで構成され、前記子機はＧＰＵで構成され、前記演算器セット内の記憶領域は、前記ＧＰＵ上の並列プロセッサ内の共有メモリで構成されていることを特徴とする請求項７または請求項８記載の並列処理装置。
【請求項１０】
部分行列割当部が、行列に含まれる複数の部分行列を１以上の演算器セットに割り当てるステップと、
データ管理部が、前記演算器セットに割り当てられた前記部分行列の演算に使用するデータ列を、当該演算器セット内の記憶領域に格納するステップと、
行列要素割当部が、前記演算器セットに割り当てられた前記部分行列に含まれる複数の行列要素を、当該演算器セットが有する複数の演算器に割り当てるステップと、
演算方式判定部が、１以上の演算方式の中から、前記演算器に割り当てられた複数の行列要素それぞれの演算方式を判定するステップと、
演算処理部が、前記演算器に割り当てられた前記複数の行列要素について、前記記憶領域に格納された前記データ列を参照して前記演算方式判定部により判定された演算方式で行列要素毎の演算を並列に実施させるステップと、
行列要素回収部が、前記演算器から前記複数の行列要素の演算結果を回収し、まだ演算されていない行列要素の割り当てを行うよう前記行列要素割当部に通知するステップと、
部分行列回収部が、前記行列要素回収部から前記部分行列の演算結果を回収し、まだ演算されていない部分行列の割り当てを行うよう前記部分行列割当部に通知するステップとを備える並列処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、行列演算を並列処理する並列処理装置および並列処理方法に関するものである。
【背景技術】
【０００２】
レーダ設計では、目標物に対する電波の反射強度（例えば、ＲＣＳ；Ｒａｄａｒ  Ｃｒｏｓｓ  Ｓｅｃｔｉｏｎ）等の性能が解析され、構成が決定される。このため、モデル化したレーダの目標物に対して電磁界シミュレーションが行われ、必要な性能パラメータが演算される。
【０００３】
レーダの目標物を、ＲＷＧ（Ｒａｏ−Ｗｉｌｔｏｎ−Ｇｌｉｓｓｏｎ）基底関数に基づき、頂点とセグメント（辺またはエッジとも呼ぶ）とで構成された三角面の集合から成る多面体近似モデルで表現した場合、この多面体近似モデルに対して、境界積分方程式に基づく電磁界シミュレーションが実施される。電磁界シミュレーションには、例えば、モーメント法やＣＢＦＭ（Ｃｈａｒａｃｔｅｒｉｓｔｉｃ  Ｂａｓｉｓ  Ｆｕｎｃｔｉｏｎ  Ｍｅｔｈｏｄ）等が挙げられる。
【０００４】
この電磁界シミュレーションでは、多面体近似モデルを構成するＮ本のセグメントの組合せ毎に、境界積分方程式を解くことで、式（１）に示すように、サイズＮ×Ｎのインピーダンス行列Ｚを出力する。
【０００５】
2016095764.tif 000003
【０００６】
この境界積分方程式は、行列要素ｚｘ，ｙのそれぞれが、セグメントｘと、セグメントｙと、各セグメントに隣接した計４枚の三角面とに関連付けされたデータを参照して演算される。ここで、セグメントの右側に隣接した三角面に＋、左側に隣接した三角面に−の識別符号を付加して、それぞれＴ＋、Ｔ−と表記すれば、行列要素ｚｘ，ｙに関する境界積分方程式は、以下の式（２）で表される。
【０００７】
2016095764.tif 000004
2016095764.tif 000005
【０００８】
この境界積分方程式には、ＥＦＩＥ（Ｅｌｅｃｔｒｉｃ  Ｆｉｅｌｄ  Ｉｎｔｅｇｒａｌ  Ｅｑｕａｔｉｏｎ、電界積分方程式）、ＭＦＩＥ（Ｍａｇｎｅｔｉｃ  Ｆｉｅｌｄ  Ｉｎｔｅｇｒａｌ  Ｅｑｕａｔｉｏｎ、磁界積分方程式）、ＣＦＩＥ（Ｃｏｍｂｉｎｅｄ  Ｆｉｅｌｄ  Ｉｎｔｅｇｒａｌ  Ｅｑｕａｔｉｏｎ、混合界型積分方程式）、およびＭＰＩＥ（Ｍｉｘｅｄ  Ｐｏｔｅｎｔｉａｌ  Ｉｎｔｅｇｒａｌ  Ｅｑｕａｔｉｏｎ、混合ポテンシャル積分方程式）等が挙げられる。
【０００９】
例えば、ＥＦＩＥでインピーダンス行列Ｚを演算する場合、以下の式（３）で、上式（２）の各項を展開する。
【００１０】
2016095764.tif 000006
2016095764.tif 000007
2016095764.tif 000008
2016095764.tif 000009
【００１１】
式（３）から高精度な結果を得るためには、解析的に積分を計算することが好ましいが、演算負荷が非常に高い。一方、式（３）を数値積分で近似的に計算するならば、解析的に積分を行う場合に比べて演算負荷の高さを緩和できるが、セグメント間の距離が短い場合には演算精度が低いことが問題となる。
このため、演算負荷の高さを緩和しつつ、高い演算精度を得るために、セグメントｘとセグメントｙの距離が遠い場合と近い場合とで演算方式を切り替える。
【００１２】
2016095764.tif 000010
2016095764.tif 000011
2016095764.tif 000012
【００１３】
式（５）の閾値を下回る場合、つまりセグメント間の距離が短い場合は、高精度な演算を実施する。一方、式（５）の閾値を上回る場合、つまりセグメント間の距離が長い場合は、演算負荷の高さを緩和した演算を実施する。
【００１４】
式（５）の閾値を上回る場合、つまりセグメント間の距離が長い場合、例えば、式（３）の近似式（６）を使用する。
【００１５】
2016095764.tif 000013
2016095764.tif 000014
【００１６】
2016095764.tif 000015
2016095764.tif 000016
【００１７】
一方、式（５）の閾値を下回る場合、つまりセグメント間の距離が短い場合、例えば、式（３）における指数関数部をテイラー展開して扱う。以下の式（８）は、式（３）の指数関数部を３次の項までテイラー展開した例である。このテイラー展開した式（８）で式（３）の指数関数部を置き換えた場合、以下の式（９）に示すように、式（８）の右辺の第一項と第二項をそれぞれ積分計算して足し合わせる演算を行う。
【００１８】
2016095764.tif 000017
2016095764.tif 000018
2016095764.tif 000019
【００１９】
2016095764.tif 000020
2016095764.tif 000021
【００２０】
2016095764.tif 000022
2016095764.tif 000023
【００２１】
このようにして演算されたインピーダンス行列Ｚは、例えば、モーメント法の場合、以下の連立方程式（１２）を解くことで、既知の電圧ベクトルＶから未知の電流分布Ｉを演算するために用いられる。
ＺＩ＝Ｖ      （１２）
【００２２】
しかしながら、このインピーダンス行列Ｚを生成するためには、先述したとおり、要素毎に、演算負荷の高い境界積分方程式を解く必要があるため、インピーダンス行列Ｚの生成が完了するまでに長時間を要することが課題となっている。
【００２３】
そこで、以下の非特許文献１〜６には、このインピーダンス行列Ｚの演算時間を削減するために、多数の演算器を同時に使用して高速化する並列処理装置の実現方式が開示されている。これらの非特許文献における並列処理の方法では、並列処理の演算単位であるスレッドが、任意のサイズで設定された二次元的なブロックにグループ化される。例えば、ブロックサイズを３２×１６とした場合、ブロックｂは、以下の式（１３）によるスレッドＴの行列となる。
【００２４】
2016095764.tif 000024
【００２５】
次に、このブロックｂの数を、インピーダンス行列Ｚのサイズに合わせて設定する。例えば、行列要素とスレッドとを一対一に対応させる場合、サイズＮ×Ｎのインピーダンス行列Ｚに対して、サイズ３２×１６のスレッド行列Ｔをブロックｂとして構成するならば、以下の式（１４）で表されるサイズ（Ｎ／３２）×（Ｎ／１６）のブロック行列Ｂになる。
【００２６】
2016095764.tif 000025
【００２７】
各スレッドが、このようにしてインピーダンス行列Ｚの各要素に対応するように設定されるため、それぞれ異なる要素に対する境界積分方程式が独立に演算され得る。すなわち、行列要素数に応じた並列度によってインピーダンス行列Ｚの並列演算が行われる。
【先行技術文献】
【非特許文献】
【００２８】
【非特許文献１】Lezar，E．，et al．，“GPU-Accelerated Method of Moments by Example：Monostatic Scattering”，IEEE Antennas and Propagation Magazine, Vol. 52. No. 6, pp. 120−135, 2010．
【非特許文献２】Lezar，E．，et al．，“GPU Acceleration of Electromagnetic Scattering Analysis using the Method of Moments”，in Proceedings of the 2011 International Conference on Electromagnetics in Advanced Applications，pp．452−455，2011．
【非特許文献３】勝田肇，他５名，“GPUによるモーメント法の高速化”，電子情報通信学会技術研究報告, AP2012-28，Vol．112，No．79，pp．25−30，2012．
【非特許文献４】De Donno，D．，et al．，“MPIE／MoM Acceleration With a General-Purpose Graphics Processing Unit”，IEEE Transactions on Microwave Theory and Techniques，Vol．60， No．9，pp．2693−2701，2012．
【非特許文献５】Fang，M．，et al．，“Fast electromagnetic simulation by parallel MoM implemented on CUDA”，in Proceedings of the 2013 International Symposium on Antennas＆Propagation，Vol．2，pp．1268−1271，2013．
【非特許文献６】Perez，J．I．，et al．，“Application of GPU computing to the Characteristic Basis Function Method”，in Proceedings of the 2012 6th European Conference on Antennas and Propagation，pp．1003−1006，2012．
【発明の概要】
【発明が解決しようとする課題】
【００２９】
従来の並列処理装置は、以上のように構成されているので、各スレッドは、１つの行列要素（セグメントのペア）に対応して、他のスレッドとは独立して境界積分方程式を解く。この境界積分方程式は、行列要素を構成する２つのセグメント間の距離に応じた計算式になるため、他のスレッドとは互いに異なる演算を行う。また、各スレッドは、セグメントと三角面に関連付けられたデータを使用して演算を行うが、ペアの一方のデータは、他の行列要素の演算に使用するデータと重複するため、スレッド間で同じデータを参照することになる。
【００３０】
このため、上述の処理内容を記述したプログラムを、例えばＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）のように、同一命令による多数データの並列処理（ベクトル演算）能力が高いデバイス上で動作させる場合、同一命令処理内に異なる命令を要する分岐を伴うと、オーバヘッドが大きくなり、処理が長時間化するという問題がある。
【００３１】
また、ある行列要素のための演算で一度参照したデータを、別の行列要素の演算で再び参照する特徴があるため、行列要素間で独立に処理を進める従来の並列処理装置は、同じデータに再参照するだけの時間が冗長となるため、処理が長時間化するという問題がある。
【００３２】
すなわち、従来の並列処理装置では、これらの問題に対処できないため、インピーダンス行列Ｚの演算が完了するまでに長時間を要してしまうという課題があった。
【００３３】
この発明は、上記のような課題を解決するためになされたもので、行列要素間で演算内容が異なる場合、および行列要素を演算するために一度参照したデータ列を再参照する必要がある場合でも、高い並列処理効率による演算を実現して、行列の演算時間を短縮することを目的とする。
【課題を解決するための手段】
【００３４】
この発明に係る並列処理装置は、行列に含まれる複数の部分行列を１以上の演算器セットに割り当てる部分行列割当部と、演算器セットに割り当てられた部分行列の演算に使用するデータ列を、当該演算器セット内の記憶領域に格納するデータ管理部と、演算器セットに割り当てられた部分行列に含まれる複数の行列要素を、当該演算器セットが有する複数の演算器に割り当てる行列要素割当部と、１以上の演算方式の中から、演算器に割り当てられた複数の行列要素それぞれの演算方式を判定する演算方式判定部と、演算器に割り当てられた複数の行列要素について、記憶領域に格納されたデータ列を参照して演算方式判定部により判定された演算方式で行列要素毎の演算を並列に実施させる演算処理部と、演算器から複数の行列要素の演算結果を回収し、まだ演算されていない行列要素の割り当てを行うよう行列要素割当部に通知する行列要素回収部と、行列要素回収部から部分行列の演算結果を回収し、まだ演算されていない部分行列の割り当てを行うよう部分行列割当部に通知する部分行列回収部とを備えるものである。
【発明の効果】
【００３５】
この発明によれば、演算器に割り当てられた複数の行列要素を並列に、記憶領域に格納されたデータ列を参照して演算方式判定部により判定された演算方式で演算させるようにしたので、行列要素間で演算内容が異なる場合、同一命令並列処理の単位に１つの行列要素を割り付けることで分岐を回避でき、同一命令処理内の分岐によるオーバヘッド分の時間を短縮することができる。また、演算器セット内にある高速だが限られたサイズの記憶領域からデータ列を参照するようにしたので、再参照に要する分の時間を短縮することができる。これにより、従来に比べて、行列の演算時間を短縮することができる。
【図面の簡単な説明】
【００３６】
【図１】この発明の実施の形態１に係る並列処理装置の構成例を示すブロック図である。
【図２】インピーダンス行列の部分行列化および部分行列を更に分割した例を示す説明図である。
【図３】この発明の実施の形態１の演算器の構成例を示すブロック図である。
【図４】従来の並列処理装置による並列処理の設定例を図解した説明図である。
【図５】この発明の実施の形態１による並列処理の設定例を図解した説明図である。
【図６】インピーダンス行列の各行列要素を演算する際に参照するデータに重複性があることを、多面体として図解した説明図である。
【図７】図６の多面体データからなる各行列要素を演算する際のデータ参照の流れを図解した説明図である。
【図８Ａ】この発明の実施の形態１において一重ループ構造の演算時に参照するデータ管理方式を図解した説明図である。
【図８Ｂ】この発明の実施の形態１において一重ループ構造の演算時に参照するデータ管理方式を図解した説明図である。
【図９】この発明の実施の形態１において同一命令並列処理による演算を図解した説明図である。
【図１０】この発明の実施の形態１に係る並列処理装置の動作例を示すフローチャートである。
【図１１】この発明の実施の形態２に係る並列処理装置による並列処理の設定例を図解した説明図である。
【発明を実施するための形態】
【００３７】
実施の形態１．
図１は、この発明の実施の形態１に係る並列処理装置の構成例を示すブロック図である。実施の形態１では、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、ＧＰＵまたはＭＩＣ（Ｍａｎｙ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｏｒｅ）のような並列計算ボードとを用いて並列処理装置が構成されているものとして説明する。
【００３８】
ＣＰＵがプログラムを実行することにより、部分行列割当部１および部分行列回収部８として機能する。
また、ＧＰＵがプログラムを実行することにより、データ管理部２ａ，２ｂ、行列要素割当部３ａ，３ｂ、演算方式判定部４ａ１〜４ａ４，４ｂ１〜４ｂ４、第１演算処理部５ａ１〜５ａ４，５ｂ１〜５ｂ４、第２演算処理部６ａ１〜６ａ４，６ｂ１〜６ｂ４、および行列要素回収部７ａ，７ｂとして機能する。
【００３９】
以下の説明では、レーダ設計のためのシミュレーションにおいて、多面体近似モデルで表現したレーダの目標物からＲＣＳ性能等を解析するために必要なインピーダンス行列Ｚを演算する用途に、実施の形態１の並列処理装置を用いる。
【００４０】
部分行列割当部１は、多面体近似モデルを構成するセグメント数Ｎについて演算した結果となるＮ×Ｎのインピーダンス行列Ｚのうち、一度に演算する部分行列の場所とサイズを決定し、決定した部分行列を演算対象として演算器セット（後述する）に割り付ける。また、部分行列割当部１は、部分行列の演算に必要なデータ列（多面体近似モデルのセグメントの位置ベクトル、三角面の位置ベクトル等）を、その部分行列を割り付けた演算器セット用のデータ管理部（図１ではデータ管理部２ａまたはデータ管理部２ｂ）へ出力する。
【００４１】
図２に、部分行列の演算器への割り付け例を示す。この例では、部分行列のサイズを（Ｎ／２）×（Ｎ／８）として、計１６個の部分行列１０１〜１１６を設定している。図２の例では、部分行列割当部１が、この部分行列の集合から２つの部分行列１０１，１０２を選択し、これらの部分行列１０１，１０２を２セットの演算器（演算器セットａ，ｂ）に割り付ける。
【００４２】
図３に、演算器の例を示す。１つの演算器セットａは、例えば１つのＧＰＵ内に複数ある並列プロセッサのうちの１つの並列プロセッサで構成され、並列プロセッサ内にある各演算グループが４基の演算器１０ａ１〜１０ａ４に対応する。１つの演算グループに対応する１基の演算器１０ａ１は、演算グループ内に内在する並列処理能力により、同一命令で複数（例えば、４点）のデータを並列処理できる。また、１基の演算器１０ａ１は、演算器内および他の演算器との間で共有可能な共有局所記憶領域９ａを有する。２つ以上のコアを有する複数のマルチコアＣＰＵを演算器に割り当てる場合は、ＣＰＵの各コアが４基の演算器１０ａ１〜１０ａ４に対応する。この場合、共有局所記憶領域は、各ＣＰＵ内のコア間で共有するキャッシュメモリとなる。ＭＩＣを演算器に割り当てる場合は、ＭＩＣの各コアが４基の演算器１０ａ１〜１０ａ４に対応する。この場合、共有局所記憶領域は、各コア占有のキャッシュメモリと、これを互いのコア間で参照し合うためのリングバスによって構成される。
図示は省略するが、演算器セットｂも演算器セットａと同じ構成であり、４基の演算器１０ｂ１〜１０ｂ４および共有局所記憶領域９ｂを有する。
【００４３】
部分行列回収部８は、演算器セットａ，ｂが部分行列１０１，１０２を演算した演算結果を、行列要素回収部７ａ，７ｂから回収し、演算結果をインピーダンス行列Ｚの対応する領域に格納する。また、部分行列回収部８は、部分行列１０１，１０２の演算が終了したことを部分行列割当部１へ通知する。
【００４４】
部分行列割当部１は、部分行列回収部８から通知を受けると、インピーダンス行列Ｚのまだ演算されていない未処理の部分行列１０３〜１１６の中から、次の演算対象にする部分行列の場所とサイズを決定して演算器セットａ，ｂに割り付ける。このように部分行列割当部１と部分行列回収部８が協働して、部分行列演算の反復制御を行う。
【００４５】
なお、図１の構成例では２つの演算器セットａ，ｂを設けたが、この演算器セットは１つ以上であればよく、任意の数を設けることができる。演算器セットの数を変更した場合には、データ管理部２ａ、行列要素割当部３ａ、演算方式判定部４ａ１〜４ａ４、第１演算処理部５ａ１〜５ａ４、第２演算処理部６ａ１〜６ａ４、および行列要素回収部７ａを、演算器セットと同数設ける。
【００４６】
また、各演算器セットに割り付ける部分行列も、一度に任意の数を任意の順番で割り付けることができる。例えば、部分行列割当部１は、全ての部分行列１０１〜１１６が演算対象であるときに、演算器セットａには２つの部分行列１０５，１０６を割り付け、演算器セットｂには１つの部分行列１１６を割り付けるようにしてもよい。
【００４７】
部分行列割当部１が部分行列を割り付けた演算器セットａ，ｂは、互いに並列に動作する。
演算器セット毎に設けられたデータ管理部２ａ，２ｂは、部分行列割当部１が出力したデータ列（多面体近似モデルのセグメントの位置ベクトル、三角面の位置ベクトル等）の中から、部分行列の演算に必要な局所データを抽出して、演算器セットａ，ｂ内の共有局所記憶領域９ａ，９ｂに格納する。
【００４８】
共有局所記憶領域９ａ，９ｂとして、図３に示したような、演算器セットａ，ｂ内に設けられ並列プロセッサ内で共有可能な共有メモリを使用することが望ましい。共有メモリは、演算器セット内にあるため、高速アクセス可能および小サイズという利点がある。
【００４９】
例えば、図２において、（Ｎ／２）×（Ｎ／８）点の行列要素（セグメントのペア）から成る部分行列１０１を演算する際には、この部分行列１０１を割り付けられた演算器セットａの中の各演算器１０ａ１〜１０ａ４が、共有局所記憶領域９ａに格納されているセグメントに関連付けられたデータ列（セグメントの位置ベクトル、積分点の位置ベクトルなど）と、セグメントに隣接する三角面に関連付けられたデータ列（頂点の位置ベクトル、頂点から積分点に向かうベクトルなど）を使用する。
【００５０】
行列要素割当部３ａ，３ｂは、演算器セットａ，ｂ毎に設けられている。行列要素割当部３ａ，３ｂは、自身の演算器セットに割り付けられた部分行列に含まれる行列要素を、演算器セット中の各演算器に割り付ける。
例えば、図２では、部分行列１０１の中の行列要素群１０１−１に含まれる１６要素が、演算器セットａの４基の演算器１０ａ１〜１０ａ４のそれぞれに４要素ずつ割り付けられる。この行列要素群１０１−１に対応する演算結果は、行列要素回収部７ａで回収されて、部分行列１０１の対応する領域に格納される。
【００５１】
また、行列要素回収部７ａは、行列要素群１０１−１の演算が終了したことを行列要素割当部３ａへ通知する。
行列要素割当部３ａは、行列要素回収部７ａから通知を受けると、部分行列１０１のうちのまだ演算されていない未処理の行列要素群１０１−２〜１０１−１６の中から、次の演算対象にする行列要素の場所とサイズを決定して演算器セットａの各演算器に割り付ける。このように行列要素割当部３ａと行列要素回収部７ａが協働して、行列要素演算の反復制御を行う。
【００５２】
なお、図１および図２の例では、説明の便宜上、行列要素割当部３ａが、計１６点の行列要素を単位とした行列要素群を、同一命令で４点の並列処理が可能な演算器４基を単位として割り付けているが、これに限定されるものではなく、演算器セットａを構成する演算器の数、同一命令で並列処理可能なデータ点数、および各演算器に対して一度に割り付ける行列要素の数は問わない。このように構成を変更する場合、図１の演算方式判定部４ａ１〜４ａ４、第１演算処理部５ａ１〜５ａ４、および第２演算処理部６ａ１〜６ａ４を、演算器と同数設ける。
【００５３】
行列要素割当部３ｂおよび行列要素回収部７ｂも、行列要素割当部３ａおよび行列要素回収部７ａと同様の動作を、演算器セットｂに対して行う。
【００５４】
演算方式判定部４ａ１〜４ａ４，４ｂ１〜４ｂ４は、行列要素を演算する方式を判別する。上述したように、インピーダンス行列Ｚの各要素を演算する際、行列要素である２つのセグメントｘ，ｙの距離に応じて演算方式を切り替えるため、演算方式判定部４ａ１〜４ａ４，４ｂ１〜４ｂ４は、セグメント間の距離に基づく判定式（５）を用いて閾値判定を行う。演算方式判定部４ａ１〜４ａ４，４ｂ１〜４ｂ４は、セグメント間の距離が予め設定された閾値より長い場合、数値的な第１演算方式（例えば、式（６））の近似計算を行う第１演算処理部５ａ１〜５ａ４，５ｂ１〜５ｂ４を選択し、反対に、セグメント間の距離が予め設定された閾値より短い場合、数値的かつ解析的な第２演算方式（例えば、式（９））の近似計算を行う第２演算処理部６ａ１〜６ａ４，６ｂ１〜６ｂ４を選択する。
【００５５】
なお、実施の形態１では、説明の便宜上、演算方式が２種類のみに限定されているが、これに限定されるものではない。例えば、全ての行列要素を高負荷だが高精度な式（９）を用いて演算するようにして、演算方式を１種類にしても構わない。また、セグメント間の距離が非常に長い場合は、二重積分を一重積分で近似した低負荷かつ低精度の第３演算方式にするなど、３種類以上の演算方式を選択可能な構成にしても構わない。このように構成を変更する場合、演算処理部の種類を、演算方式の種類と同数設ける。
【００５６】
演算方式判定部４ａ１〜４ａ４，４ｂ１〜４ｂ４によって選択された第１演算処理部５ａ１〜５ａ４，５ｂ１〜５ｂ４または第２演算処理部６ａ１〜６ａ４，６ｂ１〜６ｂ４は、演算器１０ａ１〜１０ａ４，１０ｂ１〜１０ｂ４に対して、第１演算方式または第２演算方式による行列要素の演算を実施させる。
【００５７】
なお、第１演算処理部５ａ１〜５ａ４，５ｂ１〜５ｂ４および第２演算処理部６ａ１〜６ａ４，６ｂ１〜６ｂ４は、各行列要素に対する演算を演算器間で並列処理するだけでなく、１基の演算器内でも同一命令並列処理によって複数の行列要素を並列に演算する。この演算処理部に関しては、従来の並列処理装置と比較する形で説明する。
【００５８】
図４は、従来の並列処理装置による並列処理の設定方式を図解した説明図である。図４の例では、１６点の行列要素からなる行列要素群１０１−１に４基の演算器を割り付けている。また、１基の演算器において、同一命令による並列処理単位２０１〜２０４のそれぞれを行列要素に割り付けている。すなわち、４基の演算器による並列度を１６とすると、４基の演算器を有する演算器セット１つで１６個の行列要素をまとめて処理する構成となる。
【００５９】
なお、以降の説明を簡単にするため、演算方式判定部４ａ１〜４ａ４，４ｂ１〜４ｂ４が各演算単位について演算方式を判定した後の状態を例として使用し、判定された演算方式を図４に示す。図４では、ハッチングされた演算単位２１１，２１９〜２２１，２２５はセグメント間が近距離であって第２演算方式と判定されており、その他の演算単位２１２〜２１８，２２２〜２２４，２２６はセグメント間が遠距離であって第１演算方式と判定されている。この場合、セグメント間が近距離にある演算単位２１１，２１９〜２２１，２２５は、第２演算処理部６ａ１〜６ａ４，６ｂ１〜６ｂ４が演算を実施する。セグメント間が遠距離にある演算単位２１２〜２１８，２２２〜２２４，２２６は、第１演算処理部５ａ１〜５ａ４，５ｂ１〜５ｂ４が演算を実施する。
【００６０】
従来の並列処理装置は、図４で明らかなように、同一命令による並列処理単位２０１，２０３，２０４の中に複数の行列要素（異なる演算方式）が割り付けられている。そのため、同一命令で並列処理が実施できない状況となっている。つまり、逐次的に処理されるため効率が悪い状態である。例えば、同一命令による並列処理単位２０１には、第２演算方式の演算単位２１１と、第１演算方式の演算単位２２２〜２１４とが含まれている。
【００６１】
一方、図５は、この発明の実施の形態１による並列処理の設定方式を図解した説明図であり、第１演算処理部および第２演算処理部による演算器への割り付け方を示したものである。図５（ａ）は、行列要素群１０１−１を前面側から見た図、図５（ｂ）は、行列要素群１０１−１を背面側から見た図である。
この図５では、１６点の行列要素からなる行列要素群１０１−１を、４点ずつ処理するように構成している。すなわち、同一命令による並列処理単位内には、１つの行列要素のみを割り付け、行列要素の演算を同一命令で並列処理するように構成している。
この同一命令による並列処理単位３０１〜３０４のそれぞれには行列要素が１つずつ対応しているため、行列要素間で演算方式が異なる場合であっても処理効率が低下しない。
【００６２】
このように、実施の形態１では同一命令で並列処理を行うために、第１演算処理部５ａ１〜５ａ４，５ｂ１〜５ｂ４が実施する式（６）による境界積分方程式の演算と、第２演算処理部６ａ１〜６ａ４，６ｂ１〜６ｂ４が実施する式（９）による境界積分方程式の演算のそれぞれが、図４のような同一命令並列処理に適さない反復数の細かい多重ループ構造から、図５のような同一命令並列処理に適した構造へと変換される。
【００６３】
以下、この境界積分方程式の演算方式について説明する。
図６は、レーダの目標物をモデル化した多面体データである。図７に、図６の多面体データからなる４点の行列要素を演算する際のデータ参照の流れを示す。
図７に示す４点（２×２点）の行列要素ｚｘ，ｙ，ｚｘ，ｙ＋１，ｚｘ＋１，ｙ，ｚｘ＋１，ｙ＋１は、図６に示すセグメントｘおよびセグメントｘ＋１と、セグメントｙおよびセグメントｙ＋１の各組み合わせに対応し、１つの行列要素に１基の演算器（１つの同一命令並列処理単位）が割り付けられている。
例えば、演算器１０ａ１に行列要素ｚｘ，ｙ、演算器１０ａ２に行列要素ｚｘ，ｙ＋１、演算器１０ａ３に行列要素ｚｘ＋１，ｙ、演算器１０ａ４に行列要素ｚｘ＋１，ｙ＋１が割り付けられているものとする。
【００６４】
このとき、行列要素の演算に使用するデータは、セグメントに関連付けられたデータ列であり、セグメントｘとセグメントｙの位置ベクトル、各セグメントに隣接した右左（＋，−）の三角面α，β，γ，τ，υ，ω上にある積分点の位置ベクトル、および三角面を構成する頂点ｖ１〜ｖ５，ｖ１１〜ｖ１５の位置ベクトル等のベクトルデータ列である。
これらのデータ列は、データ管理部２ａが部分行列割当部１から取得して、共有局所記憶領域９ａに格納する。
【００６５】
第１演算処理部５ａ１〜５ａ４または第２演算処理部６ａ１〜６ａ４の指示に従い、演算器１０ａ１〜１０ａ４は、演算を実施する際に共有局所記憶領域９ａの中の必要なデータ列を参照する。例えば、行列要素ｚｘ，ｙを演算する際には、セグメントｘの左側（−）に隣接する三角面αおよび右側（＋）に隣接する三角面βと、セグメントｙの左側（−）に隣接する三角面τおよび右側（＋）に隣接する三角面υに関するデータ列が参照される。
【００６６】
式（２）に示したように、２つのセグメントに隣接した計４枚の三角面を組み合わせて４回の積分演算を行う必要がある。４回の積分演算は、図７に示すように、セグメント番号（ｘ，ｘ＋１，ｙ，ｙ＋１）と符号（＋，−）の組み合わせに依存する。従って、データ参照の際、一度参照したデータ列を再び参照する必要が生ずる。
【００６７】
例えば、三角面βに関するデータ列は、図７の符号４０２，４１４，４１８，４３０が付された位置で、それぞれ２回ずつ参照されるため、従来の並列処理装置では計８回分の参照時間を要していた。この同じデータ列に対する再参照のオーバヘッドについては、先述したとおり、高速かつ小サイズな共有局所記憶領域９ａを使用することで参照時間を削減できる。
【００６８】
なお、境界積分方程式には、先述したとおり、ＥＦＩＥまたはＭＦＩＥ等の複数の種類が使用可能である。いずれの式もセグメントと三角面に関連付けられたデータ列を参照する演算となるため、以降で説明する実装方式を用いれば、境界積分方程式の種類を問わず、同一命令での並列処理が適用可能となる。
【００６９】
具体的に、第１演算処理部５ａ１〜５ａ４および第２演算処理部６ａ１〜６ａ４による境界積分方程式の同一命令並列処理の実施手順について説明する。
【００７０】
2016095764.tif 000026
【００７１】
しかしながら、積分点数Ｑは３〜７程度と小さく、各ループの反復数は４，Ｑ，Ｑと細かいため、同一命令による並列処理に適さない。このため、この反復数４，Ｑ，Ｑで構成された三重ループと同じ順序でデータを参照する反復数４Ｑ２の一重ループで演算を行うようにして、同一命令による並列処理を適用する。
【００７２】
この際、反復数が同一命令並列処理数で割り切れない値であると、オーバヘッドが生ずるため、第１演算処理部５ａ１〜５ａ４および第２演算処理部６ａ１〜６ａ４は、同一命令並列処理数の倍数値に切り上げた反復数を設定するようにしてもよい。
例えば、同一命令並列処理数が３２であり、反復数が４×７２であるならば、反復数を４×８２に切り上げればよい。
【００７３】
ここで、セグメント間が遠距離の関係にある場合に、第１演算処理部５ａ１〜５ａ４が用いるＥＦＩＥの二重積分演算式（６）を、一重ループの例として考える。
その場合、式（６）によって展開した式（２）は、計算順序が変更され、まず、以下の式（１５）で数列ｆｘ，ｙを計算し、次に、この数列の総和を式（１６）で計算するように、二段階の演算に置き換わる。
【００７４】
2016095764.tif 000027
2016095764.tif 000028
【００７５】
この式（１５）は、三重ループ構造を一重ループ構造として置き換えたものである。この置き換えによりデータ参照順序が変更されないように、演算器１０ａ１〜１０ａ４は、一重ループの長さに対応したデータ位置参照テーブルを介して共有局所記憶領域９ａのデータ列を参照することで、変更前の式（２）による演算と同じ結果を得ることができる。
データ位置参照テーブルは、データ管理部２ａが共有局所記憶領域９ａにデータ列を格納するときに作成しておく。
【００７６】
図８Ａおよび図８Ｂは、一重ループ構造と三重ループ構造とで同じ順序でデータ参照する方法を説明する図である。
式（１５）のｗｉは、二重積分における積分点の番号ｐ，ｑに対応する積分係数ｗｐ，ｗｑの乗算値である。積分点数が３に設定された場合、この積分係数列ｗは、３点の数列の各組み合わせ毎の乗算値を並べた９点の数列となる。
【００７７】
2016095764.tif 000029
【００７８】
また、式（１５）では、三角面の組み合わせ毎に、符号ｓｉが＋か−かで変化する項（４／ｋ２）が存在する。そのため、演算器１０ａ１〜１０ａ４は、一重ループのサイズに対応したデータ位置参照テーブル５０１を介して、共有局所記憶領域９ａの符号列ｓを参照するように構成する。
【００７９】
さらに、三重ループ構造では、三角面の組み合わせ毎に、積分点の位置関係を組み合わせた演算を行う。一重ループ構造では、演算器１０ａ１〜１０ａ４が、積分係数列ｗと同様に、データ位置参照テーブル５０２を介して共有局所記憶領域９ａの対応データ位置列ｇｘと対応データ位置列ｈｙを参照するように構成する。
【００８０】
演算器１０ａ１〜１０ａ４は、以上のようにして構成したＥＦＩＥの一重ループ構造に対し、同一命令並列処理で並列演算を実施する。
例えば演算器１０ａ１は、まず、総和演算の対象となる式（１５）の数列ｆｘ，ｙの各点を同一命令並列処理で多点単位で演算する。例えば、数列の長さが１６であり、同一命令並列処理数が４である場合は、並列に４点ずつ演算する構成となる。次に、演算器１０ａ１は、演算し終えた数列の中から加算し合うペアを選択し、段階的に数列サイズを１（総和値）に近づけていくように並列演算を行い、行列要素ｚｘ，ｙを得る。
【００８１】
図９の例では、まず、総和値を求めたい数列６０１がこの半分のサイズの数列６０２となるように、演算器１０ａ１が数列６０１の２点ごとの加算を同一命令で並列処理している。次に、演算器１０ａ１は、数列６０２の２点ごとの加算を同一命令で並列処理して、半分のサイズの数列６０３を得る。これを繰り返すことで、数列６０２、数列６０３、数列６０４、数列６０５と段階が進むにつれて、徐々に総和値が演算されていく。
【００８２】
なお、説明の便宜上、図９では、足し合わせるペアが、数列中の隣接２点となっているが、３点以上のペアであってもよく、ペアとなる点は任意の位置から選択可能である。
【００８３】
図１０は、並列処理装置の動作を示すフローチャートである。
ステップＳＴ１において、部分行列割当部１が、インピーダンス行列の部分行列を演算器セットａ，ｂに割り当てる。ステップＳＴ２において、データ管理部２ａ，２ｂのそれぞれが、割り当てられた部分行列の演算に使用するデータ列を部分行列割当部１から取得して、共有局所記憶領域９ａ，９ｂに格納する。
【００８４】
ステップＳＴ３において、行列要素割当部３ａ，３ｂのそれぞれが、割り当てられた部分行列に含まれる複数の行列要素を、演算器セットａ，ｂが有する複数の演算器１０ａ１〜１０ａ４，１０ｂ１〜１０ｂ４に割り当てる。
ステップＳＴ４において、演算方式判定部４ａ１〜４ａ４，４ｂ１〜４ｂ４のそれぞれが、演算器１０ａ１〜１０ａ４，１０ｂ１〜１０ｂ４に割り当てられた複数の行列要素それぞれの演算方式を判定する。
ステップＳＴ５において、第１演算処理部５ａ１〜５ａ４，５ｂ１〜５ｂ４または第２演算処理部６ａ１〜６ａ４，６ｂ１〜６ｂ４が、演算器１０ａ１〜１０ａ４，１０ｂ１〜１０ｂ４に指示して、割り当てられた複数の行列要素を共有局所記憶領域９ａ，９ｂに格納されたデータ列を参照して演算方式判定部４ａ１〜４ａ４，４ｂ１〜４ｂ４により判定された演算方式で並列に演算させる。
【００８５】
ステップＳＴ６において、行列要素回収部７ａ，７ｂのそれぞれが、演算器１０ａ１〜１０ａ４，１０ｂ１〜１０ｂ４から複数の行列要素の演算結果を回収する。行列要素回収部７ａ，７ｂのそれぞれは、割り当てられた部分行列内のまだ演算されていない行列要素がある場合（ステップＳＴ７“ＮＯ”）、まだ演算されていない行列要素の割り当てを行うよう行列要素割当部３ａ，３ｂに通知し、ステップＳＴ３に戻る。一方、割り当てられた部分行列内の全ての行列要素の演算結果を回収した場合（ステップＳＴ７“ＹＥＳ”）、部分行列の演算結果を部分行列回収部８へ通知する。
【００８６】
ステップＳＴ８において、部分行列回収部８が、行列要素回収部７ａ，７ｂから通知される部分行列の演算結果を回収する。部分行列回収部８は、インピーダンス行列内のまだ演算されていない部分行列がある場合（ステップＳＴ９“ＮＯ”）、まだ演算されていない部分行列の割り当てを行うよう部分行列割当部１に通知し、ステップＳＴ１に戻る。一方、部分行列回収部８がインピーダンス行列内の全ての部分行列の演算結果を回収した場合（ステップＳＴ９“ＹＥＳ”）、処理を終了する。
【００８７】
以上より、実施の形態１によれば、並列処理装置は、行列に含まれる複数の部分行列を１以上の演算器セットに割り当てる部分行列割当部１と、演算器セットに割り当てられた部分行列の演算に使用するデータ列を、当該演算器セット内の記憶領域に格納するデータ管理部２ａ，２ｂと、演算器セットに割り当てられた部分行列に含まれる複数の行列要素を、当該演算器セットが有する複数の演算器に割り当てる行列要素割当部３ａ，３ｂと、１以上の演算方式の中から、演算器に割り当てられた複数の行列要素それぞれの演算方式を判定する演算方式判定部４ａ１〜４ａ４，４ｂ１〜４ｂ４と、演算器に割り当てられた複数の行列要素について、記憶領域に格納されたデータ列を参照して演算方式判定部４ａ１〜４ａ４，４ｂ１〜４ｂ４により判定された演算方式で行列要素毎の演算を並列に実施させる第１演算処理部５ａ１〜５ａ４，５ｂ１〜５ｂ４および第２演算処理部６ａ１〜６ａ４，６ｂ１〜６ｂ４と、演算器から複数の行列要素の演算結果を回収し、まだ演算されていない行列要素の割り当てを行うよう行列要素割当部３ａ，３ｂに通知する行列要素回収部７ａ，７ｂと、行列要素回収部７ａ，７ｂから部分行列の演算結果を回収し、まだ演算されていない部分行列の割り当てを行うよう部分行列割当部１に通知する部分行列回収部８とを備える構成にした。これにより、行列要素間で演算内容が異なる場合、同一命令並列処理の単位に１つの行列要素を割り付けることで分岐を回避でき、同一命令処理内の分岐によるオーバヘッド分の時間を短縮することができる。また、演算器セット内にある高速だが限られたサイズの記憶領域からデータ列を参照するようにしたので、再参照に要する分の時間を短縮することができる。従って、従来に比べて、行列の演算時間を短縮することができる。
【００８８】
また、実施の形態１によれば、演算方式は、行列要素を演算する多重ループ構造を、当該多重ループ構造の演算と同じ順序でデータ列を参照する一重ループ構造に変換した方式にした。これにより、行列要素単位の多重ループに基づく境界型積分演算を同一命令並列処理で効率よく処理でき、行列の演算時間をさらに短縮することができる。
【００８９】
また、実施の形態１によれば、データ管理部２ａ，２ｂは、一重ループ構造の長さに対応するデータ位置参照テーブルを作成し、演算器は、当該データ位置参照テーブルを介して記憶領域のデータ列を参照する構成にした。これにより、多重ループから一重ループに変換した場合でもデータ列の参照順序が変更されない。
【００９０】
また、実施の形態１によれば、一重ループ構造の反復数が演算器の並列度（つまり、同一命令並列処理数）の倍数値に切り上げられているので、オーバヘッド分の時間を短縮することができる。
【００９１】
ここで、実施の形態１で説明した処理内容を記述したプログラムを実行することによって並列処理装置として機能させる場合を考える。この場合、演算器は、論理的な演算単位であるスレッド（またはプロセス）とする。
【００９２】
親機となるスレッドは、部分行列割当部１と部分行列回収部８としての機能を担う。部分行列割当部１は、親機のスレッドから子機となる１つ以上のスレッドに対して、演算領域を割り付ける処理を行う。部分行列回収部８は、子機から親機に対する処理完了の通知処理を行う。
【００９３】
子機となるスレッドは、データ管理部２ａ，２ｂ、行列要素割当部３ａ，３ｂ、演算方式判定部４ａ１〜４ａ４，４ｂ１〜４ｂ４、第１演算処理部５ａ１〜５ａ４，５ｂ１〜５ｂ４、第２演算処理部６ａ１〜６ａ４，６ｂ１〜６ｂ４、および行列要素回収部７ａ，７ｂとしての機能を担う。
【００９４】
親機と子機との間でデータ転送を要する構成にしてもよい。その場合、部分行列割当部１が、親機から子機に対して、部分行列に必要なデータ列の送信処理を行う。部分行列回収部８は、子機から送信される部分行列の演算結果の受信処理を行う。
【００９５】
このデータ転送は、例えば、親機がＣＰＵで、子機がＧＰＵまたはＭＩＣのような並列計算ボードである場合は、ＰＣＩＥ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔｓ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）バスを介して行われる。また、親機と子機が異なる計算機である場合は、ネットワークを介した通信となる。
【００９６】
図１０のフローチャートではデータ転送（ステップＳＴ１，ＳＴ２，ＳＴ８，ＳＴ９）と行列演算（ステップＳＴ３〜ＳＴ７）を順に行う構成にしたが、データ転送を要する構成とした場合には、親機と子機がデータ転送と行列演算とを非同期に行う構成にしてもよい。すなわち、親機は、部分行列回収部８によって子機から部分行列の演算結果を受信しながら、部分行列割当部１によって次の部分行列に必要なデータ列を送信する。子機は、上記の送受信と並行して、既にデータ列の受信が完了している部分行列の演算を実施する。
【００９７】
また、同一命令並列処理の能力が高いＧＰＵまたはＭＩＣを子機として用いる場合、行列要素割当部３ａ，３ｂは、部分行列の行列要素間を並列演算する際に、部分行列にスレッドの行列を割り付け、スレッド行列を構成する各スレッドが、更に同一命令並列処理によって一重ループの反復数に対応した並列数で演算するように構成してもよい。この構成の場合、データ管理部２ａ，２ｂがデータ列を格納する共有局所記憶領域として、このスレッド行列内で共有可能な共有メモリを用いてもよい。
【００９８】
実施の形態２．
上記実施の形態１では、行列要素内の積分演算に同一命令並列処理を適用した。これに対し、実施の形態２では、従来の並列処理装置による並列処理の設定方式と同様に、同一命令並列処理の単位の中に複数の行列要素を含める並列処理のまま、行列要素間の分岐に対処するように構成する。
【００９９】
実施の形態２に係る並列処理装置の構成は、上記実施の形態１と同じであるため、図１を援用して説明する。
実施の形態２において、行列要素割当部３ａ，３ｂ以降で行う並列処理の方式が、従来の並列処理と同様に、同一命令並列処理単位の中に複数の行列要素を含む（図４と同じ）形態となる。しかしながら、従来および実施の形態１の並列処理装置と実施の形態２の並列処理装置とでは、並列処理の設定方式が異なる。
【０１００】
図１１は、この発明の実施の形態２に係る並列処理装置において、演算方式判定部４ａ１〜４ａ４，４ｂ１〜４ｂ４の演算方式判定方法を説明する図である。図１１の左側に示す行列要素群１０１−１は、同一命令による並列処理単位２０１〜２０４に割り付けられた演算単位（行列要素）２１１〜２２６について、演算方式判定部４ａ１〜４ａ４，４ｂ１〜４ｂ４が演算方式を判定した後の状態になっている。図４と同様に、ハッチングされた演算単位２１１，２１９〜２２１，２２５はセグメント間が近距離であって第２演算方式と判定されており、その他の演算単位２１２〜２１８，２２２〜２２４，２２６はセグメント間が遠距離であって第１演算方式と判定されている。
【０１０１】
ここで、図１１の左側に示す行列要素群１０１−１において、ハッチングされた演算単位２１１，２１９〜２２１，２２５は、高負荷かつ高精度な第２演算方式による処理を必要としている。上記実施の形態１でも説明したように、従来の並列処理装置では、このまま演算を実施するため、同一命令による並列処理単位２０１，２０３，２０４内で分岐が生じて、非効率な演算となっていた。
【０１０２】
一方、実施の形態２に係る並列処理装置では、演算を実施する前に、演算方式判定部４ａ１〜４ａ４，４ｂ１〜４ｂ４が演算方式を判定し、同一命令並列処理単位に異なる演算方式の演算単位が含まれる場合に、同一命令並列処理単位に割り付けられたすべての演算単位に対する演算を、高負荷ではあるが高精度な第２演算方式で統一するように、判定結果を訂正する。判定結果を訂正した行列要素群１０１−１ａを、図１１の右側に示す。訂正した演算単位の符号に「ａ」を付加してある。
【０１０３】
図１１において、同一命令による並列処理単位２０１には、近距離用の高負荷かつ高精度の第２演算方式を必要とする演算単位２１１が含まれている。従来の並列処理装置では、残る演算単位２１２〜２１４が、遠距離用に演算負荷を緩和した第１演算方式で演算される。一方、実施の形態２に係る並列処理装置では、残る演算単位２１２ａ〜２１４ａも演算単位２１１と同じく、近距離用の高負荷かつ高精度の第２演算方式で演算される。これにより、同一命令による並列処理単位から分岐が排除されるため、従来に比べて、高効率な並列処理が実現し、より短時間でインピーダンス行列Ｚが得られる効果を奏する。
【０１０４】
以上より、実施の形態２によれば、演算方式判定部４ａ１〜４ａ４，４ｂ１〜４ｂ４は、演算器に割り当てられた複数の行列要素が異なる演算方式を用いる判定結果になった場合に、同一の演算方式を用いるように当該判定結果を訂正する構成にした。これにより、同一命令並列処理の単位から分岐が排除されるため、従来に比べて、高効率な並列処理が実現し、行列の演算時間を短縮することができる。
【０１０５】
なお、本発明はその発明の範囲内において、各実施の形態の自由な組み合わせ、各実施の形態の任意の構成要素の変形、または各実施の形態の任意の構成要素の省略が可能である。
【符号の説明】
【０１０６】
１  部分行列割当部、  ２ａ，２ｂ  データ管理部、３ａ，３ｂ  行列要素割当部、４ａ１〜４ａ４，４ｂ１〜４ｂ４  演算方式判定部、５ａ１〜５ａ４，５ｂ１〜５ｂ４  第１演算処理部、６ａ１〜６ａ４，６ｂ１〜６ｂ４  第２演算処理部、７ａ，７ｂ  行列要素回収部、８  部分行列回収部、９ａ  共有局所記憶領域、１０ａ１〜１０ａ４  演算器。
【図１】
2016095764.tif 000030
【図２】
2016095764.tif 000031
【図３】
2016095764.tif 000032
【図４】
2016095764.tif 000033
【図５】
2016095764.tif 000034
【図６】
2016095764.tif 000035
【図７】
2016095764.tif 000036
【図８Ａ】
2016095764.tif 000037
【図８Ｂ】
2016095764.tif 000038
【図９】
2016095764.tif 000039
【図１０】
2016095764.tif 000040
【図１１】
2016095764.tif 000041