【发布时间】:2014-03-14 09:17:30
【问题描述】:
我正在处理使用 MPI(在 c++ 中)并行化 Conways 的生命游戏。我必须从输入中读取一个(非常大的)矩阵,然后将其按行分散在切片中,然后并行处理每个切片。我遵循的想法是只让一个进程处理 I/O 内容。特别是,进程 0 从文件中读取并将初始数据保存到一个 RxC 矩阵中,以分散在 (R/P)xC“切片矩阵”中的进程中。 现在,当我执行例程 MPI_Scatter 时,编译器抱怨,因为“大矩阵”仅在第一个进程中分配。为了让事情顺利进行,我必须在所有过程中分配大矩阵,即使这些仍然是空白的。这是普通的,还是我做错了什么?有没有办法避免为每个进程分配一个空白的、无用的矩阵? 谢谢各位!
【问题讨论】:
-
将每个单独的 MPI 进程视为具有自己的变量、地址空间、等的单独程序。如果您想在进程的内存中使用变量(例如数组),那么是的,您当然必须在该进程的内存中为其分配空间。但是,一般来说,您不应该在每个进程的内存中为全局数组分配空间,而只为数组的本地部分分配空间。通过您非常合理的程序设计,您可以将数组读取到进程 0,然后将(消息传递)切片发送到每个将要完成工作的进程。
标签: c++ matrix parallel-processing mpi scatter