g++ - 无法使用AVX512编译C++程序?

标签 g++ avx

编译程序(test.cpp)时出现以下错误:

> g++ -o test test.cpp -O2 -mavx -msse4.1
test.cpp: In function ‘int main(int, char**)’:
test.cpp:18:42: error: ‘_mm_rorv_epi32’ was not declared in this scope
   indice = _mm_rorv_epi32(indice, offset4);
                                          ^

程序(main.cpp):

#include <stdio.h>
#include <stdlib.h>
#include <immintrin.h>

int main(int argc, char* argv[]) {
  float values[4] = {1., 2., 3., 4.};
  __m128i offset4 = _mm_set_epi32(0, 2, 4, 6);
  __m128i mask4 = _mm_set_epi32(3, 3, 3, 3);
  __m128 value4 = _mm_load_ps(&values[0]);
  __m128 res;

  float result[4];

  // load a constant integer 4 times
  __m128i indice = _mm_set1_epi32(123);  // 123 is a fake example

  // shift
  indice = _mm_rorv_epi32(indice, offset4);
  // and
  indice = _mm_and_si128(indice, mask4);

  // lookup
  res = _mm_permutevar_ps(value4, indice);
  // store
  _mm_store_ps(result, res);

  for (int i = 0; i < 4; i++) {
    printf("result[%d] = %g\n", i, result[i]);
  }
  return 0;
}

我确实根据英特尔手册包含了头文件immintrin.hg++ 版本是 4.9.3

如何解决编译问题并使用_mm_rorv_epi32

最佳答案

_mm_rorv_epi32

根据Intel page_mm_rorv_epi32 上,此内在函数需要 avx512favx512vl。您需要使用 -mavx512vl 进行编译才能启用它(并且您的 gcc 太旧 - -mavx512vladded in gcc-5.1 )。

关于g++ - 无法使用AVX512编译C++程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41436163/

相关文章:

c++ - std::functions 错误 vector

c++ - g++ 在 Windows 上不使用通配 rune 件名进行编译

c++ - GCC 是否有办法指定是否在调用站点内联?

c++ - AVX2:分配给 __m256i 类成员时出现段错误

c++ - 测试 AVX 寄存器是否包含一些相等的整数

c++ - 如何在 Sandy Bridge 上的一系列整数中快速将位计数到单独的 bin 中?

c - 将字段中的位扩展到掩码中所有(重叠+相邻)设置位的最快方法?

utf-8 - g++ 花引号在控制台和 "Problems"列表中显示不正确

c++ - 在另一台电脑上执行程序时加载 SDL2 共享库时出错

c++ - 为什么为openmp并行处理不适用于矢量化色彩空间转换?