Neon:基于网格计算的多gpu编程模型外文翻译资料

 2023-06-20 10:06

加利福尼亚大学文献

  1. 基于网络计算的多GPU编程模型

UC Davis

Electrical amp; Computer Engineering

Title

Neon: A Multi-GPU Programming Model for Grid-based Computations

Permalink

https://escholarship.org/uc/item/9fz7k633

Authors

Meneghin, Massimiliano Mahmoud, Ahmed H.Jayaraman, Pradeep Kumaret al.

Publication Date

2022-05-01

Peer reviewed

eScholarship.org Powered by the California Digital Library University of California

Neon: A Multi-GPU Programming Model for Grid-based Computations

Massimiliano Meneghin1dagger;, Ahmed H. Mahmoud12dagger;, Pradeep Kumar Jayaraman1, Nigel J. W. Morris1 1Autodesk Research, Canada, 2University of California, Davis

Email:{massimiliano.meneghin,ahmed.mahmoud,pradeep.kumar.jayaraman,nigel.morris}@autodesk.com

Abstract—We present Neon, a new programming model for grid-based computation with an intuitive, easy-to-use interface that allows domain experts to take full advantage of singlenode multi-GPU systems. Neon decouples data structure from computation and back end configurations, allowing the same user code to operate on a variety of data structures and devices. Neon relies on a set of hierarchical abstractions that allow the user to write their applications as if they were sequential applications, while the runtime handles distribution across multiple GPUs and performs optimizations such as overlapping computation and communication without user intervention. We evaluate our programming model on several applications: a Lattice Boltzmann fluid solver, a finite-difference Poisson solver and a finite-element linear elastic solver. We show that these applications can be implemented concisely and scale well with the number of GPUs—achieving more than 99% of ideal efficiency.

I. INTRODUCTION

Structured grids are employed in various applications including thermal, mechanical and fluid simulations, computer graphics, visual effects production and medical imaging. Many algorithms—including spatial interpolations, resampling, convolutions, and numerical schemes to discretize differential equations—are simpler to realize on structured grids. Despite their simplicity and potential for cache-friendly data layouts, fine resolution grid-based data incur a large compute and memory cost, requiring high-performance computing clusters and distributed programming models for scalability.

GPUs are increasingly being employed to scale highperformance applications like machine learning, image processing, and scientific visualization. Domain experts in scientific computing could greatly benefit from multi-GPU acceleration of their programs. However, designing, implementing, and debugging parallel algorithms to leverage multiple GPUs requires mastery of multi-GPU programming concepts—expert knowledge of new languages like CUDA or OpenCL, understanding of parallel programming models, handling asynchronous computations, communications and memory transfer.

Consider designing a typical map-stencil pattern on a simple dense domain e.g., an AXPY followed by a Laplacian filter. Its execution workflow is shown in Fig. 1, from a nauml;ıve version to an optimized one that aims at maximizing the overlap between computation and communication (OCC). The more aggressive an OCC optimization is, the more complex the code becomes, and a deeper knowledge of multi-GPU communication is needed. The complexity increases even further when considering sparse volumetric representations because of the lack of a data structure abstraction that supports a general and portable definition for OCC optimizations.

工作流程图1

GPU-based frameworks like TensorFlow [1] for machine learning, Halide [2] for image processing, and Hadoop [3] for big-data processing are some examples where programming multi-GPU and distributed systems have been made easier for specific applications. It has been argued that these frameworks have led to rapid scientific and technical advances in many fields [4]. We aim to bring similar benefits to large-scale gridbased numerical problems while delivering excellent efficiency by leveraging automatic OCC optimizations.

We present Neon—a programming model and its C implementation that enables scaling of grid-based numerical problems on single-node multi-GPU systems, without sacrificing ease of programming or requiring parallel programming knowledge from the user. Using Neon, we are able to achieve more than 99% ideal efficiency on the analyzed applications

thanks to the automatic OCC optimization. Neon follows a domain specific approach—it provides an intuitive API to represent numerical fields over a regularly discretized 3D

domain. As in most engineering problems, the domain is freeform (i.e., not a cubic). We also provide options for dense and sparse representations—both optimized for load balance and

minimization of GPU-GPU transfer overhead.

Neonrsquo;s computational model derives from the parallel skeleton tradition [5] where users describe their applications using a set of predefined parallel constructs. By design, any Neon application is described with respect to a back end (CPU or GPU), the number of available resources (GPUs), a grid data structure (dense or sparse), layout (Structure-of-Arrays or Array-of-Structures) and memory properties (alignment, padding, type of allocator). More importantly, all parameters can be easily switched without altering application-specific code. Unlike other skeleton models, Neon treats grid data structures as first-class citizens which allows for many optimizations. In this paper, we make the following contributions:

