PETSc

PETSc Argonne National Laboratory Na licencji: otwarta Lista aplikacji

Portable Extensible Toolkit for Scientific Computation (PETSc) to biblioteka procedur numerycznych rozwijana od początku lat 90-tych przez ludzi z Argonne National Laboratory. Procedury w niej zawarte służą do rozwiązywania zagadnień powstałych w wyniku dyskretyzacji równań różniczkowych cząstkowych. Biblioteka jest przeznaczona przede wszystkim do zagadnień o dużych rozmiarach z możliwością dekompozycji na mniejsze podzadania. Podzadania mogą być, pod kontrolą biblioteki, rozwiązywane równolegle na wielu procesorach. PETSc działa w oparciu o bibliotekę MPI, obsługa komunikacji w obliczeniach równoległych jest jednak w pewnym stopniu zautomatyzowana.

Spis treści

Do czego służy PETSc

PETSC zawiera gotowe i przetestowane procedury równoległego rozwiązywania układów równań:

  • liniowych metodami bezpośrednimi i iteracyjnymi z możliwością preconditioningu,
    • jest możliwe konstruowanie własnych preconditionerów,
  • nieliniowych metodą Newtona i metodami pochodnymi,
  • ewolucyjnych,

a także:

  • równoległe operacje na wektorach i macierzach,
  • graficzne obrazowanie używanych obiektów,
  • profiling.

Biblioteka jest napisana w języku C, jednak jej konstrukcja pozwala na programowanie w stylu obiektowym. Moduły PETSC składają się z wydzielonej rodziny obiektów matematycznych (wektory, macierzy, solwery, ...) i operacji wykonanych na nich. Dodatkowo każdy obiekt (w szczególności wektor i macierz) jest obiektem rozproszonym, tzn. może zostać podzielony na wiele procesorów w celu pózniejszych obliczeń równoległych. Budowa klas w bibliotece przypomina klasy w C++. Można się odwoływać do niej z programów napisanych w językach C, C++, Fortran i Python.


Strukturę biblioteki obrazuje diagram

Wykorzystywane biblioteki

Wykorzystuje ona wbudowane biblioteki BLAS (operacje na wektorach i gęstych macierzach), LAPACK (algebra liniowa dla macierzy gęstych) i MPI (komunikacja pomiędzy procesorami, implementowany na większości komputerów równoległych i stacji roboczych). PETSc wykorzystuje także zmodyfikowane biblioteki LINPACK, SPARSPAK, SPARSKIT, libtfs.

Dostępne solvery

Łączenie z zewnetrznymi pakietami

PETSc można wywoływać za pośrednictwem zewnętrznego oprogramowania, między innymi:

  • ADIC/ADIFOR narzędzie do automatycznego różniczkowania funkcji i wyznaczania rozrzedzonego jakobianu
  • Mathematica
  • MATLAB
  • MUMPS MUltifrontal Massively Parallel sparse direct Solver
  • Sundial/CVODE the LLNL SUite of Nonlinear and DIfferential/ALgebraic equation Solvers
  • SuperLU/SuperLU_Dist robust and efficient sequential and parallel direct sparse solves
  • UMFPACK sparse direct solvers, developed by Timothy A. Davis.

Kompetna lista na stronach domowych PETSc.

Rozwiązywanie równoległe

Biblioteka jest zorientowana na pracę równoległą. Obsługiwane architektury to:

  • IBM PC, pracujące pod Linux, Windows,
  • unixowe stacje robocze,
  • siec takich komputerów połączonych Ethernetem,
  • superkomputery masywnie równolegle.

Kompilowanie i uruchamianie programów (halo2)

Na początek musimy przygotować środowisko:

module load openmpi/1.4.4/gcc4.3.4
module load petsc

Od tej pory katalog główny PETSc znajduje się w zmiennej środowiskowej PETSC_DIR. Można go zobaczyć wywołując komendę echo $PETSC_DIR.

Załóżmy, że nasz program znajduje się w pliku mojprog.c. Kompilacja wygląda następująco:

mpicc -O2 -I"$PETSC_DIR"/include -L"$PETSC_DIR"/lib mojprog.c -lpetsc -lgfortran -lblas -llapack -lX11

Po kompilacji stworzony zostanie plik wynikowy a.out. Przykładowy skrypt systemu kolejkowego (program wypełni 4 węzły = 64 rdzenie):

#!/bin/tcsh
#PBS -N mojprog-test
#PBS -l nodes=4:ppn=16
#PBS -l mem=1024mb
#PBS -l walltime=0:30:00
#PBS -A G0-000
#PBS -q halo2

module load openmpi/1.4.4/gcc4.3.4

cd $PBS_O_WORKDIR
mpiexec -np 64 ./a.out

Podręcznik

Podręcznik biblioteki PETSc: