请教大家一个问题:看了C6748的手册,每个时钟周期可以执行8条32bits的指令,也就是3648MIPS。但我实际测出的结果是一条单周期指令执行需要将近10个时钟周期,也就是每个时钟周期大概执行0.1条指令,慢了很多。想知道怎么回事,如何能够提高C6748的执行速度。多谢!
noaming:
每个时钟周期可以执行8条32bits的指,是指在很多指令同时执行时最理想的流水排布效果。就单条指令来说,它的执行的时钟周期是固定的。
Tony Tang:
robieson robieson看了C6748的手册,每个时钟周期可以执行8条32bits的指令,也就是3648MIPS
这是最大值,针对单周期指令的情况再乘以8条并行执行的指令,通常说的CPU loading 100%的定义就是这种条件。而且这里只考虑指令在功能单元的执行时间。
robieson robieson但我实际测出的结果是一条单周期指令执行需要将近10个时钟周期,也就是每个时钟周期大概执行0.1条指令,
实际测试一条指令的时间,它还包括了delay slot,这个时间跟不同的指令相关,见下表(来源文档sprufe8b:TMS320C674x DSP CPU and Instruction Set Reference Guide),和取指的时间,即CPU从内存把这条指令读取到功能单元的时间,这个时间长短取决于内存位置,如果是在片上内存L1最快,L2次之,DDR为最慢。
robieson robieson如何能够提高C6748的执行速度
下面链接有相关资料及视频,内容很详实,希望你有耐心:
http://processors.wiki.ti.com/index.php/TMS320C6000_DSP_Optimization_Workshop
robieson robieson:
回复 Tony Tang:
谢谢!有一点还不太明白,“针对单周期指令的情况再乘以8条并行执行的指令”。指令执行分fetch,decode,execute3个阶段,fetch阶段需要4个phases,decode阶段需要2个phase,对于单周期指令execute阶段需要1个phase。是不是每个phase用1/3648MIPS,还是别的什么意思。我在5510和6748两种平台下测同一段程序,主频设为基本一样,都在片上运行,结果6748运行的慢占用cpu的cycle多,如果这样,c6000结构的平台性能比c5000要低吗