APSchmidt 发表于 2022-5-31 11:19

【目录序言翻译】GPGPU架构《General-Purpose Graphics ...

摘要

图形处理器(GPU)最初是为支持视频游戏而开发的,但现在也被越来越多地应用于机器学习、加密货币提取等通用(非图形)应用。GPU将更多的硬件资源应用到了计算当中,因此可实现比CPU更好的性能与效率。此外,与特定领域的加速器(domain-specific accelerator)相比,当代的GPU也具备更好的通用可编程性,因此更受软件开发人员的青睐。本书收集了一些目前只能在更广泛的不同来源中找到的信息,能为那些有兴趣研究支持通用计算的GPU架构的人提供一个有关介绍。本书作者领导了GPGPU-Sim仿真器的开发,其被广泛应用于GPU架构的学术研究中。
本书第1章描述了GPU的基本硬件结构,并简要地概括了它的历史背景。第2章则对与本书其它部分有关的编程模型进行了总结。第3章讨论了GPU计算核心的结构。第4章探讨了GPU内存系统的结构。在描述了现有的系统架构后,第3、4章还对相关研究进行了概述。最后,第5章总结了一些影响计算核心和存储系统的交叉研究。
本书期望能为那些希望了解用于加速通用应用的GPU结构的人提供宝贵的资源,并为那些希望了解如何改进这些快速发展的GPU架构研究的人员提供一个有价值的介绍。
<hr/>关键词:GPGPU(通用图形处理器), computer architecture(计算机体系结构)
原书:《General-Purpose Graphics Processor Architecture》Tor M.Aamodt, Wilson Wai Lun Fung, Timothy G. Rogers(Morgan&Claypool Publishers - Synthesis Lectures On Computer Architecture)出版时间:May 2018
个人汉化了此书的目录与前言,以便大家在搜索相关中文关键词时能获得参考,但也仅供参考。如果帮到了您,那就再好不过了,希望能留个赞支持一下!(有支持才有动力嘛)<hr/>目录


[*]■■1 引言 Introduction

[*]■1 计算加速器的前景 The Landscape of Computation Accelerators
[*]■2 GPU硬件基础 GPU Hardware Basics
[*]■3 GPUs的简史 A Brief History of GPUs
[*]■4 本书纲要 Book Outline

[*]■■2 编程模型 Programming Model

[*]■1 执行模型 Execution Model
[*]■2 GPU指令集架构 GPU Instruction Set Architectures

[*]1 NIVIDIA指令集架构 NVIDIA GPU Instruction Set Architectures
[*]2 AMD图形核心随后的指令集架构 AMD Graphics Core Next Instruction Set Architecture


[*]■■3 SIMT核心:指令与寄存器数据流 The SIMT Core: Instruction and Register Data Flow

[*]■1 单环路近似 One-Loop Approximation

[*]1 SIMT执行遮罩 SIMT Execution Masking
[*]2 SIMT死锁与无栈SIMT架构 SIMT Deadlock and Stackless SIMT Architectures
[*]3 warp调度 Warp Scheduling

[*]■2 双环路近似 Two-Loop Approximation
[*]■3 三环路近似 Three-Loop Approximation

[*]1 操作数收集器 Operand Collector
[*]2 指令重放:用于解决结构冒险 Instruction Reply: Handling Structural Hazards

[*]■4 有关分支分歧的研究方向 Research Directions on Branch Divergence

[*]1 warp压缩 Warp Compaction
[*]2 warp间的分歧路径管理 Intra-Warp Divergent Path Management
[*]3 添加MIMD功能 Adding MIMD Capability
[*]4 在电路复杂度方面具性价比的分歧管理 Complexity-Effective Divergence Management

[*]■5 有关标量执行和仿射执行的研究方向 Research Directions on Scalarization and Affine Execution

[*]1 统一变量和仿射变量的区分检测 Detection of Uniform or Affine Variables
[*]2 在GPU中利用统一或仿射变量 Exploiting Uniform or Affine Variables in GPU

[*]■6 有关寄存器文件架构的研究方向 Research Directions on Register File Architecture

[*]1 分层次的寄存器文件 Hierarchical Register File
[*]2 睡眠模式寄存器文件 Drowsy State Register File
[*]3 寄存器文件虚拟化 Register File Virtualization
[*]4 分区的寄存器文件 Partitioned Register FIle
[*]5 无寄存器 RegLess


[*]■■4 存储系统 Memory System

[*]■1 一级存储结构 First-Level Memory Structures

