【问题标题】:_mm256_cvtss_f32 isn't recognized by XCodeXCode 无法识别 _mm256_cvtss_f32
【发布时间】:2018-05-02 14:12:19
【问题描述】:

我正在尝试将 SIMD 内在函数与 XCode 7.1 中的 C 程序一起使用。 (注意,我正在编写 C99 程序,而不是 C++ 程序)。

我已经包含了 immintrin.h,并且我已经使用运行良好的内部命令编写了几个函数。我现在正在尝试编写一个函数,将 __m128 中的四个浮点数相加如下:

float cimpl_sum_m128( __m128 x ){
  float out;
  __m128 sum = x;
  sum = _mm_hadd_ps( sum, sum );
  sum = _mm_hadd_ps( sum, sum );
  out = _mm_cvtss_f32( sum );
  return out;
}

XCode 无法识别 _mm_cvtss_f32 命令。我应该注意到我从这个网站得到了命令:https://software.intel.com/sites/landingpage/IntrinsicsGuide/

谁能向我解释为什么 XCode 不能识别这个命令。如果我不能使用 _mm_cvtss_f32,如何从 __m128 变量中提取单个值?

以后我想用_mm256_cvtss_f32;这可能吗?如果没有,如何从 __m256 变量中提取单个值?

【问题讨论】:

  • 您是否在启用 AVX 的情况下进行编译(-mavx,或者可能是 -march=native)?
  • 不确定它是否相关,但与新的 Swift 相关,以及版本 2 和 3 之间的许多变化(首先可能是 3 不向后兼容(用 2 编写的代码在 3 中编译) ),也许还有另一种方法可以执行该“命令”?
  • @ringø:我认为这与 Swift 无关(检查标签)。
  • 您确定为_mm_cvtss_f32 启用了SSE 吗?您不是在禁用 SSE 的 32 位模式下编译,是吗? Linux Clang/LLVM 很好地支持这两种内在函数 (godbolt.org/g/QitQgz)。 _mm256_cvtss_f32 当然需要 -mavx-march 以间接启用 -mavx你得到了什么确切的错误信息?
  • 顺便说一句,_mm_hadd_ps 花费 2 次随机播放 + 1 次添加,而您本可以在每个缩小步骤中使用 1 次随机播放 + 1 次添加。请参阅stackoverflow.com/questions/6996764/…了解优化的float hsum256_ps_avx(__m256 v)(以及带有 AVX 或各种 SSE 级别的__m128 版本,以及整数和__m128d)。

标签: c xcode simd intrinsics


【解决方案1】:

原来是我的代码中的一个不相关的错误。谢谢大家的帮助。

【讨论】:

  • 你应该删除这个问题,因为它不太可能在未来对其他人有益。
猜你喜欢
  • 1970-01-01
  • 2016-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 2018-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多