MPI malloc和MPI_Alloc_mem什么时候使用?

3
在编写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();

    }

然而,我遇到了这个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个回答

5
使用由 MPI_Alloc_mem() 返回的内存可能比使用 malloc() 更快,尤其是在进行 RMA 操作时。此外,MPI_Alloc_mem() 接受一个 MPI_Info 参数,您可以使用它来优化内存位置(请注意,此参数的值是实现特定的,并未被标准涵盖,MPI_INFO_NULL 始终有效)。
另外,一些 MPI 实现可能选择返回按缓存行对齐的内存,因此可能导致更好的性能表现。
总之,如果内存将用于 RMA 操作,则使用 MPI_Alloc_mem() 不会有任何影响。但这确实是一种优化方式,无论如何分配内存,您的应用程序都应该正常工作(除了一些限制,请参见下文)。
摘自 MPI 3.1 的第8.2章。
引用:

在某些系统中,当访问特别分配的内存时(例如,由通信组中其他进程共享的内存),消息传递和远程内存访问(RMA)操作运行速度更快。MPI提供了一种分配和释放此类特殊内存的机制。使用此类内存进行消息传递或RMA并非强制性要求,此内存可以像任何其他动态分配的内存一样无限制地使用。但是,实现可能会限制某些RMA功能的使用,如第11.5.3节所定义的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接