[*]1 便笺存储器和L1数据缓存 Scratchpad Memory and L1 Data Cache
[*]2 L1纹理缓存 L1 Texture Cache
[*]3 统一的纹理和数据缓存 Unified Texture and Data Cache

[*]■2 片上互联网络 On-Chip Interconnection Network
[*]■3 内存分区单元 Memory Partition Unit

[*]1 L2缓存 L2 Cache
[*]2 原子操作 Atomic Operations
[*]3 内存访问调度器 Memory Access Scheduler

[*]■4 有关GPU存储系统的研究方向 Research Directions for GPU Memory Systems

[*]1 内存访问调度与互联网络设计 Memory Access Scheduling and Interconnection Network Design
[*]2 缓存的有效性 Caching Effectiveness
[*]3 内存请求优先和绕过缓存 Memory Request Prioritization and Cache Bypassing
[*]4 利用warp间的异构性 Exploiting Inter-Warp Heterogeneity
[*]5 协调性的绕过缓存 Coordinated Cache Bypassing
[*]6 自适应缓存管理 Adaptive Cache Management
[*]7 缓存优化 Cache Prioritization
[*]8 虚拟内存页的放置 Virtual Memory Page Placement
[*]9 数据的放置 Data Placement
[*]10 多芯片GPU模块Multi-Chip-Module GPUs


[*]■■5 GPU计算体系结构的交叉研究 Crosscutting Research on GPU Computing Architectures

[*]■1 线程调度 Thread Scheduling

[*]1 有关将线程块分配给核心的研究 Research on Assignment of Threadblocks to Cores
[*]2 有关逐周期调度决策的研究 Research on Cycle-by-Cycle Scheduling Decisions
[*]3 有关多个kernel的调度的研究 Research on Scheduling Multiple Kernels
[*]4 细粒度同步感知调度 Fine-Grain Synchronization Aware Scheduling

[*]■2 利用并行性的其它几种办法 Alternative Ways of Expressing Parallelism
[*]■3 事务内存(TM)的支持 Support for Transactional Memory

[*]1 Kilo TM
[*]2 Warp TM和时间域冲突检测 Warp TM and Temporal Conflict Detection

[*]■4 异构系统 Heterogeneous Systems

序言

本书的目的是为那些希望了解GPU架构的人提供帮助,同时为那些希望了解如何改进这些快速发展的GPU架构研究的人员提供一个有价值的介绍。我们假定读者已经熟悉计算机体系结构的有关概念,如流水线和cache,并有兴趣从事与GPU架构有关的研究和/或开发。这些工作的重点往往在于不同设计间的权衡(trade-off),因此本书的编写旨在提供这些权衡方面的见解,以便读者能够避开那些设计师们曾犯过的错误。
为帮助实现这一目标,本书将目前各种不同来源(如专利、产品文档和研究论文)中发现的许多相关信息都收集到了一个资源里面。希望这能有助于节约刚开始研究的学生或从业人员的时间,以提高效率。
在涵盖当前GPU设计的各个方面的同时,本书也将试图去“综合”那些已发表的研究。这部分是有必要的,因为供应商很少有透露关于特定GPU产品微架构的任何信息。
本书中的“基准(baseline)”GPGPU架构主要基于目前已发表的产品描述(期刊论文、白皮书、手册),有时也会参考某些专利中的描述。但是,专利中的细节可能会与实际产品的微架构存在很大出入。在一些特例中,一些微基准测试(microbenchmark)能为研究人员澄清某些细节,但在其他情况下,我们的基准(baseline)将代表我们基于公开信息的“最佳猜测”。尽管如此,我们也相信这是有帮助的,因为我们的重点在于理解已被研究过的架构权衡,或者在未来研究中可能有兴趣探索的架构权衡。
这本书的几个部分主要总结于最近有关改进GPU架构的研究论文。由于这一话题在近些年的普及程度有了显著的增长,本书所要涵盖的内容实在是太多了。因此我们不得不在哪些内容要讲,哪些内容不讲间做出艰难的选择。
Tor M. Aamodt, Wilson Wai Lun Fung, and Timothy G. Rogers
April 2018
引言汉化

