一括計算プログラム

概要

近年のパソコンに装備されているマルチコアCPUを有効利用し、計算処理を効率化するための汎用プログラムを開発しました。マルチコアCPUを有効利用するためにはソルバー自体の並列化処理もしくは、複数プロセスの同時実行化が挙げられます。前者の方法は個別のソルバーごとにプログラムの改良もしくは、作り直しが必要となり、非常に多くの開発時間と費用を要します。後者の方法は既存のプログラムをそのまま利用もしくは、少しの改良で利用することが可能でコストパフォーマンスに優れています。ここで紹介するプログラムは、後者の複数プロセス同時実行化です。このプログラムは2012年秋ごろから開発がスタートし、その冬頃からβ版を飯塚 敦 教授(神戸大学)の研究室で試験的に学生さんにご利用頂いております。数百~数千ケースの計算に利用されています。

また、現在ではこのプログラムは実務で使えるレベルになっていますので、複数ケースの計算が必要な解析業務で利用しています。

複数プロセスの同時実行化

近年のパソコンに装備されているCPUは下図左側のようなマルチコア仕様になっており、1つのCPUに複数のコアが含まれます。このようなCPUはバックグラウンドで幾つかの処理をさせながら、軽快に作業を行うことができます。

計算処理については、複数ケースの計算を順次実行させる方法ではCPUを最大限利用できませんが、計算を同時実行させることによりCPUを最大限利用することが可能となります。下図右側は計算の順次実行と同時実行の計算時間の例を示しています。例えば、順次実行を行っている際にCPUがフル稼働しておらず別の処理を行う余裕があれば、もう1つの計算を同時に行うことが可能です。計算処理自体は高速化されませんが、同時実行することによりCPUを有効に使用でき、結果として全ての計算が完了するまでの時間が短縮されます。 同時実行はCPUの空き時間を別のソルバーに使わせることで一連の計算全体から見れば逐次処理よりも短時間で終わるということです。

CPUの構成と同時実行の模式図

CPUの構成と同時実行の模式図

プログラムの画面例

プログラムの画面例を以下に示します。汎用プログラムですのでソルバー定義ファイルを用意すれば、複数のソルバーに対応することが可能です。現在、試験的にDACSAR、Semi FEM Extreme、D'sNAP対応各種ソルバーに対応させています。D'sNAPは様々なソルバーに対応しており、これを1つの制御プログラムで操作することから今のところ使用が限定的です。(条件付きでの使用となります。)

操作方法は非常に簡単で、まず使用するソルバーを選択します。次にリストに入力データをドラッグなどで設定し、計算実行ボタンで計算を開始します。同時に実行させるプロセス数は、パソコンの使用環境に合わせてユーザーが変更できるようになっています。

プログラムの画面例

プログラムの画面例

処理速度

幾つかの計算ケースについて処理速度の例を示します。計算の同時実行数が多くなりすぎるとパフォーマンスが低下し始める可能性があり適度な数の同時実行を行わなければなりません。理論上はOS内部で定義されている最大プロセス数までは実行可能ですが、損益分岐点が存在します。このあたりはOSにおけるプロセス管理の優秀さによります。

基本ケース

基本ケースの同時プロセス実行数と処理に要する時間に関するグラフを以下に示します。トータル処理時間は、処理に要した実際の時間を示し、トータル処理時比は、順次実行を1とした場合の処理速度の比を示しています。このケースの条件においては、同時実行プロセス数5で損益分岐点となります。同時実行プロセス数5を超えると処理効率がやや悪くなります。同時プロセス数を5とすると、順次実行時と比較して3.4倍の処理効率となります。基本ケースの入力データは実務で使用する程度(メッシュ節点3000節点程度)の計算条件を使用しています

同時プロセス実行数とトータル処理時間(基本ケース)

同時プロセス実行数とトータル処理時間(基本ケース)

同時プロセス実行数とトータル処理時比(基本ケース)

同時プロセス実行数とトータル処理時比(基本ケース)

ソルバーメモリ占有率減少ケース

このケースにおいては、同時プロセス実行数を25にしても処理効率の低下は見られませんでした。同時実行数10~25までは同程度の処理効率ですが、同時実行プロセス数が多いほど、若干処理効率がよくなっています。同時実行数10~25とすると、順次実行時と比較して4.4倍程度の処理効率となります。

同時プロセス実行数とトータル処理時間(ソルバーメモリ占有率減少ケース)

同時プロセス実行数とトータル処理時間(ソルバーメモリ占有率減少ケース)

同時プロセス実行数とトータル処理時比(ソルバーメモリ占有率減少ケース)

同時プロセス実行数とトータル処理時比(ソルバーメモリ占有率減少ケース)

パソコンのスペックを変更したケース

Core i7とCore Quadを比較すると、Core i7のほうが処理速度は高速です。Core i7は同時実行数5で損益分岐点が生じますが、Core Quadは同時実行数4以上です。Core Quadは同時実行数4が最適な数ですが、同時実行数4を超えても処理効率の大きな低下は見られません。これはCPUの違いというよりは、パソコンの環境の違いによるものだと考えられます。

ここには示していませんが、クロック数とコアの数による比較計算を行ってみたところ、複数同時プロセス実行においては、クロック数よりもコアの数が多いほど計算速度に有利でした。順次実行を行う場合には、コアの数よりもクロック数が大きいほど有利でした。

同時プロセス実行数とトータル処理時間(パソコンのスペックを変更したケース)

同時プロセス実行数とトータル処理時間(パソコンのスペックを変更したケース)

同時プロセス実行数とトータル処理時比(パソコンのスペックを変更したケース)

同時プロセス実行数とトータル処理時比(パソコンのスペックを変更したケース)

特定の計算を行うための処理

実務で扱う場合には複数の計算だけを実行するようなケースは少なく、前処理や後処理が必要となります。数十以上のケースになるとデータの作成や結果の処理はプログラムにより自動的に行わけなければ作業効率が悪くなります。ここでは特定の計算を行うための処理の例として、モンテカルロ法の計算処理の例を下図示します。

モンテカルロ法は、複数の説明変数に確率分布を有する乱数を与え、繰り返し計算を行うことにより、計算結果の確率分布を得る手法です。計算ケース数は、大よそ数千から数万にも及びます。 モンテカルロ法は土質定数のバラつきを考慮した計算が行え、変形量の確率分布のヒストグラムを得ることができます。例えば、沈下量が1mとなる確率はx%といったような結果です。大雑把な処理のフローは下図の通りです。

この例では、前処理と後処理に別途簡易なプログラムを使用してモンテカルロ法による計算を効率よく行っています。本プログラムは複数のプログラムを連続して実行することが可能ですので、一連の処理として実行できます。

モンテカルロ法による計算処理の例

モンテカルロ法による計算処理の例