将使用ARM的“限制”关键字提高我的代码?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将使用ARM的“限制”关键字提高我的代码?相关的知识,希望对你有一定的参考价值。
我在做一些研究和跨this article描述了restrict
关键字相当不错来了,我觉得我有它的有效使用,结果体面的把握。引述restrict
的定义,文章的引用:
C99的一个新特点:该限制类型限定符允许写入程序,使译员可以产生显著更快的可执行文件。 [...]任何人对他们来说,这不是一个问题完全可以忽略了语言的这一功能。 - 从基本原理国际标准 - 编程语言 - C [std.dkuug.dk](6.7.3.1形式限制的定义)
在我的情况下,出现这种情况是真实的;我写的嵌入代码可能获得更高的性能编译的代码中获益,我不能与装配利用它的帮助十分舒服。所以我正在考虑在适当的地方使用restrict
。具体来说,我有几个功能,这回路,并采取相同类型的指针参数,所以它看起来像我的代码可以从这一表面上受益。
不过,文章指出:
你应该想到,所有别名信息都被定义为严格的关键词几乎总是执行显著好,从不差,比不受限制的指针代码。这是对超标量RISC或类RISC架构与大的寄存器文件,如PowerPC的或MIPS R4000尤其如此。
我用的ARM Cortex-M4与GCC工具链工作。我没有不同处理器架构的足够认识large register files
的含义比较我的使用情况,但鉴于给出的例子处理器和一个快速谷歌搜索,我敢肯定,我不构成该名单,但也许是应用类ARM处理器会。
所以,这一切在心中,我会看到超越微优化有什么好处?我完全相信个人资料的一种方式或其他,但我想知道restrict
在ARM的Cortex-M4 / GCC的背景下定性的影响,具体而言,如果其管道可以利用的变化,或者有一些这将阻止一个重大的好处,如不能够调度内存访问等因素。
Restrict
关键字允许编译器程序某些内存操作之间的依赖关系删除。这将打开的机会,大量的优化例如中更紧的指令调度(这又使得从循环展开较高的收益),自动向量化或(在ARM的情况下ldm
/ stm
)多条标量加载/存储到矢量化的变体组合。
上层阶级,乱序架构(如皮质-A在ARM的情况下)非常努力(而花费大量的功率)在运行时动态地分析和重新排序的指令流来执行这些优化,(即使有restrict
可以使更高级别的优化,例如自动向量化)。低端,喜欢M4嵌入式内核缺乏这种能力,因此restrict
注解是为表现有绝对至关重要。
正如其他评论者所指出的那样,restrict
的语义是不完全微不足道的,所以我建议利用它只有在热循环。
以上是关于将使用ARM的“限制”关键字提高我的代码?的主要内容,如果未能解决你的问题,请参考以下文章
将 arm_compute::Image 转换为 cv::Mat