异构计算-3-10x10异构基础:依据计算和存储器行为将应用程序分类

异构计算-3-10x10异构基础:根据计算和存储器行为将应用程序分类

摘要:

定制体系结构的性能和能效方面的优势是众所周知并得到广泛肯定的。但是到今天为止,还没有与之匹配的一步一步实现的开始。我们现在的研究是异质性架构实现的第一步,来平衡定制体系结构(eg. ASIC)和通用体系结构(eg. GPP)。

       我们从5个主流的基准测试程序集,还有一些其它的程序里面挑出了34个程序进行分析,这34个程序组成一个集合,这个集合在操作和数据类型方面有精确地循环统计,并包含3种存储器行为。对于定制体系结构来说,每个组合的计算特点就是一种实现。按操作和数据类型分析来看,可产生25个多重循环组合,占了近90%的情况。按存储器行为来看,和上面差不多。这些组合可以分开,也可以放到一块,就跟10x10那篇论文里的思路似的。,这些定制化可以变为系统化。这会影响对加速器,加速器,加速器范围,以及加速器整体(SoC)的选择。我们挑了几个组合,举了几个例子来展示,他们是提高性能和能耗的。事实证明,确实有几个组合,并且这些组合包含了很多应用领域。我们还展示了一点,这些组合是合理的,相互独立的,比较稳定的,此外,这些组合能很好的代表通用任务。

 

1, 简介

现在的计算机体系结构的发展受两个物理现象的影响很大。第一,散热和电池寿命限制了芯片的功耗要求。第二,晶体管尺寸上的变化,就允许更多的结构特性加到芯片面积里,并且信号更快。但是,由于晶体管的翻转功耗降低了,就不需要在同一时刻翻转所有的晶体管。总之,单芯片的速度再也高不了多少了。随着要增加并行处理的效能,更低的时钟率,要提高计算性能就需要一种新的重要的架构方法。这种方法是低时钟速度下通过多核扩展的主流处理器的基础。这种方法会转移责任,就是让软件开发人员充分利用多核处理器的并行机制来提高性能。另外一种方法实现异质性的实现,这需要仔细设计,让指令集和软件兼容。一种更好的异质性就是独立的并且和GPU整合在一起,在一个大的级别上(1001000)增加并行性,将来不仅需要新的指令级,还对编程有大的挑战,例如需要招新的数据结构人员和算法人员,来充分体现数据并行的好处。在很多应用程序里并没有这个并行性。

       从另外一个角度看,现在的微处理器的架构对每个特殊的程序没有影响,他们之所以能够执行,是因为他们的统一的数据结构,这个结构是在硬件比较稀少的时间逐渐形成的。有一个事实大家都知道,在嵌入式领域,加速器显现出很大优势。但是,在大部分的任务里(通用的),如何使定制化既能提高效能还要有高性能显得很重要,这是还没有研究解决的挑战。图1,展示了一种体系结构框架,可以解决这个挑战。这些结构产生一个主要问题,就是可编程性,还有就是如何获得与通用架构相当的性能。

 

       同时,异质性体系结构是有希望的,他们呈现出3个比较大的挑战。第一,为了获得跟传统处理性相同的性能,异质性架构必须覆盖计算程序的大范围。为这么大范围的应用进行定制,并且还要满足功率和性能的好处,这是个未解决的挑战,别忘了,计算实践也在持续快速的发展。在硬件设计高度优化,芯片空间异常紧凑,客户要求很广的前提下,显得异常艰难。第二,众多的硬件加速器要想获得和通用处理器同样的性能,就需要在一个新的层次上对他们进行协调和管理。但是,比如,同步和数据共享的效率优势两个面临的难题。第三,多个组合在一起的定制的异质性体系结构也会有一个严重的可编程性的挑战。既要对单个加速器,还要为多个加速器,进行选择和定制,这方面也缺乏经验。嵌入式加速器和GPU的最新编程技术也包含很多问题,手动编码的,实验性的,还有错误。对于定制化的通用加速器,这个问题就显得更困难,因为没有一个单独的目标体系结构给程序员。

       然而,很多研究机构和商业产品已经开始关注异质性体系结构,大部分的这些实践集中在一下角度,在某个较窄的应用领域,或者边缘产品,或者作为SoC的附属加速器,来探索实现定制化的可行性。但是这只是权宜之计,大部分都不能解决通用体系结构和定制体系结构的平衡性问题。为了很好的解决这些问题,我们已经弄了一个强大的应用程序,编码工具,和体系结构,这个项目就叫10x10。这个项目会提供一个系统的框架,来分析workload,把workload分成独立的组合,以达到最佳的效能和性能。然后用这个组合来设计体系结构和进行编程方面的研究工作。

       需要在这篇文章中特别提到的是,我们深入分析了很多workloads,然后进行分类,哪些可以很好的支持异质性,分类时,要同时考虑性能方面的优势和应用空间的广泛性(很多其他体系结构会考虑)。我们研究了很多基准测试程序和应用程序的内核程序的计算属性和存储器行为属性。我们使用了一下程序,PARSECUHPC基准程序,嵌入式基准测试程序,生物信息学基准测试程序,等等,然后分析他们重要循环的部分。我们应用体系结构相关的统计学的分类方法,来给这些循环分成自然的类别。我们这种分类方法可以避免特殊化造成的问题。

       一般,在做异质性体系结构时,这些分析不包括一些紧耦合的类别。这些分类基于操作和存储器类型(计算数据结构),大概分了25类,包括差不多90%的应用领域。基于数据访问属性的分类和上面的分类产生的情况差不多。然而,有趣的是,这两类又截然不同,这就表明,存储系统单独定制很重要。

       用这种分类方法的架构师可以变化分类方法,为类别的耦合度和数量重新定义。使性能最好。我们评估我们的分类方法,发现他有良好的覆盖率,又很稳定,这些类别在应用集的细节上是独立的,又包含重要的类别。

       本文主要贡献:

