Category Archives: 后端优化与处理器

介绍处理器新闻,编译器后端优化技术

通用微处理中的SIMD指令扩展

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

Posted in CPU, 后端优化与处理器, 编译技术 | Tagged , , , | 2 Comments

超线程技术适合什么样的程序?

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

Posted in 后端优化与处理器, 编译技术 | Tagged , , , , | 5 Comments

好消息:GodSon-T第一款芯片已经流片归来,正在测试

具体详情不了解,只知道GodSon-T众核研究小组的第一款16核芯片已经流片归来,正在做测试。值得庆贺! 消息可靠,范东睿博士亲口说的。整个课题组培养凝聚力的方式很值得学习,他们每年有一款纪念T恤,印有当年的热门词和他们对GodSon-T的期望。 中国的计算机一定会更光明!

Posted in 后端优化与处理器, 编译技术 | Tagged , | 11 Comments

自动向量化的研究现状

自动向量化是利用CPU SIMD支持最理想的形式,编译器根据程序特点,通过循环展开、依赖分析、指令重排等方式,充分挖掘程序中的并行性, 将可以并行化的部分合成CPU支持的向量指令,彻底解放程序员。自动向量化自SIMD扩展诞生之日起,就一直是学术界研究的热点问题。

Posted in 后端优化与处理器, 编译技术 | Tagged , | Leave a comment

窥孔优化

虽然很多产品级的编译器在经过仔细的指令选择和寄存器分配后能产生不错的汇编代码。但还有一种基于汇编代码的优化方式,这种方式利用目标CPU能提供的指令和特性,能很好的提升性能。窥孔优化就是此类优化中最典型的。 窥孔优化,顾名思义,是一种很局部的优化方式,编译器仅仅在一个基本块或者多个基本块中,针对已经生成的代码,结合CPU自己指令的特点,通过一些认为可能带来性能提升的转换规则,或者通过整体的分析,通过指令转换,提升代码性能。别看这些代码转换很局部,很小,但可能会带来很大的性能提升。

Posted in 后端优化与处理器, 编译技术 | Tagged , , | Leave a comment

GCC即将支持龙芯3A

http://gcc.gnu.org/ml/gcc/2010-07/msg00196.html Sun mingming 在GCCmaillist里发邮件,想要提交有关龙芯3A的patch。这样以后龙芯3A也可以直接用GCC了!

Posted in 后端优化与处理器, 编译技术 | Tagged , , | 3 Comments

CUDA编程模型概述

CUDA中的C语言:对C语言子集的扩展,GPU代码支持C++模板。 CUDA的目标:扩展代码支持100个核心和1000个并行线程 、协助异构计算:CPU+GPU CUDA定义了编程模型和存储模型 应用中划分出的并行部分作为kernel在GPU上执行,一个线程执行一个kernel,多个线程可同时执行一个kernel。

Posted in 后端优化与处理器, 编程模型, 编译技术 | Tagged , , | Leave a comment

向量处理器VS标量处理器中的向量扩展

本博曾经回顾过《主流处理器中的数据并行支持(SIMD)》,也曾经写文介绍如何使用SIMD编程《前瞻-拿起SIMD的武器I》和《前瞻-拿起SIMD的武器II》。这篇文章带大家了解一下向量处理器及其和通用处理器中向量扩展的区别。

Posted in 后端优化与处理器, 编译技术 | Tagged , , | Leave a comment

移植软件到64位系统

Linux是首个能用在64位处理器上的跨平台操作系统。64位系统在服务器和桌面领域非常常见。所以对于开发者来讲,如何让自己的软件能在32位、64位机上都能工作,是个需要重点考虑的问题。Linux系统使用LP64标准,即,除了指针和long整型是64位外,普通整型仍未32位。因此,对于C语言程序,要重点检查。 64位系统有啥好处,为啥一定要移植?32位系统在大型应用上,给开发者带来和很多挑战,如数据库。还有那些开发者需要尽可能从硬件中获得加速和好处的程序。另外,科学计算通常需要浮点算术,一些财经领域的计算要求比普通浮点计算更高的精确度,更小的置信区间。而64位机恰好能满足这些需求。另外一方面,32位的指针只能标示4G的虚拟存储空间,虽然现在Linux内核能支持大于4G的内存识别,但实际上每个程序可用的内存空间仍然只有4G,若想突破这个局限,要么增加软件的复杂度,性能下降,要么采用64位系统。

Posted in 后端优化与处理器, 编译技术 | Tagged , , , | Leave a comment

存储层次结构、cache、编译

先给出计算机存储层次结构一组数据: 存储层级 1 2 3 4 名称 寄存器 高速缓存(cache) 主存 硬盘 一般容量 <1KB <16M <512GB >1TB 实现技术 CMOS, CMOS/SRAM CMOS/DRAM 磁盘 访问时间(ns) 0.25-0.5 5-25 50-250 5000000 带宽 50000-500000 5000-20000 2500-10000 50-500 控制方式 编译器 硬件 操作系统 操作系统 备份方式 高速缓存 主存 硬盘 … Continue reading

Posted in 后端优化与处理器, 编译技术 | Tagged , , , , , , | 7 Comments