CYBERNET

CAEを学ぶ

スパースソルバーを効率良く使う方法

Ansysで広く使用されているスパース直接法ソルバー(以降、スパースソルバーと略称します)を例にその制御方法をご紹介いたします。

はじめに

最近のハードウェア環境の進歩には目を見張るものがあり、マシン1台に物理メモリを大量に搭載することも珍しいことでは無くなりつつあります。そのため大規模解析を実行するケースも増えてきていますが、実際には小さな穴やフィレット等、解析に不要な部分を取り除いたり、1/2もしくは1/4対称モデルに変更するなど、環境や計算コストに合わせたモデル規模で運用しているのが現状です。
しかし、こうした制御を行なわなくても、マシンが持っているシステムリソース(メモリやファイルI/Oなど)を正確に引き出すための制御を行なうだけで状況が大きく変わる場合があります。今回はAnsysで広く使用されているスパース直接法ソルバー(以降、スパースソルバーと略称します)を例にその制御方法をご紹介いたします。

Ansysに用意されているソルバー

Ansysは構造、伝熱、磁場、圧電、音響といった幅広い分野で解析が実行できるように複数のソルバーが用意されています。

  • フロンタル直接法ソルバー(FRONT)
  • スパース直接法ソルバー(SPARSE)
  • 前処理付き共役勾配反復法ソルバー(PCG)
  • ヤコビ共役勾配反復法ソルバー(JCG)
  • 不完全コレスキー共役勾配反復法ソルバー(ICCG)
  • 代数マルチグリッド反復法ソルバー(AMG)
  • 分散型スパース直接法ソルバー(DSPARSE)

これらのソルバーは各々に特徴を有していますが、その中でも多分野に適用でき、かつロバストな収束性を持っているスパースソルバーがAnsysのデフォルトになっています。

スパースソルバーの概要

スパースソルバーの処理の流れを図1に示します。この作業を行なうことでマトリクスAの連立1次方程式Ax=bを直接的に解きます。

図1 スパースソルバーの実行手順

各処理について簡単に説明します。
オーダリングは、LU分解時のFill-In(マトリクスから非ゼロ項が発生する現象)をできるだけ少なくなるような処理を行ないます。次のシンボリック分解はマトリクスをLU分解したときの非ゼロ項の位置を計算し、LU分解に先立って必要なメモリ領域を確保するための処理を行ないます。その次はLU分解ですが、この処理が最もCPU時間とシステムリソースを多く要します。内容としてはマトリクスAを下三角形マトリクスLと上三角形マトリクスUの積の形に分解するといった処理を行ないます。最後は分解したマトリクスを利用した前進後退代入の処理を行ないます。具体的には下三角マトリクスLを使った前進消去、上三角マトリクスUを使った後退代入を実行して解を求めます。
従いまして、これらの処理の中で最も負荷の高いLU分解を効率良く制御できれば、パフォーマンス向上が見込めることになります。

Ansysのメモリ制御

スパースソルバーはその性質上、以下の優先順位でシステムリソースを制御しています。


〈優先順位〉

  1. 【マトリクスをインコアメモリに格納する設定】
  2. 【マトリクスをメモリとディスクへ最適化して格納する設定】

言い換えると、

【パフォーマンスアップ向けの設定】>【大規模モデル及びロバスト向けの設定】

となります。つまり何も設定をせずに解析を実行してもパフォーマンスを向上させるような設定が優先されることになります。
Ansysの動的メモリ管理機能を併用すると、プログラムを起動した後でもスクラッチスペース(図2)が自動的に増減されるため、必要なメモリ領域も比較的容易に確保できます。しかし、これは中小規模の有限要素モデル(〜 100万自由度)の場合に限られます。大規模な有限要素モデル(100万自由度以上)を解析する場合、スパースソルバーの制約である“連続したメモリブロック”の確保が難しくなり、いくらメモリを自動的に増減できたとしても不連続なメモリブロックしか確保できない場合が出てきます。このようなケースを出来る限り避けるためにも、敢えて動的メモリ管理機能を利用せず、明示的にワークスペース領域“-m”オプションとデータベース領域“-db”オプションを設定し、Ansysを起動していただくことを推奨します。
なお、スクラッチスペース領域は総合プリプロセッサでも使用されるため(例:ブーリアン演算、メッシング等)、この領域が断片化されてしまう恐れがあります。この状態でソリューションプロセッサへ移動してしまうと、連続したメモリブロックを確保することが困難となり、実際より少ないメモリブロックしか利用できない場合があります。この問題を避けるには、Ansysを再起動して解析実行する方法を推奨します。

