本人之前开发C6455,代码是C与汇编混合编程,关键代码采用汇编,运行速度相比C代码大约快10倍,但现有一点疑问,望请高手指教!
1. 存取数据的汇编指令LD,ST等对地址操作时,需要等待5个CPU周期,数据才能完成存取,但是手册中并未对地址空间进行说明,我的问题是如果操作的是L1地址空间,或者L2地址空间,或者外部内存,都需要等待5个CPU周期吗?我感觉应该是L1最快,L2其次,外部内存最慢,请高手指教!
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
可以打开L1/L2 cache,在cache命中的情况下,速度也是很快的
Ce Song 说:存取数据的汇编指令LD,ST等对地址操作时,需要等待5个CPU周期,数据才能完成存取,但是手册中并未对地址空间进行说明,
这5个cycle是delay slot(delay 4 cycle, 第5 cycle数据到寄存器),跟指令相关,跟内存位置无关,因为指令执行时分为了下表中的同步:
Ce Song 说:我的问题是如果操作的是L1地址空间,或者L2地址空间,或者外部内存,都需要等待5个CPU周期吗?我感觉应该是L1最快,L2其次,外部内存最慢,
内存的延时属于memory stall的延时,会反应在上表中E3阶段,所以实际上访问不同内存的时间是不一样的,区别在E3阶段加上的memory stall会不一样。
详情参考文档sprufe8b: TMS320C674x DSP CPU and Instruction Set Reference Guide
您好,我最近在写汇编语言,也正关注cache stall 的问题,我用的6678,在计算延迟周期时与手册上的延时周期对应不上。如“TMS320C66x CorePac User Guide”手册中59页提到过计算将32KB的L2SRAM中的内容touch到L1D中需要(0.5 × M + 16) + (10.5 + 4 × (M/2 -1) + 3 × M/2)=2070.5cycle(M Consecutive Parallel Read Misses(pipelined))。而我自己用汇编写的函数,每周期通过AB两侧的功能单元并行访问两个不同的CACHE line,将32KB的内容全部touch到L1D中只消耗了1443个周期。而采用单侧功能单元每周期touch一个CACHE line则需要2851个周期。
不知道是什么原因?手册是否准确?我将L1D配置为32K,L2全部为SRAM。
等待您的回信
您好,我最近在写汇编语言,也正关注cache stall 的问题,我用的6678,在计算延迟周期时与手册上的延时周期对应不上。如“TMS320C66x CorePac User Guide”手册中59页提到过计算将32KB的L2SRAM中的内容touch到L1D中需要(0.5 × M + 16) + (10.5 + 4 × (M/2 -1) + 3 × M/2)=2070.5cycle(M Consecutive Parallel Read Misses(pipelined))。而我自己用汇编写的函数,每周期通过AB两侧的功能单元并行访问两个不同的CACHE line,将32KB的内容全部touch到L1D中只消耗了1443个周期。而采用单侧功能单元每周期touch一个CACHE line则需要2851个周期。
不知道是什么原因?手册是否准确?我将L1D配置为32K,L2全部为SRAM。
等待您的回信