2011-10-25 19 views
2

CPU2006を使用してさまざまなベンチマークテストを実行して、gccの速度に関してさまざまな最適化がどのようなものかを確認しようとしています。私は-O1、-O2、-O3に精通していますが、-msseはまともな最適化であると聞いています。 -msseとは何ですか?私はまた、-msseが64ビットアーキテクチャではデフォルトであることを見てきました。それで、それを使用していないときと使用していないときの違いを比較するにはどうすれば無効にできますか?-msseを無効にする

答えて

0

http://www.justskins.com/forums/gcc-option-msse-and-128289.html

SSE(http://it.wikipedia.org/wiki/Streaming_SIMD_Extensions)名前が言うように彼らは、ベクトルおよび浮動のいくつかの種類のために高速であるのPentium 3以降のプロセッサに存在するSSE命令がありますポイント計算。それらはすべての64ビットプロセッサで利用できるので、なぜそれらを無効にする必要がありますか?

-msseと-msse2のいずれかを選択できます。 SSE2はSSE上に構築された別の命令セットで、他の強力で非常に高速なベクトル命令を追加します。

ペンティアム3にはSSEがあり、32ビットプロセッサです。 SSE2はより現代的で、Pentium 4はまだ32ビットプロセッサーで、SSE2を持っています。

+1

を使用し、SSE命令を無効にします。 – erasmuss22

+0

'-msse'、' -msse2'、 '-msse3'、' -msse4.1'、 '-msse4.2'の中から選択できます。 「実際の」使用の場合、特定の拡張機能ではなくCPU生成をターゲットにするほうがよいでしょう。 – millimoose

+0

SSE命令は、memsetやmemcpyの最適化されたバージョンでのみ使用されます。コンパイラがより良い最適化を行うことができると理解できる場合、sseとsse2はあまり使用されません。 -msseまたは-mno-msseを指定してコンパイルしても、プログラムに違いがない場合は驚きません。 –

5

-msseは、SSE命令の生成を有効にします。 64ビットプロセッサ(x86-64)にはすべてのプロセッサが搭載されていますが、一部の古い32ビットプロセッサ(IA-32)にはこれらの命令がありません。これがGCCのデフォルト設定の理由です。

SSEの命令は、ベクトル演算と浮動小数点演算子と関連しています。自動ベクトル化の機会が汎用コードではまれであることを考慮すると、浮動小数点を使用すると、唯一の違いは観察される可能性があります。 64ビットのオン

、私たちは、32ビットおよび64ビットのコンパイルの切り替えなど、ベンチマークの様々な組み合わせをしようとしているので、私たちは-msseはどうしたら無効にするか見て興味があるだけです-mno-sse

+0

ペンティアム3はそれを持っていましたが、32ビットプロセッサです。 SSE2はより現代的であり、すべての32ビットプロセッサがそれを持っているわけではありませんが、一部はそれを持っています。 Pentium 4は32ビットプロセッサですが、SSE2を搭載しています。 –

+0

@サルバトーレ私はあなたが何を意味するか分かりません。 386からPentium IIまでのすべてのIntel IA32プロセッサはSSEのない32ビットプロセッサです。私は答えを明確にしますが、すべてのx86-64プロセッサにSSEがありますが、すべてのIA32プロセッサにはありません。もちろん、SSEの拡張としてのSSE2は、SSEをサポートするプロセッサのサブセットによってのみサポートされます。 –

+0

はい正確::)私は非常に明確です。 –

関連する問題