図2 Ansysのメモリ割り当てについて

スパースソルバーのモード制御

以上のようなプログラム本体のメモリ制御法の他、スパースソルバーは物理メモリの利用状況を考慮して、3つのモードから自動的に1つのモードを選択して解析を実行します。このモードを制御するためのコマンドがBCSOPTION(以降、BCSOPTと略称します)です。
以下に各モードの特徴を簡単にまとめます。


  • インコアモード (BCSOPT,,INCORE)
    大量のメモリを要求するモードです。ファイルI/Oはほとんど発生しません。
  • 最適化アウトオブコアモード (BCSOPT,,OPTIMAL)
    必要なメモリ容量とファイルI/Oをバランスさせたモードです。
  • 最小アウトオブコアモード (BCSOPT,,MINIMUM)
    必要最小限度のメモリを要求するモードです。非常に大量のファイルI/Oが発生します。

各モードが使用するシステムリソースを図3で示します。水色の領域がメモリで処理され、黄色の領域がディスクで処理されます。もしスクラッチファイル(LN09,LN20,LN25等)が解析実行中に大容量で作成される場合、ファイルI/Oに大きな負荷が発生していることになります。特にLU分解で生成されるLマトリクスは密になりますので、インコアメモリに確保できないとLN09ファイルが数GBもの容量になり、大きな負担となる場合があります。また、最小アウトオブコアモードは、他モードと比較してファイルI/Oが大量に発生しますので解析実行に適した設定ではありません。


図3 各モードで生成されるスクラッチファイル

なお、BCSOPTコマンドは、デフォルト(BCSOPT,,DEFAULT)ではその時の物理メモリの空き状況によってプログラムが自動的にメモリモードを選択します。図4は実際にスパースソルバーで解析を実行した際に出力されるアウトプットウィンドウのイメージを示しています。使用可能なメモリ量が471.622MBであるため、インコアモードは実行できず、最適化アウトオブコアモードを適用している様子が分かります。

図4 アウトプットウィンドウに表示されるメモリモードの例

スパースソルバーを効率良く使う方法

以上のように、スパースソルバーを効率良く使用するには下記3つの方法をご検討いただくことを推奨します。

  1. Ansys 起動時、“-m”オプションと“-db”オプションに必要なメモリ量を設定する
    スパースソルバーは連続したメモリブロックを割り当てる必要がありますので、“-m”オプションで予め大きめにワークスペース領域を確保しておくことで不連続なメモリブロックを避けることが可能です。
  2. Ansysを再起動して解析を実行する
    スクラッチスペース領域の断片化を除外するため、解析を実行する前にAnsysを再起動するといった方法を推奨します。
  3. BCSOPTコマンドを使用してスパースソルバー用のメモリを制御した後、解析を実行する
    図5に示すように、BCSOPTコマンドの第2フィールドと第3フィールドを設定することでモード及びメモリ容量を指定することが可能です。
図5 BCSOPTコマンドの各フィールド

なお、本コマンドの第3フィールドに設定するメモリ容量は、図5に記載されているように8GBまでの制限(複素数マトリクスの場合16GB)を持っておりますが、Ansys Ver.11.0のProduct Launcherに追加パラメータ”-LM”を入力した上で起動すれば、メモリ容量の制限がなくなります(Ansys Ver.12.0では、こちらのオプションを入力せずともメモリ制限が働かないように改善する予定です)。

 


当社発行誌「CAEのあるものづくり」は、CAE技術者の方や、これから解析を行ないたい設計者の方を対象としたWEBマガジンです。年2回(春、秋)発行し、Ansysシリーズを始めとした各種CAE製品紹介はもちろん、お客様の解析事例紹介やインタビュー記事、解析のテクニックなど、スキル向上に役立つ情報をご提供しています。
詳しくは、WEBマガジン「CAEのあるものづくり」をご覧ください。

Ansys、ならびにANSYS, Inc. のすべてのブランド名、製品名、サービス名、機能名、ロゴ、標語は、米国およびその他の国におけるANSYS, Inc. またはその子会社の商標または登録商標です。その他すべてのブランド名、製品名、サービス名、機能名、または商標は、それぞれの所有者に帰属します。本ウェブサイトに記載されているシステム名、製品名等には、必ずしも商標表示((R)、TM)を付記していません。 CFX is a trademark of Sony Corporation in Japan. ICEM CFD is a trademark used by Ansys under license. LS-DYNA is a registered trademark of Livermore Software Technology Corporation. nCode is a trademark of HBM nCode.