【问题标题】:emmintrin.h:31:3: error: #error "SSE2 instruction set not enabled" # error "SSE2 instruction set not enabled", "scaling solution"emmintrin.h:31:3: error: #error "SSE2 指令集未启用" #error "SSE2 指令集未启用", "缩放解决方案"
【发布时间】:2021-08-10 16:41:19
【问题描述】:

我一直在构建多个需要 sse2 指令集的项目。到目前为止,添加-march=native 中提到的sse2 instruction set not enabled 已经完成了这项工作。

但是,在我需要这个的 3 个项目中,makefile 中的 gcc 命令很容易找到,并且稍微编辑了 makefile 就可以了。现在我处理一个由 cmake 生成的更复杂的 makefile。我相信它会在其他文件夹中生成更多的 makefile,然后运行它们等等。因此,仅添加一个简单的 -march=native 既不理想也不容易,而且如果可行的话,将花费大量时间。

有没有办法以某种方式始终启用 sse2,与现在相反?我用谷歌搜索了这个,但找不到东西。

鉴于我从 github 下载的所有 makefile 都没有 -march=native 内部,这让我相信确实有一些方法可以预先在 gcc/g++ 级别上设置它?

我找到了这个 -mfpmath=sse 标志,但无法制定正确的 gcc/g++ 命令(如果相关的话)。

你能帮帮我吗?

【问题讨论】:

  • 在生成makefile之前,您应该将-march=native添加到CMakeLists.txt文件中的CMAKE_CXX_FLAGS变量中,而不是编辑生成的makefile。
  • 你能给出确切的代码吗?如果可行,也请将您的答案作为单独的答案提供,以便我接受。为了帮助您,目前 CMakeLists.txt 中甚至没有设置 CXX_FLAGS
  • SSE2 是 x86-64 的基线,即现代系统上的正常编译(生成 64 位可执行文件)默认情况下已经包含 -msse2。只有在构建过时的 32 位二进制文​​件时才需要手动使用它。 (尽管如果您只想在这台计算机上运行二进制文件,或者类似的更新版本,您仍然应该使用-march=native。)

标签: c++ linux makefile cmake sse


【解决方案1】:

您可以在CMakeLists.txt中添加编译器选项-march=native

SET(PROJECT_FLAGS "-march=native")
SET(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} ${PROJECT_FLAGS }")

或者

add_compile_options(-march=native) # CMake 2.8.12 or newer

【讨论】:

  • 第二个提议奏效了。第一个不是(可能是我在文件中的错误位置添加了它?)无论如何,非常感谢 Altaf,接受了答案。
猜你喜欢
  • 2013-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-27
  • 2010-12-01
  • 2013-01-31
相关资源
最近更新 更多