将使用ARM的“限制”关键字提高我的代码?

问题描述 投票:3回答:1

我在做一些研究和跨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的背景下定性的影响,具体而言,如果其管道可以利用的变化,或者有一些这将阻止一个重大的好处,如不能够调度内存访问等因素。

c gcc arm cortex-m
1个回答
0
投票

Restrict关键字允许编译器程序某些内存操作之间的依赖关系删除。这将打开的机会,大量的优化例如中更紧的指令调度(这又使得从循环展开较高的收益),自动向量化或(在ARM的情况下ldm / stm)多条标量加载/存储到矢量化的变体组合。

上层阶级,乱序架构(如皮质-A在ARM的情况下)非常努力(而花费大量的功率)在运行时动态地分析和重新排序的指令流来执行这些优化,(即使有restrict可以使更高级别的优化,例如自动向量化)。低端,喜欢M4嵌入式内核缺乏这种能力,因此restrict注解是为表现有绝对至关重要。

正如其他评论者所指出的那样,restrict的语义是不完全微不足道的,所以我建议利用它只有在热循环。

© www.soinside.com 2019 - 2024. All rights reserved.