gpt4 book ai didi

MPI 和全局变量

转载 作者:行者123 更新时间:2023-12-03 15:08:19 30 4
gpt4 key购买 nike

我必须实现一个 MPI 程序。有一些全局变量(4 个浮点数数组和其他 6 个单浮点变量)首先由主进程从文件读取数据初始化。然后我调用 MPI_Init ,当等级 0 的进程等待结果时,其他进程(等级 1、2、3、4)处理数组等...
问题是那些数组似乎不再被初始化,全部都设置为 0。我试图将全局变量移动到 main 函数中,但结果是一样的。当 MPI_Init() 被调用时,所有进程都是由 fork 创建的,对吗?所以每个人都有父亲的内存副本,为什么他们看到没有初始化的数组?

最佳答案

我怕你误会了。

最好将每个 MPI 进程视为一个独立的程序,尽管与计算中的每个其他进程具有相同的源代码。进程 0 对其地址空间中的变量进行的操作对其他进程的地址空间的内容没有影响。

我不确定 MPI 标准是否要求进程 0 具有在调用 mpi_init 之前声明和初始化的变量的值。 ,即在进程 0 真正存在之前。

无论是否这样做,您都必须编写代码将值放入其他进程地址空间中的变量中。一种方法是让进程 0 将值一个接一个地或使用广播发送给其他进程。另一种方法是让所有进程从输入文件中读取值;如果您选择此选项,请注意对 I/O 资源的争用。

顺便说一下,我认为 MPI 实现通过在调用 mpi_init 时 fork 来创建进程是很常见的。 , fork 更常用于创建线程。我认为当您调用 mpiexec 时,大多数 MPI 实现实际上会创建进程。 , 调用 mpi_init是宣布您的程序正在开始其并行计算的形式。

关于MPI 和全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20527338/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com