我在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

Posted

技术标签:

【中文标题】我在哪里可以找到列出 SSE 内在函数操作的官方参考资料?【英文标题】:Where can I find an official reference listing the operation of SSE intrinsic functions? 【发布时间】:2011-08-23 06:07:31 【问题描述】:

是否有官方参考列出了 GCC 的 SSE 内在函数的操作,即 头文件中的函数?

【问题讨论】:

英特尔“内在手册”可以在here 找到。 This 也可能感兴趣。 我想在 Meta 上讨论这个问题 meta.***.com/q/416086/2945027 我们维护SSE tag wiki,其中链接了官方和其他参考资料。 【参考方案1】:

除了 Intel 的 vol.2 PDF 手册,还有一个online intrinsics guide。

英特尔® 内在函数指南包含英特尔内在函数的参考信息,这些信息提供对英特尔指令的访问,例如英特尔® 流 SIMD 扩展(英特尔® SSE)、英特尔® 高级矢量扩展(英特尔® AVX)和英特尔® 高级矢量扩展 2(英特尔® AVX2)。

它具有全文搜索功能,因此可以通过其名称或 CPU 指令、CPU 功能等找到内在函数。它还可以控制显示哪个 ISA 扩展。例如,这允许不搜索您可能无法使用的 KNC,或现在远没有那么有用的 MMX。

另请参阅tag wiki 中的sse 标记以获取指南和一些教程以及此官方文档的链接。

【讨论】:

我不知道在线版本。谢谢!这比在本地安装到多台机器然后让 Java 更新破坏其中一些机器(最近发生的)要好得多。 @Zboson:正在逐步淘汰的本地版本的唯一缺点是我曾经能够从中提取数据库,这是一个有用的资源。我还没有尝试查看网络版本是否可以抓取。 FWIW 我在这里上传了一份供离线使用的副本:devpspctclr.s3.amazonaws.com/intrinsics/… - 但是,由于数据库是通过 XHR 加载的,因此必须从 localhost 提供服务...【参考方案2】:

我发现从 GCC 调用不同版本的 SSE 需要这些标头:

对于 SSE2

extern "C"

    #include <emmintrin.h>
    #include <mmintrin.h>

对于 SSE2

extern "C"

    #include <pmmintrin.h>
    #include <immintrin.h>   // (Meta-header)

对于 SSE4:

extern "C"

    #include <smmintrin.h>

在现代版本的编译器中,所有头文件似乎对 Visual Studio 和 GCC 都是通用的。

【讨论】:

使用 VS2012 (VC++ 11.0),所有上述头文件都包含得很好(所以 immintrin.h 不再只是 GCC 了),并且 smmintrin.h 可以包含在 extern "C" 中而不问题。 您不需要 extern "C" 围绕这些标题包括。多年来,所有现代编译器都以完全 C++ 模式支持它们。 IDK 如果任何编译器都需要使用 extern "C",但现在不再需要了。【参考方案3】:

内在函数上的SSEPlus table 在大多数情况下非常容易使用。

【讨论】:

【参考方案4】:

GCC 内在函数是英特尔编译器内在函数的实现。它们记录在 Intel® 64 and IA-32 Architectures Developer's Manual: Vol. 2C - 附录 C 中。

【讨论】:

【参考方案5】:

这些最初来自英特尔。英特尔 C++ 编译器在its manual 中描述了这些内容。 AMD 可能有自己的手册,其中包含 3DNow! 的手册。

您必须将它们的可用性与您的 GCC 版本附带的 *mmintrin.h 进行比较。

【讨论】:

以上是关于我在哪里可以找到列出 SSE 内在函数操作的官方参考资料?的主要内容,如果未能解决你的问题,请参考以下文章

用于比较 (_mm_cmpeq_ps) 和赋值操作的 SSE 内在函数

修改函数以使用 SSE 内在函数

使用 SSE 内在函数复制少量数据的问题

数组乘法与 sse 内在函数乘法的时序?

SSE 内在函数检查零标志

我在哪里可以找到 AVX 指数双精度函数?