基于英特尔多核架构的Java HPC程序的表征与优化外文翻译资料

 2022-08-09 10:08

英语原文共 17 页,剩余内容已隐藏,支付完成后下载完整资料


基于英特尔多核架构的Java HPC程序的表征与优化

Yang YU, Tianyang LEI , Haibo CHEN amp; Binyu ZANG

复旦大学计算机科学学院,上海交通大学并行与分布式系统研究所

2016年10月3日收到; 2016年12月13日接受; 在线发布于2017年5月8日

摘要:对性能的不断增长的需求刺激了多核加速器的广泛采用,例如像基于Intel的Many Integrated Core架构的英特尔R Xeon PhiTM协处理器。虽然很多在纯模式下运行的HPC应用程序经过调教后可以在Xeon Phi上高效运行,但是目前还不清像JVM这样的托管运行平台在这种架构上执行效率如何。在本文中,我们首次呈现了一组在Xeon Phi平台上基于JVM的Java HPC应用程序的测量研究。这项研究主要的障碍是目前对Xeon Phi的Java支持很少。本文介绍了首次将OpenJDK移植到Xeon Phi平台的成果,其中HotSpot虚拟机充当内核执行引擎。主要的困难包括Xeon Phi ISA与Hotspot VM的汇编库之间的不兼容。通过评估多线程Java Grande基准套件和我们移植的Java Phoenix基准,我们定量研究了Xeon Phi上JVM的性能和可伸缩性问题,并从研究中得出一些结论。要充分利用向量计算能力并弱化协处理器上明显的内存访问延迟的影响,我们在HotSpot中提出了一种半自动向量化方案和软件预取模型。结合60个物理核心和优化调教,通过使用向量化和相应的预取,经我们优化后的JVM的平均速度与Xeon CPU处理器相比分别提高了2.7倍和3.5倍。我们的研究还表明像Xeon Phi上的JVM这类托管运行时平台上编写的应用程序是可行且有潜在性能优势的。

关键字:多核,Java,至强融核,HPC,预取

介绍:

随着高性能计算(HPC)的不断发展,近年来对计算资源的需求已不断稳步增长。 这也刺激产生了一种将更多内核集成到单个芯片上新处理器架构。 多核体系结构的演进产生了一些显着的成果, 其中之一就是英特尔R Xeon PhiTM多集成核(MIC)架构。该架构主要面向各种领域中的高度并行计算和HPC工作负载。 除了与通用CPU和GPU都有着SIMD和矢量化等类似功能之外, Xeon Phi还具有完全独立的操作系统和对缓存一致性的支持,可提供强大的计算能力。

另一方面,对于HPC的简便且可移植的编程性追求从未停止过。Java作为一种非常流行且广泛使用的语言,在HPC领域正成为一种有吸引力且具有竞争力的范例,特别是因为Java具有内置的多线程机制,强大的社区/合并支持以及 近年来在Java虚拟机(JVM)性能方面的不断的改进。 有许多项目专注于HPC中的Java以改善程序生产力,涵盖了各个领域,例如计算物理学,生物化学,天文学和金融服务等。 在许多数字和科学方面计算基准,Java的显示速度都不比C / C 慢。

尽管在HPC上出现了Java,但我们发现对于在Xeon Phi平台上Java HPC应用程序的性能和可伸缩性的相关研究很少。 部分原因是在英特尔的MIC架构中缺乏Java的官方支持。 为了弥合这一差距,本文首先展示了移植到Xeon Phi协处理器的平台OpenJDK,包括作为内核执行引擎的HotSpot VM。这使我们进行全面研究,以进一步了解Xeon Phi上的Java HPC应用程序的性能特征。

我们的研究分析了九种涵盖了各种算法和计算内核的Java HPC程序的单线程吞吐量和多线程可伸缩性。在单线程运行上与CPU处理器相比,Xeon Phi的性能要低得多。此外,由于程序的特征不同(特别是内存访问模式的不同),不同的基准之间存在着巨大的差异。根据多线程运行的结果,我们观察到令人满意的可扩展性,这主要是由大量的硬件线程和HotSpot VM中多线程机制。我们彻底分析了两种体系结构之间的性能差距以及可伸缩性问题的原因。因此,我们提供了一个在HotSpot中进一步优化的指引。

在我们提出的优化策略中,首先我们在HotSpot上实现了一种半自动矢量化方案,以充分利用Xeon Phi上的512位矢量处理单元。我们的方法打破了HotSpot原始自动矢量化的限制,允许程序员使用注解在需要被矢量化计算循环之前进行标注。因此,我们的修改后的HotSpot VM将生成相应的本机矢量指令。在单线程中运行时,五个基于阵列的基准测试中平均提升了2.5倍的速度。通过使用我们的半自动向量化技术和调节最佳线程数,我们可以在MIC上相比CPU处理器平均实现2.7倍和最高3.4倍的加速。

