【发布时间】:2021-01-11 04:02:33
【问题描述】:
我正在尝试使用 MSVC 启用不同的 simd 支持。
有一个页面谈论启用一些 simd,例如 SSE2、AVX、AVX2 https://docs.microsoft.com/en-us/cpp/build/reference/arch-x86?redirectedfrom=MSDN&view=vs-2019
但是,它没有提到如何启用其他 simd 优化,例如 SSE4.1、SSE4.2、SSE3 是否可以在不启用 AVX 的情况下启用这些?
另外,在 MSVC2017 /arch:SSE2 中似乎不再支持/需要,我可以假设 SSE3/SSE4.1/SSE4.2 也默认启用吗?
【问题讨论】:
-
我可以假设 SSE3/SSE4.1/SSE4.2 也是默认启用的吗? - 不,SSE2 是 x86-64 的基线。每个 x86-64 CPU 都保证有 SSE2。我认为这就是为什么您不需要选择它的原因。但是有些 AMD x86-64 CPU 没有 SSE3,有些 Intel x86-64 CPU 没有 SSE4.1(例如第一代 Core 2)。
-
不过,我不知道您的问题的答案。您可能只能通过内在函数获得没有 AVX 的 SSE4,因为 MSVC 在这方面很糟糕(或围绕运行时调度模型设计,而不是编译时),但也许有一个 MSVC 选项。您可以使用像 clang 这样的编译器,您可以在其中使用
-O3 -msse4.1或-O3 -march=penryn
标签: visual-c++ sse simd sse4