《计算机体系结构-量化研究方法》是计算机体系结构领域,最经典的教材,同时也是最前沿的参考资料。
经典,是因为没有其他的书能超越此书在体系结构领域的地位。前沿,是因为这本书基本是每5年左右再版一次。
紧紧围绕最新的体系结构方向的变化。
这就是为什么这篇文章虽然是在对比《量化》第4版和第5版的区别,却胆敢标题里加上“体系结构这五年”。

《量化》第5版是前天在国内市场正式上市的,《编译点滴》在第一时间拨出巨款购入此书。
就是希望能为各位朋友送上更有价值的博文。

Continue reading »

 

最近调程序,出现illegal instruction问题,没有头绪。 索性把illegal instruction好好窥探一下。 Continue reading »

 

start_kernel is the first function that kernel runs, like the main function in user space program.
In this post, I will try to get a detailed understand of how start_kernel is called on X86_64 and MIPS architecture. Continue reading »

 

事务内存(Transaction Memory)是最近几年非常火热的研究方向之一.如果成功,IBM将是首个引入该支持的.IBM是在HotChip 2011上宣布这一消息的.支持事务内存的芯片PowerPC A2将用来攒BlueGene/Q,一款将在2012年完工的IBM超级计算机.Sun曾在一款已经流产的芯片(Rock) 中实现了该技术.曾经参与此项发言的工程师表示,对于某些特定的应用,事务内存能带来很大的好处,但对其他应用基本没有什么作用. Continue reading »

 

Intel Sandy Bridge微架构中,Intel引入了256SIMD扩展AVX,这套指令集在兼容原MMXSSESSE2128位整点SIMD支持的基础上,把支持的总向量数据宽度扩展成了256位。新增了若干条256位浮点SIMD指令。

昨天,Intel刚刚发布了AVX2指令集,这套指令集在AVX基础上做了扩展,不过要在2013年发布的Haswell处理器上才能支持。参考1给出了AVX2的详细特性。

Continue reading »

 

随着应用程序对性能的要求越来越高,硬件厂商们也在持续不断在各个方面改进硬件支持。 SIMD技术作为一种简单高效的并行技术,仅仅通过少量的结构变化,即可获得并行能力。 而且这种方式不会像Cache、分支预测之类带来很多的功耗。 Krste Asanovic等人在针对并行计算前景的调研中, 将SIMD处理和深度适中流水线(5-9级)、浮点处理单元视为未来多核和众核处理器的每个core的重要功能部件。

目前,包含SIMD支持的体系结构主要分为如下几类:

  • 单核通用微处理器中的SIMD扩展: 这是最普通的一类SIMD扩展。
  • 对称多核中的SIMD扩展: 结构上一般都采用多个单核通用微处理器组合形成多核,SIMD多数存在于单个核内。 这种方式,从05年发展至今,已经普遍存在于通用计算领域,如高端嵌入式、PC、低端服务器。
  • 异构多核中的SIMD扩展: 一般异构多核由一个功能强大的核加若干结构简单,但计算能力强的核组成,以IBM 05年推出的Cell处理器最为典型。
  • 数字信号处理芯片(DSP)中的SIMD: 相比通用芯片的SIMD扩展,DSP芯片的SIMD指令集一般是为了处理特定的数据结构,如声音、视频。 DSP中SIMD操作对象一般都通过DMA从宿主机上先拷贝到暂存器(Scratchpad RAM)中,再在这块存储上作操作。 这些指令一般不能直接访问宿主的主存。
  • GPU中的SIMD: 严格意义上,GPU就是一种的DSP。 GPU以NVIDIA的CUDA最为典型,Intel也在08年展示了自己的GPU设计。 这类SIMD的突出特点是支持向量宽,SIMD指令支持丰富,计算功能强大,有SIMT支持。 但由于GPU一般都有自己的独立存储空间,且底层差异很大,所以可编程性差。
  • 向量机中的SIMD: 这类SIMD在上世纪80年代红极一时,支持的向量操作最为灵活,至今仍在某些领域占据一席之地。

 

对称多核与SIMD

对称多核处理器厂商的典型代表是Intel、AMD和IBM Power。Intel自2004年发布第一款双核处理器Celeron D开始, 一直在其处理器中持续改进SIMD扩展。

2008年推出的Core i7处理器增加了对XML处理的SIMD加速支持,将非对齐访存的延迟减小到最快仅1拍, 当数据不在同一个cache line时才需要4.5拍。

Intel 2010年底推出的Sandy Bridge架构,其中的AVX扩展,除了兼容之前的MMX,SSE,SSE2外,将浮点SIMD运算支持的数据宽度提升到了256位。 并对访存通道做了调整,扩展原X86的存地址访存通道,使之也可以从内存取数据。 这样CPU的访存能力就大大增强。

