多くの分野において、科学者や技術者は、重要で複雑な問題を解くためにハイパフォーマンスコンピューティングシステム(HPCシステム)を利用しています。マイクロプロセッサが、その動作クロックを向上させ、64ビットアドレッシングをサポートすることで、デスクトップもその処理能力を大幅に向上させています。しかし、並列処理を基本とするHPCシステムの利用も拡大しています。その大きな理由として、以下のような要因があります。
- 解析対象のモデルやアルゴリズム、解析現象の複雑化のため、デスクトップでは物理的に解析できない問題が増加している
- シングルプロセッサのクロックアップでの性能向上の限界に対処する為にプロセッサのマルチコア化とそのようなプロセッサを複数搭載したマルチプロセッサシステムの利用が必須となっている
- マルチプロセッサを搭載する並列計算機システムがより廉価に導入できることようになっている
このようにHPCシステムの利用が一般化することで、従来よりもより深刻化している問題があります。それが、「ソフトウエアのギャップ」と「プログラム開発のワークフロー」の問題です。
プログラム開発のワークフロー
プログラムのアルゴリズムやモデリングをテストする場合、デスクトップなどのより身近なシステムでの開発を行い、その後で、HPCシステムでのテストや実データでの検証などを行なうことになります。このようなワークフローには、柔軟性や効率化という点では、常に問題があります。デスクトップでのプロトタイプで利用する計算機環境やプログラミングモデルとHPCシステムでのプログラミングモデルは必ずしも一致しないケースもあり、また、HPCシステムでの高いスケーラビリティを実現するには、高度な知識とプログラミング技術が求められる場合があります。そのような技術はある意味、特殊な技術を持つスペシャリストを必要としますが、そのようなスペシャリストは非常に限られています。
また、マルチプロセッサでのプログラム開発では、プログラムのデバッグや実行時のボトルネックの解析は、HPCシステムの構成規模が大きく、より多くのリソースを利用するような場合には、非常に困難なタスクとなります。また、小規模な問題やテスト的に利用するモデルでは問題なく解析出来ても、本来のシュミレーションで要求されるデータやモデルでは問題が発生する場合もあります。
また、プログラムの開発段階では、プログラム自身のコーディングはもちろん、アルゴリズムやアプリケーションの仕様なども頻繁に変更になります。このような開発には、長い開発期間を必要とすることになり、コストも非常にかかることになります。
このようなプログラムの開発が終了した後でのシュミレーションは、一般には‘ジョブ’として、HPCシステムが用意しているバッチシステムで実行されることになります。バッチシステムでの実行は、プログラムの開発やテストで行ってきたような対話処理ではないため、その実行結果の確認はジョブの終了を待つことになります。
エンジニアや科学者が必要とするのは、結局は、‘Time-to-Solution (問題解決までの時間)’の短縮であることから、このようなプログラムやソリューションの開発期間も含んだトータルなワークフローでの時間短縮や効率化が求められています。
今後はこれらのソリューションの導入や更なる進化が求められることになります。
|