Лекция 5. Распределение данных. Основы MPI (Электронные лекции), страница 3
Описание файла
Файл "Лекция 5. Распределение данных. Основы MPI" внутри архива находится в папке "Электронные лекции 2016 года". PDF-файл из архива "Электронные лекции", который расположен в категории "". Всё это находится в предмете "суперкомпьютерное моделирование и технологии" из 11 семестр (3 семестр магистратуры), которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 3 страницы из PDF
После чего припомощи MPI_Sendrecv - обмен даннымис соседними процессами.Обмен данными вдольодного измеренияФрагменты программы.Обмен данными - влево вдоль оси X.MPI_Cart_shift(cart_comm, 0, -1, &rank_recv, &rank_send);if (coords[0] != 0 && coords[0] != proc_number[0] - 1) {MPI_Sendrecv(buf_left.data, size_y * size_z, MPI_DOUBLE,rank_send, TAG_X, right.data, size_y * size_z, MPI_DOUBLE,rank_recv, TAG_X, cart_comm, &status);}else if (coords[0] == 0 && coords[0] != proc_number[0] – 1){MPI_Recv(right.data, size_y * size_z, MPI_DOUBLE,rank_recv, TAG_X, cart_comm, &status);}else if (coords[0] == proc_number[0] - 1 && coords[0] != 0){MPI_Send(buf_left.data, size_y * size_z, MPI_DOUBLE,rank_send, TAG_X, cart_comm);}Пример декартовой решетки(send&recv, mesh)MPI_Request reqs[8];MPI_Status stats[8];MPI_Comm cartcomm;MPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD, &numtasks);if (numtasks == SIZE) {MPI_Cart_create(MPI_COMM_WORLD, 2, dims, periods,reorder, &cartcomm);MPI_Comm_rank(cartcomm, &rank);MPI_Cart_coords(cartcomm, rank, 2, coords);MPI_Cart_shift(cartcomm, 0, 1, &nbrs[UP], &nbrs[DOWN]);MPI_Cart_shift(cartcomm, 1, 1, &nbrs[LEFT], &nbrs[RIGHT]);outbuf = rank;Лекции "Параллельное программированиедля высокопроизводительных систем",лекция 6, 13.11.201575Пример декартовой решетки(send&recv, mesh)for (i=0; i<4; i++) {dest = nbrs[i];source = nbrs[i];MPI_Isend(&outbuf, 1, MPI_INT, dest, tag, MPI_COMM_WORLD, &reqs[i]);MPI_Irecv(&inbuf[i], 1, MPI_INT, source, tag, MPI_COMM_WORLD,&reqs[i+4]);}MPI_Waitall(8, reqs, stats);printf("rank= %d coords= %d %d neighbors(u,d,l,r)= %d %d %d %dinbuf(u,d,l,r)= %d %d %d %d\n",rank,coords[0],coords[1],nbrs[UP],nbrs[DOWN],nbrs[LEFT],inbuf[UP],inbuf[DOWN],inbuf[LEFT],inbuf[RIGHT]);}elseprintf("Must specify %d tasks.
Terminating.\n",SIZE);MPI_Finalize(); }Лекции "Параллельное программированиедля высокопроизводительных систем",лекция 6, 13.11.201576ЛитератураMPI: A Message-Passing Interface Standardhttp://www.mpi-forum.org/docs/Антонов А.С. «Параллельное программирование с использованиемтехнологий MPI и OpenMP» Изд-во МГУ, 2011. 310 c.Интернет ресурсы:https://computing.llnl.gov/tutorials/mpi,http://parallel.ru/docs/Parallel/mpi1.1/mpi-report.html, intuit.ru,www.mpi-forum.org, www.open-mpi.org, www.openmp.orghttp://www.mcs.anl.gov/research/projects/mpi/www/www3ВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.Попова.