GPU通用计算(GPGPU)——将图形处理器用于高性能计算领域

2023-10-29

1.1 研究背景和意义
随着当前计算机性能的不断提高,应用范围越来越广泛,不同的计算任务和计算需求都在快速增长,这就决定了处理器朝着通用化和专用化两个方向飞速发展。一方面,以CPU为代表的通用处理器是现代计算机的核心部件,经过多次器件换代的变迁,不仅集成度大大提高,性能和功能也大为改善,除了负责解释、执行指令和完成各种算术逻辑运算外,还控制并协调计算机各部分的执行。另一方面,处理器在特定领域应用的专用化程度也越来越高,例如在视频、图像和音频处理等领域,都出现了相应的专用处理器(如VPU、GPU、APU等)。在针对特定应用方面与通用处理器相比,专用处理器能够更加高效的满足特定的计算任务和需求。
近年来,计算机图形处理器(GPU,Graphics Processing Unit)正在以大大超过摩尔定律的速度高速发展,极大的提高了计算机图形处理的速度和质量,不但促进了图像处理、虚拟现实、计算机仿真等相关应用领域的快速发展,同时也为人们利用GPU进行图形处理以外的通用计算提供了良好的运行平台[1]。
GPU应用领域的拓宽与其硬件发展有着极大关系。GPU自1999年首先由NVIDIA公司提出后,就其发展的速度而言,是CPU更新速度的三倍。从1993年开始,GPU的性能以每年2.8倍的速度增长。目前,图形处理器已经经历了五代发展,平均每半年就有新一代的GPU问世。
2004年,NVIDIA GeForce 6800 Ultra处理器峰值速度可达40GFLOPS,对比Intel Pentium 4 3.0GHz,采用SSE2指令集也只能达到6 GFLOPS[3]。NVIDIA最新发布的GeForce 8800图形处理器集成了6.8亿个晶体管,拥有128个流处理单元,其峰值运算能力超过340GFLOPS,而Intel最新的Pentium4 Core 2 Extreme X6800只有46.88GFLOPS。

图 1 GPU与CPU的发展与性能比较
图形处理器技术的迅速发展带来的并不只是速度的提高,还产生了很多全新的图形硬件技术,使GPU具有流处理、高密集并行运算、可编程流水线等特性,从而极大的拓展了GPU的处理能力和应用范围[2]。
正是由于GPU具有高效的并行性和灵活的可编程性等特点,越来越多的研究人员和商业组织开始利用GPU完成一些非图形绘制方面的计算,并开创了一个新的研究领域:基于GPU的通用计算(GPGPU,General-Purpose computation on GPU),其主要研究内容是如何利用GPU在图形处理之外的其他领域进行更为广泛的科学计算[4]。目前已成功应用于代数计算、流体模拟、数据库应用、频谱分析等非图形应用领域[5],甚至包括智能信息处理系统和数据挖掘工具等商业化应用。同时,也产生了一些针对GPU开发的通用计算工具包,能够基于GPU平台对FFT、BLAS、排序及线性方程组求解等科学计算进行优化实现。
基于GPU的通用计算已成为近几年人们关注的一个研究热点。将GPU用于通用计算的主要目的是为了加速计算,加速的动力来自GPU在高性能计算方面所具有的优势:
(1)高效的并行性。这一功能主要是通过GPU多条绘制流水线的并行计算来体现的。在目前主流的GPU中,配置多达16个片段处理流水线,6个顶点处理流水线。多条流水线可以在单一控制部件的集中控制下运行,也可以独立运行。GPU的顶点处理流水线使用MIMD方式控制,片段处理流水线使用SIMD结构。相对于并行机而言,GPU提供的并行性在十分廉价的基础上,为很多适合于在GPU上进行处理的应用提供了一个很好的并行方案。
(2)高密集的运算。GPU通常具有128位或256位的内存位宽,因此GPU在计算密集型应用方面具有很好的性能。
(3)超长图形流水线。GPU超长图形流水线的设计以吞吐量的最大化为目标(如NVIDIA GeForce 3流水线有800个阶段),因此GPU作为数据流并行处理机,在对大规模的数据流并行处理方面具有明显的优势。
如图2所示,CPU中的大部分晶体管主要用于构建控制电路(如分支预测等)和Cache,只有少部分的晶体管来完成实际的运算工作。GPU与CPU的设计目标不同,其控制电路相对简单,而且对Cache的需求较小,所以大部分晶体管可以组成各类专用电路和多条流水线,使GPU的计算速度有了突破性的飞跃,拥有惊人的处理浮点运算的能力。

