|
|
1
1
受到Roku答案的启发(在MSVC++10分支上),这似乎不是分支:
以下是由IDA Pro分析的反汇编(在MSVC++10上编译,发布模式): Disassembly http://img248.imageshack.us/img248/6865/floattestbranchmine.png |
|
|
2
4
这个怎么样?
编辑: Mike是正确的,他将引入一个分支,并感谢Pedro证明了这一点。我将&改为&现在GCC(版本4.4.0)生成了无分支代码。 |
|
|
3
1
|
|
|
4
0
就在我头顶上(我确信它可以减少):
为了澄清一点,我将分别计算符号:
这是浮点数学,所以您可能需要修正一些舍入问题,但这会使您走上正确的道路。 |
|
|
5
0
如果你担心过度的分支,看看 Duff's Device . 这应该有助于在一定程度上展开循环。事实上,循环展开是优化器要做的事情,所以用手来做可能是浪费时间。检查总成输出以查明。 如果您对数组中的每个项执行完全相同的操作,simd肯定会提供帮助。请注意,并非所有的硬件都支持SIMD,但一些编译器(如GCC)确实为SIMD提供了内部函数,这将避免您浸入汇编程序中。 如果使用gcc编译ARM代码,可以找到simd内部函数 here |
|
|
6
0
你对有分支和没有分支的循环做基准测试了吗? 至少可以删除分支的一部分,因为mixValue在循环之外。
|
|
|
7
0
看看你的代码,你会发现你总是将
有了一些小技巧和IEEE浮点知识,您就可以摆脱条件:
最后:你的循环
注意:你的积累规模不匹配。这个
|
|
|
8
0
一些编译器(即msc)也需要手动签名检查。 来源:
英特尔11.1:
海湾合作委员会4.5:
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |