2011-08-24 10 views
6

SSE4.2命令セットをサポートするはずのXeon W3550プロセッサがありますが、SSE2を使ってCプログラムでSSE2を使用しようとするとコンパイラエラーが発生します。有効になっているCPUでSSSE3を使用できません

#error "SSE4.2 instruction set not enabled" 

私は

$cat /procs/cpuinfo 

を使用する場合、それは、関連するすべてのSSE命令セットを検出したが、

$cpuid 

のみSSEとSSE2を検出します。

私のオペレーティングシステムは、ubuntu 11.04(カーネル2.6.38-11-ジェネリック)です。

これを修正する方法についてのご意見はありますか?ありがとう。

EDIT:下記のSteve-oのコメントに基づくアップデート。ヘッダファイル< * mmintrin.h> #ifndefプリプロセッサディレクティブを使用して、関連付けられているsseバージョンのチェックを実行します。

#ifndef __SSSE3__ 
#error "SSSE3 instruction set not enabled". 

だから私は、質問は、なぜこれがSSSE3が有効になっているCPUにもかかわらず、偽戻って来れていると思います。

+0

命令のコンパイルがホストプラットフォームまたはアーキテクチャに限定されるものではないが、GCC制限ように聞こえます。プロセッサ制限は、実行時にsegフォルトまたはそれに類するものにのみ気付きます。 –

答えて

11

-msse4.2で建物を試しましたか?

  • SSE4.2の組み込み関数とコード生成のサポートは、-msse4.2で利用できる です。
  • SSE4.1とSSE4.2の両方のサポートを有効にするには、-msse4を使用します。

http://gcc.gnu.org/gcc-4.3/changes.html

+1

いいえ、私はしませんでした。これは完全に機能し、私のコードはSSE3コマンドを使ってコンパイルと実行が成功しました。 – NGaffney

+1

'-march = native'もあり、CPUがサポートしているものに基づいたものを有効にします。 – caf

関連する問題