GPU-CPU工作负载和系统的建模外文翻译资料

 2022-03-23 20:51:53

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


GPU-CPU工作负载和系统的建模

安德鲁·克尔,格雷戈里·迪莫斯和苏达卡·亚拉曼奇里

乔治亚理工学院电气与计算机

工程学院

亚特兰大,GA

arkerr@gatech.edu,gregory.diamos@gatech.edu,sudha@ece.gatech.edu

摘要

异构系统,具有针对特定任务量身定制多个处理器系统,正在挑战编程环境。 虽然域名专家有可能为一个非常具体且有据可查的系统优化高性能应用程序,但它可能无法在不同系统上运行,甚至不能运行。 对应用程序领域或系统架构经验较少的开发人员可能会投入重大努力来编写仅能正常工作的程序。 我们相信,一个全面的分析和建模框架对于简化应用程序开发和在异构平台上自动执行程序优化是必要的。 本文报告了四个GPU和三个CPU上25个CUDA应用程序的实证评估,利用了Ocelot动态编译器基础结构,该基础结构可以在任一目标上执行和测试相同的CUDA应用程序。 结合使用仪器和统计分析,我们为每个应用程序记录了37个不同的度量标准,并使用它们推导出异构处理器上的程序行为和性能之间的关系。 然后将这些关系输入到一个建模框架中,该框架试图预测不同类型的应用程序在不同处理器上的性能。 最显着的是,这项研究确定了程序特征之间的几个非直观的关系,并且证明了只使用在内核之前可用的度量准确地建模CUDA内核性能是可能

被执行的。

类别和主题描述

C.1.3 [处理器架构]:异构(混合)系统; D.3.4 [编程语言]:可重定向编译器; D.2.4 [软件工程]:统计方法

一般条款

性能,设计,测量

关键词

CUDA,OpenCL,Ocelot,GPGPU,PTX,Parboil,Rodinia

允许将个人或课堂使用的全部或部分作品的数字或硬拷贝免费授予,前提是复制品不是为了保护或商业利益而制作或发布的,并且副本在第一页上包含本通知和完整引用。 要复制,重新发布,张贴到服务器或重新分配到列表,需要事先特定的许可或费用。

GPGPU-3 2010年3月14日美国匹兹堡匹兹堡版权所有2010 ACM 978-1-60558-935-0 / 10/03 ... $10.00。

介绍

随着诸如NVIDIA CUDA [17]和业界标准OpenCL [8]等编程模型的广泛接受,在具有不同性能特性的并行体系结构上高效地执行数据并行应用程序的表达,如多核超标量处理器或大规模并行图形处理单元(GPU)变得越来越关键。 尽管已经花费了大量的时间来优化和测试针对具有多个内核的处理器的应用程序,但花在评估能够在GPU和CPU上高效执行的应用程序的特性和性能的花费相对较少。

随着越来越多的应用程序从头开始编写,以便在具有多种可用处理器的系统上高效地执行,选择能够最有效地执行应用程序的每个内核的体系结构在最大化整体吞吐量和功率效率方面变得更加重要。 在写这篇文章的时候,我们并没有意识到任何将实际应用特性与在真实世界架构上测得的实际性能相关联的研究。

因此,本文作出以下贡献:

.我们确定了几个PTX应用程序特征,这些特征指示了GPU和CPU的相对性能。

bull;

.我们使用基于主成分分析的统计数据分析方法来确定关键程序特征。

bull;

.我们介绍了一种模型,用于在应用程序在CPU或GPU上运行时预测相对性能。

bull;

本文提供的分析和模型利用Ocelot框架来处理数据并行应用程序,并在异构平台上执行它们。 Ocelot框架[13]是一个模拟和编译基础结构,它实现了CUDA Runtime API,并且(1)模拟正在执行的内核,(2)将内核转换为CPU ISA,或者(3)将内核表示发送到CUDA驱动程序在连接的GPU上执行。 Ocelot独特地用于从未调整的CUDA应用程序中仿真内核收集指令和内存跟踪,分析控制和数据依赖性,以及在支持CUDA的GPU和多核CPU上高效地执行内核。 因此,除了支持详细和比较工作负载特性之外,基础架构还支持在CPU和NVIDIA GPU之间透明地移植PTX内核。

相关工作

