Przejdź do treści

Translation update pending

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

Kompilacja z obsługą GPU

FrontISTR może działać na GPU z wykorzystaniem funkcjonalności OpenACC dostępnej w NVIDIA HPC SDK. Na tej stronie opisano sposób zbudowania FrontISTR z włączoną obsługą GPU oraz sposób jego uruchamiania.

Informacje o wymaganych bibliotekach znajdują się w Wymagane i opcjonalne zależności.

Procedura kompilacji

Użyj kompilatorów NVIDIA HPC SDK (nvc, nvc++ i nvfortran). W środowisku klastra HPC przed rozpoczęciem budowania należy załadować NVIDIA HPC SDK zgodnie z instrukcją danego środowiska (na przykład module load nvhpc).

Opcjonalne biblioteki, takie jak METIS, MUMPS i MKL, nie obsługują GPU, dlatego w poniższych przykładach poleceń są wyłączone (na przykład WITH_METIS=OFF).

Jak opisano w Kompilacja za pomocą CMake, po wskazaniu kompilatorów NVIDIA HPC SDK (nvc, nvc++, nvfortran) w CMakeLists.txt ustawiane jest -gpu=ccnative,mem:managed. ccnative jest opcją, która automatycznie wykrywa GPU w środowisku budowania i wybiera optymalny cel, dlatego nie trzeba ręcznie dostosowywać ustawień do każdego środowiska. mem: określa sposób obsługi pamięci GPU; jest wymagane, ponieważ implementacja GPU w FrontISTR zakłada użycie Unified Memory. mem:managed jest ustawieniem domyślnym dla typowych środowisk, w których CPU i GPU mają oddzielną pamięć.

Uwaga: W architekturach takich jak Miyabi (GH200), w których CPU i GPU są zintegrowane przez NVLink, zamiast mem:managed używa się mem:unified; ustawienie należy zmienić odpowiednio do używanego środowiska (-gpu=ccnative,mem:unified).

OpenACC + OpenMP (bez 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

Podczas korzystania z MPI kompilatory-wrappery MPI (takie jak mpicc) muszą być skonfigurowane tak, aby wewnętrznie wywoływały kompilatory NVIDIA HPC SDK (takie jak nvc). W wielu środowiskach klastrów HPC załadowanie NVIDIA HPC SDK i bibliotek MPI poleceniami takimi jak module load automatycznie zapewnia taką konfigurację. Zalecane wersje i procedury ładowania różnią się jednak między środowiskami, dlatego szczegółowe informacje należy sprawdzić w podręczniku użytkownika lub innej dokumentacji danego środowiska.

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

Bez OpenACC (wersja CPU)

Aby zbudować wersję CPU za pomocą kompilatorów NVIDIA HPC SDK bez użycia OpenACC, podaj -DNVHPC_NO_ACC=ON. W takim przypadku nie są ustawiane -acc, -Minfo=accel ani -gpu=ccnative,mem:managed. Tego ustawienia używaj do porównywania wyników z wersją GPU zbudowaną tymi samymi kompilatorami.

mkdir build
cd build
CC=nvc CXX=nvc++ FC=nvfortran cmake \
  -DNVHPC_NO_ACC=ON \
  -DWITH_MPI=OFF -DWITH_OPENMP=ON \
  ..
make -j

Uruchamianie

Procedura uruchamiania wersji z obsługą GPU jest zasadniczo taka sama jak dla wersji CPU. Ogólną procedurę uruchamiania opisano w Przewodniku uruchamiania.

Profilowanie

Dane profilowania można zbierać za pomocą NVIDIA Nsight Systems (nsys).

Bez MPI

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

Z MPI

nsys profile -t cuda,mpi -s none -o profile_result \
  mpiexec -n <liczba_procesów> /path/to/FrontISTR/build/fistr1/fistr1 -t 8