Организация параллельных потоков. Часть 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).
Мы используем почти логарифмическое приращение числа итераций. Это позволит нам подробно рассмотреть начало графика и быстрой пройтись по большим значениям.