我正在使用 MPI(在 c++ 中)并行化 Conways 的生命游戏。我必须从输入中读取一个(非常大的)矩阵,然后将其按行分散到切片中,然后并行处理每个切片。我遵循的想法是只让一个进程处理 I/O 内容。特别是,进程 0 从文件中读取并将初始数据保存到 RxC 矩阵中,以便分散在 (R/P)xC“切片矩阵”中的进程中。
现在,当我执行例程 MPI_Scatter 时,编译器会抱怨,因为“大矩阵”仅在第一个进程中分配。为了使事情顺利进行,我必须在所有过程中分配大矩阵,即使这些矩阵仍然是空白的。这是正常现象,还是我做错了什么?有没有办法避免为每个进程分配一个空白的、无用的矩阵?
感谢你们!
你不需要到处分配“大矩阵”,但是MPI_SCATTER
确实需要您在所有队列上分配一些内存。
如果您要像这样分散数据:
分散前:
rank 0 - 1 2 3 4
分散后:
rank 0 - 1
rank 1 - 2
rank 2 - 3
rank 3 - 4
您需要为一个人分配空间int
每个等级(而不是所有 4 个等级)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)