PLAINセンターニュース第127号
Page 1


CFDにまつわるあれこれ(その1)

高木 亮治
PLAINセンター

1. CFDとは?
2. 並列計算機


1. CFDとは?


 近年急速な計算機技術の発達と普及により理工学における研究、開発の手段として、実験、理論解析と並んで数値シミュレーションが第三の科学として注目を集めています。数値シミュレーションは、実験と比較した場合、低コスト、迅速性といったメリットがあり、更には測定や理論解析が困難な複雑現象のシミュレーションが可能であるなど基礎研究の分野においても重要な手段となっています。
 数値シミュレーションもしくは数値計算によって流れの諸現象を解明したり、計算手法自体の研究を行う分野を計算流体力学または数値流体力学 (Computational Fluid Dynamics;CFD) と呼び、広く多くの分野で用いられています。実際の応用分野としては、航空機、船舶、鉄道、自動車などの交通手段、各種の流体機器、土木、建築、環境といった工学関連、医療、生物における流れ、宇宙、海洋、気象の流れまで広範囲に渡っています。こういった様々な流れ場においては、流れ場の幾何形状や流体特性に複雑な要因を含んでおり、一般には解析的な手法は適用できません。CFD では流れの支配方程式を数値的に解くことで流れの諸現象の解明や予測を行います。
 一口に流れと言っても様々な流れがありますが、ここでは航空宇宙分野で主に扱われる連続体仮定が成立する流れを対象とします(宇宙分野では稀薄な流れを扱うことも必要ですが、ここではもっと濃い流体を対象とします)。流体の振舞は質量、運動量、エネルギーの保存を考えることで Navier-Stokes 方程式(以下 NS 方程式*)と呼ばれる微分方程式で記述することができます。実際には必要に応じて気体の状態方程式、化学反応および相変化の式等を併せて考慮する必要があります。対象とする流れ場の特性、および何を見たいかによってはより簡略化された基礎方程式を用いる場合もあります。例えば、流体の粘性項を簡略化した薄層近似NS方程式、流体の粘性自体を無視した Euler 方程式を用いたり、境界層方程式、更にはポテンシャル方程式を用いる場合もあります。流れの数値シミュレーションは、これら支配方程式系を適切な初期条件と境界条件のもとに数値計算し、実際の流れを摸擬することだと言えます。
 図1は流れの数値シミュレーションを実施する場合の大まかな手順を示しています。



図1. 流れのシミュレーションの概要

  1. 対象となる流れの現象に対してどの基礎方程式を用いるのかを決める。また必要に応じて、乱流モデル、化学反応モデル等の物理モデルを選択し、数値計算を行う基礎方程式(一般に偏微分方程式)を決定する。ここで重要なのは、着目している物理現象や欲しい物理量などによって、効率的でしかも正しい情報が得られる基礎方程式を選択することです。
  2. 差分法、有限体積法、有限要素法などを用いて基礎方程式である偏微分方程式を離散化し、数値解析を行う代数方程式を導く。ここで離散化とは、もともと連続な分布を離散点上の値で置き換え、偏微分方程式を計算機で扱える四則演算で表現された代数方程式に変換することです。
  3. 導出された代数方程式に対して境界条件や各種数値解析手法を決め、利用する計算機に適したプログラムを作成し解析を行う。
  4. 数値解析結果は単なる数値であるので、そこから必要となる物理現象を引き出すため物理量分布のグラフ化や可視化などを行い流れの現象把握を行う。

 このため、流れの数値シミュレーションを行うには流体力学の知識だけではなく、離散化やその数値解析手法に必要な数理、プログラミングや計算機に関する知識など計算科学に関する知識が必要となります。
 図1にも示しているように、流れの数値シミュレーションにおいてはそれぞれの段階で様々な誤差要因が発生します。物理現象から物理モデルを構築する際にはいわゆる近似誤差が、偏微分方程式を離散化する際には打ち切り誤差と言われる離散化誤差が、計算機では有限桁計算を行うために丸め誤差が、計算結果から必要な物理データを抽出する際には補間等の計算誤差がそれぞれの段階で発生します。そのため、数値シミュレーションで得られた結果が実際の流れと本質的に同じ現象を再現しているかどうかという懸念がかならず付きまといます。そのため数値シミュレーションでは計算結果を実験データや理論解などと比較することで充分な検証を行うことが非常に重要となります。検証には得られた解析結果が数値解として正しいか、つまり与えられた基礎方程式が正しく解けているかを確認する verification と、実際の物理現象として正しいかを確認する validation とがあり、数値シミュレーション結果の信頼性を確認する上ではこの verification と validation の両者が非常に重要となります。


