您好:
安装目录下,工程DSPF_sp_dotp_cplx_66_LE_COFF工程,是测试8,16,。。。 256个点的复乘的周期数;现在我将测试的点个数改成256,512,。。32768的点的复乘,测得一组时钟周期数,其中4096点的周期数是n。然后我单独测试4096点得复乘,发现得到的周期数和n相差很大,请问这是什么原因?您可以查看下安装目录下得这个工程的代码,我是将其中for循环的起始值8改成256,N改成32768,可以测试一组周期数;单独测试时将起始值和N值改成4096.
谢谢!
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.
King Wang ,您好:
1.请看工程里面的 DMA_Transfer(void* dst, void* src, int n)函数!里面用到了clock()函数,记录DMA传输时间。Emulator时,我
将clock()放在手动触发EDMA传输之后,测试DMA传输使用时间,发现不论传输多大的数据,测的时钟周期都是一样的;clock()放在手动触发EDMA传输之前或者这个函数外,测试的DMA传输时间很正常!我想知道这是为什么?
2.clock()函数计时CPU时钟周期数是根据DSP的定时器计时的还是根据其他的什么方式?
谢谢!
si cheng您好:
很抱歉这么晚回复您。因为我和我的同事正在对clock()函数的计时问题进行确认。
需要说明的是,现在我们用的记录cycle的方法是直接读取核内部cycle寄存器的方法进行的,该寄存器名称叫做TSCL。而cycle()是通过与主机(PC机)的消息机制进行的,可能由于主机的问题会造成消息延时从而计时不准。
所以建议您是否可以用TSCL计时测试一下。我们这边已经测试过,没有问题。
TSCL使用方法:
#include "c6x.h"
unsigned int a,b;
TSCL = 0; //初始化
a = TSCL;
...
...
b=TSCL;
cycle = 0xFFFFFFFF-a+b-1; //防止翻转
谢谢!
请问您这里的cycle是时钟周期还是指令周期。我测试1024点的fft,tscl=10997,而用Timestamp_get32:
ts1 = (Int32) Timestamp_get32();
DSPF_sp_fftSPxSP(N, &ptr_match_in[0], &ptr_w[0], ptr_match_fft, brev, rad, 0, N);
ts2 = (Int32) Timestamp_get32();
ts2 = ts2 - ts1;
*processing_time = ((double)ts2 / (double)freq.lo) * 1000;
得出processing_time=8418384,请问到底那个是时间,时钟是默认的1G。