关于uV4的优化的优化

2019-07-20 19:29发布

     最近做音频算法的处理需要用到大量的运算,所以要对程序做优化。我之前做DSP的,ti提供了很多代码优化的知道说明。但是我发现keil和arm关于优化的资料比较少,比如内存对齐,循环展开这些指令我都没有找到。希望论坛有经验的坛友能提供一些关于uV4的优化的优化的建议或者文章转载的链接不胜感激!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
特朗姆斯
1楼-- · 2019-07-20 19:57
 精彩回答 2  元偷偷看……
特朗姆斯
2楼-- · 2019-07-20 21:27
uV4自带优化功能

在Options里面选择C/C++,然后把Optimization的级别根据你的需求提高就行了。

当然,如果你的代码写的不够严谨的话,提高优化级别会出现意想不到的结果
czdspeed
3楼-- · 2019-07-21 00:45
特朗姆斯 发表于 2016-10-14 11:52
uV4自带优化功能

在Options里面选择C/C++,然后把Optimization的级别根据你的需求提高就行了。

谢谢,我其实不是问这个系统自带O2,O3优化。这个是最基本的 ccs编译器也是这样,我知道O2  O3一般会开的比较慎重。我发帖子的意思是说有没有一些伪指令操作利于优化的。举个例子我写一段DSP代码:
“//进行转秩运算必须按照双子节对齐  且转秩的阶次必须是2的偶次方个
#pragma DATA_ALIGN(Ux1, 128)

void DSP_vec(const  short * restrict x,  int * restrict y,const int  m,
                int  nr)
{
        int i = 0;

    _nassert(((int)x & 7) ==0);
    _nassert(((int)y & 7) ==0);
    _nassert(nr % 8 == 0);

    #pragma MUST_ITERATE(2,4096,2);
    #pragma UNROLL(16);

        for(i=0;i<nr;i++)
        {
                *(y+i) += m *  *(x+i);
        }

}
”_nassert()
    #pragma MUST_ITERATE(2,4096,2);
    #pragma UNROLL(16);
这些都是dsp提供的伪指令告诉编译器  循环的范围和需要手动展开的次数和内存对齐之类。keil有没有类似的伪指令。
特朗姆斯
4楼-- · 2019-07-21 03:06
czdspeed 发表于 2016-10-14 12:00
谢谢,我其实不是问这个系统自带O2,O3优化。这个是最基本的 ccs编译器也是这样,我知道O2  O3一般会开的 ...

类似的用过编译器提供的#pragma pack(n)来设定变量以n字节对齐方式。

你后面列举的循环展开优化的功能在ARM上没有看到过,帮你呼叫一下原子哥@正点原子
czdspeed
5楼-- · 2019-07-21 05:18
特朗姆斯 发表于 2016-10-14 13:43
类似的用过编译器提供的#pragma pack(n)来设定变量以n字节对齐方式。

你后面列举的循环展开优化的功能 ...

恩,谢谢了。这个优化确实要很花功夫,我用O3就碰过莫名其妙的问题,需要把变量加vu来防止优化。
czdspeed
6楼-- · 2019-07-21 06:51
 精彩回答 2  元偷偷看……

一周热门 更多>