编译器和数值库
HPC 映像注意事项
建议用于生成和运行紧密耦合应用程序的 HPC 映像是 Azure 市场中提供的 CentOS-HPC 7.8+ 映像。 此映预安装了 Mellanox Openfabrics Enterprise Distribution (MOFED)。 该映像具有更高的设置限制,包含消息传递 (MPI) 库(如 HPCX、OpenMPI 和 Intel MPI)和 AMD 已优化的 CPU 库 (AOCL)。 所有 MPI 库和数值库均可通过环境模块文件获得。 可以使用 Azure 映像生成器或 HashiCorp Packer 创建自己的 HPC 映像,但需要安装 MOFED 才能访问 InfiniBand 网络。
编译器注意事项
所有常用编译器均应该能够在所有 Azure HPC VM 上运行。 如果应用程序的生成指令建议使用特定编译器和编译器标志,请先尝试建议的编译器,然后再尝试一些其他的编译器优化。 对于 AMD EPYC 处理器(例如:HB120_v2 和 HB60),你需要使用相对较新的编译器来确保该处理器支持针对此体系结构的优化。 对于 GCC,则至少应使用 7.4 版或更高版本。 如果可能,请使用 CentOS-HPC 映像中包含的 GCC 9.2.0。
特定于 HC44
HC44 VM 是一个双套接字 Intel Skylake 处理器,因此建议使用 Intel 编译器(如果可能)。 如果要编译的应用程序有浮点限制,并且你怀疑积和熔加运算主导浮点运算,则可以尝试启用 AVX 512 指令。 为此,请添加这些编译标志:
-O3 -xHost -xCORE-AVX512
特定于 HB120_v2 和 HB60
Intel 编译器在 AMD EPYC 处理器上表现良好。 如果你的应用程序属于浮点密集型,则可以使用以下编译标志来启用 AVX2:
-O3 --march=core-avx2
AMD 优化编译器套件 (AOCC) 专门针对 AMD 处理器进行了调整,可能提高在 AMD 设备上的性能。
注意
AOCC 编译器并没有 GCC 和 Intel 编译器那样热门。 某些应用程序如果不进行一些修改可能无法进行编译。
数值库注意事项
若干 HPC 应用程序依赖于基本线性代数子程序 (BLAS)、线性代数包 (LAPACK) 以及西方快速傅立叶变换 (FFTW)。 这些数值运算可能在总的浮点运算中占有相当大的比例。 你应该使用这些库的调整版本,而不是未调整的引用实现。
特定于 HC44
适用于 Intel 处理器的最佳调整 BLAS、LAPACK 和 FFTW 库包含在 Intel 数学内核库 (MKL) 中。 MKL 环境具有构建 FFTW 包装器的脚本,因此你可以通过 FFTW API 访问经过调整的 Intel FFT 库。
特定于 HB120_v2 和 HB60
AMD 优化 CPU 库 (AMD-AOCL),包含调整的 BLAS 库 (AMD BLIS)、调整的 LAPACK (AMD libFLAME) 以及调整的 FFTW 库 (AMD FFTW)。 Azure 市场中的 CentOS-HPC 7.8+ 映像上也提供这些调整的库。