Bỏ qua

Translation update pending

The Vietnamese translation may be out of date because the Japanese source has changed. The existing translation remains available while it is being updated.

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:managed bằng mem:unified theo 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

Không dùng OpenACC (phiên bản CPU)

Để biên dịch phiên bản CPU bằng các trình biên dịch NVIDIA HPC SDK mà không dùng OpenACC, hãy chỉ định -DNVHPC_NO_ACC=ON. Khi đó, -acc, -Minfo=accel và -gpu=ccnative,mem:managed không được thiết lập. Dùng cấu hình này khi so sánh kết quả tính toán với phiên bản GPU được biên dịch bằng cùng các trình biên dịch.

mkdir build
cd build
CC=nvc CXX=nvc++ FC=nvfortran cmake \
  -DNVHPC_NO_ACC=ON \
  -DWITH_MPI=OFF -DWITH_OPENMP=ON \
  ..
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).

Không MPI

nsys profile -t cuda -s none -o profile_result /path/to/FrontISTR/build/fistr1/fistr1

Có MPI

nsys profile -t cuda,mpi -s none -o profile_result \
  mpiexec -n <số-tiến-trình> /path/to/FrontISTR/build/fistr1/fistr1 -t 8