并行计算(陈国良版)课后答案 联系客服

发布时间 : 星期五 文章并行计算(陈国良版)课后答案更新完毕开始阅读

进程访问,访问本地数据的代价与远程访问代价相比微不足道,报文传递也是可靠的。试分析两种算法的适合情况。

答:中央服务器算法,每次顾客发送数据请求到中央服务器,地址计算简单,适合多个顾客频繁轮流读写。迁移算法每次确定位置需要一定开销,适用于单个顾客频繁对数据读写,因为访问数据总是被迁移到访问节点里。

7.8下面是运行在一个硬件维护高速缓存一致性的多处理机上的程序段,假设所有值初始 为0。

P1 P2 P3 P4 A=1 U=A W=A A=2 V=A X =A

只有一个共享变量A, 假设一个用户知道所有高速缓存拷贝的地址并且可直接对(不 需要和目录节点协商)拷贝进行更新,假设采用写更新协议。试构造出一个写原子性被 违背的情况:

说明产生的结果违背了顺序一致性;

答:如果进程P1首先对含有共享变量A的数据块进行写操作,进程P2、P3执行U=A和W=A,分别将U、W置为1。此时P4对共享变量A进行写操作,并且同时更新P1、P2、P3中的值,此后P2、P3再执行V=A,X=A,此时V与X被置为了2。对于进程2来说,结果违背了顺序一致性。

7.9参照下述代码段:

问:000000是不是PARM一致性内存模型的合法输出?解释原因说明顺序一致性与PARM一致性区别?

a=1; b=1; c=1;

Print(b, c); Print(a, c); Print(a, b); (a)P1 (b) P2 (c)P3

答:在PARM一致性内存模型下,000000是合法输出,因为PARM不关注存储相关性,即同一进程程序序可以优化,这样各进程先执行打印完再执行赋值则出现如上情况。顺序一致性与PARM一致性的区别就是于是否关注存储相关性。

7.10有两个并行的过程P1、P2(如下图所示),在顺序一致性模型下,试列出所有可能的

6种语句交错执行顺序,使两进程不可能同时被kill。 a=1; b=1;

if(b= =0)kill(P2); if(a= =0)kill(P1); (P1) (P2) 答:(1)a=1;

if(a= =0)kill(P1); b=1;

if(b= =0)kill(P2); (2) a=1; b=1;

if(a= =0)kill(P1); if(b= =0)kill(P2); (3) b=1;

13

if(a= =0)kill(P1);

a=1;

if(b= =0)kill(P2); (4) b=1;

if(a= =0)kill(P1); if(b= =0)kill(P2);

a=1; (5) a=1;

if(a= =0)kill(P1); if(b= =0)kill(P2); b=1;

(6) if(a= =0)kill(P1); if(b= =0)kill(P2);

a=1;

b=1;

分析以上6种情况,在满足顺序一致性模型前提下,不会存在P1、P2同时被KILL的情况。

14