【问题标题】:Restrict SSE instruction set限制 SSE 指令集
【发布时间】:2013-02-24 13:18:51
【问题描述】:

我希望我的编译器只使用指定版本的 SSE 的指令。

目前,看起来像 -msse2 -mno-sse3 -mno-sse4 -mno-sse41 -mno-sse42 可以做到,但我正在寻找像 -monly-sse2 这样的东西。

【问题讨论】:

  • 这是给 gcc 的吗?如果可以,您可以添加标签,它会吸引合适的人群...
  • @rene 该解决方案应该适用于 gcc 和 clang

标签: gcc compilation clang sse


【解决方案1】:

除非您指定-msse3/-march=<cpu-with-sse3>,否则只有 SSE2 将用于 x86-64(甚至在 x86 上更低的指令集)。

【讨论】:

  • 但是如果我指定-msse3呢?如何告诉编译器不要使用较新的指令?
  • 它将使用 SSE3,但不使用 SSSE3、SSE4.1、SSE4A 或任何更新的例外。但是,它将使用 SSE 和 SSE2。
  • 不幸的是,这不是我所经历的。例如。当我只用-msse3 编译python 时,生成的二进制文件包含像vroundsd 这样的SSE4 指令。但是,如果我通过附加 -mno-sse4 显式禁用 SSE4,则生成的二进制文件不包含这些指令。我的编译器是Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)
  • @Kentzo 那么你可能会用其他选项或手动使用内在函数来覆盖它。不允许编译器发出比指定更高的指令。您想要的行为已经是编译器所做的。如果它仍然发出更高的指令,那么代码或您的编译器选项有问题。
  • 我很确定传递给编译器的参数没有任何问题。下面是一个例子:-c -fno-strict-aliasing -fno-common -dynamic -msse2 -I/usr/local/include -I/usr/local/opt/sqlite/include -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I. -IInclude -I./Include -DPy_BUILD_CORE -o Objects/codeobject.o Objects/codeobject.c 其余大部分看起来都一样。
猜你喜欢
  • 2012-02-27
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多