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

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

Continue reading »

 

自计算机诞生之日起, 性能一直是计算机技术发展的主线之一。 计算机的计算过程本质上是使用一个指令序列处理一个数据集合最终产生结果的过程。 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 »

 

超线程(hyperthreading)是Intel推的一种并发线程技术,在Intel的Atom,Core i3, Core I5, 安腾等主流芯片上都已经实现。你可以把它看成一种虚拟化,即把一个物理CPU,虚拟成两个逻辑CPU,这两个逻辑CPU共用相同的运算核心,比如寄存器堆,加法器,浮点运算,向量运算部件之类的都共用。 Continue reading »

 

上篇文章前瞻-主流处理器中的数据并行支持(SIMD)>和《前瞻-拿起SIMD的武器I》分别介绍了当今主流CPU中的SIMD扩展 ,以及前人是如何利用SIMD来做优化的,本文<前瞻-拿起SIMD的武器II>将探讨如何使用CPU的向量指令为程序做优化

如何实现?

编程环境

在现在CPU设计中都加入SIMD扩展并不是解决应用性能问题的好方法。如果没有很好的利用途径,再强大的SIMD扩展指令集都是徒劳。接下来,我们从编译器技术和编程方法论上探讨如何使用SIMD指令来实现应用加速。 Continue reading »

 

上篇文章前瞻-主流处理器中的数据并行支持(SIMD)》 介绍了当今主流CPU中的SIMD扩展,本文将介绍前人是物和利用SIMD来做优化的,下篇<前瞻-拿起SIMD的武器II>将探讨如何使用CPU的向量指令为程序做优化

已有在SIMD上的优化工作:

正如之前提到的,SIMD对具有以下特性的程序性能提升明显:天然数据并行,访存模式重复、在局部数据上重复操作、控制流数据无关。很多应用有这方面的特性,并能通过使用SIMD扩展提高性能,但实际仅有小部分从中获益,接下来将介绍在单核处理器上,利用Intel的SIMD扩展针对某些应用提升性能的研究,如多媒体,数据安全,数据库和一些科学计算应用。

多媒体处理

多媒体处理需要软件和硬件的很多支持。如MPEG-1,MPEG-2,MPEG-4,MPEG-7,H.263,JPEG2000等需要实时做复杂的媒体处理.3D图像和立体视频处理都需要更强劲的实时处理.因为各种媒体都需要不同的处理方式,技术支持、算法和硬件,因此针对他们的SIMD扩展改进也很不同。 Continue reading »

 

引言部分:

多媒体处理算法应用在很多媒体处理环境中,如对文本,手写数据,2D/3D图形和音频对象的捕捉、制造、存储和传输等。过去 都是使用昂贵的多媒体处理硬件协同工作来加速。现在,通用处理器通过在体系结构上增加媒体处理支持来减少使用协同处理器分配和返回带来的开销。在通用处理 器上一个基本的操作能同时作用多个元素的支持成为SIMD并行处理。通过SIMD扩展,通用护理器通过捕捉多媒体算法中潜在的并行特性来加速应用。

自 Intel在Pentium II和Pentium 处理器引入了MMX技术以来,IA-32架构已经引入了许多SIMD扩展,分别是:MMX,流SIMD扩展(SSE), 流SIMD扩展(SSE2)和流SIMD扩展(SSE3),SSSE3,SSE4和高级向量扩展(AVX).这些扩展都提供了一组指令,能够为封装好的整点或浮点数据提供SIMD类型的操作。其他结构也 有自己的SIMD扩展。如AMD的3DNow!,Cell和PowerPC的AltiVec等等。 Continue reading »
 

因为之前的两篇博文前瞻-全时优化和LLVM-1前瞻-全时优化和LLVM-2都是基于Chris Lattner 2004年发表在CGO的文章写的。所以需要介绍一下LLVM从2004到2010这六年的变化,LLVM的开发社区很活跃。

从2004年三月到2010年4月,LLVM共发布了1.2-1.9,2.0-2.7,16个版本,至少每年发布两个版本。详细的历史发布版本和release都能从这里找到。

Continue reading »

 

2010年美国高校计算机系排行榜出炉–《U.S. News》公布了新一期美国大学计算机系实力排名。前四:卡内基-梅隆大学(CMU)、麻省理工学院(MIT)、斯坦福大学(Stanford U)和加州大学伯克利分校(UC Berkely).

前四名具体排名


Continue reading »

 

距离GCC 4.4的发布一年之久,GNU终于发布GCC 4.5了。新版本带来了很多新特性,包括使用MPC库在编译时完成复杂的算术计算,C++0x支持增强,使用部分Graphite完成自动并行化,支持新的ARM处理器,Intel Atom优化和调优支持,以及AMD Orochi优化支持等。今年稍晚发布的Fedora 14,Ubuntu 10.10,OpenSUSE 11.3,都将有GCC4.5,估计Gentoo马上就会有支持了,磨拳擦掌准备试用喽:)详细支持如下:

总体说明:

  • 编译GCC需要MPC库
  • 故纸堆里的旧系统和很久没有更新和测试的系统在GCC4.5中被标记为待放弃,包括IRIX, Solaris 7, Tru64 UNIX V5.1.
  • GCC4.4中标记为待放弃的支持被放弃
  • 移除Itanium 1变种支持,但Itanium2编译的程序能在Itanium1上正确执行
  • GCC生成的调试信息包括了更多DWARF 3的特性,甚至包含了DWARF4的一些特性.GDB7.0之前的版本将无法使用这些特性.所以调试GCC4.5编译的程序需要使用GDB7.0及以上版本.也可以使用选项 -gdwarf-s  -gstrict-dwarf来禁止生成DWARF4信息,或者-gdwarf-2 -gstrict-dwarf让GCC严格执行DWARF2标准.
  • X86上,浮点运算在GCC4.5上使用严格C99语法编译时,可能会运行变慢。这是为了和标准一致,可以通过选项-fexcess-precision=fast来避免严格的标准限制。
  • noinline属性不再能阻止整个函数拷贝。但可以通过新的属性noclone做到。

Continue reading »

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

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