此外,Xeon Phi有着由于为了高聚合带宽的设计权衡而导致的更明显的内存访问延迟和由于缺少传统的最后一级缓存导致的片上高速缓存未命中率更高。因此,它严重依赖于软件数据的预取,以将数据在被需要前先放入本地缓存中。为了改善较差的内存性能,我们在HotSpot的JIT编译器中实现了基于深度学习Intel ICC编译器的默认定制化预取策略的半自动软件预取模型。我们将各种预取策略应用于矢量化Java基准并分析不同组合下的效果。评价结果显示相比于原始版本,我们的预取模型可以在单线程运行时实现高达8.1倍和在多线程运行时3.8倍的加速。此外,对于CPU服务,可以观察到最佳线程数的情况下最佳吞吐量平均速度提高了3.5倍。综上所述,本文的主要贡献包括:

bull;OpenJDK作为Java运行时环境(JRE)在Intel MIC体系结构上的首次移植

bull;Xeon-Phi上一组高性能计算应用程序的吞吐量和可扩展性等性能问题的综合研究

bull;HotSpot中的半自动矢量化方案,充分利用了MIC上VPU的计算能力,与CPU服务器相比,平均速度提高了2.7倍

bull;在深入学习Xeon Phi的预取策略的基础上,提出了一种半自动预取模型,该模型能有效地隐藏较高的内存访问延迟,并使CPU服务器的平均速度提高3.5倍

背景

本节提出了Intel Xeon Phi协处理器的体系结构概述,并简要介绍了OpenJDK Java平台。

2.1 Intel Xeon Phi多核体系结构

英特尔多核集成(MIC)体系结构是英特尔为实现高性能计算而设计的。英特尔宣布“Xeon Phi”为其所有基于MIC架构的产品的品牌名称。当前一代Xeon Phi产品的代号为Knights Corner(KNC),它是一个协处理器卡,可以通过PCIe接口连接到Xeon CPU主机。

2.1.1结构概述

Xeon Phi协处理器包含多达60个物理内核,每个内核支持4个硬件线程上下文,这使得总共240个线程能够同时运行。这些核心基于改进的P54C设计(在原来的奔腾中使用),并遵循按顺序执行模式。每个核心的频率都在1GHz左右,远低于普通CPU。这种体系结构为高并行性提供了一个很好的机会,但单核处理能力较弱。

每个协处理器核心使用一个512位宽的矢量处理单元(VPU),它有32个矢量寄存器,名为ZMM。一种新型的为Intel MIC架构设计的512位的SIMD ISA是为了利用VPU而设计的。MIC不支持其他SIMD ISA,如MMX、SSE或VX。使用512位VPU,可以在一个矢量指令中执行16个单精度或8个双精度浮点运算。因此,与传统的128位SSE和256位AVX相比,新的矢量ISA在指令级并行性上有了很大的提高。

MIC上的内存基于GDDR5技术,该技术理论上提供的最大聚合带宽超过300gb/s,但作为一种折衷,内存访问延迟较高。每个核心都有一个32 KB的一级数据/指令缓存和一个512 KB的二级缓存。二级缓存保持完全一致,并与内存控制器通过双向环形总线相互连接。MIC上没有传统的共享末级缓存。

2.1.2Xeon-Phi程序设计

与其他许多核心平台(如GPU)不同,MIC上运行的是一个经过修改的Linuxmu;OS(版本:2.6.38.8),它完全独立于主机上的操作系统。应用程序有两种方式在Xeon Phi上运行——卸载模式和本机模式。在卸载模式下,应用程序在主机上启动,并在执行期间将高度并行和计算密集的区域卸载到协处理器。至于本机模式,应用程序在Xeon Phi上独立运行,从不从/到主机传输数据。在本文中,我们只关注本机执行模式。

目前,Xeon PHI可以运行C/C 和FORTRAN语言编写的应用程序。Xeon Phi提供了多种编程模型和工具,如OpenMP、英特尔MPI、英特尔Cilk Plus[9]。但是,Xeon Phi不支持运行Java。

2.2 OpenJDK平台

OpenJDK (Open Java Development Kit)是一个广泛使用的开源Java平台实现。

OpenJDK项目由多个组件组成,包括Java编译器javac、热点虚拟机和Java类库等。

Javac编译器:OpenJDK提供了一个前端Java编译器Javac,将Java源文件解析成符合JVM规范的字节码,并以二进制形式存储在类文件中,然后由Java虚拟机执行。