2. 並列計算機


 航空宇宙分野の CFD では依然として大きな計算機パワーが必要となる場合が多く存在します。CFD の発達は計算機の進歩に負うところが非常に大きいと思います。近年の計算機技術の進歩は目覚しく、特にハードウェア技術の進歩には目を瞠るものがあります。一昔前にスーパーコンピュータと呼ばれていた計算機の性能が今ではデスクトップパソコン、下手をするとノートパソコンで実現しています。この様にハードウェア技術の進歩による計算機性能の向上は著しいものがありますが、一方でソフトウェア技術の進歩がこれに追いついていけてないように思えます。
 計算機の高速化技術における歴史的トピックと言えばベクトル計算機の登場があります。一昔前までは、スーパーコンピュータと言えばベクトル計算機と言っても良い情况でした。この科学技術計算向に開発されたベクトル計算機のハードウェア性能を引き出すためにはユーザープログラムのベクトル化が必須でした。ベクトル計算機が登場した時点では、その利用技術であるコンパイラによる自動ベクトル化はまだ未成熟な技術で、ユーザーが自分のプログラムをベクトル化しなければベクトル計算機の高速演算処理性能の恩恵に預れませんでした。その後コンパイラ技術の発展にともない、自動ベクトル化技術も向上し、ユーザーがある程度意識してプログラムを書いてやれば、後はコンパイラが自動的にベクトル化を行ってくれるまでになりました。こうして、ハードウェア性能をコンパイラが充分引き出すことができるようになり、ユーザーが作成する実際のプログラムでも高性能を実現することができるようになりました。
 ベクトル計算機の次に現れたのが並列計算機です。ベクトル技術もある意味では並列処理と言えなくもないですが、ここでは一般的に言われる並列計算機の事を示しています。並列計算機の登場で高性能化が一段と進んだと言えます。並列台数も規模に依りますが、数台のものから数十、数百、数千、更には数万台規模のものが登場しています(理論的には百台の計算機で並列処理を行えば、性能は百倍と考えられます)。性能向上に向けた様々な技術課題がありますが、ハード的には複数の計算機もしくはCPU(中央演算処理装置)を高速なネットワークで接続するといういたって簡単な構成となります。主要コンポーネントであるCPU、メモリ、ネットワークの構成によって並列計算機は大きく分けて3つのタイプに分類することができます。それぞれ分散メモリ型(クラスタ、図2)、共有メモリ型(SMP、図3)、これらの複合した分散/共有メモリ型(SMPクラスタ、図4)です。


図2. 分散メモリ型


図3. 共有メモり型


図4. 分散/共有メモリ型


 分散メモリ型はそれぞれ独立した CPU とメモリがネットワークで結合された形態の並列計算機でクラスタ型とも呼ばれており、昨年度までISASにあった富士通の VPP シリーズや最近注目を集めている PC クラスタは分散メモリ型となります。一方共有メモリ型は一つのメモリを複数の CPU で共有した形態の並列計算機です。現在新しく宇宙科学本部に導入された NEC の SX-6 は分散/共有メモリ型で、8つの CPU から構成される共有メモリ型ノードが全部で16ノード、ネットワークで接続した構成となっています。
 上記のハードウェア構成の違いにともない、適用できる並列化手法に違いが存在します。ここで言う並列化手法はシステムから見た分類でプロセス並列とスレッド並列の二種類です。勿論、プロセス並列とスレッド並列を組み合わせたハイブリッド並列も行えます。プロセス並列はハードウェア構成を選ばず、全てのタイプの並列計算機で利用できます。一方スレッド並列は共有メモリ型の並列計算機に特有の並列化手法です(勿論、分散メモリ型並列計算機上でスレッド並列を実現する環境なども存在しますが)。プロセス並列かスレッド並列かの選択は並列化を行う際に利用する並列化言語の選択で決定されます。
 プロセス並列のための並列化言語としては各並列計算機に固有の並列化言語(富士通ではVPP-Fortran、XPFortran、NEC では High Performance Fortran)があります。これらは Fortran をベースとして並列化の命令をコンパイラ指示行として挿入するタイプです。勿論専用言語のため、それぞれの並列計算機でしか並列プログラムとして実行されません。これらとは別にプロセス並列のためのライブラリとして MPI、pvm といったメッセージパッシング系のライブラリがあります。これらのライブラリは専用言語ではないので色々なプラットフォームに移植され、特に MPI はメッセージパッシング系の並列化ライブラリとしては標準的なライブラリになっており、多くの並列計算機に移植されています。これらの言語、ライブラリを用いることでプロセス並列を行うことができます。
 一方スレッド並列は、コンパイラの最適化機能の一種として、自動並列と呼ばれる手法で実現されるか、もしくは OpenMP と呼ばれるものがあります。OpenMP はスレッド並列における業界標準として仕様が策定されています。OpenMP はプロセス並列の並列化言語と同じように並列化命令をコンパイラ支持行として挿入し、OpenMP に対応したコンパイラでコンパイルすることで並列実行が可能となります。
 ベクトル計算機の場合にはベクトル化技術、特にコンパイラ技術の成熟にともない、ユーザーがベクトル化に関する知識をある程度持っていれば比較的簡単にハードウェアの性能を引き出すことができるようになりました。これはベクトルという技術に対して、ハードウェア技術が先行し、後にソフトウェア技術が追いつくことでユーザーがそれほど意識すること無く性能を引き出すことができるようになったと言えます。しかしながら、並列計算機ではハードウェア技術とソフトウェア技術に大きな隔がある状態で、ハードウェア的には多くの並列計算機が実際利用されていますが、並列ソフトウェアに関しては不充分な点が多く、並列計算機を使おうとするユーザーに対して多くの技術や知識を要求しています。自動ベクトル化に相当するものとして自動並列化があるにしてもこの機能だけでそれなりの性能を引き出すことは現時点では難しく、まして、それ以外の方法ではユーザー自身がプログラムの並列化を行なう必要があり、ある意味で科学技術計算における大きな課題となっています。


この号の目次へ

大型計算機・平成16年度共同研究採択課題一覧へ


(124kb/ 4pages)

Next Issue
Previous Issue
Backnumber
Author Index
Mail to PLAINnewsPLAINnews HOME