Geo*_*ost 12 arm intrinsics neon
https://web.archive.org/web/20170227190422/http://hilbert-space.de/?p=22
在这个过时的网站上,它表明手写的asm会比内在的更好.我想知道这是不是现在的真相,即使是现在2012年.
那么使用gnu交叉编译器为内在函数改进了编译优化?
Rob*_*ier 13
我的经验是内在的并不值得这么麻烦.编译器在内在函数之间注入额外的寄存器卸载/加载步骤太容易了.让它停止这样做的努力比在原始NEON中编写东西更复杂.我在最近的编译器中看到过这种东西(包括clang 3.1).
在这个级别,我发现你真的需要控制到底发生了什么.如果你做的事情几乎没有错,你就可以拥有各种各样的摊位.在内在函数中进行操作就像戴上焊工手套的手术一样.如果代码对性能至关重要,我根本不需要内在函数,那么内在函数就不够好了.也许其他人在这里有不同的经历
我不得不在几个项目中使用NEON内在函数来实现可移植性.事实是,GCC没有从NEON内在函数生成良好的代码.这不是使用内在函数的弱点,而是GCC工具的弱点.Microsoft的ARM编译器从NEON内在函数生成了很好的代码,在这种情况下不需要使用汇编语言.便携性和实用性将决定您应该使用哪些.如果你可以处理编写汇编语言,那么写asm.对于我的个人项目,我更喜欢在ASM中编写时间关键代码,这样我就不必担心错误/劣等编译器会弄乱我的代码.
更新: Apple LLVM编译器介于GCC(最差)和Microsoft(最佳)之间.它对指令交错和最佳寄存器使用不起作用,但至少它会生成合理的代码(在某些情况下与GCC不同).
Update2: ARMv8的Apple LLVM编译器得到了显着改进.它现在可以很好地从C和内在函数生成ARMv8代码.
| 归档时间: |
|
| 查看次数: |
8553 次 |
| 最近记录: |