您好:
我自己编写的一个大量数据运算的汇编代码,发现该汇编代码在simulator下运算时间和在c6678评估板上运行时间区别很大,评估板上运行时间是simulator下的2倍多,不知道是什么原因, 程序数据段都是放在片内的.
Andy Yin1:
您好,
simulator分为functional及cycle approximate 两种,前一种主要用来仿真功能,不能用来测试cycle;后一种cycle更接近实际板子的测试数据,但是根据实测发现他不能准确仿真cache性能,所以还是会有一定的差异;所以请以板子上实测的cycle为准,注意在板子上测试的时候一定要确定配置好了工作主频。
si cheng:
回复 Andy Yin1:
你好:
我是在cycle approximate 下仿真的, 我编写的是2个32K个点向量做加法运算,流水循环核中平均每个运算是1.75个时钟周期,那么计算完这32K点所用时间应该大约是32*1024*1.75(这里排除了流水填充和排空的时间), 在simulator下计算的时间确实跟这个时间差不多,但是在c6678评估板上运行,发现时间是这个的2倍多, 我想知道是:会不会是lddw指令去L2取数据在数据总线上有延迟,导致整个时间消耗过多? 我的L1D,L1P全部配置成cache了,数据和代码全部放在L2.
si cheng:
回复 si cheng:
你好:
我在评估板上单步执行该汇编程序的同时,去观察核计算器TSCL. 一般情况下,没单步执行一次,TSCL应该是加1的, 但是 发现程序每次运行到某个特定的地址执行指令时(该指令是lddw指令), TSCL 一次加了 8, 这个让我很奇怪.
Andy Yin1:
回复 si cheng:
您好,
1. 关于cycle问题:第一次执行的时候存在cache miss,而由于simulator不能很好仿真cache性能,所以得到的cycle与你实际的计算相近;所以在板子上测试时建议测试多次看cycle,或者在程序执行前加入touch达到warm cache的效果,这样避免第一次执行cache miss的概率;
2. 每次TSC加的数取决于指令执行一次的周期数。
si cheng:
回复 Andy Yin1:
您好:
1.你说的在程序执行前加入touch达到warm cache, 这个touch 是什么意思?如何使用?
2. 如果我吧我程序放在SL2, L1P ,L1D 默认全部设置成CACHE,运行在c6678评估板上,运行时间和在simulator上时间周期数大约会相差多少?
Andy Yin1:
回复 si cheng:
您好,
1. warm cache主要就是实现了将数据地址预先映射到cache,降低miss 概率;具体的touch实现可以参考附件,在使用时只需将附件汇编文件加入到工程中,然后再测试函数之前调用touch函数对重要的大块数据实现warm cache,功能;
2. 需要看你当时处理数据的存放于读写格式,及块大小;具体差异没有衡量。