2013-06-13 3 views
1

У меня есть общая память, используемая несколькими процессами, эти процессы создаются с использованием MPI.Механизм управления доступом к общей памяти для процессов, созданных MPI

Теперь мне нужен механизм для контроля доступа к этой общей памяти.

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

Я работаю над C под Linux.

ответ

2

В настоящее время MPI обеспечивает поддержку общей памяти (начиная с версии 3.0). Вы можете попробовать посмотреть раздел «Односторонняя связь» (http://www.mpi-forum.org/docs/mpi-3.0/mpi30-report.pdf), начиная с MPI_WIN_ALLOCATE_SHARED (11.2.3). Чтобы использовать это, вам нужно убедиться, что у вас есть реализация, которая его поддерживает. Я знаю, что самые последние версии MPICH и Open MPI работают.

+0

Можете ли вы рассказать о том, как это работает? Я прочитал pdf-файл, который вы поделили, но не очень понятно, как использовать функции mpi_win *. Я также видел http://mpi.deino.net/mpi_functions/MPI_Win_lock.html, но это тоже не слишком полезно. Мне просто нужно поделиться процессами «int», которые любой процесс может читать/записывать на этом целые числа. Также существуют ли механизмы контроля доступа для такого типа разделяемой памяти, которые предоставляет MPI? Благодаря! –

+1

Чтобы обмениваться данными по нескольким процессам с помощью RMA, вам необходимо создать MPI_Window, используя MPI_Win_allocate или MPI_Win_allocate_shared. Затем вы можете использовать MPI_Put и MPI_Get для доступа к данным. Вам необходимо будет добавить функции синхронизации MPI_Win_lock и MPI_Win_unlock для доступа к данным для обеспечения точной синхронизации. Я не думаю, что могу опубликовать слишком много ссылок здесь, но если вы Google для «MPI RMA Tutorial», вы сможете найти слайды, в которых обсуждается, как его использовать. –

+0

Следует отметить, что версия RMA с разделяемой памятью является новой для MPI-3, поэтому, если вы смотрите учебники и документацию, проверьте дату, чтобы узнать, говорит ли она о распределенной памяти RMA (предварительная версия 2.0) или распределяется и разделяемая память RMA (версия 3.0). Версия 3.0 MPI была опубликована только в сентябре 2012 года, так что она еще не является вездесущей. Все старые учебники по-прежнему применяются, но вам может потребоваться добавить несколько вещей для использования разделяемой памяти. –

1

Нет, MPI не поддерживает поддержку общей памяти. Фактически, MPI не хотел бы поддерживать разделяемую память. Причина в том, что программа, написанная с помощью MPI, должна масштабироваться для большого числа процессоров, а большое количество процессоров никогда не имеют разделяемой памяти.

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

OpenMP очень прост. Я настоятельно рекомендую вам научиться этому.

+0

Спасибо за ваш ответ! Я сделал еще несколько исследований и столкнулся с http://mpi.deino.net/mpi_functions/MPI_Win_lock.html, я все еще работаю над этим (пытаясь понять команды MPI_win *). Считаете ли вы, что это решает проблему, которую я имею здесь? –

+0

Обычно я не рекомендую рассчитывать на общую память с MPI, так как тогда вы фактически не можете запускать программу на кластерах Linux или суперкомпьютерах и т. Д., Для которых предназначен MPI. Тем не менее, похоже, что эти функции имеют отношение к тому, что вам нужно. – Shahbaz

+0

+1. Спасибо за ваш совет. Конечно, мне нужно сделать больше исследований, прежде чем я смогу начать реализацию. Попробуем обновить мои результаты здесь. –

Смежные вопросы