bull; A programming model that abstracts multi-GPU complexity and exposes an intuitive interface to users. We present a method to automatically inf

剩余内容已隐藏,支付完成后下载完整资料


加利福尼亚大学英文文献翻译

一种基于网格计算的Multi-GPU编程模型的翻译

加州大学 戴维斯

电气与计算机工程

标题

Neon:一种基于网格计算的Multi-GPU编程模型

一个特定网贴的永久固定标识符

作者

梅内金,马西米利亚诺·马哈茂德,艾哈迈德·贾亚拉马,普拉迪普·库马雷特

出版日期

2022-05-01

同行审查

eScholarship.org 由加州数字图书馆提供动力加州大学

Neon:一种Multi-GPU编程模型基于网格的计算

梅西米亚诺·梅内钦,艾哈迈德·马哈茂德,普拉迪普 库马尔·贾亚曼 ,奈杰尔·W·莫里斯欧特克研究,加拿大,加利福尼亚大学,戴维斯

电子邮件:{(massimiliano.meneghin,ahmed.mahmoud,prade.kumar.jayaraman,nigel.morris}@autoDesk.com)

摘要:我们介绍了Neon,一种新的基于网格计算的编程模型,它具有直观、易用的接口,允许领域专家充分利用单节点Multi-GPU系统。Neon将数据结构与计算和后端配置分离,允许相同的用户代码在各种数据结构和设备上操作。Neon依赖于一组分层抽象,这些抽象允许用户将他们的应用程序像顺序应用程序一样拖曳,而运行时处理跨多个GPU的分布,并在不需要用户干预的情况下执行优化,例如重叠计算和通信。我们在以下几个应用上对我们的规划模型进行了评价:格子Boltzmann流体求解器、有限差分Poisson求解器和有限元线性弹性求解器。我们表明,这些应用程序可以简洁地实现,并且随着GPU数量的增加而扩展得很好,达到了99%以上的理想效率。

一.导言

结构化网格用于各种应用,包括热模拟、机械和流体模拟、计算机图形学、视觉效果制作和医学成像。多个算法--包括空间插值、重采样、卷积和离散微分方程的数值格式--更易于在结构化网格上实现。它们的简单性和对高速缓存友好的数据布局的潜力,基于网格的精细分辨率的数据需要很大的计算和内存开销,需要高性能的计算集群和分布式编程模型来实现可伸缩性。

GPU越来越多地被用于扩展高性能的应用,如机器学习、图像处理和科学可视化。科学计算领域的专家可以从他们的程序的Multi-GPU应用中获益良多。然而,设计、实现和调试并行算法以利用多个GPU要求掌握Multi-GPU编程概念--熟悉CUDA或OpenCL等新语言,不了解并行编程模型,处理异步计算、通信和内存传输。

考虑在一个简单域上设计一个典型的地图模板模式,例如,AXPY和拉普拉斯滤波器的执行工作流如图1所示,从一个幼稚的版本到一个旨在最大化计算和通信之间的重叠的优化工作流(OCC)。OCC优化越多,代码越复杂,需要对Multi-GPU通信有更深入的了解。复杂性甚至增加了,此外,在考虑稀疏体积表示时,由于缺乏支持OCC优化的通用和可移植定义的数据结构抽象。

工作流程图1

基于GPU的框架,如机器学习的TensorFlow[1]、图像处理的Halide[2]和用于大型数据处理的Hadoop[3],都是一些例子,这些框架使得Multi-GPU和分布式系统的编程更容易用于特定的应用程序。有人认为,这些框架导致了许多领域的科学和技术迅速进步[4]。我们的目标是为基于大规模网格的数值问题带来类似的好处,同时通过利用自动OCC优化实现卓越的效率。

我们提出了Neon-一种编程模型及其C 实现,它可以在单节点Multi-GPU系统上扩展基于网格的数值问题,而不需要牺牲编程的易用性或需要用户的并行编程知识。利用Neon,我们可以在分析的应用上达到99%以上的理想效率。

由于OCC的自动优化,Neon采用了一种特定领域的方法--它提供了一个直观的APL来表示定期离散的3D上的数值场。

与大多数工程问题一样,域是自由形式的(即,不是立方的)。我们还提供了密集和稀疏表示的选项--都是为负载平衡和GPU-GPU传输开销最小化而优化的。

