当前位置:  开发笔记 > 编程语言 > 正文

用于GNU C++的SSE SSE2和SSE3

如何解决《用于GNUC++的SSESSE2和SSE3》经验,为你挑选了3个好方法。

有没有一个简单的教程让我在GNU C++中加快SSE,SSE2和SSE3的速度?如何在SSE中进行代码优化?



1> timday..:

抱歉,不知道教程.

你最好的选择(恕我直言)是通过英特尔提供的"内在"功能来使用SSE来包装(通常)单个SSE指令.这些是通过一组名为*mmintrin.h的包含文件提供的,例如xmmintrin.h是原始的SSE指令集.

开始熟悉英特尔优化参考手册的内容是一个好主意(有关内在函数的示例,请参见第4.3.1.2节),SIMD部分是必读的.指令集参考手册也非常有用,因为每条指令的文档都包含它对应的"内在"函数.

花一些时间检查由内部函数编译器产生的汇编(你会学到很多东西)和貌相/性能测试(你会避免浪费时间SSE-ING代码上的功夫很少的回报).

更新2011-05-31:在Agner Fog的优化PDF(感谢)中有一些非常好的内在函数和矢量化覆盖,尽管它有点分散(例如第一部分的第12 部分和第二部分的第5部分).这些并不完全是教程材料(实际上有"这些手册不适合初学者"的警告),但他们正确地将SIMD(无论是通过asm,内在函数还是编译器矢量化使用)视为较大优化工具箱的一部分.

更新2012年10月4日:一个可爱的小Linux杂志文章海合会矢量内在这里值得一提.比SSE更通用(也包括PPC和ARM扩展).最后一页上有很多参考文献,引起了我对英特尔"内在手册"的关注.



2> Sebastian Ma..:

最简单的优化是允许gcc发出SSE代码.

标志:-msse,-msse2,-msse3,-march =, - mfpmath = sse

有关386个选项的更简明列表,请参阅http://gcc.gnu.org/onlinedocs/gcc-4.3.3/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options,更准确您的特定编译器版本的文档是:http://gcc.gnu.org/onlinedocs/.

要进行优化,请务必查看Agner Fog:http://agner.org/optimize/ .我认为他没有针对内在函数的SSE教程,但他有一些非常简洁的std-c ++技巧,并且还提供了很多关于编码SSE汇编的信息(通常可以转录为内在函数).


不必要.从手册:"在树上执行循环向量化.默认情况下,该标志在-O3处启用."因此标志本身没有提到特定平台(也可能在标准32位寄存器中处理多个字节).

3> DevSolar..:

当然,请查看-mtune和-march选项,-msse*和-mfpmath.所有这些都使GCC能够进行SSE特定的优化.

我担心,除此之外的任何事情都是汇编者的领域.

GCC在线手册 - i386和x86_64选项


实际上,内在函数不仅仅是汇编的包装.它们允许编译器重新排列代码以获得最佳性能.但是你需要很好地理解SIMD的工作原理.
不需要汇编程序.GCC具有支持特殊数据类型的扩展和使用MMX/SSE的"函数调用".
此外,编译器在使用内在函数时会为您注册分配,这是一个重大的缓解.
推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有