Figure 2.1: AMD Bulldozer结构

Figure 2.1: AMD Bulldozer结构

AMD在2011的ISSCC上也推出了其最新双核架构Bulldozer。 图 2.1 为Bulldozer的结构图,Bulldozer的两个核不仅共享取指、解码和L2 Cache,还共享SIMD运算部件FMAC。 当执行128位的SSE2 SIMD扩展时,Bulldozer的每个核可以最多使用两套SIMD运算部件;当执行256位 AVX指令时,两个128位的FMAC部件共同执行此指令。

 

异构多核与SIMD

异构多核与SIMD的典型芯片是Sony、IBM和Toshiba共同开发的Cell处理器,其内部结构如图 2.2 所示:

Cell处理器结构

Figure 2.2:Cell处理器结构

Figure 2.2:Cell处理器编译流程图

Figure 2.3:Cell处理器编译流程图

Cell处理器中包含了一个功能强大的Power处理器核PPE和八个流处理器核SPE。 SPE和PPE都有128位的SIMD数据支持,支持浮点和整点的SIMD操作。 每个SPE都有自己的局部存储,而且能够确保在一定延时内完成数据分发,这使得Cell可以用简单的逻辑完成流水线控制。 Cell需要程序员自己通过控制DMA(Direct Memory Access)部件管理数据存取。

Alexandre E. E.等人开发了针对CELL的优化编译器。 作者的工作除了构建一个面向CELL的高性能编译器外,还着力于提升结构简单的流处理核——SPE的性能,为SIMD提供自动向量化支持。但这种异构结构也为二进制兼容带来了问题,如图2.3为Cell上可执行文件编译链接流程图。

 

GPGPU与SIMD

GPGPU,即将GPU用于通用计算领域,许多计算密集型应用能通过GPU的流处理支持获得较高的加速比,因为GPU有强大的数据并行能力。 每个GPU都有多个multiprocessor组成,每个multiprocessor又包含若干个processor。 每个multiprocess中的所有processor共享一个取指部件,它们同时执行一条指令,操作的数据对象可能不同。 因为GPGPU中的SIMD是每条指令同时操作多个线程中的数据,因此这种SIMD也被成为SIMT。

Rajesh Bordawekar等人使用通用CPU上SIMD + 多核优化一个实际的图像处理应用程序,证实优化后的性能可以超过GPU。 作者通过分析,得出GPU在擅长的浮点运算上不敌CPU的原因有四点: 1,共享内存小; 2,内存访问模式为非对齐; 3,原子操作代价高; 4,单线程性能弱。

