是否有一个简单的教程让我在 GNU C++ 中快速掌握 SSE、SSE2 和 SSE3?如何在 SSE 中进行代码优化?
原文由 yoitsfrancis 发布,翻译遵循 CC BY-SA 4.0 许可协议
是否有一个简单的教程让我在 GNU C++ 中快速掌握 SSE、SSE2 和 SSE3?如何在 SSE 中进行代码优化?
原文由 yoitsfrancis 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
抱歉不知道教程。
您最好的选择(恕我直言)是通过英特尔提供的“内在”功能使用 SSE 来包装(通常)单个 SSE 指令。这些是通过一组名为 *mmintrin.h 的包含文件提供的,例如 xmmintrin.h 是原始 SSE 指令集。
开始熟悉 Intel 优化 参考手册 的内容是一个好主意(参见第 4.3.1.2 节的内在函数示例),SIMD 部分是必不可少的阅读材料。指令集参考手册也很有帮助,因为每条指令的文档都包含它对应的“内在”功能。
一定要花一些时间检查编译器从内在函数生成的汇编程序( 你 会学到很多东西)和分析/性能测量(你会避免浪费时间 SSE-ing 代码而几乎没有回报)。
2011 年 5 月 31 日 更新: Agner Fog 的 优化 PDF 中有一些非常好的内在函数和矢量化覆盖( 谢谢),尽管它有点分散(例如第 一个 的第 12 节和 第二个 的第 5 节)。这些并不完全是教程材料(实际上有“这些手册不适合初学者”警告),但它们确实正确地将 SIMD(无论是通过 asm、内在函数还是编译器矢量化使用)视为更大优化工具箱的一部分。
2012-10-04 更新: 一篇关于 gcc 向量内在函数的 Linux Journal 小文章 值得一提。比 SSE 更通用(也包括 PPC 和 ARM 扩展)。 最后一页 有很多参考资料,这让我注意到英特尔的 “内在指南” 。