图 2 GPU与CPU内部结构比较
正是由于GPU在并行处理和计算密集型问题求解等方面所具有的诸多优势,GPU已成为目前普通PC机所拥有的强大、高效的计算资源。从系统架构上看,GPU是针对向量计算进行了优化的高度并行的数据流处理机。这种以数据流作为处理单元的处理机,在对数据流的处理上可以获得很高的效率。根据NVIDIA公司开发的GPU工具包CUDA(Compute Unified Device Architecture)的测试结果显示,利用GPU实现FFT、BLAS、排序及线性方程组求解等科学计算,与单纯依靠CPU实现的算法相比,平均性能提高了近20倍[7]。
由此可见,GPU的发展速度(包括集成度、计算密集型问题的处理能力等)已远远超过通用处理器,特别是随着可编程能力、并行处理能力和应用范围方面得到不断提升和扩展,使得GPU已成为当前计算机系统中具备高性能处理能力的部件。因此,充分利用现有计算资源,发挥GPU的高性能计算能力,在GPU与CPU的协作模式、GPU通用计算的计算模式以及性能优化等方面进行深入研究,将对进一步拓展目前高性能计算体系结构,为科学计算和工程应用提供新型的计算资源具有重要意义。

1.2 国内外研究现状
目前,以NVIDIA和ATI为代表的GPU产品正处于快速发展的过程当中,每隔半年左右新一代的产品便会诞生。GPU在增加更多功能的同时,也提供了更强的处理能力。随着科学计算可视化、医疗图像、虚拟现实等学科的发展和娱乐产业的推动,需要高性能计算的一些领域和计算机图形领域越来越紧密的结合起来。2003年,世界图形学硬件年会(SIGGRAPH/EUROGRAPHICS Graphics Hardware 2003)迅速将其重点转向了计算机图形处理器的非图形应用。之后,IEEE、SIGGRAPH、SUPERCOMPUTING等国际会议每年都设立了GPGPU相关专题的讨论组。越来越多的科研机构开始利用GPU的处理能力进行非图形绘制方面的科学计算研究。
在基于GPU通用计算的应用系统方面,主要包括几何计算、碰撞检测、运动规划、代数运算、优化计算、偏微分方程、数值求解等。
在图形处理器出现的早期,Larsen等人在2001年利用多纹理技术实现了矩阵运算操作。2001年后,随着NVIDIA GeForce 3图形处理器的出现,顶点级可编程(Vertex Program)开始普及。虽然这个时候片段级上还只是固定的几条指令,但利用GPU进行通用计算方面的应用已经全面展开。Thompson等人在顶点级实现了一个代数运算的框架系统,其中包括矢量运算和矩阵乘法等[8]。2002年,人们开始利用Texture Shader结合Register Combiner来求解扩散方程[9]。2003年片段级可编程(Fragment Program)出现,大大加速了GPU通用计算方面的研究。很多研究人员开始利用片段程序来求解一般代数问题,包括流体模拟、物理现象仿真、有限差分方程组求解和优化等[10]。
2004年,美国研制的GPU集群系统(The Stony Brook Visual Computing Cluster)[11]运用于城市气流模拟。另外,美国北卡罗莱那大学将GPU计算应用于数据库领域,利用GPU硬件对数据库的关系查询、合取选择、聚集操作等进行加速和优化[2]。GPU 甚至被用来进行声音的合成运算,以使CPU和APU(Audio Processing Unit)达到良好的均衡。同年,美国国防技术情报中心公开发布了《GPU:未来高性能计算引擎》的科技报告,内容包括对GPU通用计算应用于高性能计算领域的发展展望和未来面临的挑战。
2005年10月NVIDIA和ATI公司相继开发基于GPGPU的物理计算API,使得GPU能够利用浮点片段着色器单元处理包含大量并行操作的科学计算任务。
2006年,分布式计算项目Folding@Home在蛋白质折叠的研究中充分发挥了GPU的高性能优势。该项目利用ATI GPU获得了每台计算机100GFLOPS的高性能[12]。另外,ATI公司在SIGGRAPH 2006上做了数据并行虚拟机(Data Parallel Virtual Machine)的演示,并使用了专门为GPU通用计算而设计的“Close to the Metal”API。通过在一个显卡上使用多个GPU来形成数据流处理集群,通过强大的数据并行处理机的性能来解决GPU并行数据加速的问题。
目前,国内在GPU通用计算方面的研究也在一些科研机构和院校逐步开展起来。2004年,清华大学利用GPU的并行计算能力和数据流处理能力,在GPU上实现了一种新的辐射度计算方法,并实现了Jacobi迭代法快速求解线性方程组。另外,中科院计算技术研究所、华中科技大学、西南交通大学等也相继针对特定应用在GPU上进行了实验验证。
在GPU通用计算的软件开发环境方面,OpenGL作为事实上的工业标准已为学术界和工业界所普遍接受,其中包括了GPU厂商以及OpenGL架构委员会(ARB)所扩充的函数,以此来实现GPU厂商提供的新功能[14]。DirectX则根据GPU新产品功能的扩充与进展及时的发布新的版本。二者在实现GPU通用计算方面都需要使用者非常熟悉GPU图形绘制的原理和硬件结构等许多具体问题。
高级绘制语言和实时绘制语言的出现,如NVIDIA的Cg[14],OpenGL Shading Language,High Level Shading Language[21]等,为编程人员提供了直接基于图形API(OpenGL或DirectX)编程的较为方便和高层次的工具。另外,随着Brook、SH等通用绘制语言的出现,允许开发人员在不考虑图形绘制和硬件结构的情况下,充分利用GPU的可编程性编写面向通用计算的绘制程序。
随着时间的推移,GPU通用计算的应用也将越来越广泛。然而,目前在软硬件方面依然存在很多需要克服的问题。首先,GPU是面向图形的,在硬件结构、指令系统、处理流程等方面和真正用于通用计算的CPU有本质差别;其次,在GPU计算的软件环境方面需要进行更多的研究和探索,如制定统一的抽象界面、编程模型、开发环境和工具软件等[2];另外,GPU通用计算需要在计算模式上提出一种能够很好的适应于问题求解的方法。

