我有一个程序,我正在尝试使用MPI进行并行。在这个程序中,我在每个进程上都有一个vector的副本。单个过程可以编辑向量中的任何项目,但是通过设计,不会在多个过程中编辑任何项目。然后,我需要一种方法来更新进程中的向量,以便每个进程再次包含一个副本,其中向量包含每个进程的更新值。
我可以想到一些可能的方法来做到这一点,包括使用一个额外的bool矢量进行更改或者更改,然后进行比较然后比较然后广播,但我最喜欢的是使用带有自定义MPI_Op的allreduce调用来比较值和更改独特的价值。不幸的是,似乎MPI_op被定义为只传递两个向量来阻止我找到唯一值。
我想这种类型的问题并不是特别罕见,所以请随意指出我可能错过的替代方法。 感谢。
这是我正在尝试的但是你可以告诉它失败,因为它可能会错误地更新唯一值而不是正确的值。
void assignDifferent(double *in, double * inout, int *len, MPI_Datatype *dptr){
int i;
double newValue;
for (i = 0; i<*len ; i++){
*inout = in[i]==*inout? *in:*inout;
in++,inout++;
}
}