本书探讨了图形处理器单元(GPUs, graphics processor units)的硬件设计。GPU最初是被用于实现视频游戏的实时渲染的。但如今,从智能手机、笔记本电脑、数据中心到超级计算机,GPU随处可见。实际上,对苹果A8应用处理器的分析也表明,它所集成的GPU芯片面积要比其集成的CPU核心的面积还要大得多。对更逼真的图形渲染的追求是GPU创新最初的动力。虽然图形加速仍是其主要目的,但如今GPU在非图形计算方面的支持越来越多。如今,这方面一个突出例子就是,人们开始越来越多地使用GPU来开发和部署机器学习系统。因此,本书的重点将会放在和非图形应用程序性能和能效表现有关的功能方面的改进。
本章会对GPU进行简单的概述。在1.1节中,我们首先考虑GPUs在计算加速(computation accelerator)等方面的更广泛用途,以了解GPUs和其它选择间的比较情况。然后在第1.2节中快速概览当代的GPU硬件。最后在1.4节中提供本书其余部分的路线图。
1.1 计算加速器(computation accelerator)的前景
得益于工艺、硬件架构、编译器技术和算法等多方面的共同努力,几十年来计算机系统的每美元性能一直保持着指数级的增速。据估计,这些性能提升中的一半都来自于晶体管尺寸方面的改进。然而,自2005年起,登纳德缩放比例定律(Dennard Scaling)就失效了。其导致的一个关键后果就是,如今时钟频率的提升变得缓慢得多。为提高性能,我们必须寻找更有效的硬件架构。
通过将硬件专门化(hardware specialization),使其能效提高500倍是可能的。正如Hammed等人所表明的,这种效益主要来自于几个关键方面。例如将其转型为向量硬件,比如GPU;通过消除一些指令处理的开销,GPU获得了大约10倍的效率提升。硬件专门化的其余大部分收益都来自于数据移动的减少,这可通过能执行多个算术操作的复合操作指令来实现,其能减少对大型存储阵列(如寄存器文件)的访问。
如今,计算机架构师面临的一个关键挑战就是专用性和通用性间的平衡。专门化的硬件可以获得更高的效率收益,但往往灵活性更差。在没有架构的情况下,只有那些用于大量应用中的通用算法才可被有效地运行。一个新例子就是专门用于支持深度神经网络的硬件,如Google的Tensor Processing Unit。尽管机器学习可能占用大量的硬件资源,且这些资源可能会被迁移到专门的硬件上,我们仍认为有必要去有效地支持那些基于传统编程语言软件表示的计算。
除用GPU进行机器学习外,人们对GPU计算感兴趣的另一个原因是,现代GPU是支持图灵完备编程模型的。图灵完备的意思是,理论上只要提供足够多的时间和内存,任何计算都是可以完成的。与专用加速器(special-purpose accelerator)相比,现代的GPU要灵活得多。而且对于能够充分利用GPU的硬件来说,GPU在效率方面又能比CPU高一个数量级。这种灵活性和效率的结合是非常可取的。因此现在许多顶级的超级计算机都采用了GPU,无论目的是峰值性能还是能效方面。
为在提高能效方面的同时增强灵活性,GPU制造商在它们的数代产品中重新定义了GPU的架构和编程模型。
1.2 GPU硬件基础
那些初次接触GPU的人往往会问,GPU是否最终会完全取代CPU。这似乎不太可能。因为在目前的系统中,GPU并不是一个独立的计算设备。更确切地说,GPU通常会与CPU集成在一个芯片内,或者通过插槽将仅包含GPU的插件卡插入包含CPU的系统中。CPU负责启动GPU上的计算,并将数据传输到GPU上。CPU和GPU间这样分工的一个原因是,计算开始和结束时通常都需要访问输入输出(I/O)设备。虽然有关直接在GPU上提供I/O服务的应用程序接口(API)也在努力开发中,但到目前为止,这些接口都假设附近存在CPU。这些API的目的是提供方便的接口,以隐藏CPU和GPU间通信的复杂管理,但不是完全消除对CPU的需求。为什么不消除CPU呢?用于访问I/O设备和提供操作系统服务的软件似乎缺乏一些特性,如大规模的并行性,这使得它们并不适合在GPU上运行。因此,我们先来考虑CPU与GPU间的互动。



图1.1,带CPUs的GPU计算系统

