MPI单边通信,远程内存访问,内存不足

MPI单边通信,远程内存访问,内存不足,mpi,Mpi,我有一个矩阵a和一组向量(b0..bn),我想乘以它们来生成向量c0..cn。 使用std方法,MPI将在每个进程上复制矩阵a,并相应地在进程之间分配向量 例如,10个进程(MPI_列)中的100个向量b0..b99 我的问题是A非常大而且稀疏,复制10个或更多副本将是一个坏主意或不切实际,只是它不适合(假设我有一个四核,即在我的主机中,当一个副本几乎不适合时,我必须复制四次) 是否有可能使用MPI单边通信使进程0中有一个,而其他9个处理器仅使用RMA读取一个,并且仍然产生c0..c99?像 r

我有一个矩阵a和一组向量(b0..bn),我想乘以它们来生成向量c0..cn。 使用std方法,MPI将在每个进程上复制矩阵a,并相应地在进程之间分配向量

例如,10个进程(MPI_列)中的100个向量b0..b99

我的问题是A非常大而且稀疏,复制10个或更多副本将是一个坏主意或不切实际,只是它不适合(假设我有一个四核,即在我的主机中,当一个副本几乎不适合时,我必须复制四次)

是否有可能使用MPI单边通信使进程0中有一个,而其他9个处理器仅使用RMA读取一个,并且仍然产生c0..c99?像

rank0:
c0=A.b0 ,c1=A.b1, ... c9=A.b9

rank1:
c10=(remote A in Rank 0).b10, c11=(remote A in Rank 0).b11 ... c19= (remote A in Rank 0).b19
...
rank9
c90=(remote A in Rank 0).b90,c91=(remote A in Rank 0).b91 ... c99=(remote A in Rank 0).b99

如果您处于共享内存环境(又称笔记本电脑),那么您应该真正使用共享内存并行编程范例(又称OpenMP)。MPI是最有用的分布式内存并行编程范例(也就是跨网络的多个计算节点)。答案是肯定的,这是可能的。但问题是这是否有帮助,因为您仍然需要一个需要这么大内存的进程?同时分发矩阵不是更好吗?如果需要,您仍然可以使用单面,但只需从不同的进程获取数据。
rank0:
c0=A.b0 ,c1=A.b1, ... c9=A.b9

rank1:
c10=(remote A in Rank 0).b10, c11=(remote A in Rank 0).b11 ... c19= (remote A in Rank 0).b19
...
rank9
c90=(remote A in Rank 0).b90,c91=(remote A in Rank 0).b91 ... c99=(remote A in Rank 0).b99