GPU概要 GPU

GPUを積極的に活用する時代へ

今般、CAEやシミュレーションに関わるHPCワークフローの生産性を高めるためには、「GPU」による高速処理を活用することが必須となってきております。従来の「CPU」を使った並列加速性に比較して、より大きな性能加速性を得ることができ、さらに対費用効果も高いという理由からです。

でも、「GPUを利用するにはいろいろ大変だな?」と思っている方、もう、その心配には及びません。昨今のGPUのハードウェアやソフトウェアの新しい技術革新は、GPUの利用の妨げになっていた問題を解決し、本格的にGPUを活用した業務の実用域に入ってきました。その技術革新とは何か、以下の4つに着目し説明しましょう。

1.GPUの搭載メモリ容量が80GBといった大容量になったこと

​数値モデルの計算対象領域をまかなえる程度のメモリ容量がシングルノード(1GPU)で使えるのであれば、マルチノード用の分散並列処理をしなくても済みます。現在のプロダクション用途のCAE業務やシミュレーションの処理では、例えば80GBというサイズは十分と言えましょう。シングルノードで大きなメモリを使用できることは、煩雑なMPIを使ったマルチノード用の並列プログラミングを行う必要はありません。これは、一般ユーザにとって最大のメリットとなります。

一方、こうした場合では、大きなメモリ域を使用する計算(=計算量が自ずと多くなる)での演算能力がクローズアップしてきます。メモリ容量の大きさに応じた計算処理能力のバランス性の良し悪しが、スループット性に影響してきます。仮に、このような大規模な計算をシングルノードの「CPU」のマルチコア並列で実施した場合、その計算の終了が見えないという事態が発生する可能性があります(ノード内のCPU演算能力だけでは対応できず、マルチノードのCPU並列能力を使わざるを得ないという状況となり、MPI実装が必然となってしまいます。これが現在のCPUマルチコアを主体としたHPC環境そのものです)。一方、「GPU」システムの場合は、超並列コアによる並列演算とバランスの取れたメモリ帯域を有することにより、シングルノードのメモリ容量が大きくなっても、合理的な範囲でのスループット性を享受できます。以上が大容量メモリを搭載したシングルノードGPUを使用するメリットです。

2.OpenACCディレクティブでコンパイラを通して、GPU並列コードを自動で生成できること

「MPI並列プログラミングは避けることができそうだけど、今後はGPU並列化のプログラミングの方も厄介ですね?」という問題が現れます。「これを解決しないとGPUなんか、とても使えないよ!」ということになります。

OpenACCでプログラミングすることで、コンパイラが自動的にGPU用の並列コードを作成してくれます。OpenACCは、CPU/GPUシステムの並列プログラミングを単純化する標準規格です。プログラマーが行うことは、C++、C、Fortran プログラムに並列化対象とする箇所をディレクティブ行で指示することだけです。CUDAのようなプリミティブな言語で難解なコーディングは必要ありません。その性能も多くの場合、CUDAコードと比較して大差はありません。また、GPU用の並列コードだけでなく、コンパイラ・オプションの変更だけでマルチコアCPU用の並列化コードもコンパイラが生成してくれます。すなわち、ソースコードを変更せずコード・ポータビリティを維持しながら、CPU上でもGPU上においても「性能」に関してのポータビリティも提供できるのがOpenACCということになります。

しかし、ディレクティブだけでGPU用の並列コードを自動生成できる一方で、「GPU」プログラミングは「CPU」プログラミングよりも難しくしていることがあります。これは、並列プログラミング自体のことではありません。開発における余分な労力の多くは、GPUデバイスのメモリがCPUシステムのメモリから物理的に分離されているという事実から生じています。GPU上で動作させるには、プログラマはホスト(CPU)メモリとデバイス(GPU)メモリ間のデータ移動を管理する必要があります。当該データ移動についても、基本的にはコンパイラが自動的にコード生成します。しかしながら、データ移動コストは性能に大きな影響を与える部分であり、OpenACCのデータ・ディレクティブでデータ移動の最適化を行う必要があります。従来の「CPU」プログラミングから較べるとひと手間増えることになります。この問題に対して、以下の3番目に説明する「CUDA Unified Memory」の開発により、GPUプログラム開発の生産性が大幅に向上しました。すなわち、データ・ディレクティブなしでOpenACCを使用してGPUコードを作成できるようになりました。

3.CUDA Unified Memory機能によりホストメモリとデバイスメモリ間のデータ移動の自動管理ができたこと

GPUまたは接続されたアクセラレータを使用してシステムをプログラミングする際の最も重要な問題の一つは、ホストメモリとデバイスメモリ間のデータ移動を管理することでした。

この問題を解決したのは、「OpenACC」と「NVIDIA CUDA  Unified Memory」機能の提供です。前者は、コーディングせずともディレクティブ(指示行)でデータ移動を管理できる機能であり、そしてコンパイラがそのコードを生成してくれる機能です。後者は、ホストメモリとデバイスメモリ間の「動的に割り当てられたデータ」の移動を自動処理できる機能です。CUDA Unified Memoryの開発とこの機能がOpenACCの中に併合されることにより、GPU並列プログラミングのデータ管理に大きな影響を与え、プログラムの高速化に係る生産性が大幅に向上しました。

