A-A+
采用排队锁和fetch_and_increment原语重新实现栅栏同步 并将它们分别与采用旋
问题详情
采用排队锁和fetch_and_increment原语重新实现栅栏同步,并将它们分别与采用旋转锁实现的栅栏同步进行性能比较。
请帮忙给出正确答案和分析,谢谢!
参考答案
正确答案:fetch_and_increment(count);if(count=total){ //进程全部到达count=0; //重置计数器release=1; //释放进程}else{ //还有进程未到达spin(release=1); //等待信号}当有N个处理器时上述代码执行fetch_and_increment操作N次当访问释放操作的时候有N个Cache未命中。当最后一个处理器到达栅栏条件后release被置为“1”此时有N-1个Cache未命中(对于最后一个到达栅栏的处理器当它读release的时候将在主存中命中)。所以共有3N-1次总线传输操作。如果有10个处理器则共有29次总线传输操作总共需要2 900个时钟周期。
fetch_and_increment(count);if(count=total){//进程全部到达count=0;//重置计数器release=1;//释放进程}else{//还有进程未到达spin(release=1);//等待信号}当有N个处理器时,上述代码执行fetch_and_increment操作N次,当访问释放操作的时候,有N个Cache未命中。当最后一个处理器到达栅栏条件后,release被置为“1”,此时有N-1个Cache未命中(对于最后一个到达栅栏的处理器,当它读release的时候,将在主存中命中)。所以,共有3N-1次总线传输操作。如果有10个处理器,则共有29次总线传输操作,总共需要2900个时钟周期。