JP6601222B2 - 行列演算プログラム、行列分割方法、及び並列処理装置 - Google Patents

行列演算プログラム、行列分割方法、及び並列処理装置 Download PDF

Info

Publication number
JP6601222B2
JP6601222B2 JP2016000151A JP2016000151A JP6601222B2 JP 6601222 B2 JP6601222 B2 JP 6601222B2 JP 2016000151 A JP2016000151 A JP 2016000151A JP 2016000151 A JP2016000151 A JP 2016000151A JP 6601222 B2 JP6601222 B2 JP 6601222B2
Authority
JP
Japan
Prior art keywords
row
matrix
sparse matrix
rows
processing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2016000151A
Other languages
English (en)
Other versions
JP2017122950A (ja
Inventor
香壱 清水
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2016000151A priority Critical patent/JP6601222B2/ja
Priority to US15/372,921 priority patent/US20170192818A1/en
Publication of JP2017122950A publication Critical patent/JP2017122950A/ja
Application granted granted Critical
Publication of JP6601222B2 publication Critical patent/JP6601222B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Complex Calculations (AREA)

Description

本発明は、行列演算プログラム、行列分割方法、及び並列処理装置に関する。
構造物の設計や電子回路の設計などを行う際には、構造解析、流体解析、電磁場解析などの解析手法に基づく数値シミュレーションが利用される。解析対象の物理法則を規定する方程式の多くは連続的な物理量を扱う偏微分方程式で表現される。そのため、数値シミュレーションの際、偏微分方程式の求解問題は、有限要素法(FEM:Finite Element Method)などの離散化手法を用いて行列方程式の求解問題に置き換えられる。
上述した行列方程式の係数行列は、次元が大きく、行列成分のほとんどがゼロとなる大型の疎行列となる。そのため、演算負荷及び使用メモリ量を低減するために、行列方程式の解を修正しながら繰り返し計算によって正しい解を求める反復法が利用される。反復法としては、例えば、CG(Conjugate Gradient)法、BiCG(Bi-Conjugate Gradient)法、CR(Conjugate Residual)法、CGS(Conjugate Gradient Squared)法、ICCG(Incomplete Cholesky Conjugate Gradient)法などがある。
なお、有限要素法や反復法を利用して磁場解析や構造解析を高速に実行する方法が開示されている。また、連立一次方程式の解法に関し、直接法の1つであるコレスキー法と反復法の1つであるICCG法とを組み合わせて用いる方法が開示されている。この方法では、剛性マトリクスに含まれる非ゼロ成分の数がコンピュータのメモリに収まる範囲内かどうかに応じてコレスキー法とICCG法とを使い分けている。
特開2010−122850号公報 特開2005−207900号公報 特開平5−73527号公報 特開2012−204835号公報
反復法を利用する場合、係数行列を複数の行群(行の集合)に分け、行群毎にプロセス(演算処理の実行単位)を割り当てて複数のプロセスを並列に実行することができる。係数行列が対角成分とその周辺だけに非ゼロ成分を持つバンドマトリクスの場合、プロセス間における処理負荷の偏りは小さい。一方、他の行に比べて非ゼロ成分の数が突出して多い行を含む係数行列の場合、非ゼロ成分の多い行に割り当てられたプロセスの処理が律速となり、並列処理全体の速度低下をもたらす。
例えば、導体の一部に電圧を印加して導体に流れる電流に起因して発生する磁場を有限要素法及び反復法を用いて解析する場合、各有限要素におけるベクトルポテンシャルの成分及び電流の成分が未知数となる。ベクトルポテンシャルの成分に対応する係数行列の領域は有限要素間の接続関係で規定できるため、対角成分とその周辺が非ゼロとなる。
他方、電流の成分に対応する係数は多くの有限要素において非ゼロとなるため、電流の成分に対応する行列要素の各行は多くの非ゼロ成分を含むことになる。構造解析の場合は、拘束条件を付加した場合に非ゼロ成分を多く含む行が現われる。
並列処理の場合、あるプロセスの実行結果が他のプロセスで利用される。そのため、処理が遅延しているプロセスがあると、他のプロセスに処理結果がわたらずに処理が遅延する。つまり、処理が遅延しているプロセスが律速となり全体の処理速度が低下する。並列に実行できるプロセスの数(並列数)が増えるにつれて処理能力がリニアに増加するのが理想的である。しかし、律速が生じるような条件下では、ある並列数を超えると並列数が増加しても処理性能がほとんど向上しなくなる。
1つの側面によれば、本開示の目的は、並列処理のスケーラビリティを向上させることが可能な行列演算プログラム、行列分割方法、及び並列処理装置を提供することにある。
一態様によれば、係数行列として疎行列を含む行列方程式の演算に関する処理を実行するコンピュータが、記憶部から、疎行列の各行に含まれる非ゼロ成分の多さを判定するための閾値を取得し、疎行列の中で閾値より非ゼロ成分の数が大きい第1の行を特定し、当該第1の行を複数の第2の行に分割して疎行列を拡大し、拡大した疎行列を複数の行群に分けて、処理の実行単位となるプロセスを行群毎に割り当てる行列分割方法が提供される。
並列処理のスケーラビリティを向上させることが可能になる。
第1実施形態に係る並列処理装置の一例を示した図である。 第2実施形態に係るハードウェア(単一装置)の一例を示した図である。 第2実施形態に係るハードウェア(複数装置)の一例を示した図である。 第2実施形態に係る情報処理装置が有する機能の一例を示したブロック図である。 行列方程式の構造及びICCG法の擬似コードを示した図である。 行列方程式の構造及び並列ICCG法の擬似コードを示した図である。 第2実施形態に係る行列拡張方法の一例を示した図である。 第2実施形態に係る領域分割方法の一例を示した図である。 第2実施形態に係る並列ICCG法の擬似コードを示した図である。 第2実施形態に係る情報処理装置による処理の流れを示した第1の図である。 第2実施形態に係る情報処理装置による処理の流れを示した第2の図である。 第2実施形態に係る行列情報のデータ構造を示した図である。 第2実施形態に係る通信用情報のデータ構造を示した図である。 第2実施形態の一応用例に係る係数行列(節点の接続関係)の作成方法を示した図である。 第2実施形態の一応用例に係る係数行列(電流未知数を追加)の作成方法を示した図である。 第2実施形態の一応用例に係る行列拡張方法及び領域分割方法の一例を示した図である。 第2実施形態の一応用例に係る行列情報の設定例を示した図である。 第2実施形態の一応用例に係る列ベクトルの非ゼロパターンを示した図である。 第2実施形態の一応用例に係るCPU間のデータコピーについて説明するための図である。 第2実施形態の一応用例に係る通信用情報の設定例を示した図である。 第2実施形態に係る関数Shareのプログラムコード例を示した図である。 第2実施形態に係る行列ベクトル積の結果代入コード及び関数Reduce_sumのプログラムコード例を示した図である。 第2実施形態に係る技術を適用した場合の並列スケーラビリティに関する評価結果を示した図である。 第2実施形態に係る関数DistCoilPaのプログラムコード例を示した図である。 第2実施形態に係る関数DistCoilPaの出力に基づく割当自由度の算出例を示した図である。
以下に添付図面を参照しながら、本発明の実施形態について説明する。なお、本明細書及び図面において実質的に同一の機能を有する要素については、同一の符号を付することにより重複説明を省略する場合がある。
<1.第1実施形態>
図1を参照しながら、第1実施形態について説明する。図1は、第1実施形態に係る並列処理装置の一例を示した図である。なお、図1に示した並列処理装置10は、第1実施形態に係る並列処理装置の一例である。
第1実施形態は、係数行列が疎行列になる行列方程式の求解問題を解く方法に関し、それぞれが演算の実行単位となる複数のプロセスを係数行列の部分領域に割り当てて並列に実行することで効率的に問題を処理する並列処理方法を提供する。
係数行列に含まれる非ゼロ成分のパターン(非ゼロパターン)によっては、ある一定の並列数を超えると、並列数を増加させても処理速度が向上しない状況になりうる。つまり、並列処理のスケーラビリティが低くなる非ゼロパターンが存在する。第1実施形態は、このような非ゼロパターンを有する係数行列を扱う場合であっても並列処理のスケーラビリティを向上できるようにする技術を提供する。
図1に示すように、並列処理装置10は、記憶部11及び演算部12A、…、12Fを有する。なお、説明の都合上、演算部の数を6個(演算部12A、…、12F)としているが、演算部の数は2以上の任意の数でよい。また、並列処理装置10は1つのコンピュータ又は1つの筐体に含まれるコンピュータの集合であってもよいし、複数のコンピュータを通信回線で接続した分散処理システムであってもよい。
記憶部11は、RAM(Random Access Memory)などの揮発性記憶装置、或いは、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性記憶装置である。演算部12A、…、12Fは、CPU(Central Processing Unit)やDSP(Digital Signal Processor)などのプロセッサである。また、演算部12A、…、12Fの一部は、GPGPU(General-Purpose computing on Graphics Processing Units)などのプロセッサであってもよい。演算部12A、…、12Fは、記憶部11又は他のメモリに記憶されたプログラムを実行する。
演算部12A、…、12Fは、複数のプロセスを並列に実行することができる。ここで言うプロセスは演算処理の実行単位である。例えば、演算部12A、…、12Fは、プロセスP1、…、P6を並列に実行可能である。図1の例は、係数行列Aを含む行列方程式の演算に関する処理を並列処理装置10で実行する様子を示している。係数行列Aは、非ゼロ成分が少なく、多くのゼロ成分を含む疎行列である(図1(B)参照)。
図1(A)に例示した有限要素モデルを考える場合、節点番号21〜32が付与された節点の接続関係に基づく非ゼロパターンは、図1(B)の係数行列Aのうち最下行及び最右列以外の領域に示した非ゼロ成分の配置パターンとなる。
例えば、構造解析の場合、各節点に変位ベクトルや内力ベクトルが割り当てられ、節点毎に未知数が設定される。この設定により、節点を基準に構造物(連続体)を離散化することで、偏微分方程式で与えられる物理量の振る舞いが離散的な行列方程式で記述される。偏微分方程式を解く際に境界条件を設定するように、行列方程式を解く際にも拘束条件(一部の節点に設定した物理量を既知数に設定する条件)が追加される。
上記の拘束条件は、係数行列Aに非ゼロ成分を多く含む行及び列を与える(図1(B)の係数行列Aのうち最下行及び最右列を参照)。そのため、図1(B)に例示した非ゼロパターンの係数行列Aを複数の行群に分け、各行群にプロセスを割り当てた場合、担当する非ゼロ成分の数(処理負荷に相当)が他のプロセスに比べて大幅に多くなるプロセスが生じうる。プロセスの数を増やし、係数行列Aの分割数を増加させた場合、処理負荷の偏りが拡大する。このような状況は構造解析に限らず、電磁場解析などでも生じうる。
上記のような処理負荷の偏りを是正するため、並列処理装置10は、係数行列Aの中で非ゼロ成分が多い行を分割する。そのため、記憶部11には、疎行列の各行に含まれる非ゼロ成分の多さを判定するための閾値THが格納されている。閾値THは、例えば、係数行列Aの行数や、対角成分及びその周辺に存在する非ゼロ成分(バンド領域)がなすバンドの幅などに基づいて予め設定される。
例えば、演算部12Aは、疎行列(係数行列A)の中で閾値THより非ゼロ成分の数が大きい第1の行Jを特定する。また、演算部12Aは、図1(C)に示すように、第1の行Jを複数の第2の行J1、J2に分割して疎行列を拡大する。図1(C)の例では、最下行及び最右列がそれぞれ1つずつ拡大されている。演算部12Aは、拡大した疎行列(係数行列A)を行群G1、…、G6に分けて、行群毎にプロセスを割り当てる。
図1(C)の例では、行群G1、…、G6にそれぞれプロセスP1、…、P6が割り当てられている。演算部12A、…、12Fは、行群G1、…、G6に割り当てられたプロセスP1、…、P6を並列に実行する。例えば、演算部12A、…、12Fは、それぞれプロセスP1、…、P6(行群G1、…、G6に対応する演算処理)を実行する。
行列方程式の解法には、例えば、ICCG法などの反復法がある。ICCG法を適用する場合であれば、演算部12A、…、12Fは、それぞれ行群G1、…、G6に対応する行列ベクトル積(行列とベクトルとの積)などの演算処理を実行する。
上記のように、非ゼロ成分が多い行を分割し、非ゼロ成分の数に応じて係数行列Aを複数の行群に分けることで、各行群に割り当てられるプロセスの処理負荷をほぼ均等にすることが可能になる。その結果、一部のプロセスが実行する処理が相対的に遅いことで、他のプロセスの処理が滞るリスクが低減される。その結果、処理負荷の偏りに起因するスケーラビリティの制限を抑圧することが可能になる。
以上、第1実施形態について説明した。
<2.第2実施形態>
次に、第2実施形態について説明する。第2実施形態は、係数行列が疎行列になる行列方程式の求解問題を解く方法に関し、それぞれが演算の実行単位となる複数のプロセスを係数行列の部分領域に割り当てて並列に実行することで効率的に問題を処理する並列処理方法を提供する。この並列処理方法は、係数行列を適切に分割してプロセス間における処理負荷の偏りを抑制し、並列処理のスケーラビリティを向上させる技術を提供する。
[2−1.ハードウェア]
図2及び図3を参照しながら、第2実施形態に係る並列処理方法を実現することが可能な情報処理装置のハードウェアについて説明する。なお、図2に示した情報処理装置100及び図3に示した情報処理装置100a、…、100fは、第2実施形態に係る並列処理方法を実現することが可能な情報処理装置の一例である。
図2は、第2実施形態に係るハードウェア(単一装置)の一例を示した図である。
情報処理装置100は、CPU群101、メモリ102、通信インターフェース103、表示インターフェース104、及び機器インターフェース105を有する。CPU群101は、CPU101a、101b、…、101fを含む。CPU101a、101b、…、101f、メモリ102、通信インターフェース103、表示インターフェース104、及び機器インターフェース105はバス106を解して接続されている。CPU群101に含まれるCPUの数は2以上の任意の数でよい。
CPU101a、101b、…、101fは、例えば、演算装置又は制御装置として機能し、メモリ102に記録された各種プログラムに基づいてハードウェア要素の動作全般又はその一部を制御する。CPU101a、101b、…、101fは、それぞれ複数のプロセッサコアを有していてもよい。なお、CPU群101には、GPGPUが含まれていてもよい。
メモリ102は、CPU101a、101b、…、101fに読み込まれるプログラムや演算に用いられるデータ、そのプログラムを実行する際に変化する各種パラメータなどを一時的又は永続的に保持する記憶装置の一例である。メモリ102は、例えば、RAMなどの揮発性記憶装置、或いは、HDDやフラッシュメモリなどの不揮発性記憶装置である。
通信インターフェース103は、ネットワーク201に接続するための通信デバイスである。通信インターフェース103は、例えば、有線又は無線LAN(Local Area Network)用の通信回路や光通信用の通信回路である。ネットワーク201は、有線又は無線により接続されたネットワークであり、例えば、インターネットやLANなどである。
表示インターフェース104は、表示装置202に接続するための接続デバイスである。表示装置202は、例えば、CRT(Cathode Ray Tube)、LCD(Liquid Crystal Display)、PDP(Plasma Display Panel)、又はELD(Electro-Luminescence Display)などである。
機器インターフェース105は、入力装置203などの外部機器を接続するための接続デバイスである。機器インターフェース105は、例えば、USB(Universal Serial Bus)ポート、IEEE1394ポート、SCSI(Small Computer System Interface)、RS−232Cポートなどである。機器インターフェース105には、着脱可能な記録媒体であるリムーバブル記録媒体(非図示)やプリンタなどの外部機器が接続されうる。リムーバブル記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、又は半導体メモリなどがある。
図2のように複数のCPUが搭載された単一の情報処理装置100を利用して第2実施形態に係る演算方法を実現することもできるが、図3に示すような分散処理システムに第2実施形態の技術を適用することもできる。図3は、第2実施形態に係るハードウェア(複数装置)の一例を示した図である。図3の例では、CPU101a、101b、…、101fがそれぞれ情報処理装置100a、100b、…、100fに搭載されている。そして、情報処理装置100a、100b、…、100fは通信回線で接続されている。
メモリ102a、102b、…、102fは、上述したメモリ102と同じである。通信インターフェース103a、103b、…、103fは、上述した通信インターフェース103と同じである。説明の都合上、情報処理装置100a、100b、…、100fでは表示インターフェース104及び機器インターフェース105に相当する要素の記載が省略されている。情報処理装置100a、100b、…、100fは、相互に演算結果を送受信しながらCPU101a、101b、…、101fに分散した演算処理を実行することができる分散処理システムとして動作しうる。
図2に示した情報処理装置100又は図3に示した分散処理システムのハードウェアを利用することで、第2実施形態に係る演算方法を実現することができる。なお、図2及び図3に示したハードウェアは一例である。例えば、複数のGPGPUや複数のCPUコアを並列に動作させて複数のプロセスを並列実行するシステムに第2実施形態に係る技術を適用することもできる。以下では、説明の都合上、図2に示した情報処理装置100を利用する例について説明する。
以上、ハードウェアについて説明した。
[2−2.機能]
次に、図4を参照しながら、情報処理装置100の機能について説明する。図4は、第2実施形態に係る情報処理装置が有する機能の一例を示したブロック図である。
図4に示すように、情報処理装置100は、記憶部111、行列拡張部112、プロセス割当部113、及び並列計算部114を有する。
記憶部111の機能は、例えば、メモリ102を利用して実現できる。行列拡張部112及びプロセス割当部113の機能は、例えば、CPU101aの機能を利用して実現できる。並列計算部114の機能は、例えば、CPU群101に含まれる複数のCPU(例えば、CPU101a、…、101fの一部又は全部)を利用して実現できる。
記憶部111には、係数行列111a及び閾値111bが格納される。係数行列111aは、演算処理の対象となる行列方程式に含まれる係数行列である。例えば、ベクトルb、x、及び係数行列Aを含む行列方程式「Ax=b」を解く場合、係数行列Aの情報が記憶部111に格納される。この場合、記憶部111には、ベクトルb(右辺ベクトル)の情報も格納される。
閾値111bは、係数行列111aの各行における非ゼロ数(非ゼロ成分の数)の多さを判断するための閾値である。この閾値は、例えば、係数行列Aのサイズや情報処理装置100が並列に実行するプロセス(演算処理の実行単位)の数などに応じて設定される。
行列拡張部112は、係数行列Aの各行に含まれる非ゼロ成分の数(非ゼロ数)を計数し、非ゼロ数が上記の閾値より大きい行を特定する。そして、行列拡張部112は、特定した行をそれぞれ複数の行に分割して係数行列Aを拡張する。つまり、行列拡張部112は、非ゼロ数が多い行を非ゼロ数が少ない複数の行に分割する。
プロセス割当部113は、情報処理装置100が並列に実行するプロセスの数に応じて、行列拡張部112が拡張した係数行列Aを複数の行群に分割する。なお、行群とは、1つ又は複数の行を含む行の集合である。そして、プロセス割当部113は、各行群にプロセスを割り当てる。並列計算部114は、各行群に割り当てられたプロセスをCPU群101に含まれる複数のCPU(CPU101a、…、101fの一部又は全部)に実行させる。
(適用例)
ここで、図5〜図9を参照しながら、ICCG法に基づく行列方程式の計算アルゴリズムに第2実施形態の技術を適用する方法について説明する。なお、ICCG法は一例であり、第2実施形態に係る技術は、ICCG法以外の反復法に基づく行列方程式の求解問題にも適用可能である。
図5は、行列方程式の構造及びICCG法の擬似コードを示した図である。図6は、行列方程式の構造及び並列ICCG法の擬似コードを示した図である。図7は、第2実施形態に係る行列拡張方法の一例を示した図である。図8は、第2実施形態に係る領域分割方法の一例を示した図である。図9は、第2実施形態に係る並列ICCG法の擬似コードを示した図である。
まず、ICCG法とは、CG法に不完全コレスキー(IC:Incomplete Cholesky)分解と呼ばれる前処理を組み合わせた演算手法である。例えば、行列Aが対象行列の場合、下記の式(1)に示すように、対角行列D及び非対角行列Lを用いて行列Aを分解することができる。このとき、対角行列D及び非対角行列Lは下記の式(2)及び式(3)で与えられる。
Figure 0006601222
IC分解は、「非対角行列Lに含まれる非ゼロ成分の配置パターン(非ゼロパターン)が行列Aの非ゼロパターンと同じである」という制約の下で行列C(C=LDL≒A)を計算する手法である。なお、上付きのTは転置を表す。このような制限を設ける利点は、非対角行列Lの値を格納する配列のサイズを予め確定できる点にある。また、ICCG法は、係数行列Aが図5(A)に示すような疎行列の場合に演算負荷や使用メモリ量を低減できる利点がある。
ベクトルb、x、及び係数行列Aを含む行列方程式「Ax=b」を解くICCG法の疑似コードは、例えば、図5(B)のようになる。なお、A、Cは行列である。kなどのインデックスが付されたb、r、x、z、p、qはベクトルである。kなどのインデックスが付されたρ、ε、α、βはスカラーである。kは整数である。(・,・)はベクトルの内積を表す。Sqrt(・)は平方根を表す。|・|はベクトルの大きさを表すノルムである。なお、疑似コードの左端に表示された01などの数字は行番号である。
図5(B)の疑似コードを実行することでベクトルxの解(近似解)を得ることができる。この疑似コードの中で、7行目にある「qk=Apk」の演算は、右辺に行列Aとベクトルpkとの積(行列ベクトル積)を含む。このような行列ベクトル積の演算は演算負荷が高い。そのため、行列ベクトル積の演算をいかに効率良く実行できるかが、処理負荷の低減及び処理時間の短縮に影響する。
そこで、図6(A)に示すように、係数行列Aを複数の部分領域(例えば、{A(1)}、{A(2)})に分割し、各部分領域の処理を異なるCPUに割り当てて並列に処理を実行する方法(並列ICCG法)が用いられる。なお、IC分解を適用する場合、図6(A)の鎖線で囲まれたブロック領域({A(IC1)}、{A(IC2)})にある非ゼロ成分が処理に利用される。
並列ICCG法の疑似コードは図6(B)のようになる。この疑似コードの7行目には、関数Share(・)の処理が含まれている。関数Share(・)は、ある部分領域の処理を担当するCPUが、自己の演算結果の一部を他のCPUに送り、他のCPUの演算結果のうち、自己の演算に用いる演算結果を受け取る処理を表す。
つまり、関数Share(・)は、並列に処理を実行する複数のCPUが、それぞれ処理に利用するデータ(演算結果)を共有する処理を表現したものである。例えば、図6(B)の疑似コードには、9行目、13行目、16行目に内積の演算を含む。これらの内積の演算には、他のCPUが計算したデータが用いられる。そのため、MPI(Message Passing Interface)関数を利用してデータをやり取りする処理が挿入される。なお、関数Share(・)のプログラムコード例は後に示す。
図6(A)に例示した係数行列Aは、対角成分及びその周辺に非ゼロ成分を有するバンドマトリクスといえる。この場合、係数行列Aを同程度の非ゼロ成分を含む複数の行群(図6の例では2つの行群)に分けることで負荷の分散を図ることができる。しかし、図7に示すように、他の行と比べて非ゼロ数が大幅に大きい行(図7(A)の例では最下行)が係数行列Aに含まれる場合、図6(B)の疑似コードをそのまま適用すると、負荷が十分に分散されないことがある。
図7(A)に示した係数行列Aの右側に(3)、(3)、…、(11)という数字が並んでいるが、これらの数字は、対応する行の非ゼロ数である。例えば、係数行列Aを3個の行群に分ける場合、各行群に含まれる非ゼロ成分の数をほぼ同程度に調整することは可能である。そのため、3つのCPUに同程度の処理を分担させることが可能になり、並列数(この場合は3)に見合った処理性能の向上が期待できる。
一方、全行数が13行の係数行列Aを10個の行群に分ける場合、行群の集合は、非ゼロ成分が11(又は11以上)の行群と、非ゼロ数が5程度の行群とを含むことになる。既に述べたように、ある行群を担当するCPUの演算に、他の行群を担当するCPUの演算結果が利用される。そのため、非ゼロ数が大きい行群を担当するCPUの演算結果を、非ゼロ数が小さい行群を担当するCPUが待つことになる。つまり、並列数(この場合は10)に見合った処理性能の向上が得られないリスクが高い。
そのため、第2実施形態では、行列拡張部112が、非ゼロ数が閾値S(例えば、S=7)より大きい行(ラージ行)を特定し、図7(B)に示すように、非ゼロ数が小さい複数の行に分割する。このとき、行列拡張部112は、分割後の係数行列Aが対称行列となるように列(図7(B)の例では最右列)も分割する。
また、行列拡張部112は、ラージ行に対応するベクトル{p}{q}を拡張する。例えば、ラージ行に対応するベクトル{q}の要素がQである場合、分割後の行に対応する要素をそれぞれQ1、Q2とする。但し、「Q=Q1+Q2」である。ラージ行に対応するベクトル{p}の要素がPの場合、分割後の行に対応する要素の値は非ゼロ成分の配置に依存する。図7(B)の例では、係数行列Aの右下端にある非ゼロ成分を分割後の下行右端に割り当てている。この場合、ベクトル{p}の最下段にある要素がPとなり、その上段が0となる。
上記のように係数行列Aを拡張することで、図8(A)に示すように、非ゼロ数のバランスを考慮して係数行列Aを複数の行群に分割することが可能になる。図8(A)の例では、係数行列Aが行群G1、…、G6に分割されている。なお、ICCG法を適用する場合、プロセス割当部113は、演算に用いる非ゼロ成分の範囲(鎖線で囲った範囲)を考慮し、その範囲に含まれる非ゼロ数を考慮して行群のサイズを決める。そして、プロセス割当部113は、各行群を異なるプロセスに割り当てる。図8(B)の例では、行群G1、…、G6が実行プロセスPa、…、Pfに割り当てられている。
図7(B)に示した係数行列Aの拡張(行列拡張)に関する処理を考慮した並列ICCG法の疑似コードは図9のようになる。係数行列Aを拡張した場合、上記のように、ラージ行に対応するベクトル{q}の要素Qも分割されるため、分割された要素(上記の例ではQ1、Q2)の和を計算する処理が追加される。図9に示した疑似コードでは、9行目に追加された関数Reduce_sum(・)が、要素の和を計算する処理を担う。
但し、cは係数行列Aに含まれるラージ行の数、Nkcは並列数(並列実行するプロセスの数)、Q(k,m)はk番目のラージ行に対応するベクトル{q}の要素を分割して得たm番目の分割要素を表す。例えば、図7(B)の例ではcが1であり、Q1はQ(1,1)に対応し、Q2はQ(1,2)に対応する。図8の例ではNkcが6となる。
以上、情報処理装置100の機能について説明した。
[2−3.処理の流れ]
次に、図10及び図11を参照しながら、ベクトルb、x及び係数行列Aを含む行列方程式「Ax=b」を解く際の情報処理装置100による処理の流れについて説明する。図10は、第2実施形態に係る情報処理装置による処理の流れを示した第1の図である。図11は、第2実施形態に係る情報処理装置による処理の流れを示した第2の図である。
(S101)行列拡張部112は、並列数N、閾値S、係数行列A、右辺ベクトルb、非ゼロ成分の総数nallを取得する。並列数Nは、並列処理に用いるプロセスの数(1つのCPUに1つのプロセスを割り当てる場合にはCPUの数)である。閾値Sは、係数行列Aのサイズなどに応じて予め設定されている。非ゼロ成分の総数nallは、係数行列Aに含まれる非ゼロ成分の総数である。
(S102、S107)行列拡張部112は、パラメータkを1からndまで変化させながら、S103からS106までの処理を繰り返し実行する。ndは、係数行列Aの全行数である。
(S103)行列拡張部112は、係数行列Aのk行目に位置する非ゼロ成分の数nkをカウントする。
(S104)行列拡張部112は、S103でカウントした非ゼロ成分の数nkが閾値Sより大きいか否かを判定する。非ゼロ成分の数nkが閾値Sより大きい場合、処理はS105へと進む。一方、非ゼロ成分の数nkが閾値Sより大きくない場合、処理はS107へと進み、パラメータkがnd以下の場合にはS102以降の処理が実行される。
(S105)行列拡張部112は、k行目の行をラージ行に設定する。ラージ行は、非ゼロ成分を多く含む行として分割の対象になる行である。
(S106)行列拡張部112は、パラメータncにnkを加算する。パラメータncは、係数行列Aのラージ行に含まれる非ゼロ成分の総数をカウントするためのパラメータである。S106の処理が完了すると、処理はS107へと進み、パラメータkがnd以下の場合にはS102以降の処理が実行される。
(S108)行列拡張部112は、ラージ行の分割数Ncを計算する。ラージ行の分割数Ncは、係数行列Aに含まれるラージ行の領域をいくつの行群に分割するかを示すパラメータである。
例えば、図7に示すようにラージ行(図7の例では最下行)が1つの場合、ラージ行の分割数Ncは、下記の式(5)で与えられる。naは、nallからncを引いた数である。関数FLOOR(・)は、浮動小数を整数に変換する関数であり、関数に渡された値の小数点以下を切り捨てた整数を返す。
下記の式(5)は、下記の式(4)の関係式に基づいている。つまり、ラージ行の非ゼロ成分をNc個のグループに分けた場合の非ゼロ数と、ラージ行以外の領域に含まれる非ゼロ成分を(N−Nc)個のグループに分けた場合の非ゼロ数とが同等になるようにNcが決められる。このような方法でNcを決めることで、係数行列Aを分割して得られる複数の行群について非ゼロ数の偏りを抑制することができる。
Figure 0006601222
なお、ラージ行が複数の場合にNcを決める方法については後述する。
(S109)行列拡張部112は、係数行列Aに含まれるラージ行の領域をNc個の行群に分割する(行列拡張)。例えば、ラージ行が1つの場合、行列拡張部112は、図7に示すような方法で係数行列Aのラージ行をNc個の行群に分割する(図7の例では、1つのラージ行が、それぞれ1つの行を含む2個の行群に分割されている)。また、行列拡張部112は、係数行列Aが対象行列となるように係数行列Aの列を拡張すると共に、係数行列Aの行列ベクトル積に含まれるベクトル{p}及び行列ベクトル積を格納するベクトル{q}を拡張する(図7を参照)。
(S110)プロセス割当部113は、ラージ行を除く係数行列Aの領域を(N−Nc)個の行群に分割する(領域分割)。例えば、図8の例では、ラージ行を除く係数行列Aの領域が行群G1、…、G4に分割されている。
(S111)プロセス割当部113は、S109でラージ行を分割して得た各行にプロセスを割り当てると共に、S110の領域分割で得た各行群にプロセスを割り当てる。
このとき、プロセス割当部113は、図12に示すようなデータ構造を有する行列情報を生成する。図12は、第2実施形態に係る行列情報のデータ構造を示した図である。図12に示すように、行列情報には、行のサイズ、非ゼロ成分の数、行の先頭番号、各行の配列先頭番号の配列、列番号の配列、係数の配列を示すパラメータの情報が格納される。
行列情報は、並列実行される各プロセスの担当CPUに渡される。そのため、プロセス毎に行列情報が生成される。行のサイズは、担当プロセスが処理する行のサイズ(行群をなす行の数)を表す。非ゼロ成分の数は、担当プロセスが処理する行群に含まれる非ゼロ成分の数を表す。行の先頭番号は、担当プロセスが処理する行群の先頭が係数行列Aの何行目に位置するかを表す。
各行の配列先頭番号の配列は、係数の配列の中で担当プロセスが処理する各行の非ゼロ成分のデータが格納されている場所の先頭位置を表す配列である。列番号の配列は、係数の配列の中で担当プロセスが処理する各行に対応して、非ゼロ成分のデータが格納されている列の位置を表す配列である。係数の配列は、担当プロセスが処理する係数行列Aの非ゼロ成分が格納される配列である。このような行列情報を各プロセスに配分することで、非ゼロ成分のデータを効率的に受け渡すことができ、メモリ使用量の節約に寄与する。
(S112)プロセス割当部113は、プロセスの割り当て内容に応じて、複数のプロセスを並列実行するために用いる通信用情報を生成する。S111でプロセスの割り当て内容が決定すると、どのCPUがどの行群の処理を担当するのかが決まる。そして、各CPUが演算処理を進めるために、各CPUがどのCPUから演算結果を取得するか、どのCPUに自己の演算結果を提供するかが特定される。通信用情報は、このようなCPU間における演算結果の送受信を可能にするための情報である。
例えば、プロセス割当部113は、図13に示すようなデータ構造を有する通信用情報を生成する。図13は、第2実施形態に係る通信用情報のデータ構造を示した図である。図13に示すように、通信用情報には、送信時に用いる情報として、送信する値の数、送信先のCPU数、送信先のCPU番号、送信する値の配列先頭番号、送信する値の配列番号、送信する値の配列が含まれる。また、通信用情報には、受信時に用いる情報として、受信する値の数、受信先のCPU数、受信先のCPU番号、受信する値の配列先頭番号、受信する値の配列番号、受信する値の配列が含まれる。
(S113)並列計算部114は、S111で生成された行列情報及びS112で生成された通信用情報の送受信を実行する。このとき、S101からS112までの処理を実行したCPUが、CPU毎に対応する行列情報及び通信用情報を該当CPUに送信し、送信された行列情報及び通信用情報を該当CPUが受信する。つまり、行列情報及び通信用情報が並列処理のプロセスを担当するCPUに配信される。
(S114)並列計算部114は、複数のCPUを並列に動作させ、通信用情報に基づくCPU間の連携を維持しながら、行列情報に基づく各行群の演算処理を実行させる(未知数の計算)。S114の処理が完了すると、図10及び図11に示した一連の処理は終了する。
以上、処理の流れについて説明した。
[2−4.応用例:磁場解析]
ここで、第2実施形態の技術を磁場解析に応用する例について説明する。以下では、説明の都合上、並列計算にCPU#1、CPU#2、…、CPU#10を利用可能な場合を例に説明する。
(係数行列)
コイルから発生する磁場を記述する方程式は、ベクトルポテンシャルA、電流密度J、磁気抵抗率ν、鎖交磁束Φ、抵抗R、電流I、端子電圧V、コイルの断面積S、コイルの電流密度の単位方向ベクトルnを用いて下記の式(6)〜式(8)で与えられる。式()の左辺第1項は磁束の時間変化に起因する誘導起電力を表し、第2項は抵抗による電圧降下を表す。
Figure 0006601222
例えば、図14(A)に示すように、矩形のコイルに25個の節点を設定し、斜線部分を電流が未知数の領域、他の部分を電流が既知の領域とする有限要素モデルを考えると、節点の接続関係に基づく係数行列Aの非ゼロパターンは図14(B)のようになる。図14は、第2実施形態の一応用例に係る係数行列(節点の接続関係)の作成方法を示した図である。なお、番号(1)、(11)、(21)は、行及び列の位置を識別しやすくするために記載した行番号及び列番号であり、節点番号に対応する。
電流密度Jが固定であれば係数行列Aは図14(B)のようなバンドマトリクスとなる。一方、電流密度Jに未知数(電流未知数)を含む場合、係数行列Aの非ゼロパターンは、図15のようになる。図15に示すように、最下行及び最右列に電流未知数に対応する非ゼロ成分が追加される。図14(A)の有限要素モデルでは節点4から25の電流値が未知であるため、節点4から25に対応する成分が非ゼロとなる。図15は、第2実施形態の一応用例に係る係数行列(電流未知数を追加)の作成方法を示した図である。
(行列拡張・領域分割)
閾値Sが10の場合、電流未知数に対応する行がラージ行になる。並列数Nが10の場合、ラージ行の分割数Ncは、上記の式(4)及び式(5)に基づいて下記の式(9)及び式(10)のように計算される。下記の式(10)の結果から、ラージ行の分割数Ncは2となる。一方、ラージ行以外の行を含む領域の分割数(N−Nc)は8となる。なお、ROUND(・)は四捨五入する関数である。MOD(・)は剰余を出力する関数である。
Figure 0006601222
ラージ行を2つに分割し、残りの行を8つの行群に分割すると図16のようになる。図16は、第2実施形態の一応用例に係る行列拡張方法及び領域分割方法の一例を示した図である。行群は、各行群に含まれる非ゼロ成分の数が同数に近くなるように設定される。なお、図16の鎖線領域はIC分解における対象となる領域を示している。このようにして設定された各行群にはプロセスが割り当てられ、割当プロセスを実行するCPUが対応付けられる。図16の例ではCPU#1、CPU#2、…、CPU#10が行群G1、G2、…、G10に対応付けられている。
(通信用情報・行列情報)
図16のように係数行列Aの拡張及びプロセスの割り当てが完了すると、図17に示すような行列情報を設定することが可能になる。図17は、第2実施形態の一応用例に係る行列情報の設定例を示した図である。
図17に示すように、行列情報は、プロセスを実行するCPU毎に設定される。図17の例では、行群G1を担当するCPU#1について、行のサイズ(n_rows)が4、非ゼロ成分の数(n_nonzero)が14、行の先頭番号(n_row0)が1に設定されている。また、各行の配列先頭番号の配列(ptr_row[])、列番号の配列(col[])、係数の配列(A_mat[])が設定されている。なお、Ai#jは係数行列Aのi行j列成分を表す。CPU#2、…、CPU#10についても図16の割り当て内容に応じてパラメータが設定される。
図16の割り当て内容が決まると、各CPUが自己の演算により正しい値が得られる列ベクトル(ベクトル{p}、ベクトル{q})の成分が特定できる。例えば、図16に示した係数行列A(拡張後)の非ゼロパターンから、図18に示すような列ベクトルの非ゼロパターン(ハッチング部分)がCPU毎に特定できる。図18は、第2実施形態の一応用例に係る列ベクトルの非ゼロパターンを示した図である。
また、図16の割り当て内容から、各CPUが自己の演算で正しい値を取得できる成分(濃いハッチング部分)と、正しい値を取得できない成分(薄いハッチング部分)とが特定できる。正しい値を取得できない成分については、図19に矢印で示したように、他のCPUが演算処理によって取得した正しい値(演算結果)がコピーされる。図19は、第2実施形態の一応用例に係るCPU間のデータコピーについて説明するための図である。
図19のようにCPU間で送受信される演算結果のデータ、データの送信元及び送信先が特定できると、図20に示すような通信用情報を設定することができる。図20は、第2実施形態の一応用例に係る通信用情報の設定例を示した図である。
図20の例では、CPU#1に提供される通信用情報として、送信する値の数(n_all_send)が2、送信先のCPU数(num_cpu_send)が1、受信する値の数(n_all_recv)が3、受信先のCPU数(num_cpu_recv)が2に設定されている。また、送信先のCPU番号(n_cpu_send[])、送信する値の配列先頭番号(ptr_send[])、送信する値の配列番号(vec_num_send[])も設定される。
図19を参照すると、CPU#1は、上から3段目、4段目の値をCPU#2に送信する。そのため、送信する値の数が2、送信先のCPU数が1となる。また、CPU#1は、自己の演算処理に利用する列ベクトルの成分(非ゼロ成分)のうち、正しい値を得られない成分が5段目、6段目、26段目にある。そのため、CPU#1は、5段目、6段目の値をCPU#2から受信し、26段目の値をCPU#10から受信する。そのため、受信する値の数が3、受信先のCPU数が2となる。他のCPUについても同様である。
(プログラムコード例#1:関数Share)
上記の通信用情報を取得したCPUは、図21に示すようなプログラムコードを実行して演算結果をやり取りする。図21は、第2実施形態に係る関数Shareのプログラムコード例を示した図である。図21の例ではC言語による表現を用いている。3行目から11行目までが送信時の処理であり、14行目から22行目までが受信時の処理である。
送信時の処理では、4行目から7行目までの処理で送信する値を送信用の配列にコピーし、10行目のMPI関数を利用して配列のデータを他のCPUに送信している。受信時の処理では、17行目のMPI関数を利用して配列のデータを他のCPUから受信し、18行目から20行目までの処理で受信した値を演算処理に用いるベクトルにコピーしている。関数Share(・)によりデータが送受信される。
(プログラムコード例#2:Reduce_sum)
上述した行列拡張を行う際、係数行列Aの拡張に伴って列ベクトルも拡張される。そのとき、ラージ行に対応する行列ベクトル積が格納される列ベクトルの成分(Q)も分割されるため、その成分を元に戻す処理が演算処理の中に組み込まれる。元に戻す処理を実行する関数が関数Reduce_sumである。
関数Reduce_sumを実行するにあたり、図22(A)に示すようなプログラムコードを実行してラージ行を分割して得た各行に対応する行列ベクトル積の演算結果を配列(Q[])に代入する。そして、図22(B)に示す関数Reduce_sumのプログラムコードを実行して、その配列の合計値を計算する。図22は、第2実施形態に係る行列ベクトル積の結果代入コード及び関数Reduce_sumのプログラムコード例を示した図である。なお、図22の例ではC言語の表現を用いている。
(効果:並列処理のスケーラビリティ)
これまで説明してきた第2実施形態の技術を適用すると、図23(本手法)のように高い並列スケーラビリティを実現することができる。図23は、第2実施形態に係る技術を適用した場合の並列スケーラビリティに関する評価結果を示した図である。図23には比較のために従来手法の評価結果も示しているが、従来手法の場合、CPU数が150を超えた辺りでCPU数の増加に対する速度比の向上が停止している。一方、本手法の場合(第2実施形態の技術を適用した場合)、CPU数が250を超えてもCPU数の増加に伴う速度比の向上が見られる。このように、第2実施形態の技術を適用することで、並列スケーラビリティを向上させることが可能になる。
(補足:複数コイルの場合)
上記の応用例は、端子電圧が印加される1つのコイルから発生する磁場を解析する手法であった。ここでは説明の都合上、コイルの数を1つとしたが、例えば、芯材に複数のコイルを巻き付けたインダクタモデルなどにも応用することができる。この場合、複数のコイルに対応する複数のラージ行が係数行列Aに含まれる。そのため、ラージ行の分割数Ncの計算方法は、下記の式(11)〜式(15)のように拡張される。
コイルの数をycoil、y番目のコイルに関する自由度(総未知数)をncyとすると、全てのコイルの自由度nc#allは下記の式(11)で与えられる。また、下記の式(12)からラージ行全体の分割数Ncは下記の式(13)で与えられる。また、ラージ行毎の分割数Ncy(y番目のコイルに対応するラージ行の分割数)は、下記の式(14)で与えられる。
なお、1つのプロセスに割り当てられるコイルの平均自由度<nc>は、下記の式(15)で与えられる。ncyが<nc>に満たない場合、Ncyが0となる。この場合、複数のコイルに対応するラージ行をグループ化し、ラージ行のグループに対して少なくとも1つのプロセスが割り当てられるようにする。
例えば、プロセス割当部113は、ncyが小さい順(ncy<nc(y+1))にコイルの番号(ラージ行の順序に相当)を並べ替え、Ncyが1に満たないラージ行をグループ化する。このとき、プロセス割当部113は、グループ化したラージ行の全体で分割数が1を超えるようにラージ行の組み合わせを設定する。
Figure 0006601222
グループの識別番号をID_G、グループの分割数をPa_G、グループの自由度をDof_G、各ラージ行の分割数をPaとすると、これらの値は図24に示すプログラムコード(関数DistCoilPa(・))で計算することができる。図24は、第2実施形態に係る関数DistCoilPaのプログラムコード例を示した図である。ID_G、Pa_G、Dof_G、Paはそれぞれ配列の形で出力される。
プロセス割当部113は、各グループに対する分割数が1であればラージ行を分割しない。また、プロセス割当部113は、分割数が1より大きく、グループに属するラージ行の数が1の場合に分割数Paで分割する。また、プロセス割当部113は、分割数が1より大きく、グループに属するラージ行の数が1より大きい場合に、最後のラージ行を同じグループに追加したときに分割数が1を超えたと判断する。そして、プロセス割当部113は、同じグループに属する最後のラージ行だけを対象に分割数に応じた分割を行う。
4つのCPU#1、…、#4を5つのラージ行(5つのコイルに対応)に割り当てる例を図25に示す。図25は、第2実施形態に係る関数DistCoilPaの出力に基づく割当自由度の算出例を示した図である。図24に示した関数DistCoilPaを実行することで、Pa_G及びPaが得られる。図25の例では、5つのラージ行が2つの大きなグループ(Pa_G[0], Pa_G[1]に対応するグループ)に分けられ、それぞれ自由度に応じてCPUが割り当てられている。
なお、自由度を調整するためにCPU#1に4番目のコイルに対応する一部の自由度X4が割り当てられている。この自由度X4は、下記の式(16)により計算される。MOD(・)は剰余を求める関数である。図25のように複数のコイルに対応する複数のラージ行をグループ化し、グループ単位でプロセスを割り当てることで、複数のコイルを含むモデルに対しても柔軟に第2実施形態の技術を適用することが可能になる。
Figure 0006601222
以上、第2実施形態について説明した。
10 並列処理装置
11 記憶部
12A、…、12F 演算部
21、…、32 節点
A 係数行列
G1、…、G6 行群
J 第1の行
J1、J2 第2の行
P1、…、P6 プロセス
TH 閾値

Claims (5)

  1. 係数行列として疎行列を含む行列方程式の演算に関する処理を実行するコンピュータに、
    記憶部から、前記疎行列の各行に含まれる非ゼロ成分の多さを判定するための閾値を取得し、前記疎行列の中で前記閾値より非ゼロ成分の数が大きい第1の行を特定し、当該第1の行を複数の第2の行に分割して前記疎行列を拡大し、拡大した前記疎行列のうち、前記第2の行の集合を複数の第1の行群に分け、前記第2の行以外の第3の行の集合を複数の第2の行群に分け、前記第1の行群毎および前記第2の行群毎に、処理の実行単位となるプロセスを割り当てる
    処理を実行させる、行列演算プログラム。
  2. 係数行列として疎行列を含む行列方程式の演算に関する処理を実行するコンピュータに、
    記憶部から、前記疎行列の各行に含まれる非ゼロ成分の多さを判定するための閾値を取得し、前記疎行列の中で前記閾値より非ゼロ成分の数が大きい第1の行を特定し、当該第1の行を複数の第2の行に分割して前記疎行列を拡大し、拡大された前記疎行列の1以上の行を含む行群に含まれる非ゼロ成分の数に応じて当該行群に含める行の組み合わせを決定して、拡大した前記疎行列を複数の行群に分けて、処理の実行単位となるプロセスを行群毎に割り当てる
    処理を実行させる、行列演算プログラム。
  3. 係数行列として疎行列を含む行列方程式の演算に関する処理を実行するコンピュータに、
    記憶部から、前記疎行列の各行に含まれる非ゼロ成分の多さを判定するための閾値を取得し、前記疎行列の中で前記閾値より非ゼロ成分の数が大きい第1の行を特定し、前記第1の行に含まれる非ゼロ成分の数に応じて、前記第1の行を分割して得られる第2の行の数を決定し、決定した数の複数の前記第2の行に前記第1の行を分割して前記疎行列を拡大し、拡大した前記疎行列を複数の行群に分けて、処理の実行単位となるプロセスを行群毎に割り当てる
    処理を実行させる、行列演算プログラム。
  4. 係数行列として疎行列を含む行列方程式の演算に関する処理を実行するコンピュータが、
    記憶部から、前記疎行列の各行に含まれる非ゼロ成分の多さを判定するための閾値を取得し、前記疎行列の中で前記閾値より非ゼロ成分の数が大きい第1の行を特定し、当該第1の行を複数の第2の行に分割して前記疎行列を拡大し、拡大した前記疎行列のうち、前記第2の行の集合を複数の第1の行群に分け、前記第2の行以外の第3の行の集合を複数の第2の行群に分け、前記第1の行群毎および前記第2の行群毎に、処理の実行単位となるプロセスを割り当てる
    行列分割方法。
  5. 処理の実行単位となる複数のプロセスを並列に実行可能な複数の演算部を有し、係数行列として疎行列を含む行列方程式の演算に関する処理を実行する並列処理装置であって、
    前記疎行列の各行に含まれる非ゼロ成分の多さを判定するための閾値が格納される記憶部と、
    前記疎行列の中で前記閾値より非ゼロ成分の数が大きい第1の行を特定し、当該第1の行を複数の第2の行に分割して前記疎行列を拡大し、拡大した前記疎行列のうち、前記第2の行の集合を複数の第1の行群に分け、前記第2の行以外の第3の行の集合を複数の第2の行群に分け、前記第1の行群毎および前記第2の行群毎に、前記プロセスを割り当てる前記演算部と
    を有する、並列処理装置。
JP2016000151A 2016-01-04 2016-01-04 行列演算プログラム、行列分割方法、及び並列処理装置 Active JP6601222B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016000151A JP6601222B2 (ja) 2016-01-04 2016-01-04 行列演算プログラム、行列分割方法、及び並列処理装置
US15/372,921 US20170192818A1 (en) 2016-01-04 2016-12-08 Matrix division method and parallel processing apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016000151A JP6601222B2 (ja) 2016-01-04 2016-01-04 行列演算プログラム、行列分割方法、及び並列処理装置

Publications (2)

Publication Number Publication Date
JP2017122950A JP2017122950A (ja) 2017-07-13
JP6601222B2 true JP6601222B2 (ja) 2019-11-06

Family

ID=59226397

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016000151A Active JP6601222B2 (ja) 2016-01-04 2016-01-04 行列演算プログラム、行列分割方法、及び並列処理装置

Country Status (2)

Country Link
US (1) US20170192818A1 (ja)
JP (1) JP6601222B2 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6645509B2 (ja) * 2015-11-04 2020-02-14 富士通株式会社 構造解析方法、及び構造解析プログラム
US9934287B1 (en) * 2017-07-25 2018-04-03 Capital One Services, Llc Systems and methods for expedited large file processing
CN107704686B (zh) * 2017-10-11 2020-02-07 大连海事大学 快速分解法潮流计算修正方程系数矩阵的矩阵运算方法
CN107658880B (zh) * 2017-11-16 2019-12-03 大连海事大学 基于关联矩阵运算的快速分解法系数矩阵计算方法
CN107834562B (zh) * 2017-11-16 2019-12-03 大连海事大学 基于Matlab矩阵运算的快速分解法系数矩阵计算法
KR102192560B1 (ko) * 2017-12-07 2020-12-17 한국과학기술원 분산 컴퓨팅 행렬 희소화 방법 및 시스템
CN111240744B (zh) * 2020-01-03 2022-03-22 支付宝(杭州)信息技术有限公司 一种提高涉及稀疏矩阵并行计算效率的方法和系统
WO2021152852A1 (ja) * 2020-01-31 2021-08-05 三菱電機株式会社 制御装置、機械学習装置、および、制御方法
CN114817845B (zh) * 2022-05-20 2023-05-30 昆仑芯(北京)科技有限公司 数据处理方法、装置、电子设备及存储介质
CN115408653B (zh) * 2022-11-01 2023-03-21 泰山学院 一种IDRstab算法高可扩展并行处理方法及系统
CN115952385B (zh) * 2023-03-10 2023-05-05 山东省计算中心(国家超级计算济南中心) 用于大规模稀疏方程组求解的并行超节点排序方法及系统

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4750818A (en) * 1985-12-16 1988-06-14 Cochran Gregory M Phase conjugation method
JP3391262B2 (ja) * 1998-05-11 2003-03-31 日本電気株式会社 記号計算システム及び方法、並びに並列回路シミュレーションシステム
US7065545B2 (en) * 2002-05-07 2006-06-20 Quintero-De-La-Garza Raul Gera Computer methods of vector operation for reducing computation time
US8751556B2 (en) * 2010-06-11 2014-06-10 Massachusetts Institute Of Technology Processor for large graph algorithm computations and matrix operations
US9122932B2 (en) * 2012-04-30 2015-09-01 Xerox Corporation Method and system for automatically detecting multi-object anomalies utilizing joint sparse reconstruction model
US9704102B2 (en) * 2013-03-15 2017-07-11 William Marsh Rice University Sparse factor analysis for analysis of user content preferences
JP6083300B2 (ja) * 2013-03-29 2017-02-22 富士通株式会社 プログラム、並列演算方法および情報処理装置
US10209685B2 (en) * 2015-10-29 2019-02-19 Mitsubishi Electric Research Laboratories, Inc. Method and apparatus for preconditioned model predictive control

Also Published As

Publication number Publication date
JP2017122950A (ja) 2017-07-13
US20170192818A1 (en) 2017-07-06

Similar Documents

Publication Publication Date Title
JP6601222B2 (ja) 行列演算プログラム、行列分割方法、及び並列処理装置
CN109919311B (zh) 生成指令序列的方法、执行神经网络运算的方法和装置
JP6900487B2 (ja) ハードウェアにおける平均プーリングの実行
KR101959376B1 (ko) 멀티 코어 최적화된 순환 신경망을 위한 시스템 및 방법
JP6083300B2 (ja) プログラム、並列演算方法および情報処理装置
US11100386B2 (en) Buffer addressing for a convolutional neural network
US10572225B1 (en) Circuit arrangements and methods for performing multiply-and-accumulate operations
US9037798B2 (en) System and method of operating a computing device to perform memoization including transforming input/output parameters to reduce redundancies and efficiently cache data
JP2019148969A (ja) 行列演算装置、行列演算方法および行列演算プログラム
Gmeiner et al. Parallel multigrid on hierarchical hybrid grids: a performance study on current high performance computing clusters
US20170206089A1 (en) Information processing apparatus and computational method
WO2010039325A1 (en) Method for solving reservoir simulation matrix equation using parallel multi-level incomplete factorizations
CN109885407B (zh) 数据处理方法和装置、电子设备、存储介质
Godwin et al. High-performance sparse matrix-vector multiplication on GPUs for structured grid computations
JP2022550730A (ja) 高速なスパースニューラルネットワーク
US11106968B1 (en) Circuit arrangements and methods for traversing input feature maps
JP2022550170A (ja) コンピュータがテンソルデータの計算を実現する方法、装置、媒体及び機器
US20090171636A1 (en) High-speed operation method for coupled equations based on finite element method and boundary element method
JP2016143210A (ja) 磁界シミュレータプログラム、磁界シミュレータ装置および磁界シミュレーション方法
JP5262177B2 (ja) ベクトル積の並列処理方法
US10210136B2 (en) Parallel computer and FFT operation method
JP6065543B2 (ja) ニューラルネットワーク設計方法、フィッティング方法、及びプログラム
CN111712811A (zh) Hd地图的可扩展图形slam
US20190012831A1 (en) Systems, methods and, media for simulating deformations of nonlinear elastic bodies
JP6981223B2 (ja) 疎行列ベクトル積演算装置及び疎行列ベクトル積演算方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180912

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190415

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190423

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190621

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20190621

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20190621

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190910

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190923

R150 Certificate of patent or registration of utility model

Ref document number: 6601222

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150