Организация параллельных потоков. Часть 2 | страница 28



В предыдущей работе мы уже выполнили следующие этапы:

— аналитическое решение задачи;

— последовательная программа;

— параллельные потоки.

В данной работе мы исследуем технологию автоматического создания параллельных потоков.

Точное аналитическое решение используется в дальнейшем для определения погрешности вычислений.

Задание. Запишите в отчёте аналитическое решение задачи — формулы и найденное значение.

6.3. Последовательная программа

Первый этап данной работы — последовательная программа численного интегрирования. Вычислим значение определенного интеграла, задавая разные значения числа прямоугольников и числа потоков.

6.3.1. Одинарная точность

В этом разделе мы исследуем точность вычислений при использовании чисел одинарной точности.

Напомним, что тип float может обеспечить всего 7 десятичных разрядов для значащей части числа (мантиссы).

При численном интегрировании это приводит к потере точности. Когда значение накопленной суммы больше нового слагаемого в десять миллионов раз, значение практически полностью оказывается за пределами разрядной сетки. Новое число просто теряется, и сумма перестаёт расти. Таким образом, начиная с десяти миллионов итераций можно ожидать существенный рост ошибки.

Составим последовательную программу (рис. 6.3). Здесь мы используем приёмы, успешно отработанные в предыдущих разделах.

Вводим число итераций через параметр командной строки (строка 5).

Объявляем переменные одинарной точности типа float (строка 9).

Преобразуем вводимую строку символов в длинное целое (строка 10).

Время вычислений определим через библиотечную функцию OpenMP (строки 11 и 18).

Вычисляем шаг по оси «иксов» (строка 12).

На каждом шаге вычислений находим текущее значение аргумента функции (строка 14).

Прибавляем новое значение функции в середине очередного интервала по «икс» (строка 15).

После завершения цикла умножаем сумму значений функции на длину интервала, то есть на основание прямоугольника (строка 17).

В конце программы выводим на экран значения числа итераций, полученную оценку интеграла и время вычислений (строка 19). Значения разделяем символом табуляции. Так будет легче загрузить результаты в Excel.


Рис. 6.3. Последовательная программа


Задание. Составьте программу (рис. 6.3) для своего варианта задания. Проверьте работу программы в командной строке, задавая разное количество итераций.


Запустим программу через пакетный файл (рис. 6.4).

Мы используем почти логарифмическое приращение числа итераций. Это позволит нам подробно рассмотреть начало графика и быстрой пройтись по большим значениям.