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

完全是个bug。请归档。谢谢。

于 2011-11-14T02:51:44.810 回答
0

仅供参考:

我在这里遇到了同样的问题,但是使用了 shuf_pd 指令。其他内在函数工作得很好。我刚刚将该错误提交给Apple。

可能有一个我还没有尝试过的解决方法:将所有 SSE 代码放入一个不同的函数中,然后从 OpenMP 循环中调用它。

于 2011-11-22T18:03:08.807 回答