Использование средств MPI в программной системе для

advertisement
Использование средств MPI в
программной системе для
моделирования динамики
дискретных активных сред
М.И. Иванченко, О.И. Канаков,
К.Г. Мишагин, Г.В. Осипов, В.Д.
Шалфеев
ННГУ им. Н.И. Лобачевского,
Нижний Новгород
Примеры дискретных сред





Кристаллические решетки
Биологические ткани
Сети синхронизации
Сети джозефсоновских контактов
Искусственные нейронные сети
Дискретные бризеры:
Пространственно-локализованные осциллирующие во
времени решения в нелинейных дискретных средах
Параллельный алгоритм

Локальность связей
– известный пример: уравнение Пуассона

Решеточная топология
– коммуникатор с декартовой топологией:
MPI_Cart_create

Параллелизм коммуникации и
вычислений
– неблокирующие операции обмена
Р е а л ь н а я э ффе к т и в н о с т ь
Реальная эффективность
1.1
1
0.9
0.8
0.7
0.6
0.5
0.4
150
200
250
300
350
400
Р а з ме р р е ше т к и
450
500
Метод Рунге-Кутты 4 порядка
DAMPS
Discrete Active Media Parallelizing
Simulator
 Пакет для моделирования
дискретных активных сред

DAMPS
Статическая библиотека ldamps.lib
 Заголовочный файл ldamps.h
 Исходный C++ файл метода
интегрирования: rk4footer.cpp
 Определение классов объектовдатчиков
 Пользовательский интерфейс

Пример задачи: breather.cpp
#include "ldamps.h"
inline double vstr(double z)
{
return z-z*z+0.25*z*z*z;
}
inline void rhand(state_t y,
state_t up, state_t rt, state_t dn, state_t lt,
state_t res, par_t par, double t)
{
res[0]=y[1];
res[1]=-vstr(y[0])+0.1*(lt[0]-2.*y[0]+rt[0]);
}
#define NAME breather
enum
{
ORDER=2,
LINKS=1,
PARS=0
};
#include "rk4footer.cpp"
Пример файла main.cpp
#include <stdlib.h>
#include <math.h>
#include <iostream.h>
#include "ldamps.h"
#include "process.h"
enum consts
{
ROWS=1,
COLS=1000,
VCELLS=1,
HCELLS=3,
};
main.cpp (продолжение)
int main(int argc, char* argv[ ])
{
MPI_Init(&argc, &argv);
{
int rank;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
Bcond bc;
bc.top=FIXED;
bc.rt =PERIOD;
bc.bot=FIXED;
bc.lt =PERIOD;
extern Rk4 breather;
breather.setstep(0.01);
Latt latt(ROWS, COLS, VCELLS, HCELLS, bc, &breather);
Minmax mm(&latt);
main.cpp (окончание)
double a[VCELLS*ROWS][HCELLS*COLS][2];
for(int i=0; i<VCELLS*ROWS; i++)
for(int j=0; j<HCELLS*COLS; j++)
{
a[i][j][0]=0.;
a[i][j][1]=0.;
}
a[0][HCELLS*COLS/2][0]=2.3456;
latt.set_ic((double*)a);
mm.init();
double t0=MPI_Wtime();
latt.run(0.0,200.0,&mm);
cout<<"comp. time="<<MPI_Wtime()-t0<<endl;
mm.out("min","max");
}
MPI_Finalize();
return 0;
}
Заключение
Нелинейные дискретные среды объект пристального внимания
современной физики
 Параллельные вычислительные
системы - эффективный
инструмент для их изучения
 Наше направление:
дискретные бризеры

Related documents
Download