next up previous contents
Next: Параллельное программирование Up: Простые примеры PETSc Previous: Нелинейные решатели   Contents

Контроль ошибок

Все процедуры PETSc возвращают целое число, указывающее, возникла ли ошибка при вызове. Макрос CHKERRQ(ierr) в PETSc проверяет значение ierr и вызывает обработчик ошибок PETSc, при их обнаружении. CHKERRQ(ierr) нужно использовать во всех процедурах, чтобы обеспечить полный контроль ошибок. Ниже приведена трасса, созданная контролем ошибок в примере программы PETSc. Ошибка возникла в строке 1673 файла
${PETSC_DIR}/src/mat/impls/aij/seq/aij.c и была вызвана попыткой распределения памяти для слишком большого массива. Процедура была вызвана в программе ex3.c, в строке 71. eagle:mpirun -np 1 ex3 -m 10000 PETSC ERROR: MatCreateSeqAIJ() line 1673 in src/mat/impls/aij/seq/aij.c PETSC ERROR: Out of memory. This could be due to allocating PETSC ERROR: too large an object or bleeding by not properly PETSC ERROR: destroying unneeded objects. PETSC ERROR: Try running with -trdump for more information. PETSC ERROR: MatCreate () line 99 in src/mat/utils/gcreate.c PETSC ERROR: main() line 71 in src/sles/examples/tutorials/ex3.c MPI Abort by user Aborting program ! Aborting program! p0 28969: p4 error: : 1

При использовании версий библиотек PETSc для отладки (откомпилированных с опцией BOPT=g) можно также проверять нарушения памяти (запись за границами массива и т.д.). Макрос CHKMEMQ можно вызывать в любом месте кода для проверки текущего состояния памяти и нарушений. Помещая в свой код несколько (или много) таких макросов, вы можете легко отследить, в какой части кода происходит нарушение.



2004-06-22