Menskalakan aplikasi HPC

Perhatian

Artikel ini mereferensikan CentOS, distribusi Linux yang mendekati status End Of Life (EOL). Harap pertimbangkan penggunaan dan rencanakan yang sesuai. Untuk informasi selengkapnya, lihat panduan Akhir Masa Pakai CentOS.

Berlaku untuk: ✔️ Mesin virtual Linux ✔️ Mesin virtual Windows ✔️ Set skala fleksibel ✔️ Set skala seragam

Performa peningkatan dan perluasan skala optimal aplikasi HPC di Azure memerlukan penyesuaian performa dan eksperimen optimisasi untuk beban kerja tertentu. Bagian ini dan halaman khusus seri VM memberikan panduan umum untuk menskalakan aplikasi Anda.

Menyiapkan aplikasi

Repositori azurehpc berisi banyak contoh:

Menskalakan MPI secara optimal

Saran berikut berlaku untuk efisiensi, performa, dan konsistensi penskalaan aplikasi optimal:

  • Untuk pekerjaan skala yang lebih kecil (< koneksi 256K) gunakan: UCX_TLS=rc,sm

  • Untuk pekerjaan skala yang lebih besar (> koneksi 256K) gunakan: UCX_TLS=dc,sm

  • Untuk menghitung jumlah koneksi untuk pekerjaan MPI Anda, gunakan: Max Connections = (processes per node) x (number of nodes per job) x (number of nodes per job)

Perutean Adaptif

Perutean Adaptif (AR) memungkinkan Azure Virtual Machines (VM) yang menjalankan EDR dan HDR InfiniBand untuk secara otomatis mendeteksi dan menghindari kemacetan jaringan dengan memilih jalur jaringan yang optimal secara dinamis. Sehingga, AR menawarkan latensi dan bandwidth yang disempurnakan pada jaringan InfiniBand, yang pada gilirannya mendorong performa yang lebih tinggi dan efisiensi penskalaan. Untuk informasi selengkapnya, lihat artikel TechCommunity.

Penyematan proses

  • Pin diproses ke inti menggunakan pendekatan penyematan berurutan (bukan pendekatan penyeimbangan otomatis).
  • Pengikatan oleh Numa/Core/HwThread lebih baik daripada pengikatan default.
  • Untuk aplikasi paralel hibrid (OpenMP+MPI), gunakan empat utas dan satu peringkat MPI per [CCX](Gambaran umum komputer virtual seri HB termasuk info tentang CCX) pada ukuran VM HB dan HBv2.
  • Untuk aplikasi MPI murni, bereksperimenlah dengan antara satu hingga empat peringkat MPI per CCX untuk performa optimal pada ukuran VM HB dan HBv2.
  • Beberapa aplikasi dengan sensitivitas ekstrem terhadap bandwidth memori mungkin mendapat manfaat dari menggunakan berkurangnya jumlah inti per CCX. Untuk aplikasi ini, menggunakan tiga atau dua inti per CCX dapat mengurangi ketidakcocokan bandwidth memori dan menghasilkan performa dunia nyata yang lebih tinggi atau skalabilitas yang lebih konsisten. Secara khusus, MPI 'Allreduce' dapat memperoleh manfaat dari pendekatan ini.
  • Untuk eksekusi skala yang lebih besar, disarankan untuk menggunakan transportasi UD atau RC+UD hibrid. Banyak pustaka/pustaka runtime MPI menggunakan transportasi ini secara internal (seperti UCX atau MVAPICH2). Periksa konfigurasi transportasi Anda untuk eksekusi skala besar.

Mengompilasi aplikasi


Klik untuk memperluas

Meskipun tidak perlu, mengompilasi aplikasi dengan bendera optimisasi yang sesuai memberikan performa peningkatan skala terbaik pada VM seri HB dan HC.

AMD Optimizing C/C++ Compiler

