У меня есть общая память, используемая несколькими процессами, эти процессы создаются с использованием MPI
.Механизм управления доступом к общей памяти для процессов, созданных MPI
Теперь мне нужен механизм для контроля доступа к этой общей памяти.
Я знаю, что для этого можно использовать механизмы и flock
, но просто хотели узнать, обеспечивает ли MPI какой-либо специальный механизм блокировки для использования общей памяти?
Я работаю над C под Linux.
Можете ли вы рассказать о том, как это работает? Я прочитал pdf-файл, который вы поделили, но не очень понятно, как использовать функции mpi_win *. Я также видел http://mpi.deino.net/mpi_functions/MPI_Win_lock.html, но это тоже не слишком полезно. Мне просто нужно поделиться процессами «int», которые любой процесс может читать/записывать на этом целые числа. Также существуют ли механизмы контроля доступа для такого типа разделяемой памяти, которые предоставляет MPI? Благодаря! –
Чтобы обмениваться данными по нескольким процессам с помощью RMA, вам необходимо создать MPI_Window, используя MPI_Win_allocate или MPI_Win_allocate_shared. Затем вы можете использовать MPI_Put и MPI_Get для доступа к данным. Вам необходимо будет добавить функции синхронизации MPI_Win_lock и MPI_Win_unlock для доступа к данным для обеспечения точной синхронизации. Я не думаю, что могу опубликовать слишком много ссылок здесь, но если вы Google для «MPI RMA Tutorial», вы сможете найти слайды, в которых обсуждается, как его использовать. –
Следует отметить, что версия RMA с разделяемой памятью является новой для MPI-3, поэтому, если вы смотрите учебники и документацию, проверьте дату, чтобы узнать, говорит ли она о распределенной памяти RMA (предварительная версия 2.0) или распределяется и разделяемая память RMA (версия 3.0). Версия 3.0 MPI была опубликована только в сентябре 2012 года, так что она еще не является вездесущей. Все старые учебники по-прежнему применяются, но вам может потребоваться добавить несколько вещей для использования разделяемой памяти. –