MPI malloc 与 MPI_Alloc_mem 何时使用?

Aet*_*nus 3 c mpi dynamic-memory-allocation

在编写MPI程序时,我一直使用malloc来分配动态内存,例如:

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

        // do some MPI stuff

        MPI_Finalize();

    }
Run Code Online (Sandbox Code Playgroud)

但是,我遇到了这个 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

Gil*_*det 5

与使用返回的内存相比, RMA可能会更快。此外,还采用一个可用于优化内存位置的参数(请注意,该参数的值是特定于实现的,并且不包含在标准中,MPI_Alloc_mem()malloc()MPI_Alloc_mem()MPI_InfoMPI_INFO_NULL将始终有效)。

此外,一些 MPI 实现可能会选择MPI_Alloc_mem()在缓存行上对齐返回内存,因此可能会带来更好的性能。

长话短说,使用不会有什么坏处MPI_Alloc_mem()如果内存用于 RMA 操作,则不会影响使用。但这确实是一个优化问题,无论您如何分配内存,您的应用程序都应该正常工作(减去一些限制,请参见下文)

摘自 MPI 3.1,第 8.2 章

在一些系统中,当访问专门分配的存储器(例如,由SMP上的通信组中的其他进程共享的存储器)时,消息传递和远程存储器访问(RMA)操作运行得更快。MPI 提供了分配和释放此类特殊内存的机制。使用此类内存进行消息传递或 RMA 不是强制性的,并且可以像任何其他动态分配的内存一样不受限制地使用此内存。然而,实施可能会限制第 11.5.3 节中定义的某些 RMA 功能的使用。