析GPU模型。 洪等人[10]提出了GPU的分析预测性能模型。他们的模型的主要组成部分是并行计算的并行内存。通过将他们的模型调整为机器参数,应用程序的静态特性和回归,模型预测内核运行时的错误率仅为13%或更低。 另一方面,我们的方法并不假设具体的主要组件,而是试图根据可测量的统计数据来确定它们,这些统计数据可能随着GPU和CPU微架构的发展而发生巨大变化。

MCUDA。MCUDA [19]从CUDA到C编程语言定义了高级源代码 - 源代码翻译器。在CUDA源代码中标识由同步点分隔的块,并在其周围放置线程循环来溢出实时值。与Ocelot一样,软件运行时也会派发CTA来托管硬件线程,并实现对纹理采样和特殊功能的支持。但是,MCUDA要求应用程序从源代码重新编译,并且不能通过其他方法。此外,它是一个源到源的翻译框架,有其优点,但无法解决Ocelot支持的详细ISA级别特性和见解。

GPU-模拟器。像Ocelot一样,Barra [4]和GPGPU-Sim [1]为CUDA程序提供了微架构模拟。与Ocelot类似,这些模拟器拦截GPU内核调用,并在功能模拟器上执行它们。它们主要关注的是在实际的GPU上再现内核的执行情况。存储器效率度量标准除外,Ocelot的结果与特定的GPU实现分离,并提供应用程序行为的见解。此外,Ocelot为多核CPU和NVIDIA GPU提供了高性能执行路径,从而为选择合适的执行目标加速应用程序提供了机会。

PLANG / NVIDIA PTX到LLVM。

开发人员在LLVM研讨会上介绍了将PTX转换为LLVM [9]的内部工作。这在很大程度上符合Ocelot为CUDA向多核CPU提供高性能执行路径的目标。但是,细节公开比较困难。此外,Ocelot提供并公开了一个集成仿真器,可通过工具界面进行详细分析。

背景

    1. PTX

NVIDIA的Parallel Thread eXecution(PTX)[16]是一种虚拟指令集架构,具有明确的数据并行执行语义,非常适合NVIDIA的GPU。PTX由一组类RISC指令组成,用于显式类型的算术运算,加载和存储到同一组地址空间。在PTX中实现的函数(称为内核)由分层排列在协作线程阵列(CTA)网格中的大型线程网格执行。PTX线程层次结构如图1所示。此网格中的CTA可以并行或串行执行。

CTA中的线程被假定为在单个处理器上执行,并可能在内核中与程序员插入的障碍处同步。数据可以通过读取和写入存储器或通过加载并存储到全局存储器芯片中的位置而在CTA的线程之间交换;在任何一种情况下,必须使用屏障同步来强制所有线程完成其存储操作,然后才能加载到相同位置。

PTX执行模型允许串行执行CTA以避免极大的状态爆发,例如,数千CTA的网格每个都有数百个线程启动。内核的CTA之间的粗粒度同步仅在内核结束时定义。

有效地针对此执行模型的应用程序,明确声明高水平的并行性以及本地化的同步和通信域

Ocelot基础设施

Ocelot编译器基础设施力图通过包装CUDA Runtime API来解耦CUDA应用程序与GPU [17],将在应用程序内存储为字节码的内核解析为内部表示形式,在存在的设备上执行这些内核,并维护完整的CUDA内存分配列表。通过将CUDA应用程序与CUDA驱动程序分离,Ocelot提供了一个用于模拟GPU,收集性能指标,将内核转换为除GPU以外的架构,测试内核以及优化内核以便在GPU上执行的框架。

Ocelot的翻译框架首先通过将内核从PTX转换为低级虚拟机(LLVM)[14]基础设施的本地指令集,然后应用一系列PTX的转换,提供多核CPU上的CUDA内核的高效执行模型。完整的翻译过程超出了本文的范围; 我们只包括一个简要的描述该过程与以下部分中使用的分析方法有关。 我们之前的工作[6]介绍了更详细的翻译过程。

翻译

    1. LLVM

低级虚拟机(LLVM)[14]是一个成熟的编译器基础架构,在其整个生命周期内保持强类型程序。存在多个后端代码生成器来将LLVM IR转换为各种流行的指令集体系结构,包括x86和x86-64。LLVM IR本身包括显式加载和存储指令,整数和浮点运算,二元运算符和控制运算符。LLVM包括中间表单应用转换的优化传递,包括众所周知的编译器优化,如常见的子表达式消除,死代码删除和常量传播。通过从一种中间形式转换为LLVM IR,然后利用LLVM现有的优化和代码生成组件,开发人员可以构建一条完整的路径,以在流行的CPU架构上进行本机执行。

