原创: Hardy 架构师技术联盟
1、GPU的起源
GPU缩写为Graphics Processing Unit一般称为视觉处理单元。GPU广泛应用于嵌入式系统、移动电话、个人电脑、工作站和电子游戏解决方案。现代的GPU这是因为图像和图形处理非常高效GPU与通用处理器相比,它被设计成一个非常高的并行架构CPU在大数据块并行处理算法上更有优势。
1985年 8月20日 ATi公司成立于同年10月ATi使用ASIC1992年,技术开发了第一款图形芯片和图形卡 4月 ATi发布了 Mach32 1998年,图形卡集成了图形加速功能 4月 ATi被IDC被选为图形芯片行业的市场领导者,但当时这种芯片还没有GPU的称号,很长一段时间ATI都叫图形处理器VPU,直到AMD收购ATI之后,图形芯片正式采用GPU的名字。
NVIDIA公司于1999年发布GeForce 首先提出256图形处理芯片GPU的概念。从此NVIDIA显卡芯片使用这个新名称GPU来称呼。GPU减少显卡的正确性CPU依赖和执行原始部分CPU工作,尤其是3D图形处理时。GPU采用的核心技术包括钢铁T&L、立方环境材料地图与顶点混合,纹理压缩和凹凸映射地图,双纹理四像素256渲染引擎,硬体T&L技术可以说是GPU的标志。
2、工作原理2.1、GPU工作流程简介
GPU图形(处理)流水线完成以下工作:(不一定按以下顺序):
顶点处理:现阶段GPU读取描述3D根据顶点数据确定图形外观的顶点数据3D建立图形的形状和位置关系3D图形骨架。在支持DX8和DX9规格的GPU硬件实现了这些工作VertexShader(定点着色器)完成。光栅计算:显示器实际显示的图像由像素组成。我们需要通过一定的算法将上述图形上的点和线转换为相应的像素点。将矢量图形转换为一系列像素点的过程称为光栅化。例如,数学表示的斜线段最终转化为梯形连续像素点。纹理帖:顶点单元生成的多边形仅构成3D物体的轮廓,纹理映射(texture ** pping)一般来说,工作完成多变形表面的帖边形表面贴上相应的图片,从而产生真实的图形。TMU(Texture ** pping unit)即用于完成这项工作。像素处理:这一阶段(在光栅处理期间)GPU从而确定每个像素的最终属性。在支持DX8和DX9规格的GPU硬件实现了这些工作Pixel Shader最终输出由(像素着色器)完成ROP(光栅引擎)最终输出像素,1帧渲染后送到显存帧缓冲区。在GPU出现之前,CPU一直负责计算机的主要操作,包括多媒体处理。CPU有利于架构X86指令集的串行架构,CPU适合尽快完成设计理念中的任务。
但是这样设计的CPU多媒体处理中的缺陷也很明显:多媒体计算通常需要更高的计算密度、多并发线程和频繁的存储器访问,因为X86平台中CISC(Complex Instruction Set Computer)架构中的临时存器数量有限,CPU这类工作不适合处理。
以Intel自1999年以来,为代表的制造商做了许多改进尝试X86平台连续推出多媒体扩展指令集SSE(Streaming SIMD Extensions)第一代到第四代版本,但由于多媒体计算对浮点运算和并行计算效率的高要求,CPU很难满足硬件本身的巨大处理需求,仅仅在软件层面的改变并不能起到根本作用。
对于GPU它的任务是在屏幕上合成数百万像素的图像,即数百万任务需要并行处理,因此GPU许多任务可以并行处理,而不是像CPU完成单个任务。
因此CPU和GPU架构差异很大,CPU有许多功能模块可以适应复杂的操作环境;GPU目前,流处理器和显存控制器占据了绝大多数晶体管。
CPU大多数晶体管主要用于构建控制电路(如分支预测等)Cache,只有少数晶体管完成实际操作。GPU控制相对简单,对Cache需求小,所以大部分晶体管可以形成各种专用电路和多条流水线GPU计算速度有突破性的飞跃,处理浮点操作能力更强。
图2-1 CPU和GPU架构
在硬件设计方面,CPU 它由几个核心组成,专门为顺序串行处理而优化。另一方面,GPU它由成千上万的小而高效的核心组成,专门为同时处理多个任务而设计。
图2-2 串行运算示意图
图2-3 并计算运算示意图
通过上图,我们可以更容易地理解串行操作和并行操作之间的区别。传统的串行编写软件具有以下特点:在单一的中央处理器中运行(CPU)在计算机上;一个问题分解成一系列离散指令;指令必须一个接一个地执行;只有一个指令可以随时执行。
并行计算改进了许多重要细节:使用多个处理器运行;问题可分解为离散指令;每个部分进一步细分为一系列指令;每个部分的问题可以同时在不同的处理器上执行。提高了算法的处理速度。
3、GPU加速技术3.1、CUDA
为充分利用GPU计算能力,NVIDIA在2006年推出了CUDA(ComputeUnifiedDevice Architecture,编程模型统一计算设备架构)。CUDA是一种由NVIDIA推出的通用并行计算架构使GPU能解决复杂的计算问题。它包含了CUDA指令集架构(ISA)以及GPU内部并行计算引擎。现在开发人员可以使用C语言CUDA编写架构程序。
用户可以使用此技术NVIDIA的GeForce 8以后的GPU和较新的QuadroGPU计算GeForce 8800 GTX例如,它的核心有128个内处理器。CUDA该技术可以串通这些内处理器,成为线程处理器来解决数据密集的计算。每个内处理器都可以交换、同步和共享数据。
从CUDA系统结构的组成包括开发库、运行环境和驱动三个部分。
基于开发库CUDA技术提供的应用开发库。CUDA1.1版提供了两个标准的数学运算库:CUFFT (快速离散傅立叶变换)和CUBLAS(离散基本线性计算)的实现。这两个数学运算库解决了典型的大规模并行计算问题,也是密集数据计算中非常常见的计算类型。在开发库的基础上,开发人员可以快速、方便地建立自己的计算应用。此外,开发人员也可以CUDA在技术的基础上实现更多的开发库。
运行环境提供应用开发界面和运行组件,包括基本数据类型的定义和各种计算、类型转换、内存管理、设备访问和执行调度。CUDA实际执行中开发的程序代码有两种,一种是运行CPU宿主代码(HostCode),一是运行GPU设备代码(Device Code)。
由于不同类型的代码具有不同的物理位置和不同的访问资源,相应的运行期组件也分为公共组件、宿主组件和设备组件,基本上包括所有GPGPU开发人员可以通过运行期环境的编程接口实现各种类型的计算所需的功能和资源接口。
因为目前有很多种GPU版本的NVIDIA不同版本的显卡GPU它们之间有不同的差异,所以驱动部分基本上可以理解为CUDA-enable的GPU提供硬件设备抽象接口的设备抽象层。CUDA通过这一层提供运行环境也可以实现各种功能。硬件抽象层存在于系统结构中,CUDA也有可能在未来发展成为通用的GPU标准接口与不同厂家兼容GPU产品。
图3-1 CUDA处理流程
对用软件开发者Cuda平台调用Cuda加速库使用的语言包括:C、C 和Fortran。C/C 编程者使用UDAC/C 并用nvcc进行编译。
Nvidia的LLVM库是基于C/C 编译器的。Fortran开发于开发人员CUDA Fortran,编译使用PGI CUDA Fortran。当然CUDA该平台还支持其他编程接口,包括OpenCL,微软的DirectCompute、OpenGL ComputeShaders和 C AMP。也可以使用第三方开发人员Python、Perl、Fortran、Java、Ruby、Lua、Haskell、R、MATLAB、IDL曼赛马提亚本土支持。
3.2、OpenCL
OpenCL全称Open Computing Language即开放计算语言。OpenCL为异构平台提供了一个开放的框架标准,特别是平行程序。OpenCL多核支持的异构平台可用CPU、GPU或由其他类型的处理器组成。
CUDA只能够在NVIDIA的GPU操作硬件。OpenCL目标是面向任何并行处理器,OpenCL它是第一个真正开放的自由版权编程标准,适用于异构系统的通用计算。异构平台可以自由使用CPU、GPU、DSP、FPGA或者建造其他类型的处理器。
OpenCL程序同CUDA同样,程序也分为两部分,一部分用于编写内核程序(在OpenCL运行在设备上的代码) 语言,定义和控制平台API。OpenCL它提供了两种基于任务和数据的并行计算机制,极大地扩展了它GPU 应用范围不再局限于图形领域。
OpenCL由Khronos Group维护。Khronos Group它是一个维护多个开放工业标准的非营利性技术组织,例如OpenGL和OpenAL。这两个标准分别用于三维图形和计算机音频。OpenCL源程序可以多核CPU上也可以在GPU代码的性能和可移植性大大提高。OpenCL标准由相应的标准委员会制定,委员会成员来自业内重要厂商。
作为用户和程序员期待已久的东西,OpenCL带来两个重要变化:跨制造商的非专有软件解决方案;跨平台的异构框架可以同时发挥系统中所有计算单元的能力。
OpenCL是异构平台编程的开放行业标准。该平台可包括 CPU GPU以及其他各种计算设备,OpenCL将各种计算设备组织成一个统一的平台。OpenCL它不仅是一种编程语言,也是一种完整的并行编程框架,包括编程语言,API,支持整个平台上软件开发的函数库和运行系统。
最后,让我们一起总结一下, GPU重要的参数或指标是什么?
CUDA核心; CUDA决定了核心数量GPU并行处理能力,在深度学习、机器学习等并行计算业务下,CUDA其主要功能是性能更好的显存容量GPU要处理的数据和要处理的数据。决定了显存容量的大小GPU可加载的数据量。(在显存能够满足客户业务的情况下,提高显存不会大大提高业务性能。在深度学习和机器学习的训练场景中,显存的大小决定了一次可以加载训练数据的数量,显存在大规模训练中更为重要。显存位宽:显示一个时钟周期内可以传输数据的位数。位数越大,瞬时传输的数据量越大,这是显存的重要参数之一。显存频率:在一定程度上反映显存速度MHz(兆赫兹)为单位,显存频率因显存类型和性能而异。显存带宽由显存频率和位宽决定。以字节/秒为单位的显示芯片与显示芯片之间的数据传输速率。显卡带宽是决定显卡性能和速度的最重要因素之一。其它指标:除显卡通用指标外,NVIDIA还有一些针对特定场景优化的指标,如TsnsoCore、RTCoreRT等能力。例如TensenCore专门用于加快深度学习中的张量运算。在内容共享结束时,更多精彩的服务器内容被整理成数据中心服务器知识解决方案的电子书,共190页,分为18章。本书的简要目录如下(详情请通过阅读原文获得)
目录
①、 服务器处理器芯片概述 1
1.1 ARM介绍处理器和制造商 2
1.1.1 ARM处理器架构的新进展 8
1.1.2 ARM主流玩家处理器 10
1.1.3 业界对ARM技术发展态度 10
1.2 RISC-V介绍处理器和制造商 11
1.3 MIPS介绍处理器和制造商 15
1.3.1 龙芯产品和新进展 15
1.4 Alpha处理器和厂商介绍 17
②、 处理器生态和软件堆栈 18
2.1 处理器软件堆栈架构概述 19
2.2 操作系统和预置软件堆栈 20
2.2.1 原生操作系统支持介绍 20
2.2.2 操作系统预置应用程序 20
2.3 通用应用程序移植分析 20
2.3.1 解释型语言应用程序移植 21
2.3.2 编译型语言应用程序移植 21
2.3.3 应用程序安装包 22
2.3.4 ARM与X86编译差异与解决方法 22
2.3.5 改善应用程序并发计算能力 24
>>>以下为简略目录<<<
③、 RISC处理器几个关键知识和对比 25
④、 服务器基础知识概述 30
⑤、 服务器总线知识 50
⑥、 BIOS/UEFI固件知识 52
⑦、 服务器认证体系知识 54
⑧、 服务器CPU基础知识 54
⑨、 服务器内存基础知识 **
⑩、 服务器硬盘基础知识 70
①①、RAID原理和基础知识 87
①②、网卡原理和基础知识 93
①③、光纤和连接器基础知识 97
①④、光纤交换机基础知识 123
①⑤、GPU架构和相关知识 135
①⑥、FPGA架构和相关知识 179
①⑦、操作系统基础知识介绍 186
①⑧、服务器安全基础知识 196
更多架构师技术关知识请参考 “ 架构师技术全店资料打包汇总(全)”电子书( 32本技术资料打包汇总、详解目录和内容请通过“ 阅读原文 ”获取)。
架构师技术联盟