![]() |
1
4
您的标量版本看起来很糟糕(使用类型punning的引用强制转换),并且可能编译为效率非常低的ASM,这比将每个32位元素复制到位模式慢得多。
你的第一个手动矢量化版本甚至没有做同样的工作,不过,它只是屏蔽了所有要离开的非符号位。
不是那个加法
然后你把它编辑成一个版本
尤其是如果你没有用你的花车做任何其他的事情,你实际上会想用
在Skylake和更新版本上,FP布尔值可以使用所有3个矢量ALU端口。( https://agner.org/optimize/ 用于说明表和UARCH指南。) 您的代码应该如下所示:
|
![]() |
Imran · Nim编译器优化标志 7 年前 |
![]() |
Mário Feroldi · 在运行时调用代码中未调用的函数 7 年前 |
![]() |
Artemis · 寄存器与指令之间的差异 7 年前 |
![]() |
pandascope · golang编译器是否使用常数折叠? 7 年前 |
![]() |
Marc · C优化:为什么编译器不将对象视为常量? 7 年前 |