Использование средств 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; } Заключение Нелинейные дискретные среды объект пристального внимания современной физики Параллельные вычислительные системы - эффективный инструмент для их изучения Наше направление: дискретные бризеры