w********r 发帖数: 14958 | 1 nonblock send过程中,内存是不能改的。 如果这些内存是new出来的,什么时候
delete他们呢?
我是拿个list,把所有通信需要的源内存都记录下来。 随时MPI_test这些通信完成了没
有,完成了在delete他们。
可是我觉得这样好蠢阿。 有好办法没有? |
x*h 发帖数: 757 | 2 楼主有没有试过send以后立刻delete会不会报错?报什么错误?null pointer?
我隐约记得,mpi的send是发送端把要发送的内容存到内存中即返回。
如果是这样,就是要发送内容的操作(包括new和delete)mpi已经给handle了。
那么理论上讲,isend的内容会被先寄存到一个临时内存中(mpi自动创建?,发送完以
后再由mpi负责delete。
所以我们不用管这个东西的delete?
【在 w********r 的大作中提到】 : nonblock send过程中,内存是不能改的。 如果这些内存是new出来的,什么时候 : delete他们呢? : 我是拿个list,把所有通信需要的源内存都记录下来。 随时MPI_test这些通信完成了没 : 有,完成了在delete他们。 : 可是我觉得这样好蠢阿。 有好办法没有?
|
w********r 发帖数: 14958 | 3 不是特别懂这些。 我记得mpi有buffer和 nonbuffer mode 两种。buffer mode就是你
说的情况。 具体的我也不知道。
【在 x*h 的大作中提到】 : 楼主有没有试过send以后立刻delete会不会报错?报什么错误?null pointer? : 我隐约记得,mpi的send是发送端把要发送的内容存到内存中即返回。 : 如果是这样,就是要发送内容的操作(包括new和delete)mpi已经给handle了。 : 那么理论上讲,isend的内容会被先寄存到一个临时内存中(mpi自动创建?,发送完以 : 后再由mpi负责delete。 : 所以我们不用管这个东西的delete?
|
d**********x 发帖数: 270 | 4 你为什么不能在MPI_Wait/MPI_Waitall之后delete?
如果你确实需要在MPI_Wait之前delete的话,确实有方法做到,但是需要改MPI
library的实现,而且需要看你interconnect用的什么(intra-node share memory/
Infiniband/TCP, etc.)
【在 w********r 的大作中提到】 : nonblock send过程中,内存是不能改的。 如果这些内存是new出来的,什么时候 : delete他们呢? : 我是拿个list,把所有通信需要的源内存都记录下来。 随时MPI_test这些通信完成了没 : 有,完成了在delete他们。 : 可是我觉得这样好蠢阿。 有好办法没有?
|
d**********x 发帖数: 270 | 5 isend的内容是否存到一个临时内存(bounce buffer)取决于message size。不一定是
放在bounce buffer中的。
【在 x*h 的大作中提到】 : 楼主有没有试过send以后立刻delete会不会报错?报什么错误?null pointer? : 我隐约记得,mpi的send是发送端把要发送的内容存到内存中即返回。 : 如果是这样,就是要发送内容的操作(包括new和delete)mpi已经给handle了。 : 那么理论上讲,isend的内容会被先寄存到一个临时内存中(mpi自动创建?,发送完以 : 后再由mpi负责delete。 : 所以我们不用管这个东西的delete?
|
w********r 发帖数: 14958 | 6 因为我不想让process wait, process还有别的事要做。 等起来太慢。
【在 d**********x 的大作中提到】 : 你为什么不能在MPI_Wait/MPI_Waitall之后delete? : 如果你确实需要在MPI_Wait之前delete的话,确实有方法做到,但是需要改MPI : library的实现,而且需要看你interconnect用的什么(intra-node share memory/ : Infiniband/TCP, etc.)
|
b**g 发帖数: 335 | 7 check these two:
MPI_Bsend
MPI_Ibsend
【在 w********r 的大作中提到】 : nonblock send过程中,内存是不能改的。 如果这些内存是new出来的,什么时候 : delete他们呢? : 我是拿个list,把所有通信需要的源内存都记录下来。 随时MPI_test这些通信完成了没 : 有,完成了在delete他们。 : 可是我觉得这样好蠢阿。 有好办法没有?
|
d**********x 发帖数: 270 | 8 你的process做的workload跟传输的data有dependency吗?如果没有的话,把那些
workload放在MPI_Wait之前没有问题啊。workload跟数据传输是并行处理的阿。等你的
program flow到达MPI_Wait的时候,数据传输已经ready了,没有process wait。除非
你的workload太short,到达mpi_wait的时候,数据传输还没完成。
【在 w********r 的大作中提到】 : 因为我不想让process wait, process还有别的事要做。 等起来太慢。
|