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.

开3级优化会出现什么影响?会影响函数的功能吗?



        为了达到减少时间的目的开了三级优化,但是发现开了以后函数实现的功能出现了错误,但是把3级优化关掉,不开优化功能就对着的,时间上面会满足要求,麻烦问一下怎么解决?

       补充说明一下:把优化级别调低也可以实现功能,比如开1级优化,但是这样对我所有的函数都开了1级优化,影响了处理速度,问一下是否可以对不同的函数开不同的优化级别呢?比如开3级优化出错的就开1级优化,其他的直接开3级优化?

  • 您好,

    -o3优化会对程序的运行进行调整,所以有可能在优化之后出现问题,特别是控制类的代码出问题可能性更大。建议可以先定位到底是在那个函数出的问题,然后再逐步跟进定位相应的代码进行调整。可以对文件及函数级开不同的优化选项。另外请问你是用的什么编译器,可以尝试更高级别的编译器。

  •          你好,我主要的思路是:用EDMA从DDR3传输一行复数数据到L2中,对数据进行求模(就是sqrt功能)后在用EDMA从L2中把数据搬移到DDR3中,这个好像没有涉及到控制什么的,不开优化的时候功能是对的。

        还有您说可以对文件及函数级开不同的优化选项,但是我对一个工程里面的单独一个.c文件开3级优化会发现全部的.c都开了3级优化,把其中一个.c文件3级优化关掉,全部.c文件的3级优化就关掉了,您说的可以对文件及函数级开不同的优化选项具体是怎样操作呢?

        最后一个问题是EDMA按道理说是不会占据CPU时间的,但是上面说到的,从DDR3传输数据到L2,进行算法,从L2用EDMA把数据搬到DDR3这个过程的EDMA的耗时每次好像还不少,特别是数据不是连续的,需要跳地址取或者存数据的时候耗时更加多,请问如果想要完全去掉这个EDMA传输的耗时需要怎么做??

       问题比较多,麻烦专家解答下,非常感谢!!!

  • 麻烦技术支持给继续解答一下啊,最近单核开3级优化时结果是正确的,但是写成多核程序的时候开3级优化结果就有问题了,但是不开3级优化时间又答不到要求!!能不能告诉一下开3级优化的影响到底是什么,调了好久了一直没有进展,求技术支持解答一下啊,非常感谢~~~

  • 您好,

    1. EDMA可以和Core并行工作,但是如果使用等待的方法等数据搬运完后进行后续处理,此时相当于在EDMA搬数的过程CPU并没有并行在干有效的工作;所以如果要体现EDMA的优势就必须对EDMA及core的处理排好流水;

    请问你是在启动EDMA后等待数据搬运完成,才执行下面的处理么?这样肯定要占用core的cycle。

    2. 可以对一个文件的属性选择特定的优化选项,而不是修改工程的属性;

    3. 关于加优化处理结果不正确,请分步从输入数据、处理过程进行分析,到底出错在哪里。o3优化参考spru187手册。