Xcode 4で_mm_shuffle_psを使用するとOpenMP + SSEのバグが発生する可能性があります(LLVM GCC)

コンパイラをGCCからXCode 4.2のLLVM GCC 4.2に切り替えましたが、OpenMPの_mm_shuffle_ps組み込み関数で奇妙なリンカエラーが発生しました。この関数は動作しますが、一度ompブロック内に置くと、次のリンカーエラーが生成されます。

"___builtin_ia32_shufps", referenced from:
__ZN7Annulus12traceFactorsEP9PrimitiveP8VFMatrix.omp_fn.0 in Annulus.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

私のコードの基本的な構造は次のとおりです:

#pragma omp parallel {
    //Some stuff
    #pragma omp for {
        //Do more stuff including _mm_shuffle_ps
    }
}

コードはGCC 4.2でうまくいきますので、これはOpenMPのLLVM GCC実装のバグですか、エキゾチックなコンパイラフラグが必要ですか?

0
私はMacPro(OS X 10.7.2,2.8 GHzのQuad-Core Intel Xeon)でコンパイルしていますが、MacPro(OS X 10.6.8,2 x 2.26 Quad Core Intel Xeon)でも試してみました。コンパイラフラグは、OpenMPとSSEを有効にしたXcodeのデフォルトです。 OpenMPブロックの外で動作するので、私はそれが私の既存の設定ではないと思います。
追加された 著者 cubiclewar,
プラットフォーム(CPUアーチ)とコンパイラフラグの使用を教えてください。あなたがia32特有の機能を欠いているように見えますが、あなたはx86_64バージョンをリンクしています。コンパイラフラグ/定義がオフになっている可能性があります
追加された 著者 sehe,

2 答え

完全にバグ。それを提出してください。ありがとう。

0
追加された

ちょうどFYI:

私はここでもshuf_pd命令で同じ問題があります。他の組み込み関数もうまく動作します。私はそのバグをAppleに提出しました。

私がまだ試みていない回避策があるかもしれません:すべてのSSEコードを別の関数に入れ、OpenMPループから呼び出します。

0
追加された
私もAppleにバグを提出しました。はい、私は別の関数に置くことについて考えていましたが、同じパフォーマンスを得るにはインラインでなければならず、これはおそらくまだエラーを与えます。その間、私はGCC4.2を使用することに戻りました
追加された 著者 cubiclewar,