質問

実際に私は2つの質問:

  1. は、SSE2の互換CPUの問題やコンパイラ。
  2. どのようにクリックしてくださCPUやコンパイラを支援SSE2?

を使用していGCCバージョン:

gcc (GCC) 4.5.1

私は、やっぱりコンパイルのコードでいこのエラー:

$ gcc -O3 -msse2 -fno-strict-aliasing -DHAVE_SSE2=1 -DMEXP=19937 -o test-sse2-M19937 test.c
cc1: error: unrecognized command line option "-msse2"

cpuinfo たこ

processor  : 0
vendor     : GenuineIntel
arch       : IA-64
family     : 32
model      : 1
model name : Dual-Core Intel(R) Itanium(R) Processor 9140M
revision   : 1
archrev    : 0
features   : branchlong, 16-byte atomic ops
cpu number : 0
cpu regs   : 4
cpu MHz    : 1669.000503
itc MHz    : 416.875000
BogoMIPS   : 3325.95
siblings   : 2
physical id: 0
core id    : 0
thread id  : 0
役に立ちましたか?

解決

  1. です。のコンパイラ/アセンブラに必要な光/handle SSE2の指示、そして、CPUのニーズを支援します。場合はバイナリは、SSE2の指示のない条件を付しい走りでPentium IIの出ている。

  2. 最良の方法はチェックGCCます。例えば私のGCC manpageとは-msse2オプションできるようにするべき明確にするSSE2の指示にbinaries.他の比較的最近のGCCはICCを支援すべきです。に関しては、cpuは、チェックの旗線/proc/cpuinfo.

しているものの、確認コードを使用cpuidなど、SSE2区間で無効にすることができCpuをサポートしていないので、コードにより、より共通の命令セットです。

編集:

いことがあるので注意してコンパイラのニーズにはネイティブコンパイラの走行x86システムクロス-x86用のコンパイラでコンパイル.それ以外の場合は、必要なオプションをコンパイルのバイナリのためのx86プロセッサを含むものとSSE2.

お場合は、CPUなx86ます。によってはLinuxの配布であったり、パッケージのインテルIA32ELエミュレーション層のためのx86-ソフトウェアに関IA64がで実行することができx86ソフトウェアです。

そのためには、以下のオプション:

  • 使用クロスコンパイラのないことにご注意願IA64をバイナリのためのx86.クロスコンパイラtoolchainsはやりにくいセットアップがで必要なものようにコンパイラ(binutils、図書館です。

  • インテルIA32EL走ネイティブのx86コンパイラです。わからないかどう攻略しろと設置するネイティブのx86ツールチェーンのすべての図書館プロジェクトのニーズに分布はサポートしていません。おそらく格その他にchrootを導入するx86です。

したい場合に試験をおこのシステムで してい トイIA32ELのためのプログラムを利用しています。.

EDIT2:

と思うこともできルx86linuxの配布にエミュレータのようにBochsはQEMU(仮想のコースを受講した。きっと ない すると併結果の速度になってる。

他のヒント

CPUはSSE2のinstrcutionsを実行できるようにする必要があり、コンパイラのニーズはそれらを生成することができるようにます。

あなたのCPUがSSE2をサポートしているかどうかを確認するためにます:

# cat /proc/cpuinfo

これは、それがサポートされている場合は、「フラグ」の下のどこかになります。

更新:あなたのCPUがそれをサポートしていないので、

コンパイラについては、

# gcc -dumpmachine
# gcc --version

のx86 *の一種に、コンパイラのニーズのターゲット、x86命令セットの一部であり、これだけのCPUのサポートSSE2、以来、

SSE2をサポートする(これは約10歳か何かであることから、最も可能性が高い)

gccのバージョンが> = 3.1にする必要があります。

更新:あなたのコンパイラは、このターゲットにそれをサポートしていないので、それはあなたがx86用のクロスコンパイラとしてそれを使用しているかどう

まだ言及されていないが行うもう一つのトリックます:

gcc -march=native -dM -E - </dev/null | grep SSE2

とgetます:

#define __SSE2_MATH__ 1
#define __SSE2__ 1

あなたのコンパイラとあなたのCPUの両方をチェックしている-march =ネイティブで。あなたは-march =ボンネルような特定のCPUに異なる-marchを与える場合は、そのCPUを確認することができます。

のgccの正しいバージョンのためにあなたのgccのドキュメントを参照してください。

https://gcc.gnu.org/ onlinedocs / GCC-4.9.0 / gccを/サブモデル-Options.htmlする

SSE2

の存在を確認するための

使用ASM

enter code here
static
bool HaveSSE2()
{
    return false;
    __asm mov EAX,1              ;
    __asm cpuid                  ;
    __asm test EDX, 4000000h     ;test whether bit 26 is set
    __asm jnz yes                ;yes
    return false;
yes:
    return true;
}

を実行してみます:

lshw -class processor | grep -w sse2

とプロセッサ部の下を見ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top