小编Kon*_*pov的帖子

如何验证操作系统是否支持avx2指令

我有配置:Intel(R)Core(TM)i7-4702MQ CPU(带Haswell架构),Windows 8,Intel C++ Compiller XE 13.0.我想用avx2优化运行我的程序并放置编译标志:

/ QaxCORE-AVX2,/ QxCORE-AVX2

但是当我运行程序时,我收到错误:

致命错误:此程序未构建为在您的系统中运行.请确认操作系统和处理器均支持Intel(R)AVX2,BMI,LZCNT,HLE,RTM和FMA指令.

我运行avx2 cpu支持测试,该测试在页面上给出:如何在第4代Intel Core处理器系列中检测新的指令支持.结果:

该CPU支持Haswell中引入的ISA扩展.

如何检查我的操作系统是否支持avx2-extensions以及可能导致错误的原因?为了使用avx2扩展,我需要设置两个/QaxCORE-AVX2/QxCORE-AVX2标志?

upd:如果我设置了标志

/QxAVX
Run Code Online (Sandbox Code Playgroud)

该计划已成功启动.

c intel instruction-set vectorization avx2

4
推荐指数
1
解决办法
1万
查看次数

模运算向量化

有一个循环:

 long a* = new long[32];
 long b* = new long[32];
 double c* = new double[32];
 double d = 3.14159268;
  //set a, b and c arrays
  //.....
  for(int i = 0; i < 32; i ++){
    d+= (a[i] % b[i])/c[i];
  }
Run Code Online (Sandbox Code Playgroud)

我如何使用英特尔 C++ 矢量化功能(例如#pragma simd 或 sse- 指令)来实现此周期?

如果我写:

  #pragma simd reduction(+:c)
  for(int i = 0; i < 32; i ++){
    d+= (a[i] % b[i])/c[i];
  }
Run Code Online (Sandbox Code Playgroud)

那么速度不会增加:(

c intel vectorization

1
推荐指数
1
解决办法
2699
查看次数

浮点定向舍入和优化

有以下代码在不同的舍入模式下计算相同的表达式:

#include <iostream>
#include <fenv.h>
#pragma STDC FENV_ACCESS ON
#define SIZE 8

double foo(double * a, double * b){
    double sum = 0.0;
    for(unsigned int i = 0; i < SIZE; i++) {
        sum+= b[i] / a[i];
    }
    return sum;
}

int main() {
    double a[]={127, 131, 137, 139, 149, 151, 157, 163};
    double b[SIZE];

    for(unsigned int i = 0; i < SIZE; i++){
        b[i] = i+1;
    }

    printf("to nearest:   %.18f \n", foo(a, b));

    fesetround(FE_TOWARDZERO);
    printf("toward zero:  %.18f \n", foo(a, …
Run Code Online (Sandbox Code Playgroud)

c++ floating-point rounding ieee-754

0
推荐指数
1
解决办法
202
查看次数