有没有简单的教程可以让我在GNU C++中掌握SSE、SSE2和SSE3的速度?如何在SSE中进行代码优化?
发布于 2009-03-19 21:43:18
对不起,我不知道有什么教程。
您最好的选择(IMHO)是通过Intel提供的包装(通常)单个SSE指令的“内部”函数来使用SSE。这些是通过一组名为*mmintrin.h的包含文件提供的,例如xmmintrin.h是原始的SSE指令集。
开始熟悉英特尔优化Reference Manual的内容是一个好主意(请参阅第4.3.1.2节中的内部函数示例),并且SIMD节是基本的读物。指令集参考手册也非常有用,因为每个指令的文档都包含了它所对应的“内部”函数。
一定要花点时间检查编译器从内部生成的汇编器(您将学到很多东西),以及分析/性能度量(您将避免浪费时间对代码进行SSE,以获得很少的工作回报)。
更新2011-05-31:在Agner Fog的optimization PDFs (thanks)中有一些非常好的关于内部函数和矢量化的报道,尽管它有点散布(例如,first one的第12节和second one的第5节)。这些并不完全是教程材料(实际上有“这些手册不适合初学者”的警告),但它们确实正确地将SIMD (无论是通过asm、内部函数还是编译器向量化使用)视为更大的优化工具箱的一部分。
更新2012-10-04: A nice little Linux Journal article on vector在这里值得一提。比SSE更通用(还包括PPC和ARM扩展)。有很多关于last page的参考资料,这引起了我对英特尔的"intrinsics manual"的注意。
发布于 2009-03-24 23:00:54
使用的最简单的优化是允许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程序集的信息(通常可以转录为内部函数)。
发布于 2009-03-19 15:37:08
查看-mtune和-march选项,当然还有-msse*和-mfpmath。所有这些都使GCC能够进行特定于SSE的优化。
除此之外,我恐怕都是汇编器的领域。
GCC Online Manual - i386 and x86_64 Options
https://stackoverflow.com/questions/661338
复制相似问题