如何提高算法运行速度 - TMS320C6678 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 793|回复: 5

[已解决] 如何提高算法运行速度

[复制链接]

4

主题

13

帖子

1062

积分

金牌会员

Rank: 6Rank: 6

积分
1062
发表于 2018-11-14 09:48:50 | 显示全部楼层 |阅读模式
开发平台是创龙6678F,开发环境CCS5.5
将公司原来在C6416中运行的算法移植到C6678中,移植完测试运行速度比原来慢很多,如何才能使其运行速度更快呢?
可以指明一个方向或者说明一些策略,谢谢

最佳答案

您好:        有关速度的问题,您是基于裸机的程序移植到6678吗?移植过来也是用裸机的吗?如果是算法的速度慢的问题,这个就有点复杂了,具体还是要对算法进行优化,如果移植过来是采用SYSBIO ...
最近访问 头像模式 列表模式
回复

使用道具 举报

4

主题

188

帖子

1698

积分

广州创龙

Rank: 8Rank: 8

积分
1698
发表于 2018-11-14 13:48:51 | 显示全部楼层
您好:
       有关速度的问题,您是基于裸机的程序移植到6678吗?移植过来也是用裸机的吗?如果是算法的速度慢的问题,这个就有点复杂了,具体还是要对算法进行优化,如果移植过来是采用SYSBIOS的话,建议开启缓存。
回复 支持 反对

使用道具 举报

4

主题

13

帖子

1062

积分

金牌会员

Rank: 6Rank: 6

积分
1062
 楼主| 发表于 2018-11-14 15:29:56 | 显示全部楼层
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运算时间
        }
回复 支持 反对

使用道具 举报

4

主题

188

帖子

1698

积分

广州创龙

Rank: 8Rank: 8

积分
1698
发表于 2018-11-14 16:06:22 | 显示全部楼层
这样子看你的程序没什么问题的,不知道你们的算法是处理什么?
回复 支持 反对

使用道具 举报

4

主题

13

帖子

1062

积分

金牌会员

Rank: 6Rank: 6

积分
1062
 楼主| 发表于 2018-11-14 17:57:27 | 显示全部楼层
tronlong-gxd 发表于 2018-11-14 16:06
这样子看你的程序没什么问题的,不知道你们的算法是处理什么?

举个例子:在程序中运算16384点fft用时589us(sysbios),我用创龙给的例程跑16384点fft用时334us(裸机)。
我发现无论我使能L3 可cache或是禁止,时间都没有变化(数据在L3中),我配置没成功么?怎么确认配置是否成功啊?
回复 支持 反对

使用道具 举报

4

主题

188

帖子

1698

积分

广州创龙

Rank: 8Rank: 8

积分
1698
发表于 2018-11-15 09:52:37 | 显示全部楼层
建议您将程序段放置共享内存中,缓存放至L2。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则  回帖提醒

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号-1  

GMT+8, 2019-6-25 21:06 , Processed in 0.151309 second(s), 47 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表