2017-08-24 29 views
-2

Dolphinのコンパイル中にこのエラーが発生しました。私はGCC 5.2と6.3と一緒にclang-3.7と3.8を試しました。奇妙なのは、他のすべての_mm関数がうまくいくように見えることです。ちょうどこれです。エラー:宣言されていない識別子 '_mm_shuffle_epi8'の使用Ubuntu 16.04 Ryzen

+3

他の組み込み関数を試しましたか? '_mm_shuffle_epi8'はSSSE3にあります。あなたは ''または ''を含んでいますか? '-mssse3'でコンパイルしていますか? – nemequ

+0

私はを追加しました。私はそのフラグを試しましたが、それはまだ拒否しています。何かが欠けているような気がしたり、GCC/clangがZenアーキテクチャーでこの機能を有効にしていないような気がします。 – Mitchell

+0

x86ターゲットにSSSE3を指定した場合は、使用しているCPUが本当に問題ではありません。コンパイラは実際にはサポートしていないターゲットに対してもコードを生成する必要があります。 __SSSE3__がプリプロセッサで定義されていることを確認してください(-mssse3が行うべきことです)。また、それはsse3ではないことに注意してください... – nemequ

答えて

1

SSE2は、他の_mmの機能は(あなたはおそらく唯一のSSE2機能、ない_mm_abs_epi8または_mm_cvtepi16_epi32のような他のSSE3/SSSE3/SSE4機能を試してみました)働く理由である、x86-64でのベースラインです。

あなたはMSVCとは異なり、GCC /打ち鳴らすとSSSE3組み込み関数を使用するように(あなたのケースで-march=nativeまたは-march=znver1で有効)-mssse3を必要とします。


ただあなただけを実行することを計画している場合は特に、-mpopcnt -msse4.1か何かでカップルのISA拡張を可能にするよりも、それは-march=nativeを使用することをお勧めしますので-mssse3は、-mtune=を設定しませんが、チューニングを-march=設定しないことに注意1つのターゲットCPU上のバイナリ。 -mavx2は何AVX2支持CPUはそれ(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80568)の恩恵を受けていないにもかかわらず、-mavx256-split-unaligned-load-mtune=generic動作を上書きしないので、例えば

は、AVX2を有効にするために、それは、-march=haswellまたは-march=znver1を使用するように、おそらく良いでしょう。つまり-mtune=genericは、有効な拡張機能をサポートしているCPUのセットをチューニングするのではなく、完全に汎用のチューニング設定を常に使用します。

Sandybridgeは-mavx256-split-unaligned-load/...storeから恩恵を受けますが、AVX2ではなくAVXのみをサポートしています。さらに、実行時にデータが実際には整列していない場合にのみ、データが99%の時間に整列されていればそれが必要ではないかもしれません。

関連する問題