CUDA上add.f32指令的执行周期到底是多少?(续)

本文深入探讨了CUDA中单精度浮点加法指令的执行周期,通过实验发现并非手册所述的4个时钟周期,而是20个。原因在于数据相关性导致指令不能并行执行。实验表明,当线程数达到160时,可以填满流水线,且流水线宽度为16个指令,长度为10步,每个步骤平均执行时间为2个时钟周期。此外,流水线的瓶颈部件节拍也是2个时钟周期,验证了CUDA流水线的工作原理。
摘要由CSDN通过智能技术生成

前文提及,通过试验表明,在130M显卡上,单精度浮点加法计算的串行执行要每指令20个时钟周期.与cuda手册上提及
的4周期差距甚大.(试验结果数据:频率/实测性能=1.5/0.0745679=20.116)

 

曾考虑到过,现代cpu其实都是以流水线方式处理每一条指令的(取指,译吗,计算,保存结果等等)。进入流水线的前几

条指令可能因为要在流水线中按脉冲流动,消耗时间会较长。但是一旦启动后,应该是按瓶颈部件的节拍流出结果的啊。
前文的测试程序表明,最少有7500条相同的单精度浮点加法指令连续流入流水线,流水线的长度不可能有那么长的,
早充满了。而且,瓶颈部件的节拍也不可能是20个周期。不然的话,当多线程执行时,每4周期就执行不了32条指令!
而实践表明这个理论值是可以达到的。

 

基于以上思考,我一下子被卡住了,没法自我解释。呵呵。

 

直到刚才和网上大牛ic.expert交流,他的一句"这段程序中每条指令都是前后相关的(即下一条指令会用到上一条指令
的结果),所以他的指令发射状态应该是一条指令走过Read Registerfiles + SP Pipeline后,下一条指令才会继续上

一条指令的动作"点醒了梦中人。是啊,怎么忘了数据相关呐!前文的程序中,两条指令之间是高度数据相关的。这样,

也就意味着前一条指令没执行完毕,后一条指令是没法进入流水线的(不然,在不知道前面结果情况下,后面没法得到正

确的结果--并行的基本限制!)。

 

前文的试验结果表明,130M上的SP的流水线的总执行时间(从进

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值