1

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

我还使用 Qt creator 作为 IDE 并qmake.exe用于-spec win32-g++编译。由于我sse的代码中有说明,因此我必须包含emmintrin.h标题。

我补充说:

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

有谁知道解决方案?

提前致谢。

4

1 回答 1

3

听起来您的数据不是 16 字节对齐的,这是 SSE 负载的要求,例如mm_load_ps. 您可以:

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

或者

  • 修复你的内存对齐。在 Windows/Visual Studio 上,您可以将该declspec(align(16))属性用于静态分配或_aligned_malloc动态分配。对于 gcc 和大多数其他文明平台/编译器__attribute__ ((align(16))),前者和posix_memalign后者使用。
于 2013-09-06T14:26:47.957 回答