программное обеспечение параллельных вычислений

 

полученные результаты

 
 

На первом этапе тестирования выполнялась программа с одним процессом (в предыдущем цикле вместо оператора CREATE использовался оператор CALL). После завершения этого этапа тестирования было сделано предположение о том, что тело функции дейстует корректно (при условии, что не выполнялись другие операторы CREATE и не производилось обращение к разделяемым переменным где-либо помимо финальной критической секции). Тестирование параллельного варианта программы выявило сумбурность ее поведения. Никакие два тестовых прогона не давали одинакового результата и никакой результат не совпадал с известным правильным ответом.

Даже повторные прогоны при одном и том же значении N давали разные результаты. Сначала была сделана проверка в критической секции, чтобы убедиться, что каждый раз к общей сумме прибавляется только одно полученное значение. Это программное обеспечение действительно оказалось правильным. На следующем шаге отладки критическая секция не использовалась и каждый процесс отдельно записывал свои частичные результаты в массив (значение I использовалось для указания места записи результата). Следующее множество прогонов показало, что несколько позиций в массиве не получило никаких значений (или если значения и были, то они равнялись нулю). Каждый прогон показывал, что безрезультатными оказывались вычисления в различных подынтервалах, однако наибольшая их концентрация наблюдалась у левой границы интервала (А,В). Кроме того, сумма записанных в массив значений была значительно меньше, чем общий результат, полученный путем суммирования в разделяемой переменной всех значений, вычисленных процессами.

Дальнейшее тестирование показало, что каждый процесс выполнял некоторые вычисления для своего подынтервала и записывал результаты в массив. Было выявлено, что в то время, как некоторые подынтервалы игнорировались, другие - обрабатывались более чем один раз. Кроме того, распределение повторно используемых интервалов изменялось от прогона к прогону, и никакой корреляции обнаружить не удалось. Наконец, было замечено, что не каждый процесс получал различные значения I. Некоторые процессы получали одно и то же число, в то время как другие значения I не использовались ни одним из процессов.

 
 
 
Copyright (c) 2009. Использование материалов данного сайта возможно только при проставлении активной, не закрытой от индексации гиперссылки. http://soft-tlt.ru