我需要安装一个软件,需要SSE2在我的macbook与M1芯片(os蒙特里)。
当我试图编译项目时,我会收到以下错误:
/libRootFftwWrapper/vectorclass/vectorclass.h:38:4: error: Please compile for the SSE2 instruction set or higher
#error Please compile for the SSE2 instruction set or higher
^错误消息链接到代码中的下列行:
#include "instrset.h" // Select supported instruction set
#if INSTRSET < 2 // SSE2 required
#error Please compile for the SSE2 instruction set or higher
#else我知道只有英特尔芯片配备了SSE2,但是有什么翻译器可以帮助我建立这个项目吗?
更新:问题解决了。解决方案在答案部分.
发布于 2022-02-19 22:57:05
我通过使用rosetta 2编译了这个项目,正如下面的评论所建议的那样。为了安装rosetta,我使用了以下命令:
$ softwareupdate --install-rosetta然后,我使用以下方法为x86_64 arch安装了Homebrew、clang和cmake:
$ arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
$ arch -x86_64 /usr/local/bin/brew install llvm
$ arch -x86_64 /usr/local/bin/brew install cmake我还不得不用以下方法重新使用自制软件:
$ rm -rf "/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core"
$ arch -x86_64 /usr/local/bin/brew tap homebrew/core 正如brew医生建议的那样。
最后,在删除以前生成的CMakeCache之后编译了该项目:
$ make clean
$ arch -x86_64 /usr/local/bin/cmake build_dir
$ make
$ make install 发布于 2022-02-21 22:21:47
对于某些人来说,Alisa的解决方案可能不是最优的,所以这里有一个替代方案。
Rosetta 2基本上是一个模拟器;它接受编译的x86机器代码,并在ARM上运行它。我没有M1处理器,但据所有的说法,它在这方面做得很好。
也就是说,直接编译代码来针对Arm CPU而不是依赖Rosetta可能会更好。编译器通常比仿真器拥有更多关于代码工作方式的信息,模拟器必须在抛出所有附加上下文之后进行操作,因此有时可以更有效地优化代码。
Alisa遇到的问题是SSE本质不是设计成可移植的,而是为了让人们通过编写与底层体系结构紧密耦合的代码来获得更好的性能。
有几个项目允许您使用NEON编译SSE代码,您可以将它看作是Arm版本的SSE,方法是提供SSE API的替代实现。最受欢迎的两个可能是SSE2NEON和SIMDe (SIMDe) (完全公开:我是后者的主要开发人员)。
SSE2NEON只是使用NEON来实现SSE。SIMDe提供了许多实现,包括NEON、AltiVec/VSX (POWER)、WebAssembly SIMD、z/Architecture等,以及随处可见的便携后援。
这两个项目的工作原理基本相同:不包括<xmmintrin.h> (或其他一些特定于x86的标头,它取决于您想要使用的ISA ),而是包含SSE2NEON或SIMDe。然后添加任何相关的编译器标志来设置目标(例如,-march=armv8-a+simd),这样就可以了。
如果性能不是一个主要的问题,罗塞塔2可能是最简单的选择。否则,您可能需要查看SSE2NEON或SIMDe。
另一个考虑是您只是想要快速修复,还是最终希望将代码移植到Arm.Rosetta 2并不是一种长期的解决方案,而是允许现有代码在人们移植他们的代码时继续工作的止损间隙。SSE2NEON和SIMDe都使将x86和Arm SIMD代码混合在同一个可执行文件中成为可能,因此您可以随着时间的推移逐步移植代码,而不必将一个大开关切换到从x86到Arm的转换。
https://stackoverflow.com/questions/71181434
复制相似问题