C 从基础MPI_操作句柄访问MPI_用户函数

C 从基础MPI_操作句柄访问MPI_用户函数,c,parallel-processing,mpi,C,Parallel Processing,Mpi,我想用MPI风格编写自己的扫描函数,这意味着我必须从MPI_Op参数访问关联操作。我真的找不到MPI_Op结构的定义,因此不知道使用什么偏移量来访问函数。我想这样做是因为我还想处理用户定义的函数,这些函数是用MPI_Op_Create函数创建并绑定到句柄的,并且尽可能接近MPI_Scan的MPI实现。 到目前为止,我尝试了以下代码段,假设函数的地址保存时没有偏移量,例如MPI_SUM句柄: int asize = 10; int inArray[asize]; int outArray[asiz

我想用MPI风格编写自己的扫描函数,这意味着我必须从MPI_Op参数访问关联操作。我真的找不到MPI_Op结构的定义,因此不知道使用什么偏移量来访问函数。我想这样做是因为我还想处理用户定义的函数,这些函数是用MPI_Op_Create函数创建并绑定到句柄的,并且尽可能接近MPI_Scan的MPI实现。 到目前为止,我尝试了以下代码段,假设函数的地址保存时没有偏移量,例如MPI_SUM句柄:

int asize = 10;
int inArray[asize];
int outArray[asize];

for(int i = 0; i < asize; i++) {
   inArray[i] = i;
   inOutArray[i] = i;
}

MPI_User_function *f = (MPI_User_function*) MPI_SUM;
MPI_Datatype type = MPI_INT;

f(inArray, inOutArray, &asize, &type);
intasize=10;
int INARAY[亚洲];
int outArray[asize];
for(int i=0;i

这段代码对我不起作用,我经常遇到“信号代码:无效权限”的分段错误。如果我不能访问预定义的操作,比如MPI_SUM、MPI_MAX、…,那就不是悲剧了,。。。(我可以自己编写功能),但我希望至少能够访问用户定义的功能。我不确定我想做的是否可能,有人有什么见解吗?

MPI\u Op
是一个MPI句柄-它是一个不透明的值,可以是指向结构的指针,也可以是表中的整数索引,也可以是一个神奇的值。但关键是,这并不重要,因为你不应该知道它到底是什么(因此“不透明”)

您不应该通过检查内部MPI结构来突破API壁垒,而应该使用,这是从操作中提取缩减函数并使用两个数组调用它的可移植版本

您的代码应为:

intasize=10;
int INARAY[亚洲];
int outArray[asize];
for(int i=0;i
该函数可用于预定义的缩减操作(例如
MPI\u SUM
)和用户定义的缩减操作

在实现全局约简时,需要特别注意操作的可交换性,特别是在处理用户定义的操作时。做你的另一个最好的朋友,当操作不是可交换的时,不要执行无序(次)还原


这两种功能都在的第5.9.7节(第189页)中进行了描述。

您是否使用谷歌
MPI\u用户功能
MPI\u Op\u创建
?如果你仍然卡住了,请发一个帖子。哇,好像我想的太复杂了,这就是我想要的,泰!