MPI malloc与MPI_Alloc_mem何时使用?

问题描述 投票:1回答:1

在编写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个回答
3
投票

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

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

长话短说,如果内存将用于RMA操作,使用MPI_Alloc_mem()不会受到伤害。但这确实是一个优化的事情,无论你如何分配内存,你的应用程序都应该工作(减去一些限制,见下文)

从MPI 3.1,第8.2章

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

© www.soinside.com 2019 - 2024. All rights reserved.