MPI malloc против MPI_Alloc_mem когда использовать?

#c #mpi #dynamic-memory-allocation

#c #mpi #динамическое выделение памяти

Вопрос:

При написании MPI-программ я использовал malloc для выделения динамической памяти, например:

     int main(int argc, char* argv[]) {
        MPI_Init(amp;argc, amp;argv);
        int arr_size = 10;
        int* arr = malloc( sizeof(int) * arr_size );

        // do some MPI stuff

        MPI_Finalize();

    }
  

Тем не менее, я наткнулся на эту функцию MPI: MPI_Alloc_mem здесь:
https://www.mpich.org/static/docs/v3.2/www3/MPI_Alloc_mem.html
Но я не уверен, для чего это нужно. Когда следует использовать malloc и когда следует использовать MPI_Alloc_mem ?
После прочтения этого:http://mpi.deino.net/mpi_functions/MPI_Alloc_mem.html
кажется, что MPI_Alloc_mem используется в основном для удаленного доступа к памяти. Почему бы просто не использовать malloc вместо этого? Я не смог найти никаких ответов, в которых говорилось бы, когда выбирать MPI_Alloc_mem вместо malloc .

Ответ №1:

RMA может быть быстрее при использовании памяти, возвращаемой с помощью MPI_Alloc_mem() по сравнению с malloc() . Также MPI_Alloc_mem() принимает MPI_Info параметр, который вы можете использовать для оптимизации расположения памяти (обратите внимание, значение этого параметра зависит от конкретной реализации и не распространяется на стандарт, MPI_INFO_NULL всегда будет работать).

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

Короче говоря, использование не повредит, MPI_Alloc_mem() если память будет использоваться в операциях RMA. Но это действительно оптимизация, и ваше приложение должно работать независимо от того, как вы выделяете память (за вычетом некоторых ограничений, см. Ниже)

Из MPI 3.1, глава 8.2

В некоторых системах операции передачи сообщений и удаленного доступа к памяти (RMA) выполняются быстрее при доступе к специально выделенной памяти (например, памяти, которая совместно используется другими процессами в группе обмена данными на SMP). MPI предоставляет механизм для выделения и освобождения такой специальной памяти. Использование такой памяти для передачи сообщений или RMA не является обязательным, и эта память может использоваться без ограничений, как любая другая динамически выделяемая память.