在图2中,用CUDA表达的示例内核首先由NVIDIA的CUDA编译器(nvcc)编译,生成PTX表示,然后由Ocelot的LLVM Translation框架翻译,产生右侧的内核。内核的LLVM表示,可以由CTA中的一个主机线程执行,并正确执行内核。请注意提供块和线程ID运行时的支持结构。

执行模型翻译

对要在多核CPU上执行的PTX内核进行编译首先需要将内核转换为所需的指令集,然后将内核的执行语义从PTX的线程层次转换为单个主机线程。Ocelot通过在CTA中为每个线程启动一个内核级主机线程并依靠OS级的障碍和多线程支持来提供并发和上下文切换。这种方法类似于CUDA仿真模式,不同之处在于底层内核表示与将在GPU上执行的PTX表示相同。但是,当启动许多轻量级线程来隐藏内存结构中的延迟时,CUDA程序会在GPU上高效执行。

将数千个逻辑CUDA线程映射到少数主机线程上,这里采用的方法是编译时转换,插入过程在内核中的同步障碍处执行轻量级上下文切换,类似于[19]中描述的线程融合。一个调度程序的基本块被插入到内核的入口点,根据当前选择的线程及其在内核中的进程选择分支目标。当一个线程到达一个同步点时,控制权跳回到存储已写入调度程序,更新恢复点,增加线程ID并跳转到新的线程指令。实时变量根据需要加载并继续执行。

此方法不需要函数调用或重量级上下文切换。在CTA开始时创建线程不会产生除xed之外的额外开销分配和共享本地内存的成本,每当内核启动时每个工作线程完成一次。上下文切换需要溢出活动状态和间接分支,这在很多时候都能正确预测。

某些CUDA程序的编写方式假定正在执行处理器的warp大小为特定值,对于当前的CUDA GPU架构通常为32个线程。 这个假设比执行模型所保证的更强,现有体系结构正确执行这样的内核,可以保存执行同步指令所需的额外时钟周期。PTX仿真器假定warp大小等于CTA中的线程数,并为尽可能多的线程执行每条指令,因此这些应用程序无需修改即可正常工作。这里描述的多核执行模型翻译技术假定warp大小等于1个线程,所以应用程序必须在执行的那些语句之后重新编译同步点.

4.3 CTA运行时支持

当应用程序启动内核时,多线程运行时将启动尽可能多的工作线程,因为除了每个线程的上下文数据结构之外,还有可用的硬件线程。该上下文由一个共享内存块,一个用于寄存器溢出的本地内存块和特殊寄存器组成。然后工作线程遍历内核网格的块,并且每个块都作为CTA执行块。执行模型允许任何CTA排序。

PTX定义了几条运行时需要特殊处理的指令。PTX计算能力引入了实现原始事务操作(例如交换,比较和交换,添加,增量和最大等)的原子全局内存操作符。由于全局内存在内核终止之前是不一致的,所以我们会有几个实现原子访问的选项。最简单的选项是全局锁定内存。GPU通常为纹理采样和过滤提供硬件支持。PTX定义了纹理采样指令,该指令对绑定纹理进行采样,并根据GPU驱动程序状态选择执行插值。由于CPU不提供纹理采样的硬件支持,因此Ocelot通过将PTX指令转换为函数调用来执行双线性插值,这些函数调用检查内部Ocelot数据结构以识别映射纹理,计算参考采样的地址并相应插补。

另外,PTX还包含其他一些指令,这些指令不会影响LLVM指令的简单映射。这些指令包括诸如cos和sin之类的超越算子以及并行减法。这些也是通过对Ocelot运行时的调用来实现的,而Ocelot运行时又会在超越的情况下调用C标准库函数。对于特定的经纱尺寸,定义减少量; 在翻译成多核时,warp大小是单个线程,所以它们可以简化为mov指令。

表征方法

    1. 指标和统计

Ocelot的PTX仿真器可能配备一组用户提供的事件处理程序来生成详细轨迹的指令和内存引用。在程序计数器和活动线程组完成每个动态PTX指令后,将包含程序计数器,PTX指令,活动掩码和引用内存地址的事件对象分派给每个根据性能处理事件的度量。我们以这种方式收集的以下应用指标是基于我们以前

全文共18909字,剩余内容已隐藏,支付完成后下载完整资料


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

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

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