Для программы 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/)