gpt4 book ai didi

sse - 如何在带有 M1 芯片的 MacBook 上编译需要 SSE2 的项目?

转载 作者:行者123 更新时间:2023-12-05 01:05:03 51 4
gpt4 key购买 nike

我需要在我的带有 M1 芯片 (os Monterey) 的 macbook air 上安装需要 SSE2 的软件。

当我尝试编译项目时,我收到以下错误:

/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

我知道只有 Intel 芯片配备了 SSE2,但是有什么翻译器可以帮助我构建这个项目吗?

更新:问题已解决。答案在答案部分。

最佳答案

Alisa 的解决方案对某些人来说可能不是最优的,所以这里有一个替代方案。

Rosetta 2 基本上是一个模拟器;它采用已编译的 x86 机器代码并在 ARM 上运行。我没有 M1 CPU,但从各方面来说,它在这方面做得非常很好。

也就是说,直接编译代码以针对 Arm CPU 而不是依赖于 Rosetta 通常会更好。编译器通常比模拟器拥有更多关于代码如何工作的信息,模拟器必须在所有额外的上下文被丢弃后才能运行,因此它有时可以更有效地优化代码。

Alisa 遇到的问题是,SSE 内在函数并不是为可移植而设计的,它们旨在让人们通过编写与底层架构紧密耦合的代码来获得更好的性能。

通过提供 SSE API 的替代实现,有几个项目允许您使用 NEON(您可以将其视为 Arm 的 SSE 版本)编译您的 SSE 代码。最受欢迎的两个大概是SSE2NEONSIMD Everywhere (SIMDe) (完全披露:我是后者的首席开发人员)。

SSE2NEON 只是使用 NEON 实现 SSE。 SIMDe 提供了许多实现,包括 NEON、AltiVec/VSX (POWER)、WebAssembly SIMD、z/Architecture 等,以及适用于任何地方的可移植后备。

两个项目的工作方式基本相同:而不是包含 <xmmintrin.h> (或其他一些特定于 x86 的 header ,这取决于您要使用的 ISA)您包括 SSE2NEON 或 SIMDe。然后添加任何相关的编译器标志来设置目标(例如 -march=armv8-a+simd ),一切顺利。

如果性能不是主要问题,Rosetta 2 可能是最简单的选择。否则,您可能需要研究 SSE2NEON 或 SIMDe。

另一个考虑因素是您是否只是想要快速修复或最终想要将代码移植到 Arm... Rosetta 2 并不是一个长期解决方案,而是一个权宜之计,允许现有代码在人们移植他们的代码时继续工作。 SSE2NEON 和 SIMDe 都可以在同一个可执行文件中混合 x86 和 Arm SIMD 代码,因此您可以随着时间的推移逐渐移植您的代码,而不必为了从 x86 过渡到 Arm。

关于sse - 如何在带有 M1 芯片的 MacBook 上编译需要 SSE2 的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71181434/

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