OpenACCプログラマーへの影響は劇的でした。最新のFortran、C、およびC ++アプリケーションの多くは、大きなデータ構造を動的(ダイナミック)に割り当てて使用します。こうしたプログラムでは、OpenACCに移植する際の明示的なデータ管理の必要性はほとんどなくなりました。プログラマーは、アルゴリズムとループを作り直して並列処理を最適化することに集中し、CUDA Unified Memoryマネージャーに、ほとんどのデータ移動の処理を任せることができます。

動的に割り当て不可能なデータ(スタックとすべての静的データとグローバルデータ)をUnified Memoryに配置する機能は今後の技術的課題ですが、これが可能となれば、ユーザーが管理するデータ移動の必要性が完全になくなり、GPUの広範なプログラミングへの道が開かれます。

そして、GPUプログラミングをより簡単にできるように開発してきたOpenACCやUnified Memory技術が、ISO標準言語対応のコンパイラ技術に反映されつつあります。プログラマーに大きな負担を掛けずに、ハイブリッドアクセラレーションシステムで高速性を享受できる日が一歩づつ、近づいて来ています。

4.ISO C++、ISO Fortran標準言語でGPUプログラミングが可能な世界へ

ISO標準規格化されたC++、Fortran言語上では、自動並列実行を可能にするという明確な目的で使用するシンタックスが用意されております。これは、C++17から追加された C++ Parallel Algorithmsであり、 Fortran2018 の DO CONCURRENT シンタックスです。NVIDIA HPC SDKに含まれるNVC++、NVFORTRANコンパイラでは、こうしたシンタックスを使用することにより、自動GPUオフロードするコードを生成できるようになっています。NVIDIA HPC SDKのAccelarated Programming の取り組みに関しては、こちらの資料をご参照ください。

ディレクティブ を記述することなく、「ISO標準言語」でGPUアクセラレーションコードやマルチコアCPU用の並列コードが自動で作成できる時代になってきました。こうした動きにより将来的にはISO標準言語を使うことで、異種プラットフォーム間でのソースコードのポータビリティの問題が解消していくことでしょう。今後、ISOの言語規格は、並列処理対応の構文の追加や拡張がなされていきますので、これに対応できるようなISO標準言語を使った並列化コードへの移行も視野に入れていく必要があります。

DXに取り組む上で、業務で使用する既存のプログラムの棚卸しを行い、必要となるものに対しては並列プラットフォーム対応にしておくことは必須のように思います。プロメテックでは、「プログラム高速化サービス」にて、並列化・高速化に関してのご相談も承りますので、どうぞお問い合わせください

HPCワークフローの生産性を向上させることは、エンジニアリングにおけるDX設計の課題の一つです。業務アプリケーションの高速化や効率的な処理は、ビジネスの競争力を左右すると言っても過言ではないでしょう。プロメテックは、新しいイノベーション技術を活用したワークフローのスループットの改善をご提案します。

既存のHPCワークロードに対してGPUアクセラレーションを活用することを考えてみませんか?

高速化やHPC技術を有したプロメテック・グループが、GPU/HPCハードウェアの提供とHPCコンサルティング・サービスを共に行い、お客様の課題解決のご支援をいたします。

GPUによる性能加速性

GPU計算性能トレンド(OSS)

TOP HPC applications の性能測定により、GPUのスループット性の変遷を評価してみると、4年間でGPUの世代(NVIDIA P100, V100, A100 )シングルGPU性能が11倍の向上を実現した。
Benchmark application: Amber / Chroma / GROMACS / MILC / NAMD / PyTorch / Espresso / Random Forest FP32 / TensorFlow / VASP 6
(左図引用:NVIDIA A100 | Tensor Core GPU )

NVIDIA HPC Application Performance

GPUを使用した、OSS各種ベンチマーク性能に関するNVIDIA WEBサイトをご紹介致します。
https://developer.nvidia.com/hpc-application-performance

反復解法ソルバ(amg-X)のGPU性能

OpenFOAM Pressure SOLVE の計算において、オープンソースのAlgebraic Multigrid Solver (AmgX) を利用した性能加速の例です。4~8倍の高速化が達成されています。大規模な連立一次方程式の反復ソルバ計算を高速化することにより、トータル時間を短縮することが可能となります。
引用:​https://wiki.openfoam.com/images/a/a4/OpenFOAM_2020_NVIDIA_Martineau.pdf 

粒子法流体解析ソフトウェア Particleworks
​GPU並列性能のスケーラビリティ

GPUを使用した実用CAEアプリケーションの例として、プロメテック・ソフトウェアが開発・販売している Particleworks による「ギアボックスのオイル撹拌解析」の例を示します。

詳細は、GDEPS WEBサイト:https://www.gdep-sol.co.jp/hp-z8-g4-cae.html

ソフトウエア:Particlework v7.1、粒子数: 陽解法 3,700万規模 陰解法 1,000万規模
OS: Red Hat® Enterprise Linux®​、CPU: インテル® Xeon® Gold 6134 プロセッサー 、GPU :NVIDIA V100S

CPU4コアに対して、約25倍の高速化

GPU2基使うと、約2倍の高速化、GPU4基 だと、約3倍の高速化

プロメテック・ソフトウエアは、NVIDIA Elite パートナーであるGDEPソリューションズと共に最新のHPC/AIサーバ及びワークステーションをご提供させて頂きます。

急用でGPUリソースが必要な際はレンタルサービスも提供しております。

導入事例 Case

HPCサービス一覧 HPC Serivce

お問い合わせ・
お申し込み・
資料請求