FLUENTやCFX(ANSYS)はNUMAに対応しているのか?
| 登録日 | :2024/05/23 04:15 |
|---|---|
| カテゴリ | :SLURM |
ANSYSのFLUENTおよびCFXは、NUMA(Non-Uniform Memory Access)アーキテクチャに対応しています。これらのソフトウェアは、大規模な並列計算を効率的に行うために、NUMAアーキテクチャの特性を利用するように設計されています。以下に、FLUENTおよびCFXがNUMAに対応している点について詳しく説明します。
ANSYS FLUENT
- NUMA認識: FLUENTはNUMAアーキテクチャを認識し、最適なメモリ配置を利用することで、計算性能を最大化します。
- パフォーマンス最適化: NUMAアーキテクチャにおいて、データがプロセッサのローカルメモリに配置されるように最適化することで、メモリアクセスのレイテンシを低減し、パフォーマンスを向上させます。
- コア・アフィニティ設定: FLUENTはプロセスやスレッドを特定のCPUコアにバインド(アフィニティ設定)することができ、NUMA環境での効率的なリソース利用をサポートします。
ANSYS CFX
- NUMA対応: CFXもNUMAアーキテクチャに対応しており、メモリのローカリティを考慮した計算を行うことができます。
- メモリ配置の最適化: CFXは、メモリを適切に配置し、リモートメモリアクセスの回数を最小限に抑えることで、計算性能を向上させます。
- 並列計算の効率化: CFXはNUMAアーキテクチャを活用して、並列計算の効率を最大化するための機能を提供しています。
最適化のポイント
- プロセス・アフィニティ: プロセスやスレッドが特定のNUMAノードのCPUコアにバインドされるように設定することで、ローカルメモリアクセスが優先され、性能が向上します。
- 環境変数の設定: 特定の環境変数を設定することで、FLUENTやCFXのNUMA対応を最適化することができます。
- 実行時オプション: ANSYSのソルバーには、実行時にNUMA最適化を行うオプションが提供されている場合があります。
NUMA最適化の設定例
例えば、FLUENTを実行するSLURMジョブスクリプトでは、NUMAアフィニティを設定することが推奨されます。
#!/bin/bash
#SBATCH --job-name=fluent_job
#SBATCH --output=fluent_output.txt
#SBATCH --error=fluent_error.txt
#SBATCH --ntasks=8
#SBATCH --cpus-per-task=4
#SBATCH --mem=32G
# NUMAアフィニティの設定
export OMP_NUM_THREADS=4
export KMP_AFFINITY=granularity=fine,compact,1,0
# Fluentの実行
/path/to/fluent -g -i inputfile.jou
このスクリプトでは、OMP_NUM_THREADS および KMP_AFFINITY 環境変数を設定することで、FLUENTがNUMA環境で効率的に動作するようにしています。
まとめ
ANSYSのFLUENTおよびCFXはNUMAアーキテクチャに対応しており、適切に設定することで高い計算性能を発揮することができます。NUMA最適化のための設定やオプションを利用して、メモリのローカリティを考慮した計算を行うことで、リソースを効率的に使用し、計算時間を短縮できます。他に具体的な質問があれば教えてください。
Appendix
ANSYSとNUMAの参考情報メモ
-
https://www.dell.com/support/kbdoc/en-us/000151394/dell-technologies-ansys-performance-with-amd-epyc-7002-series-processors
-
https://forum.ansys.com/forums/topic/numa-nodes/
-
https://www.ansys.com/content/dam/amp/2023/august/quick-request/ansys-applications-amd-supermicro-h13-hyper-servers.pdf
-
https://www.cfd-online.com/Forums/hardware/196400-amd-epyc-cfd-benchmarks-ansys-fluent.html
環境変数を設定するとともに、SLURMにも以下のオプションによるリソース要求が必要になるのかもしれない。
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=64
#SBATCH --cpus-per-task=1
#SBATCH --mem=1024G