如果我不将 MPI_Isend 与 MPI_Wait 配对,我的程序是不是需要增加内存量?
Posted
技术标签:
【中文标题】如果我不将 MPI_Isend 与 MPI_Wait 配对,我的程序是不是需要增加内存量?【英文标题】:Will my program require increasing amounts of memory if I don't pair my MPI_Isend's with MPI_Wait?如果我不将 MPI_Isend 与 MPI_Wait 配对,我的程序是否需要增加内存量? 【发布时间】:2013-08-04 04:12:42 【问题描述】:我使用 MPI 并行化了 Fortran 代码。在共享点,我使用 MPI_Isend 从模型中的所有进程将所有数据发送到缓冲区。然后,每个进程使用 MPI_Recv 收集它需要的数据。由于 MPI_Recv 是阻塞的,我知道每个进程在继续计算之前都在获取它需要的数据。因此,我只是忽略了 MPI_Isend 给我的请求代码。我将它设置为一些我不保留的整数。我从不调用 MPI_Wait。当我运行我的代码时,我注意到它在每次迭代时都会占用更多的内存,我想知道是不是因为我没有调用 MPI_Wait,因为在文档中,MPI_Wait 说:
如果与此请求关联的通信对象已创建 通过非阻塞发送或接收调用,然后对象被释放 通过调用 MPI_WAIT 并将请求句柄设置为 MPI_REQUEST_NULL。
您认为这就是我的程序在整个运行过程中消耗更多内存的原因吗?
【问题讨论】:
是的。 slideshare.net/jsquyres/…. 谢谢。我想我现在需要想出一个系统来存储/检索请求代码。 【参考方案1】:与 MPI 通信功能(例如您的 MPI_ISend
)关联的 MPI_Request
将被分配内存,并且必须通过 MPI 进行清理(而不是 delete
)。
在发生以下 3 件事之一之前,不会归还内存:
诸如MPI_Wait
之类的等待在请求上完成,释放它。
MPI_Test
返回成功,同时释放它。
使用MPI_Request_free
释放请求。
可以释放一个活动请求(即一个未完成传输的消息的MPI_Request
),该请求将继续发送,但MPI_Request
将不再适用于任何用途,例如测试、等待等等
【讨论】:
是的,我更改了我的数据共享系统以存储请求代码,并对 MPI_Wait 进行必要的调用以释放内存。我的代码现在在整个模拟过程中使用恒定数量的内存,而不是吃掉集群上的每一点 RAM。以上是关于如果我不将 MPI_Isend 与 MPI_Wait 配对,我的程序是不是需要增加内存量?的主要内容,如果未能解决你的问题,请参考以下文章
为啥如果我不将 csrf_field() 放在表单的末尾(在 Laravel 5 视图中)我会获得 TokenMismatchException?