什么是指令集
计算机上的任何程序最终要编译成一条条指令才能让CPU识别并执行,指令集是指CPU能执行的所有指令的集合,每一指令对应一种操作,CPU依靠指令来计算和控制系统,指令执行能力是衡量CPU性能的重要指标,指令集也与CPU效率有密切关系。CPU都有一个基本的指令集,比如说目前英特尔和AMD的绝大部分处理器都使用的是X86指令集,因为它们都源自于X86架构。
1978年6月8日,Intel发布了新款16位微处理器“8086”,也同时开创了一个新时代:x86架构诞生了。x86指的是特定微处理器执行的一些计算机语言指令集,定义了芯片的基本使用规则。
为什么会有扩展指令集
无论CPU有多快,X86指令也只能一次处理一个数据,这样效率就很低下,毕竟在很多应用中,数据都是成组出现的,比如一个点的坐标(XYZ)和颜色(RGB)、多声道音频等。为了提高CPU在某些方面的性能,就必须增加一些特殊的指令满足时代进步的需求,这些新增的指令就构成了扩展指令集。
扩展指令集的演变过程
英特尔在1996年率先引入了MMX(Multi Media eXtensions)多媒体扩展指令集,也开创了SIMD(Single Instruction Multiple Data,单指令多数据)指令集之先河,即在一个周期内一个指令可以完成多个数据操作,MMX指令集的出现让当时的MMX Pentium处理器大出风头。
SSE(Streaming SIMD Extensions,流式单指令多数据扩展)指令集是1999年英特尔在Pentium III处理器中率先推出的,并将矢量处理能力从64位扩展到了128位。
在Willamette核心的Pentium 4中英特尔又将扩展指令集升级到SSE2(2000年),而SSE3指令集(2004年)是从Prescott核心的Pentium 4(第一次接触电脑时就是奔4)开始出现。
SSE4(2007年)指令集是自SSE以来最大的一次指令集扩展,它实际上分成Penryn中出现的SSE4.1和Nehalem中出现的SSE4.2,其中SSE4.1占据了大部分的指令,共有47条,Nehalem中的SSE4指令集更新很少,只有7条指令,这样一共有54条指令,称为SSE4.2。
2007年8月,通用CPU领域Intel友商AMD抢先宣布了SSE5指令集(SSE到SSE4均为英特尔出品),英特尔当即表示不玩SSE了也不再支持SSE5。
AVX出现了
2008年3月Intel宣布Sandy Bridge微架构将引入全新的AVX指令集,同年4月公布AVX指令集规范,随后开始不断进行更新,业界普遍认为支持AVX指令集是Sandy Bridge最重要的进步,没有之一。
其中AVX全称是Advanced Vector Extension,高级矢量扩展,什么是矢量?学过矩阵论的也应该知道,学过线性代数的也应该知道,高中物理里面也会提到:方向+大小的三维或四维标量组合,一般常用N维矩阵表示,计算机编程中就是用数组来表示。
AVX指令集“借鉴”了一些AMD SSE5的设计思路,进行扩展和加强,形成一套新一代的完整SIMD(上文提到过,单指令多数据)指令集规范。
在2010年4月的IDF2010上,英特尔演示了AVX的应用,在两个不同平台上动态跟踪刘翔运行服上的五星红旗,结果显示,支持AVX的系统视频跟踪的用时为14秒,比不支持AVX的系统快了21秒,性能提升了60%以上。最后AMD为了不让广大程序员精神分裂,无奈宣布支持AVX。
英特尔AVX指令集主要在以下几个方面得到扩充和加强:
- 支持256位矢量计算,浮点性能最大提升2倍
- 增强的数据重排,更有效存取数据
- 支持3操作数和4操作数,在矢量和标量代码中能更好使用寄存器
- 支持灵活的不对齐内存地址访问
- 支持灵活的扩展性强的VEX编码方式,可减少代码。
(回忆一下计算机专业的理论基础课计算机组织结构、汇编语言吧)
比SSE4浮点性能最大提升了2倍。
在2011年发布的AVX2则在此基础上加入了以下新内容:
- 整数SIMD指令扩展至256位
- 2个新FMA单元及浮点FMA指令
- 离散数据加载指令“gather”
- 新的位移和广播指令
用人话说就是,整数和浮点计算理论性能又翻倍了,这个世界变化太快发现计算机专业的人不学习真的不行啊
2013年,英特尔正式发布了AVX-512指令集,和之前的 AVX/AVX2一样(只是为了迷惑大家,用位数512命名下一代),AVX-512(个人觉得也可以叫AVX3)是一组新的指令集,都属于向量运算指令,将指令宽度进一步扩展到了512bit,相比AVX2在数据寄存器宽度、数量以及FMA单元的宽度都增加了一倍,所以在每个时钟周期内可以打包32 次双精度和 64 次单精度浮点运算,或者8个 64 位和16个 32 位整数,因此在图像/音视频处理、数据分析、科学计算、数据加密和压缩以及人工智能/深度学习等密集型计算应用场景中,会带来前所未有的强大性能表现,理论上浮点性能翻倍,整数计算则增加约33%的性能。
支持的数据宽度更大了。更大数据宽度的向量指令一直(在深度学习流行起来以前) 被用于加速各种实际运算,例如多媒体编解码、加密解密和数值运算等。用英语说就是:
Intel® AVX-512 is a set of new instructions that can accelerate performance for workloads and usages such as scientific simulations, financial analytics, artificial intelligence (AI)/deep learning, 3D modeling and analysis, image and audio/video processing, cryptography and data compression.
比较巧的是近期兴起的深度学习也刚好需要这类运算和需求,所以 AVX-512 乘着深度学习的东风不断发展壮大,目前AVX-512逐步全面普及,但CPU支持最新指令集,并不表示你的商业软件和科学计算算法能够有效利用。
为什么不出AVX-1024或下一代其他名字的指令集呢,个人觉得Intel也不用太着急,毕竟AMD在Intel发布AVX2的6年后才在Zen2中引入,而国内的自主可控CPU,还有很多值得国人深思的问题,好在国家战略层面已经认识到了这个问题!
总体来讲,结合核数的增加,这么多年下来计算机计算速度的增加依然遵循着摩尔定律。
摩尔定律:当价格不变时,集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,性能也将提升一倍。换言之,每一美元所能买到的电脑性能,将每隔18个月翻两倍以上。
更为恐怖的是:反摩尔定律
就是反过来看摩尔定律。一个IT公司如果今天和18个月前卖掉同样多的、同样的产品,它的营业额就要降一半。IT届把它称为反摩尔定律。