图1.1显示了一个包含CPU和GPU的典型系统的抽象图。其中(a)是典型的独立GPU(discrete GPU)配置,其中包括用于连接CPU和GPU的总线(如PCIE),其例子NVIDIA的Volta GPU等架构。(b)则是典型的集成CPU和GPU的逻辑图,其例子如AMD的Bristol Ridge APU或移动设备的GPU(mobile GPU)。需要注意的是,图1.1(1)中这种分立的GPU和CPU会分别带有独立的DRAM内存空间,CPU的内存通常被称作系统内存(system memory),GPU的则通常被称作设备内存(device memory)。并且,系统内存和设备内存通常会使用不同的DRAM技术(CPU的DDR和GPU的GDDR)。CPU的DRAM通常会优先优化访问延迟,而GPU的RAM则优先优化吞吐量。相比之下,集成GPUs的系统(图1.1(b))则只拥有一个单一的DRAM内存空间,因此必须使用相同的内存技术。由于集成CPU和GPU的芯片经常出现在低功耗的移动设备上,因此这种共享的DRAM内存往往会针对功耗进行优化(如LPDDR)。
GPU的计算应用程序最开始是在CPU上运行的。通常,GPU程序的CPU部分将会进行一些数据结构的分配和初始化。在NVIDIA和AMD较老的独立GPU上,GPU程序的CPU部分通常会在CPU和GPU中为数据结构定位空间。对于这些GPU,程序的CPU部分必须协调数据,已将其从CPU内存移动至GPU内存。而最近的独立GPU(如NVIDIA的Pascal架构),则可通过相关的软硬件支持,自动地将数据从CPU内存转移到GPU内存中。这可通过利用CPU和GPU对虚拟内存的支持来实现。NVIDIA将此称之为“统一内存(unified memory)”。在那些CPU和GPU被集成在同一芯片,并共享相同内存的系统中,不需要由程序员控制来将GPU内存复制到GPU内存。然而,由于CPU和GPU都是用了缓存,并且其中一些缓存是私有的(private),因此这里可能会出现缓存一致性(cache coherence)的问题,这点需要由硬件开发商来解决。
在某些时候,CPU必须在GPU上启动计算。在目前的系统中,这是通过在CPU上运行的驱动程序(driver)来实现的。在GPU上启动计算前,GPU计算程序还要指定哪些代码应该在GPU上运行。这些代码通常被称作kernel(关于此的更多细节,请见第2章)。同时,GPU程序的CPU部分也指定了要运行线程的数量,以及这些线程应该从哪获得输入数据。要运行的kernel、线程的数量和数据的位置是由CPU上运行的驱动程序传递给GPU硬件的。驱动程序将这些信息翻译,并将它们放置在GPU要访问,且可访问的内存中。随后,驱动程序向GPU发送信号,以告诉GPU要进行新的计算。



图1.2,一个通用的现代GPU架构

如图1.2所示,现代GPU中会包含非常多的核心(core)。NVIDIA将这些核心称之为流式多处理器(SM, streaming multiprocessor),AMD则将它们称之为计算单元(compute unit)。
这些核心将负责执行在GPU上启动的kernel程序,以单指令多线程(SIMT)的方式。GPU上的每个核心都通常可以运行上千个线程。单个核心上执行的线程间可通过便笺存储器(scratchpad memory)进行通信,并通过一些高速屏障操作(barrier operations)进行同步。
每个核心内部通常还会包括一级指令cache(L1 instruction cache)和一级数据cache(L1 data cache)。可充当带宽过滤器(bandwidth filter),以减少到较低级内存系统的通信量。 核心上运行的大量线程则可隐藏在L1 cache中找不到数据时访问内存的延迟。
为维持高水平的计算吞吐量,有必要在高计算吞吐量和高内存带宽间进行平衡(balance)。而这又将反过来要求内存系统的并行性(parallelism)。在GPU中,这种并行性是由GPU所包含的多个内存通道(memory channel)提供的。通常情况下,每个内存通道都会分别于它们对应的内存分区(memory partition)中的LLC(last-level cache)部分相关联。GPU核心通过片上互联网络(如crossbar)来与内存分区连接。当然其它架构组织也是可能的,例如在超算市场上与GPU直接竞争的Intel的Xeon Phi,就将LLC分配给了各个核心。
与超标量乱序CPU相比,GPU可将其芯片面积中的更大部分用于ALU(arithmetic logic units),并减少用于控制逻辑的面积,从而获得更好的单位面积性能(performance per unit area)。为帮助对CPU和GPU架构间的权衡有一个直观的认识,Guz等人(Guz et al. )开发了一个非常深刻的分析模型,以显示性能是如何随线程数量的变化而变化的。为保持模型的简单性,他们假设了一个简单的缓存模型,其中线程不会共享数据,并且拥有无限的片外内存带宽。



图1.3,对多核(MC)CPU架构和多线程(MT)架构(如GPU)间的性能权衡的模型分析表明,如果线程数量不足以覆盖片外存储器的访问延迟,就会出现“性能谷(performance valley)”(基于Guz et al.的Figure 1)

