2013-05-14 12 views
9

私は、インテルが文字列処理を高速化するためにSSE 4.2 instructionsを導入したhereを読んでいます。物品からgccはインテルのSSE 4.2命令をテキスト処理に使用していますか?

引用:

最初のインテルのコアI7に実装SSE 4.2命令セット、 は、文字データを処理するため SIMD演算を利用して文字列とテキスト処理命令(STTNI)を提供します。もともと が文字列、テキスト、XML処理を高速化するために開発されましたが、これらの命令の強力な新機能は、 以外では有用であり、 ステージの多数のアプリケーションの検索と認識を再訪する価値があります。 パフォーマンス

  • gccでは、これらの手順を利用できますか?
  • もしそうなら、どのバージョンですか?
  • もしそうでなければ、オープンソースライブラリ がありますか?
+2

私はGCCが特定のタスクを認識することができるようになりますことを疑いますテスト処理として自動的に使用します。しかし、 'strcpy()'のような関数がコンパイラによってSSE4.2を使って行われても驚くことはありません。 – Mysticial

+0

@Mysticial私は 'strcpy'他を指していたと思います。しかしもっと重要なことに 'atoi'など、そしてそれらのC++ 11相当物' std :: stoi'など –

+1

参照http://stackoverflow.com/questions/7919304/gcc-sse-code-optimization gccに伝える必要があります。ライブラリは既にコンパイルされているので、ライブラリを再コンパイルしない限り、コードだけが影響を受けます。 – imel96

答えて

4

ソフトウェアライブラリに関して、私はAgner Fogのasmlibを見ていきます。 SSE4.2を使用してアセンブリで最適化された複数の文字列操作を含む、多くのルーチンのコレクションを持っています。それは、各レベルのキャッシュサイズやどの拡張(例えばSSE4.2)がサポートされているかなど、CPU上の戻り情報を使用する他の有用な関数です。

http://www.agner.org/optimize/asmlib.zip

-msse4.2でコンパイルするか、

1

-mavx AVXを使用してプロセッサを持っている場合、私はgccがあることを使用するかどうかわからないんだけど、それGCCでSSE4.2を有効にするにはテキスト処理は一般的にglibcを通して行われるので、重要ではありません。 string.hの標準文字列関数を使用している場合(おそらくcstringは同じ処理を行います)、合理的なglibcを使用すると自動的に使用するはずです。

私はそれで検索しました、それはglibcの2.15は、(おそらくさらに古いものはそれを持って)すでにSSE4.2 strcasecmp最適化を持っているようだ:

http://upstream.rosalinux.ru/changelogs/glibc/2.15/changelog.html

関連する問題