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 バイトにアラインされていないようです。これは、mm_load_ps. 次のいずれかを実行できます。

  • _mm_loadu_ps一時的な回避策として使用します。新しい CPU では、このような位置合わせされていないロードのパフォーマンス ヒットはかなり小さいですが (古い CPU でははるかに重要です)、可能であれば回避する必要があります。

また

  • メモリの配置を修正します。declspec(align(16))Windows/Visual Studio では、属性を静的割り当てまたは動的割り当てに使用できます_aligned_malloc。gcc および他のほとんどの文明化されたプラットフォーム/コンパイラ__attribute__ ((align(16)))では、前者とposix_memalign後者に使用されます。
于 2013-09-06T14:26:47.957 に答える