0

コンパイラを 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 実装のバグですか、それとも特殊なコンパイラ フラグが必要ですか?

4

2 に答える 2

0

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

于 2011-11-14T02:51:44.810 に答える
0

参考までに:

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

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

于 2011-11-22T18:03:08.807 に答える