gpt4 book ai didi

c - 在 ARM 中使用 'restrict' 关键字会改进我的代码吗?

转载 作者:行者123 更新时间:2023-12-01 22:56:39 26 4
gpt4 key购买 nike

我正在做一些研究并遇到了 this article它很好地描述了 restrict 关键字,因此我认为我对它的有效用法有了很好的理解。引用文章对 restrict 定义的引用:

A new feature of C99: The restrict type qualifier allows programs to be written so that translators can produce significantly faster executables. [...] Anyone for whom this is not a concern can safely ignore this feature of the language. -- From Rationale for International Standard - Programming Languages - C [std.dkuug.dk] (6.7.3.1 Formal definition of restrict)

在我的例子中,这恰好是真的;我正在编写嵌入式代码,这可能会为更高性能的编译代码带来好处,但我对汇编不够满意,无法利用它来寻求帮助。所以我正在考虑在适当的地方使用 restrict 。具体来说,我有几个循环并采用相同类型的指针参数的函数,因此从表面上看,我的代码似乎可以从中受益。

然而,文章指出:

You should expect code where all aliasing information is declared with the restrict keyword to almost always perform significantly better, and never worse, than with unrestricted pointers. This is especially true on superscalar RISC, or RISC-like architectures with large register files, like the PowerPC or MIPS R4000.

我正在使用带有 GCC 工具链的 ARM Cortex-M4。我对各种处理器架构没有足够的了解,无法将 large register files 的含义与我的用例进行比较,但鉴于给出的示例处理器和快速的 Google 搜索,我很确定我不' 构成该列表,尽管可能是应用程序类 ARM 处理器。

考虑到所有这些,我会看到微优化之外的好处吗?我完全希望以一种或另一种方式对其进行分析,但我想知道 restrict 在 ARM Cortex-M4/GCC 上下文中的定性影响,特别是它的管道是否可以利用更改或是否有其他一些因素会阻止主要好处,例如无法安排内存访问。

最佳答案

Restrict 关键字允许编译器移除程序中某些内存操作之间的依赖关系。这为大量优化提供了机会,例如更严格的指令调度(这反过来又可以从循环展开中获得更高的 yield )、自动矢量化或将多个标量加载/存储组合到矢量化变体(ldm/stm 在 ARM 的情况下)。

上层的乱序架构(例如 ARM 中的 Cortex-A)非常努力地(并花费了大量的精力)在运行时通过动态分析和重新排序指令流(即使在那里restrict 可能会启用更高级别的优化,例如自动矢量化)。像 M4 这样的低端嵌入式内核缺乏此类功能,因此 restrict 注释对于那里的性能绝对至关重要。

正如其他评论者所指出的,restrict 的语义并非微不足道,因此我建议仅在热循环中使用它。

关于c - 在 ARM 中使用 'restrict' 关键字会改进我的代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26442620/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com