Вычислительный центр им. А.А. Дородницына РАНРаздел виртуального курса
|
|
---|
В упражнении 2 требуется вычислить π.
В упражнении 3 изучается метод Лапласа.
Структура этой программы следующая:
Пожалуйста, при выполнении упражнения следуйте таким шагам :
Это - очень простая параллельная программа, в которой каждая задача независимо приближает решение. Объем работы, сделанный каждой задачей остается тем же самым как число увеличений задач, но усредненное решение оказывается более правильным. Есть две версии: одна демонстрирует отправки и получения (pi_send), а другая использует коллективные коммуникации (pi_reduce).
Вычисляет π используя интегральную аппрксимацию. Этот код имеет особый интерес, так как включено несколько программ, которые иллюстрируют конверсию последовательного кода int_pi в параллельный. Конечная версия есть int_pi2.c.
Нарисуйте круг с радиусом 1 с центром в начале. Круг вписан в квадрат, углы которого в (-1,-1), (-1,1), (1,1) и (1,-1). Площадь круга, разделенного на клощадь квадрата равна π/4.
Представьте себе это, как мишень. Дротики попадая в мишень, дают x и y координаты, которые являются случайными числами между-1 и 1. Дротики должны находиться в пределах квадрата, а могут также находиться в пределах круга. Программа приближает значение π, деля число дротиков, которые находятся в пределах круга на полное число брошенных дротиков, и умножая результат на четыре.
int_pi использует простую интегральную аппроксимацию для расчета π.
Есть два способа извлечь выгоду из параллелизма: Вы можете управлять той же самой программой скорее, или управлять большей программой за том же самое времени. Этот пример использует последний подход.
Последовательное вычисление π включает бросание 5000 дротиков для каждой итерации из десяти, с совокупным средним числом проявленном в каждой итерации. Для параллельного выполнения, каждая задача выполняет этот процесс независимо, сообщая о его расчетном значении π задаче-мастеру (ID задачи равен 0). Мастер печатает совокупное среднее число. Чем больше задач, которые участвуют, тем более точно расчетное значение π.
Код относится к SPMD, то есть каждая задача запускает одни и те же команды. Есть две версии. Pi_send использует низкого уровня отправки и получения, чтобы собрать значения π. Pi_reduce использует aeyrwb. коллективнjq коммуникации, с предопределенной функцией приведения для дополнения вектора двойной точности с плавающей точкой.
Files:
Откомпилируйте используя файл построения:
Для C:
Определитесь с числом узлов для выполнения и исполните одну из учебных программ:
Файлы:
Компиляция кода:
или:
Определитесь как много узлов использовать и выполните программу-мастер:
Каждый рабочий процесс решает для себя, является ли он краем, углом или внутренним узлом, а так же то, с какими другими рабочими процессами он должен сообщаться. Краевые узлы получают их "локальные" граничные значения от "глобальных" граничных значений, а также как сообщаясь с их соседними внутренними узлами. Начальное значение всех точек установлено на среднее значение глобальных граничных величин. Последовательность итераций такова:
Каждый рабочий обменивает краевые значения с его четырьмя соседями. Тогда новые значения рассчитываются для верхнего левого и нижнего правого углов ("красных" углов) матрицы у каждого узла. Рабочие обменивают краевые значения снова. Затем рассчитываются верхний правый и нижний левый углы ("черные" углы) .
Через каждые 20 итераций, узлы вычисляют среднее различие каждой точки с его значением 20 итераций назад. Эти локальные средние различия собираются задачей 0, и глобальное среднее различие находится. Если оно меньше, чем некоторое приемлемое значение, то задача 0 собирает куски матрицы. В противном случае, еще 20 итераций прогоняются.
© 2003
Вычислительный центр им. А.А.Дородницына
Все права защищены. |
|