在研究并行计算的基本算法时,有以下简单模型问题:用计算机求n个不同的数v1,v2,…,vn的和
=v1+v2+v3+…+vn.计算开始前,n个数存贮在n台由网络连接的计算机中,每台机器存一个数.计算开始后,在一个单位时间内,每台机器至多到一台其他机器中读数据,并与自己原有数据相加得到新的数据,各台机器可同时完成上述工作.
0 130881 130889 130895 130899 130905 130907 130911 130917 130919 130925 130931 130935 130937 130941 130947 130949 130955 130959 130961 130965 130967 130971 130973 130975 130976 130977 130979 130980 130981 130983 130985 130989 130991 130995 130997 131001 131007 131009 131015 131019 131021 131025 131031 131037 131039 131045 131049 131051 131057 131061 131067 131075 266669
为了用尽可能少的单位时间,使各台机器都得到这n个数的和,需要设计一种读和加的方法.比如n=2时,一个单位时间即可完成计算,方法可用下表表示:
|
机 器 号 |
初 始 时 |
第一单位时间 |
第二单位时间 |
第三单位时间 |
|||
|
被读机号 |
结果 |
被读机号 |
结果 |
被读机号 |
结果 |
||
|
1 |
v1 |
2 |
v1+v2 |
|
|
|
|
|
v1+v2 |
v2 |
1 |
v2+v1 |
|
|
|
|
(Ⅰ)当n=4时,至少需要多少个单位时间可完成计算?
把你设计的方法填入下表
|
机器号 |
初始时 |
第一单位时间 |
第二单位时间 |
第三单位时间 |
|||
|
被读机号 |
结果 |
被读机号 |
结果 |
被读机号 |
结果 |
||
|
1 |
v1 |
|
|
|
|
|
|
|
2 |
v2 |
|
|
|
|
|
|
|
3 |
v3 |
|
|
|
|
|
|
|
4 |
v4 |
|
|
|
|
|
|
(Ⅱ)当n=128时,要使所有机器都得到
,至少需要多少个单位时间可完成计算?(结论不要求证明)