edge-coloring来解决进程间一对一通信。

这个是我自己遇到的问题,后来在国外的网站上问的外国人才解决的,现在把这个问题给大家分享下。问题不大。

我当时是在做mpi并行。假设你有4个进程1~4,它们两两间要做交互(interaction),那么可以按照下面的方法进行

time1:(1,2)(3,4)

time2:(1,3)(2,4)

time3:(1,4)(2,3)

也就是说在3个时间点,便可以完成全部交互,并且任何时候都没有空闲的进程。但是当进程数n变大的时候,这个算法就比较难设计了。

比如n=6,下面的方式就是不行的。

time1:(1,2)(3,4)(5,6)

time2:(1,3)(2,4).......

上面的time2的时候5和6已经做完交互了,所以它们在time2的时候是空闲的,上述算法是不高效的。其实,一般来说我们处理的进程数n都是偶数,可以再n-1个时间点完成的。

解决这个问题就是要设计到经典的问题:edge——coloring。

上述问题实际上就是完全图(completed graph)的着色问题。这个coloring可以参看维基百科:http://en.wikipedia.org/wiki/Edge_coloring



这个图已经展示的很明了,把图中的n个点看做n个进程。n-1种颜色就是这种communication或者time节点。获取这个算法的方法在上述维基百科中也有描述,也就是

place n points at the vertices and center of a regular (n − 1)-sided polygon。For each color class, include one edge from the center to one of the polygon vertices, and all of the perpendicular edges connecting pairs of polygon vertices.

意思是,将一个点放置到n-1边行的中间,连接这个中间点与一个顶点,那么与这条线垂直的线就要染成相同的颜色。比如上图中,粉红色。中间点是与最上面的点连接的。然后有三条线与它垂直,也染成了粉红色。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值