图1.3就再现了它们论文中的一个图表,这个图表就显示了他们在模型中发现的一个有趣的权衡(trade-off):当一个大cache被少量线程共享时(如多核CPU的情况),性能将随线程数的增加而增加(MC Region)。但是,一旦线程数量增加到cache无法容纳整个工作集(working set)时(Valley),性能就会出现下降。然后,随着线程的进一步增加,多线程技术也能隐藏较长的片外延迟,因此性能随之提高(MT Region)。GPU架构在该图中就处在右边,通过多线程来隐藏频繁的缓存缺失。



表1.1,45nm工艺下各种操作的能耗(基于Han et al., )

随着登纳德缩放比例定律(Dennard Scaling)的失效,如今计算机体系结构方面的研究创新已成为了能效提高方面的主要驱力。一个重要的观察结果就是:访问大型存储结构所消耗的能量实际上与计算消耗的能量一样多,甚至更多。表1.1所提供的45nm工艺中各操作的能量数据就是一个例子。在提出新的GPU架构设计时,必须同时也考虑到能耗。为帮助这一问题的解决,最近的GPGPU架构仿真器,如GPGPU-Sim 也引入了能源模型。
1.3 GPUs的简史
这节简要介绍图形处理单元(GPU)的历史。计算机图形学兴起于1960s,有关的项目包括如Ivan Sutherland's Sketchpad 。从最早开始,计算机图形学就一直是电影动画离线渲染的一个组成部分,然后同时也在视频游戏的实时渲染中得到了发展。早期的视频卡(video card)始于1981年IBM的单色显示适配卡(MDA, Monochrome Display Adapter),其只支持文本功能。随后,视频卡还引入了2D和3D的加速功能。除视频游戏外,3D加速器还被用于计算机辅助设计(CAD, computer-aided design)。
早期的3D图形卡如NVIDIA GeForce 256功能都相对固定。NVIDIA于2001年推出的GeForce 3则以顶点着色器(vertex shader)和像素着色器(pixel shader)的形式将可编程性引入到了GPU中。研究人员很快便学会了如何通过将矩阵数据映射至纹理(texture),并应用着色器(shader)来在早期GPU中处理线性代数。同时也很快地展开了将通用计算映射至GPU上的学术工作,以便程序员无需了解图形。这些努力赋予了GPU制造商将GPU用于通用计算的灵感。
第一个这么做的商业产品是NVIDIA的Geforce 8系列。GeForce 8系列引入了多项创新,包括从着色器和便笺存储器向任意内存地址写入的能力,以限制片外带宽,而这是在早期GPU中所缺乏的。随后的下一个创新是NVIDIA在它的Fermi架构中实现的读写数据的缓存。随后的改进包括AMD的Fusion架构,该架构将CPU和GPU集成在了同一芯片上,并引入了动态并行技术(dynamic parallelism),以允许GPU本身就能启动线程。然后,最近NVIDIA的Volta还引入了专门针对机器学习加速的Tensor Cores等功能。
1.4 本书大纲
本书的其余部分组织如下:
在设计硬件时,考虑它将支持的软件是非常重要的。因此我们将在第2章中对编程模型、代码开发过程和编译流程进行简要的总结。
在第3章中,我们探讨了支持数千个线程执行的单个GPU核心的架构。我们逐步地建立起了对支持高吞吐量和灵活编程模型所涉及的权衡越来越详尽的理解。本章最后还总结了与GPU核心架构有关的最新研究,以帮助那些刚进入该领域的人迅速跟进。
第4章讨论的是内存系统。包括GPU核心中的1级缓存(L1 cache),以及内存分区的内部组织。了解GPU的内存系统非常重要,因为GPU上运行的计算往往会受片外内存带宽的限制。本章最后总结了最近与GPU内存系统架构有关的研究。
最后,第5章概览了第3、4章中所没有提到的一些其它GPU计算架构研究。

pc8888888 发表于 2022-5-31 11:24

又来开新坑了啊!,,前排围观!

Zephus 发表于 2022-5-31 11:27

我只翻译目录和序言

Ylisar 发表于 2022-5-31 11:34

求PDF[捂脸]

JoshWindsor 发表于 2022-5-31 11:38

https://zhuanlan.zhihu.com/p/262116768

Arzie100 发表于 2022-5-31 11:41

[笔芯]

kirin77 发表于 2022-5-31 11:50

非常感谢[赞同]

Doris232 发表于 2022-5-31 11:57

好家伙 看到我prof的书 [惊喜]

KaaPexei 发表于 2022-5-31 12:01

这本书适合在国内出版吗,看看有没有必要引进。

ChuanXin 发表于 2022-5-31 12:06

我不了解
页: [1] 2
查看完整版本: 【目录序言翻译】GPGPU架构《General-Purpose Graphics ...