C++avx256指令集加速实例
背景
avx256是x86cpu架构下实现SIMD(单指令多数据)的指令集。它能够利用cpu内部256bit的寄存器,同时对4位double或8位int类型的数操作,达到很好的加速效果。这里通过一个计算$\pi$的实例来展示其威力:
$$ \pi = 4\int_0^1\frac{1}{1+x^2}dx $$ linux系统下可以通过如下命令查看电脑是否支持avx256指令集: > cat /proc/cpuinfo | grep flagssse4就表示该指令集。
//g++ avx_pi.cpp -mavx -O2
#include
#include
#include
using namespace std;
//正常的逐个累加运算
double compute_pi_naive(size_t dt){
double pi = 0.0;
double delta = 1.0/dt;
for (size_t i =0;i
可以看出,速度提高了两倍多。