TI中文支持网
TI专业的中文技术问题搜集分享网站

关于编译器优化导致运行结果差异很大

尊敬的TI工程师,您好,

使用论坛中K1_STK_v1.1中Memory_Performance工程,该工程编译器优化等级为-o3,在此优化等级下调试,DDR测速正常,但是关于cache操作部分均无法添加断点,请问这是由于优化导致的吗?将优化等级设置为off,所有代码语句均可打断点。但是测试得到的速度差异较大,1333MHz的速度仅有400多MHz。初步判断编译器优化的部分和cache相关,请问

1. 如何查看编译器优化了哪些东西呢?

2. 测速过程的cache是如何使用的。

3. L2cache相关的寄存器的地址是多少,在相关手册是没有看到具体的全局地址。

4. 为什么要采用编译器优化呢?这个这个具体的原因是?

期待您的答复,谢谢

user6177772:

DSP6678平台,CCS5.5,编译器版本v8.2.2

user6177772:

回复 Shine:

感谢您的回复!
我对比了优化前后相同代码的反汇编窗口,优化后的代码执行顺序不同,其他无明显差别。
cache寄存器(主要是L2CFG和L2WBINV)无区别。我按照优化后的反汇编代码执行顺序,重新编写代码,在优化选项关闭的情况下,重新执行,无效果。
1. 请问该如何定位优化的区别呢?
2. 能否提供EVM测试板无编译器优化的DDR测试例程?(经过测试,SRIO测试例程也存在这个现象)
期待您的回复,谢谢。

user6177772:

回复 Shine:

您好,请问这个由于优化导致的问题怎么调试呢

Shine:

回复 user6177772:

请问您现在是什么问题呢?优化后代码执行时间没有改善?

user6177772:

回复 Shine:

感谢您的回复,
论坛中K1_STK_v1.1中Memory_Performance工程,该工程的编译器优化等级为-o3,测试曾6678EVM板的DDR3读写速率,结果正常。将编译器优化等级关闭(off)后,测试DDR3速率,结果不正确,速率小了很多。
这说明优化后的代码才能执行正确结果。但是我不知道其具体的优化细节,能否提供evm6678测试板DDR3测速的非编译器优化例程。
期待您的答复,谢谢。

user6177772:

回复 Shine:

优化后有改善,但是不知道怎么优化的,是否有不经过优化的代码可以提供

Shine:

回复 user6177772:

您对比一下优化的代码对DDR3的配置是否和没有优化的配置一样。

user6177772:

回复 Shine:

您好,感谢您的回复。
我对比了优化前后的DDR寄存器,仅仅DDR_CONFIG1,11,12,13以及PERF_CNT_1,PERF_CNT_2,PER_CNT_TIM这些寄存器有区别,手册中这些寄存器应该不是配置的吧?我尝试把优化后的这些寄存器的值写入未优化的代码中,无效果,优化应该对DDR初始化无影响。
-o3级别优化中,函数CACHE_setL2Size(CACHE_256KCACHE)无法打断点。删除这句话,在-o3情况下,速度变成和非优化速度一样了,降低了很多。我对比了优化前后L2cache寄存器,无区别(之前回复中查找L2寄存器的原因)。
恳请解答,谢谢。

Shine:

回复 user6177772:

如果寄存器配置都一样的话,应该不会出现没有优化的DDR读写不正确。您用GEL文件里的DDR初始化试试能不能正确读写DDR。

赞(0)
未经允许不得转载:TI中文支持网 » 关于编译器优化导致运行结果差异很大
分享到: 更多 (0)