PARALLEL.RU

Дискуссионный клуб по параллельным вычислениям
Текущее время: 20 сен 18 17:39

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 3 ] 
Автор Сообщение
СообщениеДобавлено: 8 окт 14 7:10 
Не в сети

Зарегистрирован: 8 окт 14 6:42
Сообщения: 3
Доброго времени суток, Parallel.Ru!

В процессе написания диплома возникло несколько вопросов по поводу MPI.
Вычисляю трехмерную задачу механики сплошной среды. FORTRAN.

Для каждой точки задано 5 скалярных сеточных функций. В файлах значения функций пишутся подряд для каждой точки. Около миллиона точек, то есть 100х100х100. Нужно реализовать распараллеливание на 1, 2 и 3 измерения. То есть при распараллеливании на 3 измерения у нас в область ответсвенности процесса попадает "брусок" от всей области. Соответственно есть вопросы.

1) чтение/запись.
Объемы памяти позволяют хранить сразу все данные в одном процессе. На моем уровне знакомства с MPI в одномерном случае логично было использовать Scatterv/Gatherv и работать с файлом одним процессом. Но как это лучше прочитать и распределить(объединить и записать), особенно в 3D случае? Как рассылать/собирать 3D куски(сечения) массивов? Или лучше использовать "параллельный" ввод/вывод?

Пример: Для упрощения задаваемого вопроса сведем задачу к двумерной.
Пусть 4 процесса содержат 2D массивы размера 0: 3x4, 1: 3x3,2: 2x4,3: 2x3 соответственно. Как объединить и записать в файл массив 5x7 ?
0000111
0000111
0000111
2222333
2222333

2) На каждом этапе вычисления потоков необходимы 2 граничных значения из другого процесса. То есть:
Пример: Одномерный случай. В каждом процессе вычисляются 1..N элементов; для вычисления любого i-ого элемента на новом временном слое с помощью явной схемы необходимы значения i-2, i-1, i, i+1, i+2 элементов предыдущего временного слоя. Для этого массивы расширены на 2 элемента с каждой стороны, чтобы между вычислениями обмениваться приграничными значениями (как на прикрепленной схеме)
Изображение
Вопрос: С помощью каких процедур MPI и как лучше выполнять такой обмен на каждом шаге, если речь идет о трехмерной задаче и обмене массивами по 2xMxL для каждой границы? Тут вопрос в максимизации быстродействия.

Прошу меня простить, если вопросы глупые, я познакомился с MPI недавно.


Вложения:
1.jpg
1.jpg [ 75.91 КБ | Просмотров: 4761 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 9 окт 14 1:30 
Не в сети

Зарегистрирован: 2 ноя 11 19:40
Сообщения: 26
Откуда: Владивосток
мои предложения:
1) Думаю поможет только создание "производных типов данных" (сечение)
http://rsusu1.rnd.runnet.ru/tutor/method/m2/page15.html
2) использовать производные типы данных (граница), создать коммуникатор для удобного общения с соседями (в вашем случае трехмерная решетка), если в общем алгоритме предусмотрена стадия обмена данных (после шага вычислений), тогда MPI_Sendrecv по циклу соседей. по последнему, конечно, могут возникнуть блокировки, но попробуйте, Sendrecv безопасная операция при взаимном обмене.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 окт 14 21:33 
Не в сети

Зарегистрирован: 8 окт 14 6:42
Сообщения: 3
Спасибо, как закрыть тему?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 3 ] 

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB