安盛半导体
网站首页 |公司介绍 |库存中心 |品牌中心 |新闻资讯 |在线询价 |联系我们
IC型号查找: 
安盛半导体
IC库存索引:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9
最新IC库存  
新闻资讯
当前位置:首页 > 新闻资讯  


中间语言称为HSAIL的帮助,以解决一些与加速器编程的挑战
发布时间:2013/9/2 10:25:17

 电源效率已成为现代硅芯片的主要设计目标。如GPU的加速器有知名的优点,在计算密度每瓦每平方毫米-注意,例如,系统在顶部的最新的Green500(http://www.green500.org/)和500强(现在基于异构设计http://www.top500.org/)列表。    然而,这些系统历来是困难的方案,由于两方面的挑战。首先,许多加速器支持唯一的专用地址空间,需要繁琐的复制操作,防止加速器与主机处理器上使用基于指针的数据结构。其次,加速器编程历来需要一个专门的语言以及OpenCL™CUDA™等。这些专门的一些语言只支持一个单一的硬件供应商,这进一步限制了他们采用, 中间语言称为HSAIL的帮助解决的一些挑战。图其中的好处HSAIL是多个供应商的产品之间的可移植性。编译可以放心,产生HSAIL的的产生的代码将能够运行在多种目标平台。HSAIL还提供了一个有效率的各种各样的硬件上运行的并行中间语言现有的编程语言。这提供了底层的基础设施和异构计算的好处带给现有的,流行的编程模型如Java™,OpenMP的™,Ç+ +,和更多。HSAIL,最近推出了异构系统架构(HSA)基金会,这是创建使这些固有的优势加速器主流程序员-他们已经知道的语言,并与他们所期望的功能和工具。HSA基金会目前正在规范,将规范的系统架构的异构设备。例如,HSA的系统架构,指定系统中的所有设备访问一个共享的,一致的内存堆-这允许设备使用指针,并阐述了繁琐的副本的第一个挑战。 版本0.95的HSAIL规范(正式的“ HSA程序员参考手册:虚拟ISA和编程模型,编译器作者指南,对象格式(BRIG)“)近日公开发布,并可以得到在此链接:HTTP :/ / / hsafoundation.com。本文介绍了人血清白蛋白的设计目标,介绍了的执行模型HSAIL和指令集(如明确的细节在HSAIL规范),并给出了一个例子的HSAIL在行动。什么是HSAIL? HSAIL是并行的的HSA中间语言计算。HSAIL通常是由一个高层次的编译器-输入是一种编程语言,如Java或并行C + +中,输出包括HSAIL为并行代码,地区代码以及主机的CPU处理器。HSAIL定义了二进制格式(称为“BRIG”),其目的是“海运集装箱”为HSAIL应用程序二进制文件将包括嵌入式BRIG。在运行时,工具被称为“终结”嵌入式BRIG转换到目标指令集的异构设备。根据不同的使用模式,终 ​​结也可以运行在编译时或安装时间。 其中的好处HSAIL是其跨多个供应商产品的便携性。编译可以放心,产生HSAIL的的产生的代码将能够运行在多种目标平台。同样,基于HSAIL的工具(调试器,分析器等),还支持众多的目标平台。HSA是一个开放的基础,具有广泛的行业支持(创始会员包括AMD,ARM,想象,联发科,高通,三星,德州仪器)。HSAIL是一个稳定的格式,这是向前兼容未来的硬件版本(包含BRIG因此应用程序将继续运行)。我们预计将随着HSAIL主要由工作量分析增加了新的业务,但在控制步伐,大约每隔几年(类似于现代CPU架构)。 HSAIL是一个低级别的中间语言,仅高于机器指令集。HSAIL是专为快速和强大的编译-机ISA从HSAIL转换翻译更比一个复杂的编译器优化。这个简单的最后一步的几率降低错误蔓延到设计,也降低性能的变化,由于变化的终结。相反,最优化的目的是做高层次的编译器,其中有一个较大的时间预算和更多的范围,以实现复杂的优化。HSAIL提供一个固定大小的寄存器文件,所以也高级别的编译器进行寄存器分配,这是传统的汇编程序的更复杂和耗时的部分之一。HSAIL执行模型如上所述,设计用于平行HSAIL执行。HSAIL本身指定一个单一的“工作项目”执行的指令流。并行任务调度时,调度命令指定应执行(“网格”维度)的工作项的数量,每个工作项目,然后在网格上的单点。例如,可能会对电网1920×1080的高清晰度视频的帧,每个工作项会工作在帧中的一个像素。 
















































图1:一个HSA电网及其工作组和工作件


图2示出了不同层次的HSAIL执行模型。这种模式将可能是熟悉的图形或GPU计算的专家。首先,请注意该网格由一个工作项。因此,每个工作项目都有一个唯一的标识符(指定的X,Y,Z坐标)。HSAIL包含指令,使每个工作项目可以判断它是(其独特的坐标),从而哪一部分的工作项目上操作的数据    网格可以有1,2,或3维-这里的图片显示一个三维网格,但是从上段所述视频帧的例子,使用一个二维网格, 网格被划分为一个或多个工作组。在同一工作组的工作项目可以有效地沟通和相互同步,通过“组”记忆。工作组可以从机器中提取的峰值性能,通过使用组内存提供机会。最后的工作组,在每个维度上的网格可能只部分填充,网格大小为开发者提供了一定的灵活性。  眼波是一种硬件的概念,指示一起调度工作项的数目。不同的硬件可能有不同的波阵面宽度,因而大部分程序都不需要知道眼波宽度(虽然HSAIL不支持这个勇敢的专家)。也HSAIL提供跨车道与结果相结合的操作,从多个工作项目的工作组, 当一个网格执行,工作组被分配到目标器件中的一个或多个计算单元。   的网格总是安排在工作组大小的粒度-因此,工作组封装一块并行工作,性能自然尺度的高端设备,与更多的计算单元。工作项在HSA的执行模型目标为程序员提供了一个熟悉的,因为每个工作项代表一个单一的执行线程-因此,HSAIL代码看起来像一个顺序程序。  平行电网和工作组(可指定如何许多工作运行的项目),而不是里面的HSAIL代码本身。这是一个有力的杠杆,使模型并行硬件在很宽的范围内有不同的矢量的计算单元的宽度和数字便携式。对比这与CPU模型往往需要表达线程并行(即CPU内核之间)和的 SIMD并行(每个核心)使用不同的机制。此外,SIMD并行往往是硬编码算法和难以扩展SIMD宽度增加。HSAIL写作HSAIL 指令集是类似于在汇编语言编写的RISC CPU:语言使用负载/存储架构,支持根本的整数和浮点操作,树枝,原子操作,多媒体业务,并使用一个固定大小的游泳池寄存器。HSAIL具有运行现有的编程模型如的OpenCL™和Ç+ + AMP的功能,而且还增加了功能,它被设计支持其中有传统的目标如Java和C的只有CPU的编程模型+ +。  因此HSAIL包括支持函数指针,异常及调试信息。此外,HSAIL定义组记忆,层次同步原语(例如,工作组级和全球同步),波前应该看起来很熟悉的程序员GPU计算设备和可用于实现峰值性能。HSAIL规范提供了一套丰富可在HSAIL经营较详细的解释 的一个关键的设计点HSAIL是使用一个固定大小的寄存器池。有效地移动的高级别的编译器的寄存器分配,并允许终结跑得更快,用更少的复杂性。  HSAIL提供了四个班的寄存器: “C”:1位控制寄存器。这些都是用来存储输出比较运算。 •“S”:32位寄存器,可以存储一个32位的整数,单精度浮点值。 “D”:64位寄存器,可以存储无论是64位的整数或双精度浮点值。•“Q”:128位寄存器,存储填充值。一些包装格式都支持。每个包装的元件的大小从8位到16位的范围内。 HSAIL可提供高达8“C”的寄存器。“S”,“D”和“Q”寄存器共享一个单一的资源池可支持多达128的“S”寄存器。每个D寄存器需要2个寄存器插槽,,每个Q寄存器需要4个插槽。高层次的编译必须确保“1 * S + 2 * D + 4 * Q”小于128在生成的HSAIL代码。 如果高层次的编译器使用所有可用的寄存器,它会利用“溢出HSAIL段洗牌现场值满分寄存器。如果目标机器有更多可用的寄存器比128终结漏油地点转换到硬件寄存器。HSAIL机模型和配置文件 HSAIL的是旨在支持广泛的设备,从一个大铁在计算农场在你的一个小的小工具手。为了确保能够有效地实现对多个细分市场HSAIL,HSA基金会推出的概念机模型和型材。机器模型是数据指针的大小;型材重点的功能和精度的要求。 太多的机器型号和配置文件会产生碎片的生态系统,使其难以发展和壮大的基础设施和社会。出于这个原因,也有目前只有两台机器型号:小,大的64位地址空间为32位地址。同样,也有只有两个配置文件,基地和完整的 一个进程执行一个32位的地址空间大小需要HSAIL的代码使用小型机器模型。进程执行一个64位的地址空间需要HSAIL的代码使用大机器型号。小模型是适用于移动应用为主今天的32位,或将传统PC应用程序的某些部分重写数据并行内核。大模型是适合现代PC上运行的应用程序为主的64位PC环境。随着移动应用处理器发展到64位,采用大模型可能在移动领域。HSAIL型材保证实现支持所需的功能集,并满足一个给定的程序限制。严格定义设置的HSAIL曲线要求提供可移植性保证用户存在一定程度的支持。基本轮廓表示,实现目标更小的系统,在不牺牲性能的情况下提供更好的电源效率。精密可能减少在此配置文件,提高电源效率。完整档案表明,针对更大的系统的实施将有硬件,可以在不牺牲性能的情况下保证较高精度的结果。 高调遵循IEEE-754浮点运算规则。值得注意的是,这需要精确计算的结果,此外,减法,乘法,除法和平方根操作。此外,完整的个人资料支持所有的IEEE-754舍入模式。   基本轮廓放松除法和平方根的精度要求,只需要往返到最接近 以下规则适用于型材: •一个终结可以选择支持任或两个配置文件, 一个配置文件适用到整个HSAIL程序。 •应用程序,不允许混合配置文件。 无论是大型和小型机器型号都支持。HSAIL例图3显示了一个简单的代码示例写在每个配置文件中Java和图4示出所生成的输入的Java HSAIL代码。该代码将遍历所有球员和球队的成绩计算的百分比,实现每个球员。在这个例子中的一个关键点是,这里是输入语言而不是一个特定的语言,如计算的OpenCL™:标准Java8()。该代码是在标准λ/流API(即将推出的Java 8标准的一部分),并使用,使JVM编译生成HSAIL“苏门答腊”。对于使用JVM上的编译器的更多信息在这个例子中看到(http://openjdk.java.net/projects/sumatra/)和格拉尔JIT编译器(http://openjdk.java.net/projects/graal/)。 类播放器{        私人车队团队;        私人诠释得分;        私人持股pctOfTeamScores;        公共的团队getTeam(){退队;} 公共getScores(){返回分数;} 公共的无效setPctOfTeamScores(INT%){pctOfTeamScores =%;} }; / /“团队”类未显示 / /假设“allPlayers”的是一个初始化的数组玩家.. 流<Player>Ş: S = Arrays.stream(allPlayers)。平行(); s.forEach(P - > {            (teamScores = p.getTeam)。getScores()            =(浮动)p.getScores()/(浮动)teamScores浮动pctOfTeamScores;            p.setPctOfTeamScores(pctOfTeamScores);        }); 图3:并行循环,Java代码示例使用 在Java代码,请注意仔细观察球员数据结构中的“团队”字段是一个指针到另一个类的对象引用。的HSAIL代码将直接引用团队指针检索的球队总得分的数量。这是一个非常简单的例子,它演示了一个根本性的转变,HSA将提供易于编程的优点-现在的加速器直接访问主机数据结构,包括那些包含对象的引用(指针),这是远远优于以前的方法,球员和球队数据将被打包成阵列,转换到新的数组索引,所有的指针和数组复制到设备- GPU甚至可以开始执行之前。HSA模型既容易程序和消除了电源低效的复制操作 01:0:95版:$:$大; 02:/ /静态方法HotSpotMethod <Main.lambda$2(Player)>    03:内核和运行(   04:kernarg_u64%_arg0 / /内核签名的lambda方法 05){ 06:ld_kernarg_u64 D6,[%_arg0] / /移动精氨酸一个寄存器HSAIL 07:workitemabsid_u32 $ S2,0 / /读取工作项全球性的“X”coordin 08:   09:cvt_u64_s32 $ D2,S2,/ / x转换gid标识长 10:mul_u64 $ D2,D2,8 / /调整为SIZEOF文献 11 指数:add_u64 $ D2,D2,24 / /调整针对实际元素数据开始 12:add_u64 $ D2,D2,D6美元; / /添加到数组REF PTR 13:ld_global_u64 $ D6,D2 [$] / /加载到数组元素章第 14:@ L0: 15: ld_global_u64 $ [$ D6 + 120]; / / p.getTeam( 16 :mov_b64 $ D3,$ D0; 17:ld_global_s32 $ S3,[$ D6 D0 + 40];的/ / p.getScores( 18 :cvt_f32_s32 $ S16,S3; 19:ld_global_s32 S0美元,$ D0 + 24] / /的团队getScores() 20:cvt_f32_s32 $ S17,S0美元; 21:div_f32 $ S16,S16,S17; / / P。 getScores()/会 22的teamScores :st_global_f32 $ S16,[$ D6 + 100]; / / p.setPctOfTeamScores() 23:RET; 24:} 图4:HSAIL生成的代码从Java的“foreach”内核的HSAIL代码实现lambda函数(代码里面的“foreach”块)。启动HSAIL代码与内核签名(4-5行)单参数的lambda函数的Java“的foreach”块内。注意,大部分的HSAIL代码类似于一个现代化的汇编语言,明确的加载/存储指令和ALU操作寄存器独家经营的第一个操作数是典型的目标,因此,例如双行10家门店的指令寄存器(64位)“$ D2寄存器“产品”D2“和即时值”8。注意内存指令指定段-例如“kernarg”段第6行,和13号线的“全球性”的段。19号线取消引用“团队”的变量,如何HSAIL支持含指针的数据结构。上面的注释解释每一行代码,和它们对应的源代码行。结论 普遍认为,未来的计算将是异构。房间里的大象,需要有一个开放的标准,以合作的方式建立之前,首先人们可以区分和竞争,他们的异构解决方案。HSA大象被认定是重要的一步,并采取行动。,  HSA会从根本上改变了人们编程异构设备。我们已经可以看到在Java例子-一个现有的,流行的编程模型的编译器产生HSAIL的潜力。程序员将继续在它们正在使用的语言进行编程,他们期望的那样,可以使用指针和数据结构,并且是便携式得到的HSAIL代码和将运行于许多不同的并行目标。在HSA HSAIL将使得程序员能够实现巨大的性能提升,而传统的止痛加速器编程 ,它将使异构系统编程的乐趣! 桑德本是AMD公司的高级研究员,并可以达到在ben.sander @ amd.com简平鲁是联发科公司技术高级总监,可以达到在chienping.lu @ mediatek.com



  • 热销库存

    EP4SE360H2   EP4SE360F4   EP4SE290F3  
    EP4SE230F2   EP4SE110F2   EP4SGX530N  
    EP4SGX530K   EP4SGX530H   EP4SGX230K  
  • 优势库存

    EPF10K50FI   EPF10K50FI   EPF10K500V  
    EPF10K30AF   EPF10K200S   EPF10K200S  
    EPF10K50VB   EPM9560ABI   EPM8820ABI  
  • 热门IC品牌

    MICROCHIP   TOSHIBA   NXP  
    VISHAY   INFINEON   TI  
    AVAGO   ADI   ST  
  • 关于我们

  • 公司简介
  • 招聘信息
  • 联系我们


  • © 2013 -2017 深圳市安盛创科技有限公司 版权所有    粤ICP备12084219号