Sistem kompilator AMD Optimizing C/C++ Compiler (AOCC) menawarkan optimisasi lanjutan tingkat tinggi, multi-alur, dan dukungan pemroses yang meliputi optimisasi global, vektorisasi, analisis antar-prosedur, transformasi perulangan, dan pembuatan kode. Biner kompilator AOCC cocok untuk sistem Linux yang memiliki GNU C Library (glibc) versi 2.17 dan yang lebih baru. Suite kompilator terdiri dari kompilator C/C++ (clang), kompilator Fortran (FLANG), frontend Fortran hingga Clang (Dragon Egg).

Clang

Clang adalah kompilator C, C++, dan Objective-C yang menangani pra-pemrosesan, penguraian, optimisasi, pembuatan kode, perakitan, dan penautan. Clang mendukung bendera -march=znver1 untuk memungkinkan pembuatan kode terbaik dan penyetelan untuk arsitektur x86 berbasis Zen AMD.

FLANG

Kompilator FLANG adalah tambahan baru-baru ini untuk suite AOCC (ditambahkan April 2018) dan saat ini dalam prarilis bagi pengembang untuk mengunduh dan menguji. Berdasarkan Fortran 2008, AMD memperluas versi GitHub FLANG. Kompilator FLANG mendukung semua opsi pengkompilasi Clang dan sejumlah opsi kompiler khusus FLANG lainnya.

DragonEgg

DragonEgg adalah plugin gcc yang menggantikan pengoptimal GCC dan generator kode dari proyek LLVM. DragonEgg yang dilengkapi dengan AOCC berfungsi dengan gcc-4.8.x, telah diuji untuk target x86-32/x86-64, dan berhasil digunakan di berbagai platform Linux.

GFortran adalah frontend aktual untuk program Fortran yang bertanggung jawab atas pra-pemrosesan, penguraian, dan analisis semantik yang menghasilkan representasi menengah (IR) GCC GIMPLE. DragonEgg adalah plugin GNU, yang dipasang ke alur kompilasi GFortran. Ini mengimplementasikan API plugin GNU. Dengan arsitektur plugin, DragonEgg menjadi penggerak kompilator, yang menggerakkan berbagai fase kompilasi. Setelah mengikuti petunjuk pengunduhan dan pemasangan, Dragon Egg dapat dipanggil menggunakan:

gfortran [gFortran flags]
   -fplugin=/path/AOCC-1.2-Compiler/AOCC-1.2-
   FortranPlugin/dragonegg.so [plugin optimization flags]
   -c xyz.f90 $ clang -O3 -lgfortran -o xyz xyz.o $./xyz

Kompilator PGI

PGI Community Edition 17 dikonfirmasi akan bekerja sama dengan AMD EPYC. Versi STREM kompilasi PGI benar-benar memberikan bandwidth memori penuh platform. Community Edition 18.10 (Nov 2018) yang lebih baru seharusnya berfungsi sama. Gunakan perintah CLI ini untuk mengkompilasi dengan Intel Compiler:

pgcc $(OPTIMIZATIONS_PGI) $(STACK) -DSTREAM_ARRAY_SIZE=800000000 stream.c -o stream.pgi

Intel Compiler

Intel Compiler 18 dikonfirmasi untuk bekerja dengan AMD EPYC. Gunakan perintah CLI ini untuk mengkompilasi dengan Intel Compiler.

icc -o stream.intel stream.c -DSTATIC -DSTREAM_ARRAY_SIZE=800000000 -mcmodel=large -shared-intel -Ofast –qopenmp

GCC Compiler

Untuk beban kerja HPC, AMD merekomendasikan pengkompilasi GCC 7.3 atau yang lebih baru. Versi lama, seperti 4.8.5 yang disertakan dengan RHEL/CentOS 7.4, tidak disarankan. GCC 7.3, dan yang lebih baru, memberikan performa yang lebih tinggi pada pengujian HPL, HPCG, dan DGEMM.

gcc $(OPTIMIZATIONS) $(OMP) $(STACK) $(STREAM_PARAMETERS) stream.c -o stream.gcc

Langkah berikutnya