44
|
Robert S. Barnes Antoni · 技术社区 · 15 年前 |
![]() |
1
45
restrict关键字有区别。 在某些情况下(图像处理),我已经看到因子2和更多的改进。但大多数情况下,差异并不大。大约10%。 这里有一个小例子来说明这个区别。我写了一个非常基本的4x4矢量*矩阵变换作为测试。注意,我必须强制函数不被内联。否则,gcc会检测到我的基准代码中没有任何别名指针,而restrict不会因为内联而有所不同。 我也可以将转换函数移到其他文件中。
结果:(在我的2 GHz双核上)
在拇指上,执行速度快20%,打开 那个 系统。 为了显示它在多大程度上取决于架构,我让相同的代码在Cortex-A8嵌入式CPU上运行(由于我不想等那么长时间,所以稍微调整了循环计数):
这里的差异只有9%(同样的编译器btw)。 |
![]() |
2
7
它 可以 减少下面示例中所示的指令数量,因此尽可能使用它。 GCC 4.8 Linux x86-64 exmample 输入:
编译和反编译:
用
用
对于没有经验的人来说, calling convention 是:
结论: 3条指令而不是4条指令 . 当然,指示 can have different latencies 但这是个好主意。 为什么海湾合作委员会能够优化这一点? 上面的代码取自 Wikipedia example 哪个是 非常 照明。
的伪程序集
为了
真的更快吗? 嗯…不是为了这个简单的测试:
然后:
在Ubuntu 14.04 AMD64 CPU Intel I5-3210M上。 我承认我仍然不了解现代CPU。如果你:
|
![]() |
3
6
文章 Demystifying The Restrict Keyword 指的是报纸 Why Programmer-specified Aliasing is a Bad Idea (pdf)这表示它通常没有帮助,并提供了支持这一点的度量。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 6 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 6 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 6 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 6 月前 |