34个应用程序的深入研究,是异质性和通用性之间平衡体系结构的基础。

》数量上,比较少的类别覆盖了大部分的应用领域。耦合度上,组合在一起的循环显现出类似的特征。独立性上,类别间重叠很少。

》基于计算数据结构的类别和应用领域不一致,但是通过10x10的方法,可以从很多不同的基准测试程序里可以获得和通用体系结构相当的性能。

》基于这些分类,获得特殊设计的加速器的架构见解。

》对我们这个分类方法的评价,可见,这些类别的覆盖性很好(能代表通用的workloads),稳定性很好(我们已经找到了重要的类别)。

》我们所用的方法可以作为系统分析和异质性设计的基础。方法包括,确定应用程序选择范围,分类特征,还有一个大概的评估。

       第二章,描述workloads和分析方法。第三章,讨论这些分类,包括体系结构定制的可行性,第四章,评估这些分类的覆盖率和稳定性。第五章,结果和相关工作。第六章,本文总结和下一步工作。

 

2workloads和方法

       本章,我们描述我们实验性的框架。2.1描述我们将进行分类的基准测试程序,还有就是分类时测量类别特征的工具。2.2描述分类方法,这是本文重点。

 

1:通用workload

                 

名称

 
 

隶属于

 
 

领域

 
 

功能

 
 

输入

 
 

 

 
 

 

 
 

 

 
 

 

 
 

 

 

 

2:分类特征:

                     

属性

 
 

 
 

数据类型

 
 

{<1B,1,2,4,8,16,32,64,>64B }

 
 

操作

 
 

{整型,浮点}X{二进制,逻辑,转换,单目}

 

U {调用,返回,条件转移,非条件转移,NOP}

 
 

存储器操作

 
 

{load,store} X {定点,浮点}

 
 

存储器步幅(stride)

 
 

{0,1,2,。。。,10,>10}

 
 

指令集/数据 宽度

 
 

{原始指令流大小,压缩指令流大小,原始数据流大小,压缩数据流大小}

 

 

 

2.1基准测试程序和工具

       为了得到一个广泛的workload,可以支持通用计算,我们找了一大堆程序。由于有些针对某个特殊的产品或者特殊的应用领域已经特殊处理了,要想有较大的覆盖率就很困难。所以,我们的这个workload包括一个基准测试程序的集合,这会增加覆盖率。考虑到要广泛覆盖PC和服务器领域,我们包含了PARSEC基准测试程序集。还包含了UHPC,这个很厉害哦(兆操作单芯片系统,千兆操作单齿系统,exascale数据中心系统)。最后,我们还包含了生物信息学的基准测试程序,为了反映数据密集型计算的应用。这些基准测试程序和数据见表1

       为了分析程序的静态和动态属性,我们用Pin[23],一个动态二进制分析工具。我们用Pin找出循环,分析循环,然后整理动态数据统计。

 

