Biên dịch với GPU¶
FrontISTR có thể chạy trên GPU bằng chức năng OpenACC của NVIDIA HPC SDK. Trang này mô tả quy trình biên dịch có bật GPU và cách thực thi.
Về các thư viện tiên quyết, xem Thư viện phụ thuộc bắt buộc và tùy chọn.
Quy trình biên dịch¶
Sử dụng các trình biên dịch của NVIDIA HPC SDK (nvc, nvc++, nvfortran). Trong môi trường cụm HPC, cần nạp NVIDIA HPC SDK trước khi biên dịch theo hướng dẫn của môi trường (ví dụ: module load nvhpc).
Vì các thư viện tùy chọn như METIS, MUMPS và MKL không hỗ trợ GPU, chúng được tắt trong các ví dụ lệnh bên dưới (chẳng hạn WITH_METIS=OFF).
Như mô tả trong Quy trình biên dịch bằng CMake, khi chỉ định các trình biên dịch NVIDIA HPC SDK (nvc, nvc++, nvfortran), -gpu=ccnative,mem:managed được thiết lập trong CMakeLists.txt. ccnative là tùy chọn tự động phát hiện GPU của môi trường biên dịch và chọn mục tiêu tối ưu, nên không cần chỉnh sửa thủ công cho từng môi trường. mem: là tùy chọn chỉ định cách xử lý bộ nhớ GPU; vì triển khai GPU của FrontISTR giả định Unified Memory nên bắt buộc phải chỉ định tùy chọn này. mem:managed là thiết lập mặc định cho các môi trường thông thường nơi CPU và GPU có bộ nhớ riêng biệt.
Lưu ý: Trên các kiến trúc như Miyabi (GH200), nơi CPU và GPU được tích hợp qua NVLink, hãy thay
mem:managedbằngmem:unifiedtheo môi trường sử dụng (-gpu=ccnative,mem:unified).
OpenACC + OpenMP (không MPI)¶
mkdir build
cd build
CC=nvc CXX=nvc++ FC=nvfortran cmake \
-DWITH_MPI=OFF -DWITH_OPENMP=ON \
-DWITH_METIS=OFF -DWITH_MUMPS=OFF \
-DWITH_MKL=OFF -DWITH_LAPACK=OFF \
-DWITH_ML=OFF -DWITH_REFINER=OFF -DWITH_REVOCAP=OFF \
..
make -j
OpenACC + OpenMP + MPI¶
Khi sử dụng MPI, trình biên dịch wrapper của MPI (như mpicc) phải được cấu hình để gọi trình biên dịch NVIDIA HPC SDK (như nvc) ở bên trong. Trong nhiều môi trường cụm HPC, cấu hình này được thiết lập tự động khi nạp NVIDIA HPC SDK và thư viện MPI bằng các lệnh như module load; tuy nhiên phiên bản khuyến nghị và quy trình nạp khác nhau tùy môi trường, vì vậy hãy tham khảo hướng dẫn sử dụng của từng môi trường để biết chi tiết.
mkdir build
cd build
CC=mpicc CXX=mpic++ FC=mpif90 cmake \
-DWITH_MPI=ON -DWITH_OPENMP=ON \
-DWITH_METIS=OFF -DWITH_MUMPS=OFF \
-DWITH_MKL=OFF -DWITH_LAPACK=OFF \
-DWITH_ML=OFF -DWITH_REFINER=OFF -DWITH_REVOCAP=OFF \
..
make -j
Cách thực thi¶
Quy trình chạy bản biên dịch GPU về cơ bản không khác trường hợp CPU. Về quy trình thực thi chung, xem Hướng dẫn thực thi.
Profiling¶
Có thể thu thập dữ liệu profiling bằng NVIDIA Nsight Systems (nsys).