e***s 发帖数: 799 | 1 好多个分布的节点,每个存有自己的一个value,最后要达到的结果是所有的节点都
知道其他节点的值。给了两个方程,一个是send给某个特定节点,一个是receive自某
个特定节点,一个节点send的时候是block的,后来我才明白意思是send出去之后要等
待receive到反馈,问如何实现。其实就是把所有节点构造成一个树,recursive用dfs
遍历,block的用处其实就是压栈。
我没看懂 “后要达到的结果是所有的节点都知道其他节点的值”, 这不是应该是一个
图吗?Send 跟 Receive 该怎么用?请大牛解释一下。 |
e***s 发帖数: 799 | |
l*****a 发帖数: 559 | 3 Try to search "Optimal All-To-All Broadcast Scheme". It is in distributed
computing. |
f*****e 发帖数: 2992 | 4 是ebay的吗?前些时有个人问了。
dfs
【在 e***s 的大作中提到】 : 好多个分布的节点,每个存有自己的一个value,最后要达到的结果是所有的节点都 : 知道其他节点的值。给了两个方程,一个是send给某个特定节点,一个是receive自某 : 个特定节点,一个节点send的时候是block的,后来我才明白意思是send出去之后要等 : 待receive到反馈,问如何实现。其实就是把所有节点构造成一个树,recursive用dfs : 遍历,block的用处其实就是压栈。 : 我没看懂 “后要达到的结果是所有的节点都知道其他节点的值”, 这不是应该是一个 : 图吗?Send 跟 Receive 该怎么用?请大牛解释一下。
|
e***s 发帖数: 799 | 5 巨硬的
【在 f*****e 的大作中提到】 : 是ebay的吗?前些时有个人问了。 : : dfs
|
d*s 发帖数: 699 | 6 import mpi4py as MPI
size = MPI.COMM_WORLD.size; rank = MPI.COMM_WORLD.rank
datalist = [0 for ii in xrange(size)]
datalist[rank] = data;
stat = MPI.status()
non-block情况:
for id in xrange(size):
if id==rank: continue
MPI.Isend(data, dest=id)
ii=0
while ii
if MPI.Iprobe(source=MPI.ANY_SOURCE, status=stat):
tmp = MPI.Irecv(source=stat.source)
datalist[stat.source] = tmp
ii+=1
block情况麻烦一些,只想出按顺序发送接收的笨办法:
for id in xrange(rank-1):
datalist[id] = MPI.Recv(tag=id)
for id in xrange(size):
MPI.Send(data, dest=id, tag=rank)
for id in range(rank+1,size):
datalist[id] = MPI.Recv(tag=id)
dfs
【在 e***s 的大作中提到】 : 好多个分布的节点,每个存有自己的一个value,最后要达到的结果是所有的节点都 : 知道其他节点的值。给了两个方程,一个是send给某个特定节点,一个是receive自某 : 个特定节点,一个节点send的时候是block的,后来我才明白意思是send出去之后要等 : 待receive到反馈,问如何实现。其实就是把所有节点构造成一个树,recursive用dfs : 遍历,block的用处其实就是压栈。 : 我没看懂 “后要达到的结果是所有的节点都知道其他节点的值”, 这不是应该是一个 : 图吗?Send 跟 Receive 该怎么用?请大牛解释一下。
|
e***s 发帖数: 799 | |
l*****a 发帖数: 559 | 8 没学过是不好回答。
【在 e***s 的大作中提到】 : 我完全跪了
|