24小时热门版块排行榜    

查看: 245  |  回复: 1
当前主题已经存档。

ilyyijingl

木虫 (初入文坛)

[交流] 求助:关于计算机系统结构方面的几道题

A.12观察一个普通向量循环在不同MIPS流水线上的运行情况,循环名称为SAXPY(在附录G中有详细介绍)。其中的关键操作为高斯消元法。该循环实现响亮运算Y=A*x+y,向量长度为100,以下是这个循环的MIPS代码:
foo:    L.D        F2,0(R1)      ;读X(i)
        MULT.D     F4,F2,F0      ;乘a*X(i)
        L.D        F6,0(R2)      ;读Y(i)
        ADD.D      F6,F4,F6      ;加a*X(i)+Y(i)
        S.D        0(R2),F6      ;保存Y(i)
        DADDUI     R1,R1,#8    ;X的下标增量
        DADDUI     R2,R2,#8    ;Y的下标增量
        SDGTUI     R3,R1,done    ;测试循环是否结束
        BEQZ       R3,FOO       ;若不等于零则循环
对下面的(a)~(c),假设定点操作的发射和完成均为1个时钟周期(包括load操),执行结果均可以通过直接数据通道输出。忽略分支延迟,浮点不见的延迟时间与土A。30相同,并假设浮点不见是完全流水的。采用记分板方案,假设一条指令的结果可以在写入的同时通过旁路给需要这个结果的下一条指令。假设如果一条指令完成了读写操作,那么等待相同单元的处于激活状态的指令可以在同一周期中发射:
a.对于如图A。30所示的MIPS流水线上,计算在第一次循环时各条指令的停顿周期数,并指出每条指令分别在哪一个周期开始执行(即第一次进入EX阶段),每执行一次循环需要多少个时钟周期?

b.用MIPS代码表示上面的SAXPY循环,采用记分板方(如图A。53),当DSGTUI指令到达写回结果阶段时,给出各个表的状态。假设发射和读操作数各需要一个周期,一个定点功能不见的执行时间为一个周期(使用的延迟时间为0个周期,load和store)。浮点不见的结构同图A.51,延迟时间同图A。30,分支不包括在记分板中。

c.用MIPS代码表示上面的SAXPY循环,架设在记分板中有一个如图A。51所示意的浮点功能部件,还有一个定点功能部件(也可以做load-store)。假设延迟时间如图A。56所示。当分支指令第二次发射时,给出记分板的状态(与土A.53类似)。假设分支总是正确预测且只需要一个周期,问执行每一个循环花去多少个时钟周期?可以忽略寄存器断口和总线冲突。
------------------------------------------------------------------------------------
产生结果的指令                   使用记过的指令                    延迟的周期数
------------------------------------------------------------------------------------
浮点乘法                         浮点ALU操作                       6
浮点加法                         浮点ALU操作                       4
浮点乘法                         浮点store                         5
浮点加法                         浮点store                         3
定点操作(包括load)             任意                              0
------------------------------------------------------------------------------------
                      A.56产生结果与使用结果的指令之间的延迟周期数







P251
4.9在这道习题里,我们看看一些软件技术是如何在一个普通的向量循环里开发指令级并行性的。以下这个循环是高斯消元法中的核心操作,被称为DAXPY循环(双精度的a乘X再加Y,在附录G中讨论)。以下代码实现了对长度为100的向量进行DAXPY操作:Y=a*X+Y。
bar:   L.D       F2,0(R1)     ;读X(i)
       MUL.D     F4,F2,F0     ;乘a*X(i)
       l.d       F6,0(R2)     ;读Y(i)
       ADD.D     F6,F4,F6     ;求和a*X(i)+Y(i)
       S.D       0(R2),F6     ;保存Y(i)
       DADDUI    R1,R2,#8     ;X下标减1
       DADDUI    R2,R2,#8   ;Y下标减1
       DSGTUI    R3,R1,#800 ;测试循环是否结束
       BEQZ      R3,BAR      ;如果循环没有结束,战役到bar

对(a)~(e)各小题,假设流水线的延迟时间如图4。1所示,在ID阶段的转移操作有1个时钟周期的延迟。假设定点指令在1个时钟周期内发射并完成,指令的结果全部可以从旁路返回。
a.假设代码运行在一个单发射的流水线上。写出浮点操作和转移延迟在编译器调度之前和之后的执行情况,包括所有的停顿和空闲周期(参考例题4.1)。在指令调度之前和之后,每产生一个结果向量Y需要多少执行时间?如果仅依靠硬件来达到同样的性能提高(忽略提高处理时钟速度可能引起的存储系统因为访问存储器而增加的时钟周期数),处理器的时钟周期要加快多少?

b.假设代码运行在一个单发射的流水线上。把这个循环展开足够的次数,消除所有停顿周期和循环开销指令。循环将会被展开多少次?写出调度后的代码。每产生一个结果向量需要多少执行时间?减少这个执行时间的主要因素是什么?

c.假设代码运行在一个如图4.5所示VLIW处理器上,进行指令调度,消除5个操作。我们来比较两种循环展开方案。首先,循环展开4次,进行指令调度,消除所有停顿周期(即完全不发射指令的周期)和循环开销指令,然后把循环展开10次并重复这个过程。忽略转移指令的延迟时间。分别写出两次展开并调度后的代码。在两次展开后,每产生一个结果向量分别需要多少执行时间?又分别使用了多少比例的操作槽?两次展开后的代码量相差多大?两次展开后分别需要多少个寄存器?

d.假设为市场上不同性能价格比的需求设计了一组VLIW处理器。简化版处理器的延迟时间比图4.1所示的要长。如果把你在(c)小题中得出的代码运行在这种低端处理器上,结果会如何?你将如何消除非预期行为的影响?

e.假设代码运行在一个单发射的流水线上。DAXPY循环在进行软件流水后的代码。可以省略装入代码和排空代码。每产生一个结果向量需要多少执行时间?

[ Last edited by 幻影无痕 on 2006-10-21 at 07:32 ]
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

发如雪

木虫 (文坛精英)

文艺女青年

优秀版主

1

3Q3Q~~~
85后,介于女流氓与女强盗之间,道貌岸然的文艺小奋青!
2楼2006-09-04 13:53:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 ilyyijingl 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见