【前へ】

3.6 並列処理/アプリケーション

3.6.1 最適化と並列計算機

福井 義成委員

1.並列化と矛盾
 
ここでは将来の高性能計算機(HECC)が並列計算機となることを前提として、HECCに向いたアプリケーションについて考える。並列化は本来、大きな計算(時間がかかる計算)を1CPUより早く行うことに目的がある。現実的に並列化の効果を期待した問題は、1CPUでは1ヶ月以上もかかるような規模である。このような計算を並列計算で実行するときは、各CPUが負担する計算量は当然、そのCPUの能力を十分使いきる程度の大きさになっている。非常に多数(数千?)のCPUによる並列計算が実現できたとしても、各CPUの計算量が数秒程度の問題であっては現実的には意味がない。計算機の有効利用という点からも問題である。人間にとって問題なく待てる時間(状況によって異なる)以内に終了する計算に並列処理を適用する意味はない(ただし、並列化を利用した消費電力の低減の場合を除く)。
 並列計算機の性能を発揮させるためは、当然のことながら、並列化が必要である。並列計算は色々な手法があるが、どの方法を適用するにしても、計算の粒度が大きいほど(同期をとる必要が少ないほど)、並列化の効果が大きい。しかし、普通に行われている並列化では1つの問題(計算単位)をいくつか(CPU数以上)に分割して、分割した各部分(プロセス、スレッド等)を別々のCPUを割り当てて計算をさせることになる。すなわち、並列化自身が計算の粒度を小さくしていることになる(図1)。これは自己矛盾である。ここではCPU数が増えても、計算の粒度が小さくならないような分野を考える。

図1 普通の並列化

2.性能評価
 
本来の目的に入る前に、性能評価についてふれる。上記のような非常に大規模な問題を並列計算の目的とするのであれば、性能評価も目的にあったものでなければならない。良く見かける並列計算の性能測定は、1つの固定された問題を分割し、各CPUに配分して計算している(図2)。本来、並列計算機で解きたい問題は、非常に大きな問題であり、CPU数が増えても、なおかつ各CPUが分担する計算が十分に大きなものであるはずである。CPU数が増えた場合、1CPUが分担する演算量を固定で、CPU数が増えるにしたがい、計算可能な問題が大きくなるというような問題(図3)での評価が重要である。

図2 問題規模を固定し、並列化する場合

 

図3 1CPUが行なう計算規模を固定した場合

 

3.問題の粒度を小さくしないアプリケーション
 普通に並列化を行えば、問題の粒度が小さくなる。しかし、同じ問題で含まれるパラメータの値だけが異なる問題を別々のCPUで計算すれば、問題の粒度を小さくしなくて済む。これは良く知られている「自明な並列化」である。「自明な並列化」は並列化の研究者にとっては、興味がないものであろうが、実用的には重要な方法である。研究者にとって面白い対象と世の中で必要とされる対象は必ずしも一致するとは限らない。
 「自明な並列化」を行う主な目的は

(1) パラメトリック・スタディ
(2) 最適化
(3) 許容範囲(歩留まり)の探索

等がある。この3つは相互に関係している。最適化の場合、製品の開発において、最適化を行い、最高の品質と低コストの製品を作るのが目的である(製品の性能を表す目的関数の値が小さいほど、製品の性能が良いとする)。しかし、最適な設計点が求まったとしても、実際の製品の製造には、バラツキがつきものであり、1点だけの最適化では製造の役には立たない(図4)。設計パラメータに対して、製品の性能を表す目的関数の形が問題である。製品の設計点で、設計パラメータに対して、目的関数が鍋底のような形であれば、製造工程で設計パラメータが多少変動しても、製品の性能には大きな影響は与えない(図5)。しかし、製品の設計点で、設計パラメータに対して、目的関数が急激に変化するような形をしていると、設計パラメータの少しの変動が製品の性能に大きな変動が出てしまう(図6)。良い設計は、設計点を鍋底の中心に置くことである。

図4 最適点と許容範囲

 

図5 設計パラメータの変動に強い場合

図6 設計パラメータの変動に弱い場合

 

 「設計点を鍋底の中心に置く」ためには最適点の計算と共に、最適点付近での感度分析あるいは許容範囲の確認が必要となる。そのためには、最適点付近で多くの設計パラメータの組に対する計算が必要となる。この各々の計算は互いに独立なため、並列に処理可能となっている(自明な並列処理)。
 上記の(1)、(3)の各設計パラメータに対する計算は完全に独立である。(2)の最適化は最適化の手法により、並列化可能かどうかが決まる。
 理想的な手順としては、まず、設計パラメータの最適の場所を探し、その付近での設計パラメータのバラツキに対する製品の品質(歩留まり)の変動状況を確認することが重要である。

4.最適化
 前章で述べた「自明な並列処理」の内、最適化は最近、製品開発という面から最適設計、最適実験として注目されている。製品の製造において歩留まりを向上させること(不良品を出さないこと)は非常に重要である(半導体の製造等で重要)。また、製品の性能を少しでも向上させることも重要である(発電関係の機器等)。
 製品の設計・開発に関して、最適化を行うには、

(1) 実験・試作の繰り返しで行う(図7)
(2) 実験・試作と計算機シミュレーションを組み合わせて行う(図8)
     (実験・試作なしで済ますことが理想であるが)

