前文提及,通过试验表明,在130M显卡上,单精度浮点加法计算的串行执行要每指令20个时钟周期.与cuda手册上提及
的4周期差距甚大.(试验结果数据:频率/实测性能=1.5/0.0745679=20.116)
曾考虑到过,现代cpu其实都是以流水线方式处理每一条指令的(取指,译吗,计算,保存结果等等)。进入流水线的前几
条指令可能因为要在流水线中按脉冲流动,消耗时间会较长。但是一旦启动后,应该是按瓶颈部件的节拍流出结果的啊。
前文的测试程序表明,最少有7500条相同的单精度浮点加法指令连续流入流水线,流水线的长度不可能有那么长的,
早充满了。而且,瓶颈部件的节拍也不可能是20个周期。不然的话,当多线程执行时,每4周期就执行不了32条指令!
而实践表明这个理论值是可以达到的。
基于以上思考,我一下子被卡住了,没法自我解释。呵呵。
直到刚才和网上大牛ic.expert交流,他的一句"这段程序中每条指令都是前后相关的(即下一条指令会用到上一条指令
的结果),所以他的指令发射状态应该是一条指令走过Read Registerfiles + SP Pipeline后,下一条指令才会继续上
一条指令的动作"点醒了梦中人。是啊,怎么忘了数据相关呐!前文的程序中,两条指令之间是高度数据相关的。这样,
也就意味着前一条指令没执行完毕,后一条指令是没法进入流水线的(不然,在不知道前面结果情况下,后面没法得到正
确的结果--并行的基本限制!)。
前文的试验结果表明,130M上的SP的流水线的总执行时间(从进