目前,GPU通用计算在研究领域通过IEEE、SIGGRAPH、SUPERCOMPUTING等国际会议以及GPGPU、Folding@Home等组织的全力支持,已经初现向主流计算的趋势发展。另外在商业化方面,NVIDIA、AMD等公司也计划推出包括GPGPU开发工具、全新的流处理硬件以及GPU+CPU的双核体系结构等一系列新型的高性能计算环境,同时也产生了一些用于信息处理等领域的商业化GPGPU应用。这些都为GPU通用计算提供了良好的平台和发展空间。但GPU通用计算不论是在硬件上,还是在软件上仍然存在很多问题,从研究到实用还要很长的路要走。
在后续的研究工作中,将对本文仍然未解决的一些问题进行研究,包括针对GPU—CPU协作模式的精确模型建立和完整的性能描述,GPU流计算模式对GPU通用计算的具体编程方法上的框架模型,以及对GPU流计算模式的性能建立模型,综合各种因素对性能的影响,对GPU流计算模型进行完整的性能评估和测试等。除此以外,后续的研究工作将围绕以下几个关键问题进行深入研究。
(1)与现实应用紧密结合,充分利用GPU通用计算的优势,进一步拓展GPU通用计算的应用范围。通过对具体问题的加速和优化实现,努力使GPU通用计算有更好的实用性,能够为更多的人所接受和认可。
(2)深入研究GPU-CPU协作计算模式和多GPU体系结构,进一步利用GPU与CPU良好的协作性构建具有高性能的计算环境,最大程度上发挥专用处理器和通用处理器各自的优势。
(3)在基于GPU通用计算的算法构造、优化、实现等方面为建立良好的数据结构组织和优化策略。
(4)针对GPU通用计算的开发工具、调试器、优化策略进行深入的研究,为GPU通用计算设计并实现一个界面友好、可扩展性强的开发环境。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GPU通用计算(GPGPU)——将图形处理器用于高性能计算领域 的相关文章

  • 2020年蓝桥杯

    专栏 蓝桥杯题目 目录 一 门牌制作 二 跑步锻炼 三 蛇形填数 四 排序 五 寻找2020 六 成绩统计 七 单词分析 八 数字三角形 九 平面切分 一 门牌制作 题目描述 小蓝要为一条街的住户制作门牌号 这条街一共有2020 位住户 门

