お客様プロフィール

株式会社IHI様総合重工業メーカー
【URL】https://www.ihi.co.jp/
流体解析アプリケーションの実行時間が10分の1に。開発費用と開発期間を削減
2017年4月~11月の期間で、航空用ジェットエンジン開発における、三次元圧縮性流体解析プログラムと流体力学シミュレーションプログラムの高速化チューニングを実施しました。
抱えていた課題
- より規模が大きい複雑なケースのシミュレーションを行いたい
- テストケースを増やしてより多くのシミュレーションを行いたい
- スレッド並列化したにもかかわらず逐次処理よりも時間がかかっていた
高速化適用後の効果
- 9.98倍の高速化をしたことによるシミュレーションコスト(費用、期間)の削減
- 製品の市場投入を早められたことによるビジネスインパクトの向上
改善のポイント
- コアレベルの並列性の向上ソース修正とOpenMPにより、スレッド並列化を促進しました。
- 命令レベルの並列性の向上ソース修正と最適化指示子でSIMD化し、命令スケジューリングを促進しました。
スレッド並列化における性能劣化問題
初めに行った性能計測では、16コアを使った自動スレッド並列処理であるにもかかわらず、逐次処理の約4倍もの実行時間がかかってしまっていることを確認しました。また、プロファイルの結果から、整数型load を扱う装置で待ち合わせが発生していることが分かりました。
では、なぜ整数型loadで待ち合わせが発生しているのでしょうか。メトロでは30年間で2700件を超えるチューニングに対応してきたこれまでの知見から、複雑なアセンブラコードの中で目星をつけ、検証と分析を繰り返して原因を絞り込んでいきます。
コアレベルの並列性の向上についての原因と対策
16並列(改善前)

16並列(改善後)

最もボトルネックになっていたのは、コンパイラが内部で生成するallocate関数が各スレッドから同時期に実行され、大きなコンフリクトが発生していたことでした。
この問題を解決するには複数の手法がありますが、プログラムの特性と環境を考慮した結果、ポインタ配列をローカル配列にコピーして、その配列を引数とすることが最適な手法だと考えられました。これによりローカル配列はスレッドスタック領域に確保されるため、関数を呼び出すたびに発生していたヒープ領域のコンフリクトが解消されます。
コアレベルの並列性の向上についての性能改善の結果
今回の事例では改善前と比較して、7.15倍高速化することができました。スレッド並列化はマルチコアを活用する大変有効な手段です。しかし、ハードウェア本来の性能十分に発揮するには、コンパイラとハードウェアを熟知し、並列実行時に発生するボトルネックを正しく分析し適切に対処することが必要となります。
さらに命令レベルの並列性の向上を合わせて行うことで、最終的には9.98 倍の性能向上を実現することが可能になりました。
資料ダウンロード
本事例のPDF資料のダウンロードをご希望される方は、下記フォームにお客様情報をご入力ください。
個人情報の取り扱いについて
お客様からいただく個人情報は、情報提供のために使用させていただきます。これにあたり、株式会社メトロからご連絡を取らせていただくことがございます。個人情報の取り扱いについてはプライバシーポリシー をご覧ください。
関連サービス
アプリ高速化サービス
スーパーコンピュータや組み込み向けアプリケーションの動作が遅くなるボトルネックを解消し、開発・研究にかかる期間の短縮や経費削減に繋げます。
コンパイラ開発
コンパイラの性能改善やアーキテクチャ対応、プログラム言語の新しい規格への対応など、プロセッサの性能を引き出すための独自コンパイラを開発いたします。
個人情報の取り扱いについて
お客様からいただく個人情報は、情報提供のために使用させていただきます。これにあたり、株式会社メトロからご連絡を取らせていただくことがございます。個人情報の取り扱いについてはプライバシーポリシー をご覧ください。