Neon的计算模型源于并行Skeleton传统[5],其中用户使用一组预定义的并行结构来描述它们的应用。通过设计,任何新应用程序都会根据后端(CPU或GPU)、可用资源(GPUs)的数量、网格数据结构(密集或稀疏)、布局(阵列结构或阵列结构)和内存属性(对齐、填充、分配程序类型)进行描述。更重要的是,所有参数都可以很容易地切换,而不需要更改特定于应用程序的代码。与其他Skeleton模型不同,Neon将网格数据结构视为允许许多优化的一流公民。在本文中,我们作出了以下贡献:

一种抽象Multi-GPU复杂性并向用户公开直观界面的编程模型.我们提出了一种自动推断数据依赖图的方法,并从顺序代码中引入了OCC优化。

一个C 实现了我们的编程模型,为基于网格的计算提供了一个易于使用的接口.我们演示了网格数据结构(密集、稀疏)和后端(多核、单GPU和单节点Multi-GPU)可以在不修改用户代码的情况下改变。

在一个8-GPU系统的基准在三个世界的应用:格子-Boltzmann流体解算器、有限差分泊松解算器和有限元线性弹性结构解算器上显示了优良的标度性能。我们将Neon编程模型的实现范围限制在单节点、Multi-GPU和不支持外部协同操作的情况下。我们目前对该系统的实现和解释是基于CUDA的简单性,只针对Midia GPU,但该系统的原理是通用的,允许使用其他框架和APLs(如OpenCL)来实现类似的实现,或者马尔坎。

  1. 相关工作

由于我们的目标是实现基于网格的计算的高级通用抽象,因此我们只讨论允许开发人员为其完整应用程序编写简单代码的相关工作,同时依赖于跨多个GPU进行优化的框架。

(A)泛型框架:现代通用并行计算框架利用称为基于模式(或基于Skeleton)的编程模型,在不牺牲高性能的情况下提供高级并行计算抽象。复杂的应用程序是在这些模式的基础上构建的,使用它们作为构建块,而底层的细节则被隐藏在用户面前。由于其简洁的语义和清晰的功能,使用并行模式的框架在简单性、高性能和可移植性[6]、[7]、[8]、[9]之间取得了很好的平衡。由于这些框架以通用应用程序为目标,用户必须使用框架一提供的低级别原语(例如一维数组)来实现和优化基于网格的应用程序的数据结构,这是一个时间消耗任务,特别是对于稀疏域。Neon遵循基于模式的编程模型,同时将网格数据结构作为头等公民来处理,这样就可以使用低级原语进行非常具有挑战性的优化。

(B)特定于领域的框架:许多基于网格的特定于应用程序的框架被提出来隐藏GPU编程的复杂性,同时为应用程序开发人员提供直观的抽象[10]、[11]、[12]。基于网格的计算可以从更高层次的抽象中受益,开发人员可以在一个框架中编写所有的应用程序,更重要的是,在不同的应用程序之间共享优化技术。

太极[13]和作业[14]是与我们最密切相关的工作,并为基于网格的计算开发了特定的框架。太极是一种Python框架,它实现了实时编译,将计算密集型任务卸载到多核CPU或单个GPU。类似地,太极可以在不改变计算代码的情况下交换数据结构。然而,将太极扩展到多个GPU需要广泛的用户参与来控制每个GPU的内存。OPS是一种特定于领域的语言和主动库,嵌入到C/C /Eortran中,用于表示并行多黑色结构网格上的计算。它允许使用源到源转换、延迟执行和依赖分析在GPlU或多核CPU集群上进行许多自动通信模式优化。Neon和OPS都通过执行依赖分析和将域自动划分为计算资源来解除用户的低级别优化,但是,Neon通过允许用户试验不同的数据结构而具有更大的可扩展性,而OPS只使用多块数据结构和用户管理的块间晕交换。

  1. NEON规划模型

在较高的层次上,我们的编程模型将数据结构与在其上执行的计算解耦。用户指定域属性(例如,大小、稀疏模式),然后在其之上定义计算。计算是由域参数化的,这样用户就可以在不改变计算代码的情况下改变域属性。我们利用了数值合成的数据并行性质。用户只专注于指定在活动网格单元上应用什么操作,而Neon则负责将这些操作应用于所有活动网格单元,并进行优化以实现高性能。

(A)域:计算域由两个组件构建:网格和字段。网格是组织计算布局的蓝图。字段存储应用程序所需的物理量,并由其属性(例如,基数、数据类型和数据布局)和创建它的网格类型定义。清单1显示了如何为2D域定义一个简单的Grid和Field。