の2つのやり方がある。実験・試作の繰り返しだけで最適化を行うことは不可能ではないが、非常にコストがかかる。また、時間も非常に長くかかる。近年、計算機の性能も向上し、また、計算モデルの精度も向上したため、実験・試作の代わりに計算機シミュレーションで代用させることが可能になってきている。シミュレーションによる計算結果の精度が向上し、十分、実験・試作の代わりに出来る分野が増えつつある。

図7 実験・試作の繰り返し

 

図8 実験・試作と計算機シミュレーションの組み合わせ

 

 計算機シミュレーションが実験・試作の代わりとすることができるようになったことで、製品の最適化も計算機で行うことが可能になってきている。最適化は以下に述べるように、だれでもが容易に使いこなせるようになっているわけではないが、実用上、非常に重要なテーマとなっている。それだけに、HECCのような高性能計算機の環境をサポートすることが重要な分野といえる。
 計算機シミュレーションで製品の最適化を行う場合、次の点に注意しなければならない。
(1) 目的関数の定義
(2) 局所的最適ではなく、全体最適な解を見つける

 目的関数をどのように定義するかは非常に難しい問題である(図9)。計算結果のどのような値が最終製品の歩留まり・性能に関係しているかを見極めなければならない。例えば、ある部分の電圧だけが製品の性能に関係しているような場合は、目的関数の定義は比較的簡単である。しかし、出力波形の形、しかも波形の形だけが重要で、その相対的位置はあまり問題にならないような場合は電圧だけの場合に比べ、目的関数の定義が難しくなる。現実の問題において、目的関数の定義は複雑であり、目的関数の決定は慎重に行わなければならない(それだから面白いといえる)。

 

図9 目的関数の定義

 また、全体最適な解であるが、目的関数の形が単峰性の問題の場合は、目的関数の形が単純であるため、全体最適の解を見つけることは易しい。しかし、ほとんどの問題では、目的関数が多峰性のため、局所的最適ではなく、全体最適な解を見つけることは難しい(計算量が多くなる)(図10)。多くの最適化の手法は局所的に最適な場所を求めるような手法である。また、図11の例のように、全体最適点のところが、設計パラメータの変動に敏感で、その次の局所最適点の部分が鍋底のような形をしている場合は考えどころであろう。

図10 局所最適点と全体最適点

 

図11 どこが望ましい点か

 

 最近では、製品の性能向上と開発期間の短縮が求められている。前に述べたように、計算機の性能向上と計算モデルの高精度化により、実験・試作の代わりに計算機シミュレーションを利用した最適化が行われるようになっている。最適化のためには、設計パラメータを変えたシミュレーションを複数行う必要がある。分野にも依存するが、最適化までには、バラツキの評価も含めて、1,000〜10,000ケースのシミュレーションをしたいという分野もある。例えば、5つの設計パラメータがあり、各パラメータ毎に5つを選ぶとこの組み合わせだけでも、3,125回の計算が必要になる。5つの設計パラメータは、現実の問題では、決して多い方ではない。
 このような例ではたとえ1つのシミュレーションが1時間で終わっても、全体では、1ヵ月から1年程度の計算時間となってしまう。これはHECC向きの計算になる。ただ問題は総当り法では、すべてのシミュレーションが独立に行われるが、最適化の手法では、必ずしも、すべてのシミュレーションが独立に行えるわけでもない。
 古典的なシンプレックス法で考えてみると、最初のシンプレックスの計算には(設計パラメータの数)+1回のシミュレーションが必要で、これは独立に計算することができる。しかし、その後の新たな計算点に相当するシミュレーションは逐次に行わなければならず、各設計パラメータに対するシミュレーションを並列計算は行うことはできない。目的関数の傾斜を使って最適点を求める方法(多変数の場合はヤコビヤン行列)では、数値的に微係数を計算する場合では、少なくとも(設計変数の数)+1回の計算が必要となり、この計算は並列にできる。また、最近、設計最適化のアプリケーションで良く使われる応答局面法では、応答局面を構成する点の数だけの並列性がある。
 HECCが数千から数万のCPUで構成される計算機とすると、最適化手法において、100オーダの設計パラメータの組を並列に計算することができれば、その意義は大きい。1,000 CPUの計算機であれば、各シミュレーションを10 CPUで、10,000 CPUの計算機であれば、各各シミュレーションを100 CPUで並列計算すればよいことになり、1つの計算を1,000 CPUあるいは10,000 CPUで並列化することよりも、並列化が非常にやり易くなる。
 次世代高性能計算機(HECC)は、1つのノードが複数のCPUから構成され、そのノードをクラスターの構成要素とする方式となると思われる。最適化の場合、各ノード内では通常の並列化を行い(共有メモリーで可能:並列化コストの低減)、各ノード間で別の設計パラメータの計算を行うことで、ソフトの生産性と並列化の効率の向上という一石二鳥を得ることも可能になる(図12)。最適化はHECCのハードウェア構成にも適合しているといる。今後は各設計パラメータに対する計算をなるべく並列(併行)に計算できるような最適化のアルゴリズムを開発することが重要である。

 

図12 HECCの構造と最適化

5.まとめ
 
並列化は粒度を小さくする。しかし、パラメトリック・スタディや最適化のような場合は計算粒度を小さくすることなく、問題が大きくなる。これはHECC向きである。

 

【次へ】