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.

再次发问:280049 CLA运行速度比主CPU慢很多

测试280049的CLA功能,将正常运行在CPU的ISR()函数由的 CLATASK1()调用。

CPU工程:EPWM1 ZERO产生周期10us的中断调用ISR()函数。ISR()内部开始和结束位置利用GPIO做测试信号,利用示波器检测GPIO信号。主CPU下运行ISR()只需要6us。

CLA工程:EPWM1 ZERO产生周期10us的中断调用CLATASK1(),CLATASK1内部调用ISR(),ISR()内部开始和结束位置利用GPIO做测试信号,利用示波器检测GPIO信号。发现10us不能完成ISR()。

测试:减少ISR()内代码至如下:只有两行读取AD采样值

#pragma FUNC_ALWAYS_INLINE(CLALoopCtrlISR)
inline void CLALoopCtrlISR()
{
TEST3_SET();//GPIO TEST

stClaToCpuPara.iVoutADSample = AdccResultRegs.ADCRESULT0;
stClaToCpuPara.iPriCurADSample = AdcbResultRegs.ADCRESULT0;

TEST3_CLR();//GPIO TEST

// Clear INT Flag
EPwm1Regs.ETCLR.bit.INT = 1;
}

示波器检测GPIO信号,CPU执行时间为72ns,CLA执行时间为122ns。

请问我的CLA是不是什么地方没有配置正确,导致执行速度慢。本人英语水平很菜,所以只能在中国平台发问,大师们海涵,我也相信中国的大师能解决我的疑惑。

盼回复,谢谢!我也会积极的做测试。如需要其他信息,请告知。

  • 我认为通过测试GPIO口来测试CLA运行时间不太严谨。可以这样操作:
    可以采用一个timer,然后使用软件触发CLA工作,触发CLA开始工作后,timer开始计时,并且在CLA工作完毕后,置起一个标志位,而主函数通过循环检测此标志位来判断何时停止timer从而得到当前计数值后计算CLA运算时间
    此外,CCS也提供clock功能,但是本人没有太多使用过,不确定能否用来做此项测试。
  • 谢谢你的回复。为什么GPIO测试不严谨呢?我只是觉得这样测试既简单又直观,或许你指的不严谨是指GPIO的响应回有细微延迟,但是同样的代码量(仅仅两句)在CPU和CLA下运行不应该差别这么大啊。我相信TI的片子不会是这个特性,但是就没有一个TI的员工做过这样的测试吗。应该有一个人能解答我这个问题啊,谢谢TI的大师们啦。
  • 不知道其他工程师是否有做过这样的测试。但是根据E2E上的工程师的说明,CLA仅是擅长浮点运算,其他非浮点运算的操作并没有CPU快。另外还有其他一些列举的原因你可以看一下:e2e.ti.com/.../797405
  • 非常感谢你从英文论坛上帮我搜寻答案,终于拨开云雾了。在有道强大的协助下,我仔细阅读了你链接的帖子和帖子里链接的其他内容。看完国外论坛的贴子后做如下总结,希望对与我有同样迷惑的工程师有所帮助:

    1)国外工程论坛的工程师回复确实专业,直击要点。学好一门外语是多么的重要!
    2)CLA“只”是一个32bit的浮点处理单元,在整型数据处理(乘、除)上远远没有主CPU强,或者说根本就不行。关键是数据手册上没有明 确提出只一点,只是说他是浮点处理单元。很多初次使用者可能都会认为,既然都支持浮点了,定点肯定没问题,这些人就包括我。
    针对者一点测试:
    TEST3_SET();//GPIO TEST
    stClaToCpuPara.iVoutADSample = AdccResultRegs.ADCRESULT0;
    stClaToCpuPara.iPriCurADSample = AdcbResultRegs.ADCRESULT0;
    TEST3_CLR();//GPIO TEST
    iVoutADSample,iPriCurADSample这两个变量定义为整型和浮点执行时间都是有差异,有兴趣和时间的朋友可以自己测试看看。

    3)CLA不擅长指针操作,所以CLA代码中尽量少用指针访问。
    4)CLA不擅长重复循环语句,最好一条道走到黑,这样走的更快。
    5)CLA不包含三角函数指令,不要使用sin、cos这些运算。
    6)CLA中取模指令(%)效率也很低,尽量不要使用。
    7)尽量减少CLA和CUP能同时访问的变量,这样有可带来仲裁的延时。

    以上仅代码个人观点,欢迎同道中人讨论。以后还有很多问题在论坛中和到家学习,希望填过坑的前辈多扶持扶持。
    谢谢!
  • 赞!谢谢详细分享!
  • 意思是100要写成100.0。定义变量要尽量定义成浮点型,是这样吗