背景

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 flags

image.png sse4就表示该指令集。

//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

image.png 可以看出,速度提高了两倍多。

标签: 算法, C++

添加新评论