【问题标题】:MPI malloc vs MPI_Alloc_mem when to use?MPI malloc vs MPI_Alloc_mem 什么时候使用?
【发布时间】:2019-03-19 01:49:06
【问题描述】:

在编写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_memhttps://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

【问题讨论】:

    标签: c mpi dynamic-memory-allocation


    【解决方案1】:

    RMA可能在使用MPI_Alloc_mem() 返回的内存时比malloc() 更快。此外,MPI_Alloc_mem() 带有一个 MPI_Info 参数,您可以使用该参数来优化内存位置(请注意,此参数的值是特定于实现的,标准未涵盖,MPI_INFO_NULL 将始终有效)。

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

    长话短说,如果内存将用于 RMA 操作,使用 MPI_Alloc_mem() 不会有任何影响。但这确实是一个优化的事情,无论您如何分配内存,您的应用程序都应该可以运行(减去一些限制,见下文)

    来自 MPI 3.1,第 8.2 章

    在某些系统中,消息传递和远程内存访问 (RMA) 访问特别分配的内存时,操作运行得更快(例如, 通信中其他进程共享的内存 SMP 上的组)。 MPI 提供了一种分配和释放的机制 如此特殊的记忆。将此类内存用于消息传递或 RMA 不是强制性的,并且可以不受限制地使用此内存 任何其他动态分配的内存。然而,实现可能 限制部分 RMA 功能的使用 11.5.3.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-09
      • 2015-05-14
      • 2018-10-28
      • 2021-02-01
      • 1970-01-01
      • 2015-10-27
      相关资源
      最近更新 更多