有没有一个简单的教程让我在GNU C++中加快SSE,SSE2和SSE3的速度?如何在SSE中进行代码优化?
抱歉,不知道教程.
你最好的选择(恕我直言)是通过英特尔提供的"内在"功能来使用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扩展).最后一页上有很多参考文献,引起了我对英特尔"内在手册"的关注.
最简单的优化是允许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汇编的信息(通常可以转录为内在函数).
当然,请查看-mtune和-march选项,-msse*和-mfpmath.所有这些都使GCC能够进行SSE特定的优化.
我担心,除此之外的任何事情都是汇编者的领域.
GCC在线手册 - i386和x86_64选项