gpt4 book ai didi

c++ - 用qmake成功编译SSE指令(但不识别SSE2)

转载 作者:行者123 更新时间:2023-11-30 02:52:42 30 4
gpt4 key购买 nike

我正在尝试编译和运行从 Unix 迁移到 Windows 的代码。我的代码是纯 C++,没有使用 Qt 类。在 Unix 中没问题。

我还使用 Qt creator 作为 IDE,使用 qmake.exe-spec win32-g++ 进行编译。因为我的代码中有 sse 指令,所以我必须包含 emmintrin.h header 。

我补充说:

QMAKE_FLAGS_RELEASE += -O3 -msse4.1 -mssse3 -msse3 -msse2 -msse

QMAKE_CXXFLAGS_RELEASE += -O3 -msse4.1 -mssse3 -msse3 -msse2 -msse

.pro 文件中。 我已经能够毫无错误地编译我的代码。但是在运行之后,它在执行一些包含 __m128 或类似的函数时会出现运行时错误。

当我打开 emmintrin.h 时,我看到:

#ifndef __SSE2__
# error "SSE2 instruction set not enabled"
#else

并且它在#else之后未定义。

我不知道如何在我的计算机中启用 SSE

平台:Windows Vista

系统类型:64位

处理器:intel(R) Core(TM) i5-2430M CPU @ 2.40Hz

有人知道解决办法吗?

提前致谢。

最佳答案

听起来您的数据不是 16 字节对齐的,这是 mm_load_ps 等 SSE 加载的要求。您可以:

  • 使用 _mm_loadu_ps 作为临时解决方法。在较新的 CPU 上,诸如此类的未对齐负载对性能的影响相当小(在较旧的 CPU 上影响更大),但仍应尽可能避免这种情况

  • 修正你的内存排列。在 Windows/Visual Studio 上,您可以使用 declspec(align(16)) 属性进行静态分配,或使用 _aligned_malloc 进行动态分配。对于 gcc 和大多数其他文明平台/编译器,前者使用 __attribute__ ((align(16))),后者使用 posix_memalign

关于c++ - 用qmake成功编译SSE指令(但不识别SSE2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18653452/

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