Решение уравнений в частных производных
Решение уравнения теплопроводности в одномерном случае.
Постановка задачи: пусть дан тонкий однородный стержень длины L, уравнение распространения тепла в стержне описывается так:
где u (x, t) – температура;
x – Координата;
t – Время;
a2>0 – коэффициент температуропроводности;
u (x, 0) = u (x, t0) = φ(x), где φ(x) – известная функция;
u |Г1 = u (0,t) = ψ1(t) =
u |Г2 = u (L,t) = ψ2(t) =
и - известные значения.
Найти значение температуры для любого момента времени t>t0 u(x,t) для любых t>t0
Расчётные формулы:
Метод расчётных сеток
xi±1xi±h;
tk+1τ=tk+ τ;
u(x,t)~
= u (xi,tk);
по оси x n-точек
неустойчивая схема
Условие устойчивости:
Алгоритм распараллеливания. Воспользуемся геометрическим видом параллелизма. Весь стержень разобьём на примерно равные части, число которых равно числу используемых процессов. Пусть L – длина стержня, size – число процессов.
int N = (int) (L/h)+ 1;
int l1 = (int) (N/size);
int l2 = N%size; // остаток от деления
size = 3; N=14;
rank | l1 | l2 |
0 | 4 | 2 |
1 | 4 | 2 |
2 | 4 | 2 |
if (l2) {
if (rank == size -1) l1 ++;
l2 --;
}
if (l2) if (rank <l2) l1 ++;
n = l1
0 1 2 3 4 5
if ((rank ==0)//(rank ==size-1))
n++;else n+=2;
В начальный момент времени начальное значение температур известны на всех процессах, причём учитываются дополнительные точки.
Определим значения в граничных точках. Организуем цикл по времени от t0 до tmax с шагом τ. На каждой итерации будет выполняться:
все процессы одновременно вычисляют значения температур в своих внутренних точках. Значения записываются в некоторый вспомогательный массив;
все процессы одновременно переписывают значения из вспомогательного массива в основной массив для внутренних точек.
Все процессы получают значение в своих граничных точках от соседних процессов, для которых эти точки являются внутренними.
if (rank % 2) { // нечётные процессы
MPI_Send (& u[1],1, MPI_DOUBLE, rank-1, msgtag, MPI_COMM_WORLD);
MPI_Recv (& u[0], 1, MPI_DOUBLE,rank-1,msgtag, MPI_COMM_WORLD,& Status);
if (rank ! = size -1) {
MPI_Send (& u[n-2],1, MPI_DOUBLE, rank+1, msgtag, MPI_COMM_WORLD);
MPI_Recv (& u[n-1], 1, MPI_DOUBLE,rank+1,msgtag, MPI_COMM_WORLD,& Status);
}
}
else { // чётные процессы
if (rank ! = size -1) {
MPI_Recv (& u[n-1], 1, MPI_DOUBLE,rank+1,msgtag, MPI_COMM_WORLD,& Status);
MPI_Send (& u[n-2],1, MPI_DOUBLE, rank+1, msgtag, MPI_COMM_WORLD);
if (rank) {
MPI_Recv (& u[0], 1, MPI_DOUBLE,rank-1,msgtag, MPI_COMM_WORLD,& Status);
MPI_Send (& u[1],1, MPI_DOUBLE, rank-1, msgtag, MPI_COMM_WORLD);
}
}
Нулевой процесс и последний процесс определяют значение на левой и правой границе соответственно.
все процессы делают шаг по времени;
все процессы проверят условия окончания итерационного процесса. Если процесс не закончен то пункт 1, иначе пункт – 6;
все процессы последовательно печатают вычисленные значения. Нумерация элементов массива сквозная и дополнительные точки не учитываются.
Пример последовательной распечатки:
if (! rank) {
for (i=0; i<n-1; i++)
print f (“u[%d] = %2.8f\n”,i,u[i]);
l=n-1;
MPI_Ssend (& l,1, MPI_Int,1, msgtag, MPI_COMM_WORLD);
}
else {
MPI_Recv (&l, 1, MPI_Int,rank-1,msgtag, MPI_COMM_WORLD,& Status);
for (i=1; i<n-1;i++, l++)
printf (“u[%d] = %2.8f\n”,l,u[i]);
if (rank ! = size -1)
MPI_Ssend (& l,1, MPI_Int,rank+1, msgtag, MPI_COMM_WORLD);
else
printf (“u[%d] = %2.8f\n”,l,u[n-1]);
}
Ускорение вычислений достигается за счёт одновременного вычисления всеми процессами новых температур во внутренних точках, но потеря времени при передаче. Передача осуществляется за 4 такта.
При данном алгоритме распараллеливания потери точности не происходит.
- Содержание курса
- Общие сведения.
- Топологии Виды топологий
- Программирование «Трубы»
- Программирование «Звезды»
- Программирование «Клика»
- Синхронный обмен данными
- Функции синхронного обмена данными
- Примеры:
- Задание 1:
- Задание 2:
- Задание 3:
- Асинхронный обмен данными
- Функции необходимые для асинхронного обмена данными
- Пример:
- Определение времени вычисления на Parsytec.
- Определение времени в программе
- Структура компьютера
- Константы, типы данных, структуры mpi
- Тип данных mpi_Datatype
- Предопределённые константы
- Сообщения
- Функции mpi
- Функция передачи данных с блокировкой
- Дополнительные функции
- Виды параллелизма Геометрический (распараллеливание по пространству)
- Функциональный (распараллеливание по процессам)
- Конвейерный
- Параллелизм типа принятия коллективного решения
- Ускорение и эффективность вычислений на мвс
- Метод Рунге-Кутта 4
- 2. Расчётные формулы:
- 3. Алгоритм распараллеливания.
- Метод прогноза коррекции
- 2. Расчётные формулы
- 3. Алгоритм распараллеливания.
- 4. Ускорение вычислений.
- 4. Ускорение и точность вычислений.
- Решение уравнений в частных производных
- Колебания мембраны
- 2. Расчетные формулы
- Решение стационарных уравнений на мвс
- 2. Расчётные формулы
- Алгоритм распараллеливания.
- Ускорение вычислений
- Оптимизация на мвс
- Расчётные формулы
- Алгоритм распараллеливания
- Ускорение вычислений.