随机推荐

  • 【NLP】第 1 章 : 语言模型简介

    使人不同于地球上其他动物物种的最大发展之一是语言的进化 这使我们能够交流和交流想法和思想 从而导致包括互联网在内的许多科学发现 这就是语言的重要性 因此 当我们涉足人工智能领域 时 除非我们确保机器能够理解和理解自然语言 否则在那里取得的进
  • 【linux】Grok Debugger本地安装过程

    1 概述 转载 https blog 51cto com fengwan 1758845 最近在使用ELK对日志进行集中管理 因为涉及到日志的规则经常要用到http grokdebug herokuapp com 进行调试 但是因为国内网络
  • nacos配置中心将原来的配置读取到配置中心并且应用

    将模块的所有配置放到配置中心里去 刚才说了那么多 我们可以将数值储存在配置中心 及时调用 那么我们是否可以将我们之前的配置放到配置中心里呢 let s go 我们当前的配值如下 spring datasource username root
  • thymeleaf固定前端信息的循环次数

    thymeleaf固定前端信息的循环次数 div class part body div
  • ajax 禁止跨域,AJAX_解决AJAX中跨域访问出现''没有权限''的错误,禁止访问非同域的网站,下面一 - phpStudy...

    解决AJAX中跨域访问出现 没有权限 的错误 禁止访问非同域的网站 下面一个例子来访问http www google cn function createobj if window ActiveXObject return new Acti
  • 鱼类识别系统:基于深度学习的生态保护与渔业管理利器【鱼类识别

    请接收一份来自大厂的保姆级面试稿 如何优雅的介绍自己的项目经验 诺瓦一面后测评 合肥就业求职好公司及薪资汇总 基恩士全流程 已测评等消息中 有无学历厂推荐 2023基恩士面经 送上一首凉凉 虹软24届校招提前批 笔试本周日开始 算法类看这里
  • Nginx的upstream_response_time

    转载请注明文章出处 tlanyan me upstream re 前几日为了查看FPM的性能 在Nginx的配置里增加FPM响应时间的header http server location php add header X Upstream
  • python3 dataframe中列数据为字典,拆分成多列或转存某个关键字的值

    下载到的数据里常有某列中为字典格式的数据 想把字典中的数据独立成列方便读取 或者读取字典中某个关键字的值独立存放 例如 A列中字典关键字type1的值存放到B列 解决思路 1 将A列格式转换为列表 2 列表再转换为dataframe 3 直
  • Linux 代理服务器 squid 安装和使用 [正向代理]

    目录 什么是 squid 相关版本 代理服务器相关配置 squid 安装 启动 squid 服务 修改配置文件 设置需要代理的 ip 查看服务运行状态 客户端的使用 软件自带代理功能 mac 网络偏好设置 全局代理 指定应用程序走代理 什么
  • ES6系列教程第四篇--asyn详解

    一 什么是async async其实是ES7的才有的关键字 放在这里说 其实是和我们前面所说的Promise Generator有很大关联的 async的意思是 异步 顾名思义是有关异步操作有关的关键字 下面我们就来构造一个async方法
  • 2022国赛数模使用的java代码

    Test public void test3 把excel直接复制过来的矩阵 插入逗号 Double data new Double 14 14 Scanner in new Scanner System in for int i 0 i
  • C/C++:MSVC与GCC的常见区别

    今天看别人的代码 忽然发现有人定义了变量长度的数组 我用msvc new数组new了好几年 原来gcc不用new 巨硬害我 巨硬害我 巨硬坑太多了 此生不再用巨硬 msvc不能定义常量长度的数组 而gcc可以 msvc的memcpy可以不包
  • IPSec基础-密钥交换和密钥保护

    Internet密钥交换 IKE 两台IPSec计算机在交换数据之前 必须首先建立某种约定 这种约定 称为 安全关联 指双方需要就如何保护信息 交换信息等公用的安全设置达成一致 更重要的是 必须有一种方法 使那两台计算机安全地交换一套密钥
  • 简单的模糊查询

    使用js在输入框输入内容 即可查询对应数据 代码如下
  • Ant Design Pro V5精讲(实践篇一):自定义登录界面、主界面

    用户需求 登录界面改造成自己的 主界面的logo及产品名称改造成自己的 语言包去掉或者只留中英语言包 登录界面改造 进入pages user login目录找到index tsx 去掉语言包栏目 div 南极客 2021 5 8 去掉国际化
  • hydra详解(仅供学习参考)

    一 概述 Hydra是一款非常强大的渗透工具 由著名的黑客组织THC开发的一款开源工具 二 使用方法 hybra基础语法 hydra 参数 IP 服务 参数 l login 小写 指定用户名进行破解 L file 大写 指定用户的用户名字典
  • Java获取两个时间里的所有月份集合

    背景 有两个时间 获取这两个时间里的所有月份集合 话不多说 上代码 AlarmDateUtil java public static List
  • CTF-AWD入门手册

    引文 AWD赛制是一种网络安全竞赛的赛制 AWD赛制由安全竞赛专家及行业专家凭借十多年实战经验 将真实网络安全防护设备设施加入抽象的网络环境中 模拟政府 企业 院校等单位的典型网络结构和配置 开展的一种人人对抗的竞赛方式 考验参赛者攻防兼备
  • 自动化控制编程软件(PLC/软PLC/Labviw/C#)特点

    一 PLC 什么是PLC PLC就是可编程控制器 是一种数字运算操作的电子系统 专为工业环境而设计 它采用了可编程序的存储器 用来在其内部存储逻辑运算 顺序控制 定时 计数和算术运算等操作的基于用户的指令 并通过数字式和模拟式的输入和输出
  • GPU通用计算(GPGPU)——将图形处理器用于高性能计算领域

    1 1 研究背景和意义随着当前计算机性能的不断提高 应用范围越来越广泛 不同的计算任务和计算需求都在快速增长 这就决定了处理器朝着通用化和专用化两个方向飞速发展 一方面 以CPU为代表的通用处理器是现代计算机的核心部件 经过多次器件换代的变