嵌入式开发者社区

标题: 如何提高算法运行速度 [打印本页]

作者: Leo_9824    时间: 2018-11-14 09:48
标题: 如何提高算法运行速度
开发平台是创龙6678F,开发环境CCS5.5
将公司原来在C6416中运行的算法移植到C6678中,移植完测试运行速度比原来慢很多,如何才能使其运行速度更快呢?
可以指明一个方向或者说明一些策略,谢谢

作者: tronlong-gxd    时间: 2018-11-14 13:48
提示: 作者被禁止或删除 内容自动屏蔽
作者: Leo_9824    时间: 2018-11-14 15:29
tronlong-gxd 发表于 2018-11-14 13:48
您好:
       有关速度的问题,您是基于裸机的程序移植到6678吗?移植过来也是用裸机的吗?如果是算法的速 ...

公司原程序是c6416基于裸机开发的,移植到c6678上是基于sysbios的。
为了提高运算速度我做了以下工作:
1、数据存储位置
     将常用的数据都存储在L3内存中(由于数据量比较大L2放不下,我准备优化一下代码,把一些数据放在L2中,我觉得这样会快一些)。程序段也放在了L3中。
2、使能cache
    L1P、L1D和128k L2配置为cache,代码如下:
   {
        cacheSize.l1pSize = Cache_L1Size_32K;
        cacheSize.l1dSize = Cache_L1Size_32K;
        cacheSize.l2Size   = Cache_L2Size_128K;
        
        Cache_setSize(&cacheSize);
        
        Cache_setMar((Ptr *)0x0c200000,0x00200000,Cache_Mar_ENABLE |
                                                            Cache_PFX); // L3开启缓存和预取
        Cache_setMar((Ptr *)0x90000000,0x10000000,Cache_Mar_ENABLE |
                                                            Cache_PFX);// DDR3开启缓存和预取
   }
    我很奇怪的是使能或不使能L3、DDR3缓存计算时间是一样的,好像Cache_setMar这个操作没起作用!这可能是什么原因导致的呢?
   
   3、对于算法时间的测试方法
       {
           TSCL=0; TSCH=0;
           t1 = _itoll(TSCH,TSCL);
                   程序段;
           t2 = _itoll(TSCH,TSCL);
           time = (t2-t1)/1000.0; // us   不考虑_itoll运算时间
        }
作者: tronlong-gxd    时间: 2018-11-14 16:06
提示: 作者被禁止或删除 内容自动屏蔽
作者: Leo_9824    时间: 2018-11-14 17:57
tronlong-gxd 发表于 2018-11-14 16:06
这样子看你的程序没什么问题的,不知道你们的算法是处理什么?

举个例子:在程序中运算16384点fft用时589us(sysbios),我用创龙给的例程跑16384点fft用时334us(裸机)。
我发现无论我使能L3 可cache或是禁止,时间都没有变化(数据在L3中),我配置没成功么?怎么确认配置是否成功啊?
作者: tronlong-gxd    时间: 2018-11-15 09:52
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 嵌入式开发者社区 (https://51ele.net/) Powered by Discuz! X3.4