ページの先頭です

プログラムの開発・整備・改良・普及促進

みずほリサーチ&テクノロジーズではさまざまな科学技術分野の知識とプログラミングの技術を併せ持った技術者が大学・研究所・企業のお客さまのご要望に応じてさまざまな科学技術計算プログラムを開発してきました。


ここで培われたさまざまな知識と技術を用いて、お客さまのご要望に応じて科学技術計算プログラムをより良いものへと整備・改良します。ここではその整備・改良の一例を紹介します。これらの整備・改良により、プログラムの有用性、利便性、可読性が向上されるとともに、プログラムの普及促進の一助ともなります。

計算機能の追加

お客さまが開発されたプログラムを理解できる専門知識をもつ担当者がプログラムソースコードを変更してご所望の新機能を追加開発します。例えば以下のようなさまざまな分野の科学技術計算プログラムの機能強化の実績があります。

  • 電子状態計算プログラムに周期境界条件とバンド図計算機能を追加
  • 分子動力学プログラムの時間発展ルーチンを高精度化
  • 量子化学計算プログラムに新しい基底関数を追加
  • 電磁場計算プログラムの計算方式に境界要素法を追加
  • 流体解析プログラムと弾性変形プログラムを連立化
  • 行列計算プログラムを4倍精度化
  • 計算結果の3次元グラフィック表示プログラムに等数値面表示機能を追加
  • 計算内容のGUI設定プログラムに多数のGUI部品を追加

計算処理のノード内並列化

お客さまが開発されたプログラムのソースコードを変更し、コンパイラの自動並列計算機能のOpenMPで計算処理を並列化します。この改変によりマルチコアマシンでの高速計算が可能になります。

近年のコンピュータでは1つのCPUに演算装置が複数搭載されています(マルチコア)。また一台のコンピュータにもCPUが複数搭載されています。それらの複数の演算装置がコンピュータのメモリに同時にアクセスして並列して演算することができます。OpenMPはコンパイラの自動並列化機能であり、この機能を用いると1つのプロセスがメモリを共有しながら複数の演算装置で並列に処理されます。ノード内のメモリにアクセスできる演算装置の間まで並列化できるためノード内並列と呼ばれます。並列数の上限がノード内の演算装置の数(例えば16)に制限されますが、ほぼ自動的に並列化されるため近年のマルチコアを搭載したコンピュータに適した手頃な並列化方法です。

メモリと計算処理のノード間分散並列化

お客さまが開発されたプログラムのソースコードを変更し、並列計算ライブラリMPIでメモリをノード間に分散し、計算を並列化します。この改変によりクラスターマシンでの大規模計算が可能になります。

MPIは異なるプロセス間でデータを通信するさまざまなルーチンが用意されたライブラリです。異なるノードで走るそれぞれのプロセスでメモリを確保し、あらかじめ指定された分担内容をそれぞれのプロセスが計算し、結果をこのMPIのルーチンを用いて互いに通信して結果をまとめます。メモリをノード間に分散させてひとつのノードでのメモリ量を減らすことができ、また計算をノード間に渡って並列化することができるためノード間並列と呼ばれます。数台のワークステーションにも、超大規模なスーパーコンピュータにも適した分散並列化方法です。MPIと組み合わせたハイブリッド並列化もさらに有用です。

計算処理のGPGPU超並列化

お客さまが開発されたプログラムのソースコードを変更し、パソコンのグラフィックボードに搭載されているグラフィックス処理プロセッサGPGPUで超並列化します。この改変により安価なパソコンでも少し高級なグラフィックボードを搭載するだけで超並列計算が可能になります。

近年の高度な3次元グラフィックスゲームの需要に応えるためCPUとは別に3次元グラフィック処理を行うグラフィックボードの演算性能が強化されています。これまでグラフィックボードには描画する図形の3次元座標の単純な計算を多数の図形に対して同時に処理できるように多数の演算装置GPUが搭載されていました。ところが近年グラフィックボードの演算装置GPUに一般の計算を専用言語のプログラムで計算することができるようになりました。これにより科学技術計算プログラムの計算も多数のGPUで並列計算できるようになりました。専用言語でのプログラミングが必要になりますが、FortranやC++に類似しているため比較的容易に既存のプログラムをGPU並列化させることができます。ただし、複雑な計算処理を行うプログラムはGPU内でのメモリなどのアクセス速度が高速化の制限となるため理論上の上限には及びませんが、それでも安価な高速化が期待できます。

入力機能の整備

お客さまが開発されたプログラムで計算する内容はシンプルなテキストファイルを入力ファイルとして指定されることが多いですが、あまりにシンプルな入力ファイルでは計算の指定内容が不明確になり、プログラムの使用が困難になります。そこで汎用なデータファイルの形式として普及しているXML形式でお客さまのプログラムの計算内容を指定できるように、XML形式とそのファイルの入力処理ルーチンを作成します。XML形式はデータをグループ化して階層化できるため複雑なデータ構造でも記述することできます。また、パラメタ名を表すタグとその値が明確に示されていますので入力ファイルでの指定内容が容易に理解できます。XML形式のデータファイルを読み込むためのFortran90用のライブラリとC++用のライブラリがあり、どちらの言語で作成された計算プログラムでもXML形式のデータファイルを読み込むことができます。

出力確認用の可視化ソフトウェアの作成

お客さまが開発されたプログラムで計算・出力されたデータファイルを瞬時に多角的に確認できるように、3次元グラフィックスで可視化する専用のソフトウェアを作成します。お客さまのプログラムの出力ファイルの形式に合わせて、お客さまのご要望に応じた描画方法で可視化します。可視化ソフトウェアはOpenGLを用いて作成し、3次元分布量の断面図濃淡表示、等数値面での概形表示などでデータを可視化します。ソフトウェアはWindows/Linux/Mac各種で動作します。またお客さまの計算プログラムに直接可視化ソフトウェアを搭載し、計算しながらのリアルタイム可視化ソフトウェアとすることもできます。

入力設定用のGUIソフトウェアの作成

お客さまが開発されたプログラムの高度で複雑な計算内容を簡単に入力指定できるようにするため、グラフィカルユーザーインターフェース(GUI)で計算内容を指定できる専用のGUIソフトウェアを作成します。お客さまのプログラムの入力ファイルの形式に合わせて、お客さまのご要望に応じた設定方法でGUIを設計します。GUIソフトウェアはQtを用いて作成し、入力ファイルのさまざまなパラメタの既定値、推奨値、下限値、上限値、選択肢などが設定できるようにします。ソフトウェアはWindows/Linux/Mac各種で動作します。またお客さまの計算プログラムに直接GUIソフトウェアを搭載し、GUIからプログラムを起動することもできます。

マニュアルの整備

お客さまが開発されたプログラムをより多くの方がご利用いただけるように、プログラムの操作説明書、解析事例集、理論解説書、プログラム設計書をお客さまに代わりまして作成いたします。

ソースコードの可読化

お客さまが開発されたプログラムをより多くの方が開発に参加できるように、プログラムの可読性を高めるためのプログラムソースコードの整理を行います。具体的にはデータ構造の整理、サブルーチンの呼び出しの整理、コメントの付加、主要変数・サブルーチンリストの作成、サブルーチンのコールグラフの作成などを行います。


計算プログラムの計算内容の設定用GUIと計算結果を確認する可視化をまとめたソフトウェアの例

お問い合わせ

担当:サイエンスソリューション部
電話:03-5281-5311

サイエンスソリューション部03-5281-5311

ページの先頭へ