(B)计算:我们在编程模型中定义了三个构建块,可用于编写范围广泛的数值应用程序。我们所有的构建块都接受Field作为输入,并显示不同的通信模式,因此需要不同类型的优化以获得高性能。

地图操作(Neon::MapOp):它使用其他输入字段中对应的网格单元格中的数据更新与一个网格单元格相关联的数据,用户定义的操作可能会对其进行转换。具体来说,映射操作定义如下,其中F*是大小为K的所有字段,op(-)是用户定义的操作:

Fout[i] larr; op(F1[i], F2[i], . . .), forall;i isin; [0, K).

Map操作的示例包括AXPY、将字段复制到另一个字段和缩放字段bya常量。

模具操作(Neon:模板Op):它允许网格单元使用用户定义的模板从周围的网格单元中收集信息。与Map类似,用户可以定义自定义操作并指定最终结果是如何聚合的。格式上,模板操作定义如下:OP()是用户定义的操作,N(I)是单元I周围的模具邻接网格单元:

Fout[i] larr; opjisin;N(i)(F1[j], F2[j], . . .), forall;i isin; [0, K).

减少操作(Neon:ReduceOp):它在输入字段上应用用户定义的二进制和关联操作,并将它们简化为单个值。例子包括点积和场的L2范数的计算。

out larr; op({F1[i], F2[i], . . . | forall;i isin; [0, K)}).

虽然这三个构造块很简单,但它们足够强大,可以编写大量的计算,例如求解线性系统、特征值问题和BLAS[15]中几乎所有的函数。主要区别在于Neon如何定义矩阵运算。虽然BLAS的目标是通用的矩阵运算,但大多数基于网格的数值计算都将其矩阵运算定义为应用于每个网格单元周围定义良好的邻域上的模板。因此,Neon以无矩阵的方式执行这些操作,避免了组装步骤[16]。这种方法的一个限制是某些矩阵运算(例如矩阵因式分解)必须由用户管理。

使用这些构建块的示例如List 2所示,用于创建Laplacian模具。Neon提供了一种称为容器的不透明数据类型,用于包装一个或多个积木块。构建块类型是使用Loader数据类型(IV-B节)在字段本身(第4和第5行)上定义的,容器允许用户通过组合多个构建块来创建复杂的操作。实际的功能被实现为lambda函数(1ine6-17)。

为了构造一个有用的应用程序,用户定义了一组顺序步骤,其中每个步骤都由容器包装。Neon提供了一种Skeleton数据类型,它采用容器的顺序,以及所需的后端Torun,并负责在可能的情况下开发并行性(第V-B节)。这是通过从容器自动生成数据依赖图(第V-A节)来实现的。List 3展示了使用Neon编程模型的共轭梯度求解器[17]的伪代码实现。除了用户定义的积木,Neon还提供了一套优化完善的标准BLAS操作(例如,点产品),并为不同的网格类型提供了统一的界面,以方便快速成型。

  1. Neon框架

在这一节中,我们将深入研究Neon的设计。我们的目标是开发一个特定于领域的编程模型,其高级设计目标如下:

简单性:我们的目标是简化基于网格的Multi-GPU应用程序编程的用户体验。Neon的tar-get是提供一种编程模型,允许用户将应用程序作为顺序代码,同时执行Multi-GPU后端。

性能:在不牺牲APL简单性的情况下,我们的目标是实现与硬连接应用程序特定代码紧密匹配的性能。这是通过自动划分和分配用户数据、最小化并行化开销(通信和同步)和确保负载平衡来实现的。数据结构与计算的解耦:性能

严重依赖底层网格数据结构。因此,Neon将数据结构与应用于数据结构的操作分开。这使得在不改变用户代码的情况下测试不同数据结构的性能成为可能。

可移植性:虽然我们的目标是在多个.-GPU后端提供高性能,但在串行后端上调试用户应用程序是常见的做法。Neon允许不同后端之间的可移植性,重点是Multi-GPU后端的高性能。

为了实现这些目标,我们需要应对四个挑战:

数据挑战:我们需要一个通用的Multi-GPU数据抽象来跨可用的GPU分发、管理和访问用户数据。抽象还必须确定GPU之间的数据交换,以支持模具的正确执行和减少操作。

内核挑战:我们需要一个Multi-GPU内核机制,可以将用户顺序内核代码转换为GPU特定于GPU的数据部分的功能。

依赖-图形挑战:系统需要一种机制来检测Multi-GPU内核正在使用的数据

剩余内容已隐藏,支付完成后下载完整资料


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

您需要先支付 30元 才能查看全部内容!立即支付

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