Воспроизведение некоторой «разделяемой памяти» в MPI - PullRequest
1 голос
/ 19 марта 2011

Я пытаюсь использовать MPI, чтобы переписать процедуру паралеллизации для пакета моделирования, который я использую.Я пытаюсь реализовать определенную функцию, и у меня возникли проблемы.Я собираюсь проиллюстрировать мою проблему, используя другой более простой пример, который показывает, что я пытаюсь сделать.

Я в основном пытаюсь получить счетчик, который будет использоваться всеми потоками MPI.Каждый раз, когда этот счетчик увеличивается, конкретный поток затем передает его всем остальным, чтобы каждый поток имел актуальную версию счетчика, когда он хочет увеличить его.Я понимаю, что это было бы легко сделать, используя OpenMP с общей памятью, но мне интересно, есть ли способ заставить эту работу работать с MPI на более чем одном процессоре (например, выполнить 500-ядерное моделирование на суперкомпьютере).

Я пробовал почти все комбинации MPI_Bcast, MPI_Send и MPI_Recv, о которых я мог подумать, но я думаю, что есть кое-что, что я не могу правильно понять.

Ответы [ 2 ]

2 голосов
/ 19 марта 2011

Вы не сможете сделать это с API-интерфейсами MPI-1, которые вы предлагаете выше. Однако MPI-2 допускает «операции с удаленной памятью», которые позволяют вам делать такие вещи. Я ответил на очень похожий вопрос, основываясь на книге MPI-2 и ее онлайн-примерах : Создание счетчика, который остается синхронизированным между процессами MPI Там реализован только «приращение счетчика». Это не делает трансляцию; но вам действительно нужна такая операция? Разве не было бы достаточно для других задач просто проверить значение счетчика, когда это необходимо?

0 голосов
/ 19 марта 2011

Не можете ли вы инвертировать схему? Создайте выделенный «сервер счетчиков», который любой поток может запросить в качестве значения счетчика, когда ему понадобится это значение.

Конечно, это может не подходить для всех сценариев.

...