您好,欢迎访问三七文档
本科毕业论文外文翻译外文译文题目:Java的并行执行循环的图形处理单元学院:理学院专业:信息与计算科学学号:201007119049学生姓名:王梦晗指导教师:李琳娜日期:二〇一四年六月武汉科技大学本科毕业论文外文翻译1ParallelexecutionofJavaloopsonGraphicsProcessingUnitsAlanLeung,OndřejLhoták∗,GhulamLashariScienceofComputerProgramming,2013(78):458–480Java的并行执行循环的图形处理单元艾伦梁,OndřejLhoták∗,古拉姆拉夏里计算机编程科学,2013(78):458–480武汉科技大学本科毕业论文外文翻译2摘要图形加速卡,或图形处理单元(GPU),在最近几年已经变得无处不在。在一些特定的问题上,图形处理器在原始性能方面远远超过CPU。然而,因为它们很难进行编程,图形处理器仅用于狭窄的一类特殊用途的应用;由图形处理器所提供的原始处理能力大部分时间未被使用。本文提出了一种在GPU而不是CPU上执行适当代码的JavaJIT编译器的一个扩展。静态和动态特性来决定在GPU上关闭加载一段代码是否可行并且有益。本文提出了一种成本模型,平衡现有的从GPU在内存和GPU内存之间传输的输入和输出数据的成本增速。成本模型是参数化的,它可以应用到不同的硬件组合。本文还提出了克服在Java字节码语言设计中固有的并行化的几个障碍的方法:非结构化控制流,缺乏多维数组,精确异常语义和间接引用的增殖。1介绍在一个典型的桌面PC上的GPU比CPU有更强的原始处理能力和内存带宽。例如,NVIDIA公司的GeForce7800GTX可以执行165GFLOPS,而双核3.7GHz的英特尔奔腾965的理论峰值速率为25.6GFLOPS的。GPU和CPU之间的性能差距很可能会继续增加,甚至为CPU核心数量的增加。增加CPU内核需要复制的控制逻辑和实施昂贵的高速缓存一致性协议;相反,增加一个GPU的像SIMD单元的处理能力需要更少的硬件资源。然而,由GPU提供的处理能力大多数时候是未使用的,除非在非常特殊的应用上。近年来,一个'通用'的GPU(GPGPU)社区已经如雨后春笋般涌现,它适用于GPU的问题而不是渲染三维场景。尽管这个词叫''通用'',GPGPU社区侧重于适应执行在GPU上的特定算法。我们工作的目标是让现有的GPU的计算能力来使人们解决数值密集型而非图形化的问题。对于来自金融建模、石油和天然气勘探和媒体处理的廉价计算领域专家有着显著的商业利益。虽然这些人在他们的领域是专家,但他们往往只是新手程序员,有可能只学习了一个或两个Java编程课程。在某些情况下,他们有在CPU运行的高级语言中现存的原型实现。要求这些领域的专家学习并行编程、GPU架构、C++或模板元编程这是不可行的。然而,他们都愿意跟随在他们的Java代码中的一些约定,以换取大的加速。我们想赋予这些领域的专家尝试试探性的解决方案,而无需编程专家来实现他们的原型。我们在JikesRVMJava虚拟机实现的GPU的并行化。像其他的Java虚拟机,JikesRVM在运行时读取Java字节码,它转换到目标CPU的机器语言,并执行它。我们的扩展允许虚拟机在适当的时候产生的GPU代码。不像一些其他的虚拟机,JikesRVM武汉科技大学本科毕业论文外文翻译3不包括口译:所有代码被编译,首先用一个快速、简单的编译器,后来使用更先进的编译器代码,原来是显著。在虚拟机中执行在运行时转换的必要性是由于Java的动态性,比起语言更传统地用于数值计算,例如,Fortran语言。在Java中,大多数函数调用是动态布控,和所有的数组都是动态分配在堆上。因此,纯粹的静态分析往往不能准确地确定哪些代码将被执行,哪些阵列将操纵。因此,刚刚在即时编译已成为有效执行语言与这些类型的动态特性占主导地位的技术。现代刚刚在即时编译器执行许多相同的分析和优化,为静态编译器,但可以另外利用动态信息和投机性的优化。实施内部现有VM的并行化使我们能够充分利用现有的基础架构的关键优势。自适应优化系统决定了哪些方法使用显著大量的执行时间;我们专注于我们的只有那些方法并行化的努力。在这些热方法,JikesRVM内联函数调用其他方法;因此,我们的分析并不需要考虑方法的调用。我们还采取诸如循环不变量代码移动和静态单赋值形式等标准转换的优势。主要的后端,我们使用的是RapidMind的框架。RapidMind的是一个C++编程框架,表达依赖于数据的并行算法在硬件无关的方式。我们的代码生成器访问使用Java本地接口(JNI)包装RapidMind的。RapidMind的被设计来产生合适的代码在对所选择的硬件的运行时间。目前,RapidMind的可以生成代码的GPU,在CellBE处理器和多核心CPU。使用GPU后端我们已评估系统。本文提出了以下贡献:•它提出针对由通用GPU硬件裸露的编程模型一个新的循环的并行算法。GPU的编程模型结合了传统的并行算法,针对性的载体和多处理器执行模型的一些特性,但与这两种模式的区别。•它确定了特定于Java字节码的障碍并行化,并讨论了,我们已经实施,以克服他们的解决方案。使用刚刚在时间汇编的,能够克服这些困难与简单但有效的技术。•它提出并评估成本模型来决定它是否有利可图运行在GPU而不是CPU的一个给定的循环。特别地,成本模型平衡对更快的计算可能在GPU上的数据传输的开销。这部作品的初稿提交于2009年PPPJ,提出的这个扩展版本包含更详细的解释和新的例子,下面是重要补充:•我们讨论了并行化和矢量化之间的区别,并解释为什么汇编的GPU需要两者的结合(第3节)。•我们对我们用于检测多通道循环的算法提出详细的解释,,从而大大增加了我们的GPU并行化技术的适用性(第3.7节)。•我们讨论了可能发生在多维Java数组的不同寻常的违规行为,并提出了详细用于恢复从Java字节码数组访问指数向量算法(第4.2节)。武汉科技大学本科毕业论文外文翻译4•我们对检测数组边界检查会使在GPU上执行的代码不健全的异常提出我们的解决方法(第4.4节)。•我们提出从Java字节码恢复结构的控制流的算法(第4.5节)。•关于我们的实验方法我们提出了一些附加细节(第5节)。本文的其余部分安排如下:第2节提供了GPU和RapidMind的背景。第3节介绍了GPU的并行算法。第4节讨论特定于Java字节码的障碍。第5节报告了成本模型的实验评估。第6条评论相关工作,以及第7节总结。2背景本节提供了理解本文的其余部分所需要的背景。在2.1节我们首先讨论与我们的系统息息相关的GPU的性能。然后在第2.2节,我们提出构成我们系统后端的RapidMind系统。2.1GPUGPU架构及相关联的编程模型已经发生了许多变化,近年来,主要在提高通用性和可编程性的方向。我们简单介绍一下这些事态发展,并解释了整个编程模型在一个较高的水平。传统的GPU被组织为专用阶段的固定管道,在其中并行操作的许多数据点。传统的GPU的任务是三维的顶点映射到屏幕上的二维位置上,光栅化场景中的多边形到一个位图,上色根据照明和纹理信息的位图的每个像素。后来硬件开始允许自定义程序在这些阶段中执行。特别地,片段级(最后一级,这颜色的每个像素)中的最常用的GPGPU应用,因为它是第一个成为可编程的,并且因为它是最原始的计算能力的阶段。最初,一个片断程序是指令的短,直线序列。预测是允许的,但没有控制流。在图形应用程序,该片段的程序将执行一次对每一个像素,而其输出值将确定该像素的颜色。在GPGPU应用程序,该片段程序可能会产生值的数组并联,每个值作为片断程序的一个实例的输出。片段程序无法写入任意内存位置(散布),但他们可以从任意地点在所谓的纹理(在内存中即输入数组)读取。提供增加片断程序的控制流的支持水平仍然后来硬件,实现使用预测。要克服对控制流和分散的局限性的一种常见方法是分裂的整体算法引入可能每个人都可以重复运行多个片断程序。现代接口的GPU,如CUDA呈现单程序多数据(SPMD)编程模型。GPU的执行大量的线程。虽然每个线程执行相同的程序,能够为各个线程以通过该程序遵循不同的控制流路径,并读取和写入到共享存储器中的任意位置。尽管编程模型的通用性,实现它的硬件仍然是由单指令多数据(SIMD)处理器,在任何时间点,执行对多个数据段相同的指令。当所有的线程都遵循相同或类似的控制流路径从而最大达到最佳性能。而且,编程模型没有提供关于并行写入的顺序,以保证相同的内存位置。因此,对于可武汉科技大学本科毕业论文外文翻译5预见的结果,程序员必须确保没有两个线程会写入到相同的位置。为确保这一点的一种方法是,放弃执行飞散到任意存储位置的能力,以及分配给每个线程的一组,其输出,这是所使用的程序片段的相同技术的数组元素的鲜明。使用数据相关的散射,需要对数据特定领域的知识,以保证数据依赖的写入目标的不相交。2.2RapidMindRapidMind的是一个C++GPU的元编程框架,它由两部分组成。前端是一个C++模板库,它提供的数据类型的重载运算符生成的代码在RapidMind的中间表示(IR)的数据结构。后端优化IR和发出代码为支持的目标体系结构(GPU,单元格中,多核CPU)之一。程序员可以嵌入内核为了在GPU上作为直接在C++程序适当分隔片的C++代码的运行。执行这样一个内核需要两个步骤。在第一步骤中,在C++代码,程序员写在CPU上执行。在这个阶段,实际上不执行任何计算。每个重载的运算符,而不是执行运算,生成红外指令,将执行相应的计算。因此,程序员写的代码生成将运行在GPU上的代码。一旦所有的代码运行,整个IR已经产生,在RapidMind的后端处理IR和产生,然后可以执行适合GPU的代码。在我们的工作中,我们只使用RapidMind的后端,完全绕开了前端。因此,没有C++代码生成,没有C++编译器的使用,也没有模板元编程完成。VM中的并行阶段直接生成RapidMind的红外数据结构。这些被传递到RapidMind的后端,以产生在GPU代码。RapidMind的概述,以及如何修改JikesRVM使用它示于图1,右侧显示RapidMind的正常配置适用于嵌入式内核上运行的C++代码。左侧显示JikesRVM,它接受Java字节码作为输入,并生成一个在CPU上执行的机器代码。我们添加了并行化阶段,桥梁这两个系统,直接从JikesRVM红外线产生的RapidMind的红外线。
本文标题:毕业论文外文翻译
链接地址:https://www.777doc.com/doc-2273971 .html