HotSpot VM:HotSpot VM是OpenJDK的核心执行引擎,可以执行Java字节码。HotSpot有许多模块,包括类加载器、Java解释器、即时编译器(JIT)、垃圾收集器等,它们协同工作。在运行过程中,类加载器首先将类和接口动态加载到HotSpot中。然后,解释器按照存储在二进制文件中的原始指令序列逐个解码并执行字节码。由于javac在编译源代码时不执行任何高级优化,因此单独使用解释器运行Java程序非常慢。为了提高性能,HotSpot VM使用了一个即时编译器(JIT)在运行时将Java字节码转换为“热代码”的本机指令。JIT编译器在生成本机指令时利用了大量广泛的多级优化,这大大缩短了执行时间。HotSpot VM为每个特定体系结构(如x86和Sparc)维护一个程序集库。无论是由解释器执行的字节码还是由JIT生成的本机代码,它们基本上都是由汇编库中依赖于平台的指令实现的。

方法

在这一部分中,我们详细介绍了我们的方法,包括:(1)介绍了OpenJDK到Xeon Phi的移植工作;(2)多线程Java HPC基准测试;(3)实验环境和测量细节。

3.1将OpenJDK移植到Xeon Phi

在这项工作中,我们使用OpenJDK 7u作为我们的移植目标。我们在移植过程中面临的主要挑战及相应的解决方案如下:

  1. 首先,我们需要为MIC架构交叉构建OpenJDK。我们使用定制的GCC作为主机的交叉编译器,这是Xeon Phi SDK的一部分。此外,在OpenJDK中构建Java类库需要许多依赖库,其中一些不是MIC上的mu;OS提供的。这些库与图形、字体等相关,而这些对于基本的Java运行是不必要的。因此,我们对OpenJDK进行无头(即不支持图形应用程序)构建,并在交叉编译时修改makefile以省略此类库。

(2)在交叉构建之后,不能简单地初始化HotSpot VM。我们的大部分工作都集中在为MIC架构定制HotSpot上。如前所述,Xeon Phi与英特尔的SSE或AVX指令集不兼容,HotSpot要求这些指令集在基于x86的体系结构上执行浮点操作。相反,协处理器使用新的512位SIMD ISA和全新的指令和编码。但是,它并没有覆盖HotSpot中所有与浮点相关的指令。幸运的是,Xeon Phi确实支持传统的x87 FPU指令集。在Java中,所有浮点运算基本上都符合IEEE754标准。因此,我们利用新的矢量指令来替换HotSpot中的SSE和AVX指令,并使用一些传统的x87浮点指令作为补充。

(3)除了SSE和AVX指令不兼容之外,一些其他指令,例如mfence和clflush,也不受支持。我们根据HotSpot中的语义以及MIC的使用手册对这些指令进行了修改。此外,Xeon Phi上矢量指令的编码格式与x86指令完全不同,这意味着将矢量指令添加到HotSpot的汇编库中需要重新设计二进制编码。因此,我们扩展了汇编库,包含了所有必需的向量指令。

3.2 Java基准

在本文中,我们研究了九个多线程计算和内存密集型基准。其中五个是从Java Grande benchmark suite的线程版本1.0派生的—Crypt、Series、SOR、SparseMatmult和LUFact。Java Grande基准基本上由科学和数值密集型计算所支配。对于其他四个Java基准测试,我们几乎毫无区别地从Phoenix基准测试套件移植它们。它们的关键计算涵盖了以下应用领域:科学计算(矩阵乘法)和人工智能(KMeans,线性回归,PCA)。我们模拟了Phoenix的并行P线程版本,并使用Java内置的多线程机制实现它们,保持它们的计算内核逻辑不变。可以设置任意数量的线程来运行上述每个基准测试。

3.3实验装置

表1列出了这项工作中使用的MIC卡的结构细节。此外,我们还提供了与作为协处理器主机服务器的英特尔至强处理器的性能比较。对于Xeon Phi上的多线程执行,我们将线程计数指定为1、20、40、60(物理核心计数)、120、180和240。而对于Xeon CPU,选择的线程数在1、2、4、6(物理核心计数)、9和12之间变化。在Linux操作系统上HotSpot VM的实现中,每个Java应用程序线程都映射到属于同一个JVM进程的本机线程。我们调用JNI(即Java本机接口)以确保在多线程运行中,所有应用程序线程将均匀地分布到每个物理核心上。考虑到基准测试运行期间固有的时间变化,每个基准测试线程对执行五次。我们记录了可伸缩性和总体性能分析的平均吞吐量结果。

4实验分析 剩余内容已隐藏,支付完成后下载完整资料


资料编号:[239647],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。