我要在这个夏天掌握MPI。我开始阅读彼得·帕切科( Pacheco )的“并行编程入门”,并解决它的练习。在其中一个MPI练习中,他要求用MPI_Scan实现简单的前缀和,但我不能用MPI_Scan实现它。我通过使用MPI_Scatter和MPI_Gather找到了一个解决方案。请帮我找到MPI_Scan的答案。
// declaring array and result
// generating random array
MPI_Bcast( &array, n, MPI_FLOAT, 0, MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD);
我想用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++) {
inArr
我是MPI的新手,我想做一个问题,我有两个数组A和B,有15个元素,我有16个进程,每个进程代表数组中的一个元素(我不使用进程0)。数组A存储了一个位置8.15的输入数据,该位置表示一棵树的叶子,在第一步中,我在数组中进行压缩,其中叶子将数字发送给来自所有儿子的父和父,并将这些数字添加到父亲。数组at是在过程1中完成的,其中是数组中所有元素的总和。在第二步中,我进行前缀计算,从进程0开始,在叶处结束。为了计算数组B,所有其他进程都需要等待进程1来完成工作,为此我使用了一个MPI_Barrier,但是在执行代码时有一个错误。
int m = 3;
int n = (int)pow(2, m);
如果我想列出每个通信器的变量id,我如何做到这一点?下面是一个试图证明这一想法的尝试:
from mpi4py import MPI
comm = MPI.COMM_WORLD
obj = "I am an example. My ID is unique to each communicator."
mpi_id = 'rank %i has id %s'%(comm.rank, str(id(obj)))
comm.send(mpi_id, tag=11, dtest=comm.rank)
mpi_id_list = []
for i in range(