SIMD演算を用いた高精度疎行列計算ソフトウェアの高速化

 
菱沼 利彰 (正会員)
(株)科学計算総合研究所 研究員
 
キーワード
数値計算 高精度演算 高速化

[背景]連立一次方程式に対する反復解法は丸め誤差によって収束が停滞・発散

[問題]高精度演算は丸め誤差を低減できるが計算時間が増加
[貢献]高精度な疎行列演算の高速化手法を明らかにしてソフトウェアとしてまとめた


 物理シミュレーションでは大規模な疎行列に対する連立一次方程式の求解が求められる.このような連立一次方程式を解くにはKrylov部分空間法とよばれる解法を用いることが一般的である.Krylov部分空間法は連立一次方程式の近似解を求める反復法アルゴリズムの1つのカテゴリで,スカラ,ベクトル,疎行列に対する演算(基本演算とよぶ)の組み合わせによって構成される.Krylov部分空間法は丸め誤差の蓄積により反復回数が増大したり,近似解が求まらなくなったりする.

 このような問題を解決するため,プログラム全体や誤差の蓄積しやすい一部の演算を高精度化する手法がある.高精度演算は計算時間やメモリデータ量が多く必要になることや標準的なプログラミング環境から高精度演算を行うためのソフトウェアが少ないことが問題となる.現実的な計算時間で高精度演算を実現するために,まずは倍精度と比べて2倍の精度である4倍精度に着目した.倍精度数演算を組み合わせて4倍精度演算を実現できるDouble-Double精度(DD)演算は特殊なハードウェアを必要とせずに4倍精度演算を実現できる.

 本研究ではKrylov部分空間法を実装するために必要なDDの基本演算を高速化することを目的とした.高速化のアプローチとして汎用プロセッサでサポートされている並列化機構を効率的に活用することを考え,現在主流なアーキテクチャに実装されているFMA命令,SIMD命令,マルチスレッドを用いた際に効率的に計算を行えるメモリレイアウトや実装方法を検討した.プロセッサのさまざまな高速化機構を効率的に利用するためにはメモリレイアウトや実装を工夫することが重要である.一方で高速化した演算をユーザに利用してもらうためには独自のメモリレイアウトや実装を隠し,簡潔なインタフェースを提供することが必要になる.そのため高速化した基本演算を利用するためのインタフェースを設計した.

 疎行列はほとんどの要素が零の行列で,メモリ使用量を節約するために零要素を記憶せず,行番号や列番号のインデックスを用いた格納形式を用いる.一般的によく使われる格納形式であるCRS形式はSIMD命令を用いた並列化の効率が悪いことが実験によって明らかになったため,SIMD命令を効率的に利用するためにBCRS形式とよばれる形式を用いた手法を提案し,CRS形式と比べて平均で約2.61倍高速に疎行列ベクトル積を計算できるという結果を得た.

 実装したこれらの演算をユーザから簡単に利用できるようにするため,倍精度型とDD型を組み合わせて利用できるインタフェースを設計した.開発したソフトウェアを利用することで変数の宣言部を変更するだけでプログラム全体の計算精度を変更でき,簡単に高速な高精度Krylov部分空間法を実現できることを示した.


 

 
 開発したソフトウェア(DD-AVX v3):https://github.com/t-hishinuma/DD-AVX_v3

(2020年5月27日受付)
 
取得年月日:2020年3月
学位種別:博士(情報学)
大学:筑波大学



推薦文
:(ハイパフォーマンスコンピューティング研究会)


本論文では,物理シミュレーションなどで用いられるKrylov部分空間反復法を高速に実行するための高精度疎行列計算ソフトウェアの設計および実装について述べられている.開発されたソフトウェアは高い汎用性を持つため,将来の計算機アーキテクチャにおける物理シミュレーションの基盤技術として有用である.


研究生活


私の研究は,学部3年生のときに自分の作ったプログラムが遅いことに絶望したことから始まりました.大学に入ってほぼ初めてコンピュータに触った自分でしたが,コンピュータサイエンスの先生に質問に行くうち,並列化技術を使いこなしてきちんと速いプログラムを書く必要があると感じ,この研究をはじめました.

やっていること自体は低レイヤですが,計算時間はソフトウェアの品質を表す指標の1つだと思うので,計算を高速化することは多くのユーザの満足度に直結していると信じて研究を進めることで,コンピュータで効率良く計算する方法を明らかにすることができ,博士号を取得することができました.

コンピュータサイエンスの基礎がほとんどなかったため,指導教員の先生方をはじめ多くの方々に多大なご迷惑をおかけしました.皆様のご支援によりここまでたどり着くことができました.この場をお借りして厚くお礼申し上げます.