gpt4 book ai didi

c++ - 在 Visual Studio 2015 中检测要与 C++ 宏一起使用的 SIMD 指令集

转载 作者:太空狗 更新时间:2023-10-29 22:58:24 26 4
gpt4 key购买 nike

所以,这就是我要完成的工作。在我的 C++ 项目中,必须使用 Microsoft Visual Studio 2015 或更高版本编译,我需要一些代码具有不同的版本,具体取决于用户 CPU 中可用的最新 SIMD 指令集,其中: SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2AVXAVX2AVX512

因为此时我正在寻找的是编译时 CPU 调度,所以我的第一个猜测是使用编译器宏可以轻松完成。然而,令我惊讶的是,很难找到有关如何在 VS2015 中使用宏实现此类 CPU 调度的信息。

例如,前一个问题“Detect the availability of SSE/SSE2 instruction set in Visual Studio”有关于如何检测 x86 代码的 SSE 和 SSE2 的信息,但没有 x64 代码的信息。虽然,他们引用了微软的文档:http://msdn.microsoft.com/en-us/library/b0084kay.aspx

在那里,我们只有关于如何检测 SSE、SSE2、AVX 和 AVX2 是否在编译器中启用的信息 - 而不是 CPU 是否完全支持它们。此外,与其他指令集(如 SSE3、SSSE3、SSE4.1、SSE4.2 和 AVX512)完全没有任何关系。

因此,我的问题变成了:如何检测用户的 CPU 是否通过宏支持这些指令集,就像其他编译器一样,但使用 Microsoft Visual Studio 2015?

最佳答案

您面临的问题是,Visual Studio 历来是为软件供应商设计的。编译自己的软件的想法根本不在微软的 DNA 中。

实际结果是,微软几乎不关心构建机器的处理器。这不太可能是用于运行软件的处理器。

从好的方面来说,这也意味着 Microsoft 不会遇到长期存在的 Linux 问题,即假设构建系统库存在于目标机器上。在 Windows 10 for Windows 7 上构建就可以了。

例如,编译器也不允许您启用 SSE4.1。您只能使用 /arch:avx 或什么都不用。此外,该选项仅定义 __AVX__,而不是 gcc/clang/icc 定义的通常宏,如 __SSSE3__,以指示对 AVX 隐含的先前指令集的目标支持。

关于c++ - 在 Visual Studio 2015 中检测要与 C++ 宏一起使用的 SIMD 指令集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40757107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com