Intel 08年公布了其基于X86架构的GPU设计——Larrabee[。 Larrabee采用对称众核设计,每个核都是顺序发射、X86架构,有512位宽SIMD支持,且支持函数调用栈和缺页中断处理。 但09年底Intel宣布不再将Larrabee作为GPU产品开发,而仅仅作为实验性的软件平台。 因为其能效不高,很多依赖GPU硬件实现的操作,改用软件实现,效率和功耗都不理想。

 

向量机与SIMD

目前SIMD的发展朝着数据越来越宽,支持操作越来越复杂,访存支持越来越丰富的方向发展。 按照这个势头,SIMD扩展是否会最终变成曾经红极一时的向量机呢? 我们有必要将SIMD扩展和向量机做个对比,借鉴向量机的成功经验,同时规避向量机的劣势。

向量机是80年代和90年代初大多数超级计算机的基础,面向向量机的自动向量化研究工作在这期间也一度非常热。 向量机中又以向量——寄存器类处理器类型最为主流。 这类处理器中SIMD指令的操作数,除访存操作外,都保存在寄存器中。 通用微处理器上的SIMD扩展和这种向量处理器有许多相似之处。 如向量机中的寄存器类似微处理器上的SIMD寄存器;向量机上向量指令的功能也和SIMD指令功能相似。 但也有很多关键的不同点:

  • 向量机支持的向量数据类型很长,而且支持变长向量数据;而SIMD扩展一般支持较短的定长向量数据类型。
  • 向量机访存支持强大,访存带宽大;而SIMD扩展访存由于成本原因,访存支持较弱,访存带宽小。 向量机的访存部件都支持跨距访存,即可以从不连续的地址取数到一个向量里,而SIMD扩展目前仅支持连续的存取一个向量中的元素。 带宽方面,06年最快的通用超标量微处理器的访存带宽只有5GB/秒,而最快的向量处理机达到50GB/秒。
  • 向量机的向量操作通用性强。 所有的操作可以针对所有的向量数据类型实施。 而SIMD扩展的向量操作由于向量运算部件物理实现的原因,限制较多,操作不通用。某些操作仅仅支持某些向量数据类型。

虽然从这些不同点来看,向量机比SIMD扩展有很大优势, 但之所以有SIMD扩展的通用微处理器能得到通用计算市场领域的认可,是因为向量机的内存、缓存和处理器设计及实现成本过高。 06年,只要1000多美元就能买到一台CPU频率比造价上千万的向量机还要高的笔记本电脑。 不过,因为向量机自身有通用串行微处理器很难企及的优势,在对存储带宽要求较高的科学和工程应用中仍然很流行。 这使得向量机在高性能计算领域,牢牢的占据着一席之地,在2010年11月全球高性能计算机的TOP10中,仍有4个是向量机。

Davida A. PaDua和Michael J. Wolfe总结了针对向量和多核计算机的编译器应该具有的特性。 他指出数据依赖分析,尤其是针对循环的数据依赖分析是自动向量化编译器必须具备的功能,而并行化则是多核计算机性能提升的关键。

传统向量机的向量化技术多数针对基于数组的FORTRAN语言,而现阶段很多数据并行度高的多媒体应用都是用C语言编写。 C语言中的指针和其他语言特性使得针对向量机的向量化技术很难直接应用在通用处理器的SIMD扩展中。

参考文献:

Asanovic et al.(2006)
ASANOVIC K, BODIK R, CATANZARO B C, et al. The Landscape of Parallel Computing Research: A View from Berkeley: EECS Department, University of California, Berkeley, 2006:21-23 

D. Pham and M. N. Day(2005)
D PHAM M B, S ASANO, M N DAY E. The Design and Implementation of a First-Generation CELL Processor. IEEE International Solid-State Circuits Conference (ISSCC’05), 2005:184-592 

Seiler et al.(2008)
SEILER L, CARMEAN D, SPRANGLE E, et al. Larrabee: a many-core x86 architecture for visual computing. ACM SIGGRAPH 2008 papers, 2008:18:1-18:15 

Torres()
TORRES G. Inside the Intel Sandy Bridge Microarchitecture, 2010. http://www.hardwaresecrets.com/article/Inside-the-Intel-Sandy-Bridge-Microarchitecture/1161/1. 

Walrath()
WALRATH J. Bulldozer at ISSCC 2011 – The Future of AMD Processors, 2011. http://www.pcper.com/reviews/Processors/Bulldozer-ISSCC-2011-Future-AMD-Processors. 

Eichenberger et al.(2005)
EICHENBERGER A E, O’BRIEN K, O’BRIEN K, et al. Optimizing Compiler for the CELL Processor. Proceedings of the 14th International Conference on Parallel Architectures and Compilation Techniques, 2005:161-172 

Wu et al.(2005)a
WU P, EICHENBERGER A E, WANG A. Efficient SIMD Code Generation for Runtime Alignment and Length Conversion. Proceedings of the international symposium on Code generation and optimization, 2005:153-164 

Wu et al.(2005)b
WU P, EICHENBERGER A E, WANG A, et al. An integrated simdization framework using virtual vectors. Proceedings of the 19th annual international conference on Supercomputing, 2005:169-178 

Eichenberger et al.(2004)a
EICHENBERGER A E, WU P, O’BRIEN K. Vectorization for SIMD architectures with alignment constraints. Proceedings of the ACM SIGPLAN 2004 conference on Programming language design and implementation, 2004:82-93 

刘雷(2010)
刘雷. CUDA平台上的UPC语言扩展与优化.中国科学院计算技术研究所, 2010:1-3. 硕士学位论文. 

Bordawekar et al.(2010)
BORDAWEKAR R, BONDHUGULA U, RAO R. Believe it or not!: mult-core CPUs can match GPU performance for a FLOP-intensive application!. Proceedings of the 19th international conference on Parallel architectures and compilation techniques, 2010:537-538 

维基百科()
维基百科. Intel Larrabee. http://zh.wikipedia.org/wiki/IntelLarrabee 

Ren et al.(2003)
REN G, WU P, PADUA D. A Preliminary Study on the Vectorization of Multimedia Applications for Multimedia Extensions. In 16th International Workshop of Languages and Compilers for Parallel Computing, 2003:420-435. 

Hennessy and Patterson(2003)
HENNESSY J, PATTERSON D. Computer Architecture – A Quantitative Approach. 4th., 2003:F45-F46 

TOP500.org()
TOP500ORG. November 2010 | TOP500 Supercomputing Sites. http://www.top500.org/lists/2010/11. 

Padua and Wolfe(1986)
PADUA D A, WOLFE M J. Advanced compiler optimizations for supercomputers. Commun. ACM, 1986, 29:1184-1201. 

Naishlos(2004)
NAISHLOS D. Autovectorization in GCC. GCC Developers’ Summit, 2004:105-118 

Allen and Johnson(1988)
ALLEN R, JOHNSON S. Compiling C for vectorization, parallelization, and inline expansion. Proceedings of the ACM SIGPLAN 1988 conference on Programming Language design and Implementation, 1988:241-249
 

自计算机诞生之日起, 性能一直是计算机技术发展的主线之一。 计算机的计算过程本质上是使用一个指令序列处理一个数据集合最终产生结果的过程。 Flynn根据指令和数据的对应关系将计算方式分为如表 1.1 所示的四类。

Table 1: Flynn的计算机分类学
单指令(Single Instruction) 多指令(Multiple Instruction)
单数据(Single Data) SISD MISD
多数据(Multiple Data) SIMD MIMD

SIMD技术是许多计算密集应用提升性能的关键。 上世纪80年代,向量处理器以其出色的并行处理能力,曾经在高性能计算领域广泛应用。 这种并行处理能力就来自SIMD技术。

近几年,由GPGPU和通用CPU组成的异构模式也在高性能计算领域大显身手。 GPGPU的SIMT模式,因为一次将一条指令作用于一个线程块中多个线程中的数据,因此本质上也是SIMD。 因为SIMT的计算模式使得多个线程可以并行执行,因此并行密度高。

在通用计算领域,随着数字多媒体技术的发展。 使用通用计算机对诸如文本、图像、视频、二维和三维图形之类的多媒体对象做捕捉、编辑、存储和转换之类的应用越来越多。 这类应用的突出特点是数据宽度小、并行度高、计算相对整齐。 本世纪初,许多通用微处理器针对这类应用的特点,开发了SIMD指令集扩展。

这种扩展中SIMD指令操作的数据集合都保存在一个寄存器中。 所以这种SIMD也被称作SWAR(SIMD Within A Register)。 其中的数据集合被称为SIMD数据或向量。 由于本文的工作基于通用CPU中的SIMD扩展,为了表述方便,如无特殊说明,文中的SIMD都指SWAR。

这种扩展仅使用芯片上少量的晶体管,就可以为标量CPU引入SIMD支持,提升芯片数据并行处理能力,所以得到了许多通用CPU厂商的亲睐。 表 2 为从惠普公司最早在通用CPU中引入SIMD指令至今,主流通用CPU中引入SIMD扩展的情况。 从表中可以看出,各个厂商推出的SIMD指令集从最初的仅仅支持整点操作发展到现在支持有符号/无符号整点、单精度和双精度浮点,支持的数据类型越来越丰富; 从开始时复用浮点寄存器到现在有专门的向量寄存器,SIMD指令越来越多,向量运算的支持越来越强大; 从开始时,仅支持64位向量数据,到现在可以支持256位的宽向量数据类型,支持的向量越来越宽。

Table 2: 各种微处理器上的SIMD扩展
供应商 SIMD扩展名称 年份 扩展指令 寄存器情况
HP MAX-1, MAX-2 94,95 9,8(int) INT 32x64b
SUN VIS 95 121(int) FP 32x64b
INTEL MMX 97 57(int) FP 8x64b
IBM AltiVec 98 162(int, fp) INT/FP 32x128b
Intel SSE 98 70(fp) INT/FP 8x128b
MIPS MIPS-3D 98 23(fp) FP 8x64b
AMD 3DNow! 99-10 45(fp) INT/FP 8x128b
Intel SSE2 01 144(int,fp) INT/FP 8x128b
Intel SSE3 04 13(fp) INT/FP 8x128b
ARM NEON 04 119(int,fp) INT/FP 32×64,16x128b
Intel SSSE3 05 32(int) INT/FP 8x128b
Intel SSE4 06 54(int,fp) INT/FP 8x128b
龙芯2E MMI 06 58(int) FP 32x64b
Intel, AMD AVX 08 12(fp) INT/FP 16x256b
龙芯3A MMI扩展 08 25(fp) FP 32x64b
 

CES展可谓如火如荼。各大厂商纷纷上台。先是出了Intel的Sandy Bridge, AMD Fusion的一系列终端产品,笔记本电脑、台式机、平板。然后MS坐不住了,说windows支持ARM了。NVIDIA也没闲着,说要进军ARM处理器。b

Sandy Bridge是Intel在此次CES上的重拳。各大评测也接踵而至。什么图形计算给力,什么视频编解码牛逼等等。这篇文章,《编译点滴》就来学习一下Sandy Bridge的新特性。 Continue reading »

2009-2011© 编译点滴 Suffusion theme by Sayontan Sinha

无觅相关文章插件,快速提升流量