next up previous contents
Next: Профилирование нескольких секций кода Up: Начальные сведения о PETSc Previous: Использование -log_mpe вместе с   Contents

Профилирование кода приложения

PETSc автоматически регистрирует создание объектов, время, и количество операций с плавающей точкой для библиотечных процедур. Пользователи могут легко использовать эту информацию для мониторинга кодов приложения. Базовые этапы, выполняемые при регистрации пользовательского участка кода, называемого событием, показаны во фрагменте кода ниже:

#include "petsclog.h"

int USER_EVENT;

PetscLogEventRegister (&USER_EVENT,"User event name",0);

PetscLogEventBegin (USER_EVENT,0,0,0,0);

/* сегмент кода приложения для мониторинга */

/*количество операций flops для этого сегмента кода */

PetscLogFlops();

PetscLogEventEnd (USER_EVENT,0,0,0,0);

Нужно зарегистрировать событие, вызвав PetscLogEventRegister(), и присвоить ему уникальный целочисленный номер для идентификации события при регистрации:

PetscLogEventRegister (int *e,const char string[]);
Здесь string - пользовательское имя события, а color - необязательный пользовательский цвет события (для использования в регистрации для Upshot/Nupshot); можно посмотреть справочную страницу о деталях. Агрумент, возвращаемый в e, должен затем быть передан в процедуры PetscLogEventBegin() и PetscLogEventEnd(). События регистрируются с использованием пары:

PetscLogEventBegin (int event, PetscObject o1,

  PetscObject o2, PetscObject o3,PetscObject o4);

PetscLogEventEnd (int event, PetscObject o1,

  PetscObject o2, PetscObject o3,PetscObject o4);

Четыре указанных объекта являются объектами PETSc, которые наиболее полно ассоциируются с событием. Например, в произведении матрица-вектор они могут быть матрицей и двумя векторами. Эти объекты можно опустить, определив значение 0 для o1 - o4. Код между двумя этими вызовами процедур будет автоматически учитывать время и регистрироваться как часть определенного события. Пользователь может регистрировать количество операций с плавающей точкой в этом сегменте кода, вызывая:

PetscLogFlops (количество flops в этом сегменте кода);
между вызовами PetscLogEventBegin () и PetscLogEventEnd (). Это значение будет автоматически добавлено к общему счетчику flops для всей программы.



2004-06-22