c++向量和数组的区别_AVX入门-并行计算高维向量

a6e25bf6e0748c6163e5fb4be9203518.png

介绍AVX

​ AVX就是Intel提供的支持向量并行计算的C语言的一个库,所有的东西都在中.这个库跟正常的C标准库差不多.需要注意的是在编译AVX的时候一定要加编译参数-mavx和-mavx2.一般来说用到AVX的时候还会用到AVX的祖先SSE因此SSE的编译参数也要加上.用gcc编译的指令如下

gcc filename.c -mavx -mavx2 -mfma -msse -msse2 -msse3

​ 还有一点需要说明AVX可以支持Intel的CPU也可以支持AMD的CPU,其实小编的CPU就是AMD的.

AVX入门

​ AVX入门也就是教你怎么声明变量在这里提供一个中文的详细的介绍.还用一个github上面的代码示范

高维向量加法

目的

​ 测试计算

维的向量加法使用AVX和普通for循环的速度差异

​ 实验测试的数据类型为双精度浮点数double类型,两个向量由

个double类型数据组成.

代码:废话少说,上码

#include 

​ 以上是main函数和测试速度函数的签名,接下来定义定义两个测试速度的函数

long 

运行结果

bfc730be6cc775a7a582ea67af4fcb55.png

可以得到最终加速比为2.03.之前再WSL系统上用clock获得的时间感觉特别不准,后来用gettimeofday再Windows上重新测了一遍,更新了这里的数据.

测试速度讨论

​ 在实际测试过程中部分时钟周期花费在将数组转换成AVX向量上,这部分时间不计入测试.对于使用AVX实现向量相加的程序,真正计入测试的时间只包括12500个4维double向量相加的时间.对于使用正常数组实现向量相加的程序,计入测试时间的部分也只有$10^7$个double相加的时间.

之所以对AVX忽略数据转换的时间是因为,在实际编程过程中整个程序可能都是AVX向量表示,不需要把普通数组转换成AVX的向量;对比多线程编程,只要使用多线程就一定要计算多线程声明初始化的时间,因此计算多线程的运行时间一定要把初始化的时间计算进去.

​ 测试的时间单位为

微秒.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值