Решение двумерного уравнения Пуассона методом блочных итераций. Контрольная работа. Информационное обеспечение, программирование.

⚡ 👉🏻👉🏻👉🏻 ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻
Информационное обеспечение, программирование
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!
Похожие работы на - Решение двумерного уравнения Пуассона методом блочных итераций
Скачать Скачать документ
Информация о работе Информация о работе
Скачать Скачать документ
Информация о работе Информация о работе
Нужна качественная работа без плагиата?
Не нашел материал для своей работы?
Поможем написать качественную работу Без плагиата!
3.3 Анализ работы программы на разном числе процессоров
3.4 Коэффициент ускорения вычислений в зависимости от числа потоков
Необходимо найти численное решение задачи Дирихле для
уравнения Пуассона
в прямоугольной области с граничными условиями
Для решения поставленной задачи нами была написана параллельная
программа на языке программирования высокого уровня С с расширением MPI, а также аналогичная программа на OpenMP.
уравнение пуассон параллельная программа
Найти численное решение задачи Дирихле для уравнения Пуассона
в прямоугольной области с граничными условиями
. Разработайте блок-схему реализации распараллеливания данного
алгоритма и напишите параллельную программу на MPI для численного решения
уравнения (1) с условиями (2) с помощью данной итерационной схемы. Используйте
распараллеливание прогонки (встречная прогонка). Для хранения сеточной функции
используйте два двумерных массива, целиком размещающихся в памяти процессоров.
В одном из них размещайте ( ), во втором и после его обработки пересылайте все
содержимое массива в предыдущий массив . Тем самым вы экономите память и имеете возможность считать до
любого значения n.
. На сетке 50х50 проведите расчеты на разном числе процессоров и
постройте зависимость ускорения вычислений и затраты на межпроцессорные обмены
в зависимости от числа процессоров. Найдите оптимальное соотношение между
числом процессоров и ускорением счета. Эффективность параллельного алгоритма и
его отладку следует проводить с использованием средств профилирования,
разработанных на кафедре ВС СибГУТИ.
. Напишите аналогичную программу на OpenMP, проведите расчета на
сетке 50х50 и определите коэффициент ускорения вычислений в зависимости от
числа потоков.
. Постройте график изменения погрешности от числа итераций.
На равномерной прямоугольной сетке уравнение (1)
аппроксимируется следующей разностной схемой
Значения сеточной функции на границах области известно из
граничных условий. Схему (4) можно записать в виде, удобном для реализации ее с
помощью метода скалярной прогонки:
Значения прогоночных коэффициентов находятся по рекуррентным
формулам, которые можно записать в виде:
Из граничных условий на левой границе определяются значения
прогоночных коэффициентов .
После этого, учитывая, что , обратной прогонкой находятся все значения сеточной функции на
n+1 - ом итерационном шаге:
Счет следует проводить прогонкой по оси ОХ (индекс i), начиная с
индекса j = 1. В этом случае значение переменной известно из граничного условия. Окончанием итерационного процесса
является выполнение условия
В качестве начальных значений для внутренних точек области можно
взять, например, результаты линейной интерполяции между границами и этими
точками.
#define eps 0.00001Y [N1 + 1] [N2 + 1], Ysh [N1 +
1] [N2 + 1];
double hx = 1. f / N1, hy = 2. f / N2;
double Fresh (double x, double y) {pow (x,
}RoFresh (double x, double y) {2 * (pow (x,
/*Подпрограмма инициализации матрицы*/Inic () {
int i, j;(i = 0; i < N1 + 1; i++)(j = 0; j
< N2 + 1; j++) {( (i! = 0) && (j! = 0) && (i! = N1)
&& (j! = N2))[i] [j] = 0;[i] [j] = Fresh ( (i * hx), (j * hy));
}main (int argc, char **argv) {size, rank, flag =
1;i, j, f, it = 0;A = pow (hx,
), C = - 2. f / A - 2. f / D, F1, Fi, pogr =
0;t_c = 0.0, time = 0.0, s_t = 0.0;
double max, m;alfa [N-1], beta [N-1];
// double Y [N1 + 1] [N2 + 1], Ysh [N1 + 1] [N2 +
1];
// double hx = 1. f / N1, hy = 2. f / N2;_Status
stat;_Init (&argc, &argv);_Comm_size (MPI_COMM_WORLD,
&size);_Comm_rank (MPI_COMM_WORLD, &rank);- = MPI_Wtime ();_c - =
MPI_Wtime ();(rank == 0) {("%d \n", size);();
}(i = 0; i <= (N - 1); i++) {+= ( - D [i]) /
(C [i] + Ai*alfa [i-1]);
beta += (F [i] - A [i] *beta [i-1]) / (C [i] +
Ai*alfa [i-1]);
}(j = (N+1); j <= 1; j--)+= alfa [i] *Y [i+1]
[j] + beta [i];(size == 1) {
do {(i = 1; i < N1; i++) {(j = 1; j < N2;
j++) {
Fi = ( - (Y [i+1] [j] + Y [i] [j+1])) / D +
RoFresh;
}= m = - 999;(i = 0; i <= N1; i++) {(j = 0; j
<= N2; j++) {= fabs (Ysh [i] [j] - Y [i] [j]);
if (pogr > max) max = pogr;= fabs (Ysh [i]
[j]);(pogr > m) m = pogr;
}(max / m < eps) {_c += MPI_Wtime
();("Bce 4etKo!!!! it = %d, time = %f\n", it,t_c);
// Перезапись данных(i = 1; i < N1; i++)
for (j = 1; j < N2; j++)[i] [j] = Ysh [i]
[j];++;
// Посылка следующему процессору верхнюю строку из основной
матрицы в нижнюю границу_Send (&Ysh, (N1 + 1) * (N2 + 1), MPI_DOUBLE,
1, 1, MPI_COMM_WORLD);_Recv (&Y, (N1 + 1) * (N2 + 1), MPI_DOUBLE, 1, 1,
MPI_COMM_WORLD, &stat);_t += MPI_Wtime ();
}( (rank > 0) && (rank < size - 1))
{{_Recv (&Ysh, (N1 + 1) * (N2 + 1), MPI_DOUBLE, rank - 1, 1,
MPI_COMM_WORLD, &stat);(i = (N1 - 1) / size * rank + 1; i < (N1 - 1) /
size * (rank + 1) + 1; i++) {(j = 1; j < N2; j++) {= ( - (Y [i+1] [j] + Y
[i] [j+1])) / D + RoFresh;
}_t - = MPI_Wtime ();_Send (&Ysh, (N1 + 1) *
(N2 + 1), MPI_DOUBLE, rank - 1, 1, MPI_COMM_WORLD);_Send (&Ysh, (N1 + 1) *
(N2 + 1), MPI_DOUBLE, rank + 1, 1, MPI_COMM_WORLD);_Recv (&Y, (N1 + 1) *
(N2 + 1), MPI_DOUBLE, rank + 1, 1, MPI_COMM_WORLD, &stat);_t += MPI_Wtime
();
}( (rank == size - 1) && (rank! = 0))
{{_t - = MPI_Wtime ();_Recv (&Ysh, (N1 + 1) * (N2 + 1), MPI_DOUBLE, rank -
1, 1, MPI_COMM_WORLD, &stat);_t += MPI_Wtime ();
// for (i = (N1-1) / size * (size - 1) + 1; i
< N1; i++) {(i = (N1-1) / size * rank + 1; i < N1; i++) {(j = 1; j <
N2; j++) {= ( - (Y [i+1] [j] + Y [i] [j+1])) / D + RoFresh;
}= m = - 999;(i = 0; i <= N1; i++) {(j = 0; j
<= N2; j++) {= fabs (Ysh [i] [j] - Y [i] [j]);(pogr > max) max = pogr;=
fabs (Ysh [i] [j]);(pogr > m) m = pogr;
}(max / m < eps) {+= MPI_Wtime ();("Bce
4etKo!!!! it = %d, time = %f, s_t = %f, time_s4eta = %f \n", it, time,
s_t, time-s_t);(1);
}_t - = MPI_Wtime ();_Send (&Ysh, (N1 + 1) *
(N2 + 1), MPI_DOUBLE, rank - 1, 1, MPI_COMM_WORLD);
for (i = 0; i <= N1; i++)(j = 0; j <= N2;
j++)[i] [j] = Ysh [i] [j];++;
Полученные результаты вычислений сведены в таблицу 1.
На основе результатов вычислений был построен следующий
график, изображенный на рисунке 1.
Рисунок 1 - Зависимость вычисления и передачи от числа
процессоров
Рисунок 2 - График изменения погрешности
В результате работы параллельной программы, реализующей
решение двумерного уравнения Пуассона методом блочных итераций, можно сделать
вывод, что наиболее эффективное решение данной задачи достигается на 6-ти
процессорах.
При решении уравнения на 6 процессорах общее время вычисления
составляет 0,063107 условных единиц времени, из которых 6,043527 тратится на
пересылку данных между процессорами.
На основе результатов вычисления был построен график
изменения погрешности от числа итерации. Из данного графика делаем вывод, что
точность получаемый результатов зависит от кол-ва итераций - чем больше итераций,
тем выше точность получаемых результатов.
1.
Бахвалов Е.А., Жидков Н.П., Кобельков Г.Н. Численные методы: Учеб. пособие. -
М: Наука, 1987. - 600 с.
.
Березин И.С., Жидков Н.П. Методы вычислений. т.1, т.2. - М.: Наука, 1997.
.
Волков Е.А. Численные методы: Учеб. пособие для вузов. М: Наука, 1987. - 248 с.
.
Воеводин В. В, Воеводин Вл.В. Параллельные вычисления. - Спб.: БХВ-Петербург,
2002. - 608 с.
.
Корнеев В.Д. Параллельное программирование в MPI. - Москва-Ижевск: Ин-т
компьютерных исследований, 2003. - 304 с.
Похожие работы на - Решение двумерного уравнения Пуассона методом блочных итераций Контрольная работа. Информационное обеспечение, программирование.
Реферат по теме Эксплуатация конусной дробилки
Сочинение Описание Кабинета Школы
Сочинение: Смысл названия стихотворения Н.А. Некрасова Тишина
Реферат: Услуга "встречи-проводы"
Базаров И Народ Сочинение
Контрольная Работа По Лермонтову 6 Класс Коровина
Диссертация Овд
Какие Люди Остаются В Истории Сочинение
Курсовая работа по теме Особливості фізичного розвитку дітей дошкільного віку
Эссе Происхождение Философии Философия Как Наука
Реферат Коррупционное Преступление
Реферат по теме Компьютерные вирусы. Классификация
Реферат: Вопросы к у: Понятие «этикет». Его роль и значение в процессе делового взаимодействия
Реферат по теме Постмодернистская концепция культуры
Лабораторная Работа Соли
Реферат: Фінансова підтримка інноваційної діяльності
Реферат: Animal Farm Essay Research Paper Animal FarmGeorge
Дипломная работа: Разработка канала для комплексной скважинной аппаратуры
МЕХАНИКА ГРУНТОВ
Эссе Текста Большое В Малом
университет дружбы народов
Похожие работы на - Чоросы - ойротские князья
Контрольная работа: Детская беспризорность в России как социальная проблема