2.2 实验性的方法

       程序特征。为了分析,我们把注意力集中在程序的内部循环上,因为这一部分耗费的执行时间最多,所以呢,这就是异质特殊化的天然目标(natural target)。每个循环执行100次(上限),然后搜集能代表计算和存储器行为的动态的统计数据。

       由于我们的目的是,为体系结构定制化提供循环分类(loop clusters),我们搜集定制和提高性能,效能对应关系。找到一个精确地对应关系很困难,况且也超出了本文的范围。对动态循环统计,我们选择4个主要的属性:(见表24个属性)。我们分开研究这4个属性,因为这4个属性提供了一个最有化的方案,并且他们之间相互独立。架构师可以针对用户来优化其中的一些属性或者所有属性。

       首先,计算操作和操作类型/大小,这个属性是为了采集数据链路所需条件。指令用到的数据类型,操作执行的算术和逻辑运算,以及指令的控制流,共同反映了ALU需要的类型,也反映了指令间的线路和贮存情况。程序的这些统计数据见表2。还有好多组合情况,我们就省略了。

       存储器访问情况的统计数据反映了存储器的访问类型和数据类型。总之,这个统计数据是存储器操作和数据类型两个属性的综合反映,见表2。如果一个代码是loadstore方面的,那么这些统计数据显示了相关的数据类型。

       关于存储器步幅(访问时的步长,即相邻两次访问的元素的地址间隔的统计数据显示了访问类型,访问类型可以清楚标示存储器的层次结构和管理定制因素。存储器步幅数据是存储器步幅和数据类型的综合结果(见表2)。步幅长度决定于存储器访问大小。例如,一个数据类型为1B2大小的步幅,就表示,一个存储器指令,这个指令访问1个字节,并且步幅是2个字节。

参考链接:寄存器山。

http://zh.wikipedia.org/wiki/%E5%AD%98%E5%82%A8%E5%99%A8%E5%B1%B1

       最后,我们用存储器传输统计数据(见表2中的指令/数据宽度属性)。存储器传输对加速器来说很重要,因为数据传输经常是高效利用的限制因素。此外我们想减弱x86二进制指令集的程序在我们试验中的结果中的影响。典型的变化包括,增加存储器操作(根据小寄存器堆的大小),增加控制指令。为了表示不同的方案,充分利用相同数据(寄存器溢出传输),指令重复执行,等等,对于每个循环,我们采集原始/压缩的指令流和数据流。除了高速缓存之外,这里的可压缩率服从硬件数据压缩。例如,如果数据流压缩率高,表明寄存器间的同样数据的移动多,存储器层次简单。所以更需要更多的寄存器。同样,如果指令流压缩率高,循环的大部分时间在执行指令,表明循环内的路径少,就不需要更多的转移逻辑。

       分类方法。对于每个程序的动态统计数据,我们给每个循环弄了一个特征向量。每个特征向量代表一个相对比例。我们用向量空间余弦相似度来计算它们之间的相似度。余弦相似度从010代表不相似,1代表完全相似。设定一个余弦相似度的阈值,把满足阈值的循环放到一起,组成一类。在一定程度上,我们弄了一张图,这张图包含两个顶点,以及这两个顶点的边,这两个顶点的余弦相似度一样。分类,就是把这张图分解成小的集团。我们的目标是弄一些分类,这些分类能给计算机结构有一些深层的建议,并且能覆盖大部分的通用计算领域。然而,这个目标很复杂,要去做很多平衡。门限太高,太低都不行。因此,我们弄了5个门限(0.90.8, 0.7, 0.6, 0.5),来产生有意义的分类。图2,展示了不同门限下种类的数目。正如所想的那样,门限越高,类别数目越多。我们建议选择0.7,作为门限。

 

3, 分类

对于程序里的循环,我们用第二章中的方法,既用那4个属性。表3是分类的结果。这个结果会给体系结构的定制提供一些参考。3.13.2中我们看到,分类越多,对动态计算的采集数据越多。这就意味着,无论是单独的还是分类的组合都可能大幅提升总体性能。第二点,这些分类的独立性很好(不同分类里的循环有不同的特点),这表明,大的特殊化定制是可行的。我们根据平均分类距离,通过展示分类向量的平均值,来量化描述他们之间的不一样的程度。最后,针对每个属性,我们仔细研究其中4个统计最多的分类,然后找到影响体系结构设计的关键因素。我们通过集中不同的方式讨论这些分类可能会暴露出体系结构的一些信息。

3.1 根据操作和数据类型进行分类(59类)

3.2 根据存储器分类

       访问和数据类型进行分类(38类)

       存储器步长分类(60类)

       存储器传输分类(6类)

4, 分类评估

跟想象的差不多,挺好的。覆盖率啊,稳定性啊,都挺好的(80%)。

5,讨论和相关工作

Workload。已经有很多通用应用程序的workload研发出来了,并且经过分析了,比如,SPECHPCCPARSEC。这些一般用来调整现有的计算机设计,或是通过量化的方法来用评估修改体系结构会带来多少性能上的提升。最近,基准程序已经用来评估CPU-GPU体系结构的性能,但是编写程序的不一致迫使评估效果有很大差别。但是我们不同,我们以一个计算标准开始,找出特征,进行分析,对异质性进行系统研究,包括很多异质性引擎,改变通用和定制之间的等级(平衡点)。这些工作给为微处理器添加额外的加速器提供了可行性,或者改变Soc的设计理念,或者扩大加速器的范围。

       实现的异质性。体系结构的研究显示,ISA的异质性使用可以提高效能和性能。这种方法的主要优势就是保留了软件的兼容性,所以呢,具有可编程行。在【22】提到,这能有很大的性能提升(3倍)。还有最近的研究【37】,提升程序的并行性的级别(有效利用VLIW),有更多复杂依赖的程序,会动态的进行二进制的翻译,以针对不同的核。还有【34】,根据操作类型将应用程序进行分类:整型和浮点。在运行过程中,运用动态核调整技术以适应应用程序。

ISA和实现的异质性。如果用指令集异质性和实现异质性,就能提高近10倍的性能。甚至更多。例如,如果打破传统的基于独立操作和单存储器的‘通用寄存器’架构,包含很多SoC加速器,H264,或者专门的嵌入式应用,就可能提高100倍的性能。另外一个就是集成GPU,或者其它的加速器。还有就是集成加速器和IP,作为硬件-软件模块。用IP能避免每次都重新设计。

为了发掘通用系统中加速器的潜力,体系结构领域面临并行性的挑战。曾经,用90/10理论进行优化,提高性能。对于不多的新特性,就用二进制翻译的方法。但是这一套随着更深的ISA和体系结构的定制化,就行不通了,这正是下面要说的。需要在通用和定制之间找一个平衡,这就是我们工作的出发点之所在,也是我们弄的分类和分类方法的价值所在。

        每个类别跟每类应用有关,分析应用程序,然后搞一个超级指令集。例如,conservation cores,辨别应用程序里面的关键循环,重建超级指令来高效的实现循环的功能。第二,对准特定核,也是创建超级指令来完成功能。性能能提升,挑战也很大。DySer方法具有重塑性,缓解了某些影响,但是需要一个新的编程模型(代码+逻辑都可以配置)。

10x10的方法跟这些研究不同,我们为体系结构,分析应用程序,并进行归类,此外,我们还调差这些应用程序是不是好,确定到底几个分类就有很好的覆盖率。因此,这是定制化体系结构的研究基础,可以发现是不是可行,以及有哪些限制。还有,10x10包括了芯片设计的所有方面:计算逻辑,存储器,以及他们之间的联系。

                   FPGA。大家都知道FPGA有好多优势。但是FPGA的速度和功耗有限,并且应用程序开发也很困难。

 

 

译者注:

异构计算-3-10x10异构基础:依据计算和存储器行为将应用程序分类

作者:AndrewA. Chien
芝加哥大学计算技术系副教授,
Intel企业技术事业部副总裁
Intel研究部门总监
Office:Ryerson 257C (at West end)
Phone:773-834-0117 (pls email)
项目:
10x10Taming Heterogeneity for General Purpose Computing
EASE:Easy Exabyte Computing EB级计算)
GlobalView Resilience (GVR)
Blockus

原文:

http://www.cs.uchicago.edu/research/publications/techreports

 

1楼aaalllggg3天前 21:45
希望停留于理论的东东早日出世!