哪里可以找到官方参考列表,列出 SSE 内置函数的操作?

52

是否有官方参考文献列出GCC的SSE内置函数的操作,即在<*mmintrin.h>头文件中的函数?


英特尔的"Intrinsics手册"可以在这里找到。这个链接也可能会引起您的兴趣。 - timday
1
我想在 Meta 上讨论这个问题 https://meta.stackoverflow.com/q/416086/2945027 - Alex Guteniev
1
我们维护SSE标签维基,其中链接了官方和其他参考资料。 - Alex Guteniev
5个回答

46
除了英特尔的Vol.2 PDF手册外,还有一份在线Intrinsics指南。在线Intrinsics指南包含了英特尔指令集(Intrinsics)的参考信息,可以使用这些Intrinsics来访问英特尔指令,如Intel® Streaming SIMD Extensions (Intel® SSE)、Intel® Advanced Vector Extensions (Intel® AVX)和Intel® Advanced Vector Extensions 2 (Intel® AVX2)等。 该指南具有全文搜索功能,因此可以通过名称、CPU指令、CPU功能等查找Intrinsic。它还可以控制要显示哪个ISA扩展。例如,不搜索KNC,因为您可能无法使用它,或者MMX在今天已经不太有用了。 此外,还可以查看标签wiki,了解关于标签的指南链接和几篇教程,以及官方文档。

1
我不知道有在线版本。谢谢!这比在多台机器上本地安装,然后Java更新破坏其中一些机器要好得多(最近发生了这种情况)。 - Z boson
1
@Zboson:本地版本被逐步淘汰的唯一缺点是我曾经能够从中提取数据库,这是一个有用的资源。我还没有尝试过是否可以从Web版本中进行数据抓取。 - Paul R
1
顺便说一句,我已经上传了一个离线使用的副本,链接在这里:https://devpspctclr.s3.amazonaws.com/intrinsics/20160705-intrinsics-guide.zip - 但是必须从本地主机提供服务,因为数据库是通过XHR加载的... - toxi

13

我发现使用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共用的。


1
使用VS2012(VC++ 11.0),以上所有头文件都可以很好地包含(因此immintrin.h不再仅限于GCC),并且smmintrin.h可以在extern "C"中无问题地包含。 - leetNightshade
这些头文件包含不需要加上 extern "C"。所有现代编译器在完全支持 C++ 模式下已经支持它们多年了。我不知道任何编译器是否曾经需要使用 extern "C",但现在已经不需要了。 - Peter Cordes

9

SSEPlus表格中的内嵌函数对于大多数情况非常易于使用,涉及到IT技术。


7

3

这些最初来自于英特尔。英特尔的C++编译器在其手册中描述了它们。点击此处查看。AMD可能有自己的手册,其中包含用于3DNow!的指令。

您需要比较GCC版本中附带的*mmintrin.h中是否提供这些指令的功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接