我尝试在不同的节点上获取不同长度的列表,将它们收集在一个节点中,然后让主节点将它们放在一个集合中。此列表在每个节点中命名为rout_array
。请注意,rout_array
中的元素只是整数,在节点之间不是唯一的。在
Traceback (most recent call last):
File "prout.py", line 160, in <module>
main()
File "prout.py", line 153, in main
num = DetermineRoutingNumber(steps, goal, vertexSetSize)
File "prout.py", line 129, in DetermineRoutingNumber
comm.Gather(send_buffer, recv_buffer, root = 0)
File "MPI\Comm.pyx", line 589, in mpi4py.MPI.Comm.Gather (c:\projects\mpi4py\src\mpi4py.MPI.c:97806)
File "MPI\msgbuffer.pxi", line 525, in mpi4py.MPI._p_msg_cco.for_gather (c:\projects\mpi4py\src\mpi4py.MPI.c:34678)
File "MPI\msgbuffer.pxi", line 446, in mpi4py.MPI._p_msg_cco.for_cco_send (c:\projects\mpi4py\src\mpi4py.MPI.c:33938)
File "MPI\msgbuffer.pxi", line 148, in mpi4py.MPI.message_simple (c:\projects\mpi4py\src\mpi4py.MPI.c:30349)
File "MPI\msgbuffer.pxi", line 93, in mpi4py.MPI.message_basic (c:\projects\mpi4py\src\mpi4py.MPI.c:29448)
KeyError: 'O'
我不知道当我的代码中没有字符串时,'O'
怎么会出现KeyError。所有列表都包含整数,numpy数组包含整数,这里唯一活动的字典只包含键的整数。需要注意的是,每个节点都会输出此错误。在
注意本例中的maxMatching = 2
和{3
。在
0,1
1,2
2,3
0,3
注意本例中的maxMatching = 4
和{4
。在
0,1
0,3
0,4
1,2
1,5
2,3
2,6
3,7
4,5
4,7
5,6
6,7
如果不同进程的长度不同,则需要使用向量变量
Gatherv
。提供一个包含不同长度的函数。在不幸的是,mpi4py文档目前没有描述如何使用
Gatherv
或任何其他向量变体。下面是一个简单的例子:如您所见,mpi4py不将sendcounts或recvcounts作为额外参数,而是作为
recvbuf
参数的tuple/list from。如果传递(recvbuf, sendcounts)
,它将从recvbuf派生类型。位移/偏移将使来自所有列的数据连续存储并按列排序。在基本上,mpi4py会猜测各种形式的
recvbuf
参数的含义。完整而明确的形式是(buffer, counts, displacements, type)
。在关于
KeyError
的编辑:很容易混淆的名称}的有效输入。
^{pr2}$rout_array
是set
,它不是{set
既不是序列,也没有数组接口。不幸的是,numpy.array
没有失败,而是创建了一个非常奇怪的没有维度的ndarray
对象。可以在列表中包装阵列创建:集合工作,但是循环没有终止,这并不奇怪,因为在}。在
while true
循环中没有return
或{相关问题 更多 >
编程相关推荐