【问题标题】:Possible OpenMP + SSE bug when using _mm_shuffle_ps in Xcode 4 (LLVM GCC)在 Xcode 4 (LLVM GCC) 中使用 _mm_shuffle_ps 时可能出现 OpenMP + SSE 错误
【发布时间】:2011-11-12 23:20:57
【问题描述】:

我已将我的编译器从 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 实现中的一个错误,还是我需要一个奇异的编译器标志?

【问题讨论】:

  • 也许您应该告诉使用平台(CPU 架构?)和使用的编译器标志。看起来您缺少 ia32 特定功能,但您正在链接 x86_64 版本。也许编译器标志/定义已关闭
  • 我在 MacPro(OS X 10.7.2、2.8 GHz 四核 Intel Xeon)上编译,但我也尝试在 MacPro(OS X 10.6.8、2 x 2.26 四核英特尔至强)。编译器标志是启用 OpenMP 和 SSE 的所有 Xcode 默认值。由于它在 OpenMP 块之外工作,我认为它不是我现有的设置。

标签: xcode openmp sse llvm-gcc


【解决方案1】:

完全是一个错误。请归档。谢谢。

【讨论】:

    【解决方案2】:

    仅供参考:

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

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

    【讨论】:

    • 我还向 Apple 提交了一个错误。是的,我正在考虑将它放在另一个函数中,但是为了获得相同的性能,它必须是内联的,这可能仍然会产生错误。与此同时,我又回到了使用 GCC4.2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多