6.1 Общее описание

Библиотека PETSc [2], [9] успешно продемонстрировала, что использование современных парадигм программирования может облегчить разработку крупномасштабных приложений на языках Fortran, C и C++. Возникнув несколько лет назад (в 1991 году), продукт эволюционировал в мощный набор средств для численного решения дифференциальных уравнений в частных производных и сходных проблем высокопроизводительных вычислений. PETSc состоит из нескольких библиотек (подобных классам C++). Каждая библиотека оперирует определенным семейством объектов (например, векторами) и ее операции применяются к этим объектам.

Основные компоненты (модули) пакета:


PIC


Рис. 6.1: Структура пакета Petsc


Каждый модуль содержит абстрактный интерфейс (простой набор последовательностей вызова) и одну или несколько его реализаций, использующих определенные структуры данных. Таким образом, PETSc предлагает прозрачные и эффективные коды для различных фаз решения дифференциальных уравнений в частных производных с единообразным подходом к любому классу проблем. Такое построение гарантирует простое использование и сравнение различных алгоритмов. Кроме того, PETSc предоставляет удобную среду для моделирования научных приложений, а также быстрого построения или прототипирования алгоритмов. Библиотеки позволяют провести легкую настройку и расширение как алгоритмов, так и реализации. Этот подход улучшает гибкость систем и позволяет повторное использование кода, а также отделяет собственно параллелизацию от выбора алгоритма. Инфраструктура PETSc создает основу для построения крупномасштабных приложений. Ее полезно проанализировать для определения взаимосвязи между отдельными частями PETSc. Рис. 6.1 представляет собой диаграмму ее отдельных частей и иллюстрирует иерархическую организацию библиотеки, что позволяет пользователям применить уровень абстракции, наиболее подходящий для определенной задачи.

Любая программа, использующая пакет PETSc начинается с вызова

PetscInitialize (int *argc, char ***argv, char *file, char *help);

который инициализирует PETSc и MPI. Аргументы argc и argv являются аргументами командной строки, передаваемыми всем программам C и C++. Аргумент file указывает альтернативное имя файла опций PETSc, который по умолчанию находится в домашнем каталоге пользователя. Последний аргумент help является строкой символов, которая выводится, если программа запущена с опцией -help.

По умолчанию PetscInitialize() устанавливает общий коммуникатор PETSc PETSC_COMM_WORLD. Коммуникаторы являются переменными типа MPI_Comm. В большинстве случаев пользователи могут пользоваться коммуникатором PETSC_COMM_WORLD, для указания всех запущенных процессов, или PETSC_COMM_SELF, для указания одного процесса. Пользователям PETSc не нужно программировать основной обмен сообщениями непосредственно через MPI, но нужно знать основные концепции обмена сообщениями и уметь работать с распределенной памятью.

Все процедуры PETSc возвращают целое число, указывающее, возникла ли при вызове ошибка. Код ошибки устанавливается в ненулевое значение, если ошибка возникла; в противном случае возвращается 0. Для интерфейса C/C++ код ошибки является возвращаемым значением. Все программы PETSc должны вызывать PetscFinalize() в качестве последнего оператора.