Результаты тестирования
Для нахождения ошибок общей памяти, отладчику требуется, чтобы существовало, по крайней мере, две нити в параллельной области. Поэтому тестирование проводилось на многопроцессорной системе с общей памятью IBM eServer pSeries 690 (Regatta). Для отладки была взята программа Jacobi, находящая приближенное решение уравнения Пуассона методом Якоби в двумерном случае. Jacobi_org – программа без инструментации Jacobi_dbg – программа с вызовом функций отладчика
Таблица 2: время выполнения программ
Следует отметить, что отладчик обладает не полной функциональностью, т.е. не были реализованы некоторые части алгоритмов, такие как обработка common-блоков, работа с threadprivate-переменными, а также обработка директивы ORDERED и механизма замков. Все же, полученное время выполнения программы близко к окончательному, так как добавление обработки этих случаев не должно сильно повлиять на производительность. Из таблицы видно, что при отладке программа замедляется примерно в 900 раз при работе на 2-х и 4-х нитях. Это, несомненно, сильное замедление, однако, имеются возможности существенного снижения накладных расходов, за счет сокращения обрабатываемой информации. Для демонстрации работы реализованного отладчика и сравнения его с Intel Thread Checker`ом была взята та же самая программа Jacobi. Запуск производился на одной и той же машине, обеспечивающей выполнение программы на 2 нитях. Ниже приведен листинг корректной программы Jacobi. Обозначим его как Jacobi_correct. 1: PROGRAM JAC 2: PARAMETER (L=100) 3: REAL A(L,L), EPS, MAXEPS, B(L,L) 4: external omp_get_wtime; 5: double precision omp_get_wtime; 6: DOUBLE PRECISION sTime,eTime,dTime,st,et,dt; 7: INTEGER ITMAX 8: 9: sTime = omp_get_wtime(); 10: 11: ITMAX=1000 12: 13: !$OMP PARALLEL 14: !$OMP DO 15: DO 1 J = 1, L 16: DO 1 I = 1, L 17: A(I, J) = 0. 18: IF(I.EQ.1 .OR. J.EQ.1 .OR. I.EQ.L .OR. J.EQ.L) THEN 19: B(I, J) = 0. 20: ELSE 21: B(I, J) = ( 1. + I + J ) 22: ENDIF 23: 1 CONTINUE 24: !$OMP END PARALLEL 25: 26: st = omp_get_wtime(); 27: DO 2 IT = 1, ITMAX 28: EPS = 0. 29: !$OMP PARALLEL DEFAULT (SHARED) PRIVATE (I,J) REDUCTION (MAX:EPS) 30: !$OMP DO 31: DO 21 J = 2, L-1 32: DO 21 I = 2, L-1 33: EPS = MAX ( EPS, ABS( B( I, J) - A( I, J))) 34: A(I, J) = B(I, J) 35: 21 CONTINUE 36: !$OMP DO 37: DO 22 J = 2, L-1 38: DO 22 I = 2, L-1 39: B(I, J) = (A( I-1, J ) + A( I, J-1 ) + A( I+1, J)+ 40: * A( I, J+1 )) / 4 41: 22 CONTINUE 42: !$OMP END PARALLEL 43: 44: et = omp_get_wtime(); 45: dt = et - st; 46: st = et; 47: PRINT 200, IT, EPS, dt 48: 200 FORMAT('IT = ',I4, ' EPS = ', E14.7,' time = ',F14.6) 49: 2 CONTINUE 50: 51: eTime = omp_get_wtime(); 52: dTime = eTime-sTime; 53: print *, 'time = ', dTime 54: 55: C 3 OPEN (3, FILE='JAC.DAT', FORM='FORMATTED', STATUS='UNKNOWN') 56: C WRITE (3,*) B 57: C CLOSE (3) 58: END 59:
Далее описана измененная часть программы Jacobi, в которую были внесены ошибки для демонстрации работы отладчиков. Обозначим данный вариант как Jacobi_error. 30: init = 0 31: 32: !$OMP PARALLEL DEFAULT (SHARED) PRIVATE (I,J,i_test) 33: C REDUCTION (MAX:EPS) 34: !$OMP DO 35: DO 21 J = 2, L-1 36: DO 21 I = 2, L-1 37: EPS = MAX ( EPS, ABS( B( I, J) - A( I, J))) 38: A(I, J) = B(I, J) 39: B(J,I)=A(J,I) 40: 21 CONTINUE 41: 42: i_test = init 43: 44: !$OMP DO PRIVATE(init) 45: DO 22 J = 2, L-1 46: DO 22 I = 2, L-1 47: B(I, J) = (A( I-1, J ) + A( I, J-1 ) + A( I+1, J)+ 48: * A( I, J+1 )) / 4 49: i_test = init 50: 22 CONTINUE 51: !$OMP END PARALLEL
При запуске программы Jacobi_correct оба отладчика ничего не нашли. Для программы Jacobi_error отладчик Inte Thread Checker (ITC) выдал диагностику, описанную в таблице 3.
Таблица 3: диагностика программы Jacobi_error отладчиком Intel Thread Checker
Диагностика программы 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: Время выполнения программ в секундах.
Заключение
В рамках проделанной работы были разработаны алгоритмы нахождения ошибок, описанных в постановке задачи, а также на их основе создан отладчик, осуществляющий динамический контроль корректности 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/)
Популярное: Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация... Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ... Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (145)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |