Номер варианта — последняя цифра номера зачётки. Для цифры ноль берём десятый вариант
Нам предстоит выбрать приемлемую продолжительность расчетов и определить ускорение и эффективность для различного числа потоков. Как и в предыдущих разделах, мы будем использовать в расчётах среднее время вычислений по нескольким запускам программы.
Задание. Опишите в отчёте свой вариант задания.
6.2. Аналитическое решение
Мы будем определять значение определенного интеграла с помощью аналитических и численных методов.
В предыдущей работе [1] мы разработали и отладили программу. Теперь можно сосредоточиться на исследовании эффективности распараллеливания и не углубляться в тонкости программирования как такового.
В предыдущей работе мы уже выполнили следующие этапы:
— аналитическое решение задачи;
— последовательная программа;
— параллельные потоки.
В данной работе мы исследуем технологию автоматического создания параллельных потоков.
Точное аналитическое решение используется в дальнейшем для определения погрешности вычислений.
Задание. Запишите в отчёте аналитическое решение задачи — формулы и найденное значение.
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).
Мы используем почти логарифмическое приращение числа итераций. Это позволит нам подробно рассмотреть начало графика и быстрой пройтись по большим значениям.
На досуге можно попробовать сделать пакетный файл более компактным. При этом придётся учесть такие условия:
— количество итераций — целое число;
— шаг приращения счётчика цикла — постоянный;
— шаг приращения числа итераций растёт логарифмически.
Конечно, это будет задачей повышенной сложности.
Нам сейчас пока что нужно просто посмотреть на поведение программы. Мы обойдёмся таким грубым решением, как шесть строчек, прописанных вручную.
Рис. 6.4. Пакетный файл
Задание.Составьте пакетный файл (рис. 6.4) и запустите его в командной строке.
Запустим пакетный файл и перенаправим вывод в файл.
Загрузим файл в пакет Excel и проведём анализ полученных результатов.
Начнём с оценки интеграла.
Построим график в логарифмическом масштабе. Находим десятичный логарифм числа итераций.
Рассмотрим полученный график (рис. 6.5).
Значение быстро растёт от 1 до 10 прямоугольников.
Затем значение стабилизируется.
Читать дальше
Конец ознакомительного отрывка
Купить книгу