Смекни!
smekni.com

Динамический контроль корректности OpenMP-программ (стр. 6 из 6)

Для программы Jacobi_error отладчик Inte Thread Checker (ITC) выдал диагностику, описанную в таблице 3.

Таблица 3: диагностика программы Jacobi_error отладчиком Intel Thread Checker

Short description

description

count

Write -> Read data-race

Memory read at "Jacobi_err.F90":37 conflicts with a prior memory write at "Jacobi_err.F90":37 (flow dependence)

4686295

Write -> Write data-race

Memory write at "Jacobi_err.F90":37 conflicts with a prior memory write at "Jacobi_err.F90":37 (output dependence)

5727667

Read -> Write data-race

Memory write at "Jacobi_err.F90":37 conflicts with a prior memory read at "Jacobi_err.F90":37 (anti dependence)

1041372

Write -> Read data-race

Memory read at "Jacobi_err.F90":37 conflicts with a prior memory write at "Jacobi_err.F90":39 (flow dependence)

2400402

Write -> Read data-race

Memory read at "Jacobi_err.F90":38 conflicts with a prior memory write at "Jacobi_err.F90":39 (flow dependence)

2400717

Write -> Read data-race

Memory read at "Jacobi_err.F90":39 conflicts with a prior memory write at "Jacobi_err.F90":38 (flow dependence)

2401245

Read -> Write data-race

Memory write at "Jacobi_err.F90":39 conflicts with a prior memory read at "Jacobi_err.F90":38 (anti dependence)

2401283

Read -> Write data-race

Memory write at "Jacobi_err.F90":39 conflicts with a prior memory read at "Jacobi_err.F90":37 (anti dependence)

315

Read -> Write data-race

Memory write at "Jacobi_err.F90":38 conflicts with a prior memory read at "Jacobi_err.F90":39 (anti dependence)

321

Диагностика программы Jacobi_error, выданная реализованным мной отладчиком (debugger), выглядит следующим образом.

(Jacobi_err.fdv:37 - Jacobi_err.fdv:37):variable eps - shared error(write-read)

(Jacobi_err.fdv:37 - Jacobi_err.fdv:37):variable eps - shared error(write-write)

(Jacobi_err.fdv:39 - Jacobi_err.fdv:37):array b - shared error(write-read)

(Jacobi_err.fdv:38 - Jacobi_err.fdv:39):array a - shared error(write-read)

Jacobi_err.fdv:49: variable init - init error

В таблице 4 приведены времена выполнения описанных программ для обоих инструментов (ITC, debugger), включая контрольный запуск программы без отладки (original).

Таблица 4: Время выполнения программ в секундах.

original debugger ITC
Jacobi_correct 0,66 183 193
Jacobi_error 0,87 322 438

Заключение

В рамках проделанной работы были разработаны алгоритмы нахождения ошибок, описанных в постановке задачи, а также на их основе создан отладчик, осуществляющий динамический контроль корректности OpenMP-программ, написанных на языке Fortran 77.

Общий объем исходного кода разработанного отладчика составил около 4000 строк.

Было проведено тестирование, которое позволило оценить замедление скорости работы программы под управлением отладчика, а так же увеличение объема потребляемой памяти. Дополнительно реализованный отладчик был сравнен с существующим отладчиком Intel Thread Checker.

Для применения отладчика для реальных производственных программ, которые невозможно отлаживать на модельных исходных данных, требуется реализовать методы выборочного контроля, позволяющие кардинально сократить накладные расходы, сохранив высокую вероятность обнаружения ошибок и их точную локализацию.


Литература

1. OpenMP Application Program Interface Version 2.5 May 2005 [PDF](http://www.openmp.org/mp-documents/spec25.pdf)

2. Christian Terboven. Comparing Intel Thread Checker and Sun Thread Analyzer. 2007. [PDF](http://www.fz-juelich.de/nic-series/volume38/terboven.pdf)

3. M. Suess, C. Leopold. Common mistakes in OpenMP and how to avoid them. 2006. [PDF](http://www.michaelsuess.net/publications/suess_leopold_common_mistakes_06.pdf)

4. Sun Studio 12: Thread Analyzer User'sGuide. 2007 [HTML,PDF](http://docs.sun.com/app/docs/doc/820-0619)

5. Intel Thread Checker 3.1 – Documentation. [PDF](http://software.intel.com/en-us/articles/intel-thread-checker-documentation/)