我正在研究使用这些内容来改善一些代码的性能,但是似乎很难找到有关在*mmintrin.h
头文件中定义的函数的好文档,请问谁可以给我提供有关这方面的信息?
编辑:特别感兴趣的是如何入门的基础教程。
我正在研究使用这些内容来改善一些代码的性能,但是似乎很难找到有关在*mmintrin.h
头文件中定义的函数的好文档,请问谁可以给我提供有关这方面的信息?
编辑:特别感兴趣的是如何入门的基础教程。
在https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html网站上可找到实用的在线Intel Intrinsics Guide - 它涵盖从MMX到各种SSE版本再到AVX2 等等的所有Intel SIMD技术。
您还可以从Intel获取以下PDF文档:
Intel® 64和IA-32架构软件开发人员手册,第2卷A:指令集参考,A-M(253666-021)
Intel® 64和IA-32架构软件开发人员手册,第2卷B:指令集参考,N-Z(253667-021)
Intel® SSE4编程参考 (D91561-001)
这是我找到的最好的MMX/SSE编程介绍。(我已经用SSE2编程5年了,但我仍然认为这篇教程在概念上是最清晰易懂的。)
http://www.tommesani.com/Docs.html
这不是指令的完整列表;因此,一旦你准备学习更多,请像@PaulR建议的那样开始阅读英特尔内部函数的指南。
需要记住的一个重要事项是,MMX/SSE在数据移动(洗牌或任意排列或单个元素的改变)方面往往受到严重限制。这是CPU硅片设计的限制。散射-聚集指令仅在几年前才添加,可能甚至在客户计算机上不可用。
有许多与MMX/SSE类似的向量化技巧,就像 http://www.hackersdelight.org/ 推荐利用位并行操作的技巧一样。