我有一个简单的教程可以让我快速掌握GNU C++中的SSE,SSE2和SSE3吗?您如何在SSE中进行代码优化?
最佳答案
抱歉,不知道教程。
最好的选择(IMHO)是通过Intel提供的用于包装(通常)单个SSE指令的“本征”功能来使用SSE。
这些可以通过一组名为* mmintrin.h的包含文件来使用,例如xmmintrin.h是原始的SSE指令集。
开始熟悉英特尔优化的内容Reference Manual是个好主意(有关内在函数的示例,请参阅第4.3.1.2节),并且SIMD部分是必读的。指令集引用手册也非常有帮助,因为每个指令的文档都包括它所对应的“本征”功能。
请花一些时间从内在函数检查编译器生成的汇编程序(您将学到很多知识),并在性能分析/性能测量方面进行检查(您将避免浪费时间在SSE-ing代码上,以免付出很少的努力)。
更新2011-05-31:尽管Agner Fog的optimization PDFs(thanks)有点散布(例如first one的第12部分和second one的第5部分),但它对内在函数和矢量化的覆盖非常好。这些并不是完全教程 Material (实际上有“这些手册不适合初学者使用”的警告),但是它们确实正确地将SIMD(无论是通过asm,内部函数还是编译器矢量化使用)只是较大的优化工具箱的一部分。
2012年10月4日更新:关于gcc vector 内在函数的nice little Linux Journal article在这里值得一提。不仅限于SSE(也包括PPC和ARM扩展)。 last page上有很多引用资料,这引起了我对英特尔"intrinsics manual"的关注。
关于c++ - 适用于GNU C++的SSE SSE2和SSE3,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/661338/