并行计算课程算法实践教学的新工具CUDA编程模型
- 格式:pdf
- 大小:281.91 KB
- 文档页数:4
““m
抛 御
/
w!:2^磊蒿:意’。
Jan 2003 JuI 2003 Jan 2004 Jul 2004
e-。。=/ /厂
88罗 。71/
3 oGHz
/
30GH: Core2Quad
2
CUDA编程模型
CUDA(Compute
Unified Device
.——/
Jan 2005 JuI 2005 Jan 2006 JuI 2006 Jan 2007 JuI 2007
POSIX(Portable Operating System Interface of Unix,可
移植Unix操作系统接口)线程接口也称Pthreads,1995年 被IEEE通过成为被绝大多数厂商支持的线程API。它提 供了处理诸如死锁和竞态条件这类问题的工具,但没有限 定线程的具体工作方式,对于如何编制线程并行的程序留 有很大的余地。基于此,Pthreads被认为过于底层和编程 难度较高,所以目前多数“并行计算”课程不将Pthreads 作为主要的算法实践工具。
表1
几种弗行编程模型的分析和比较
目前国内外一般教材和课程教学选用的并行编程模
特征
4种并行编程模型主要特性比较表
POSIX
OpenMP 共享存储 细粒度 共享存储 隐式 容易 较差
Ⅳ衅I
CUDA
低级原语 细粒度 共享存储 显式 难 较好
消息传递 粗粒度 分布存储 显式 较难 好
单指令多线程 细粒度 共享存储 显式 一般 较好
》》》
一
一一
puter Education
文章编号:1672-5913(2008)23—0103-04
“并行计算"课程算法实践教学的新工具:CUDA编程模型
王智广1,刘伟峰2 (1.中国石油大学(北隶)计算机科学与技术系,北京1 02249;
2.中国石油化工股份有限公司石油勘探开发研究院信息技术研究所,北京1 算
设备架构)是2007年由nVidia推出的一套并行编程模型。
图1 GPU和CPU的FLOPS理论峰值
其推出的最初目的是为解决GPU通用计算的易用性问题。 至今已有众多研究者利用GPU的高度并行性特点将科学 计算算法迁移至CUDA编程模型并在GPU上获得了相对 于CPU平均数十倍的性能提升。 随着CUDA编程模型被越来越多的研究者接受,
中图分类号:G642
文献标识码:B
1引言
1998年,教育部高等学校计算机科学与技术教学指导 委员会将“并行计算”课程定位在高等学校计算机专业高 年级本科生或研究生以及面向计算学科的非计算机专业 的研究生层次上。“并行计算”课程一般主要包括以下四 个层面:(1)在算法理论层面主要讲授可计算性与计算复杂 性以及算法研究的数学基础;(2)在体系结构层面主要讲授 并行计算机体系结构;(3)在算法设计层面主要讲授计算机科 学及其他科学计算领域中的非数值和数值并行算法;(4)在算 法实践层面主要讲授基于并行编程模型的并行算法编程。 实际上,对于大多数学习“并行计算”课程的非并行 计算研究方向的学生来讲,第(4)层面,即算法实践是课程 最具价值的组成部分。将并行算法实现成程序并投入大规 模科学与工程计算生产应用是课程的最主要学习目的之 一。其中对于编程模型的选择又是算法实践教学的重要前 提。以往“并行计算”课程在算法实践教学中大多采用 MPI作为编程模型,可MPI的粗粒度特性不仅不足以满足 “并行计算”课程的实践需要,还很难利用当前多核微处 理器的硬件细粒度优势。 本文从当今多核微处理器的发展趋势出发,介绍适用 于多核微处理器的编程模型CUDA,以及其适用于“并行
3)
摘要:本文首先从当今多核微处理器的发展趋势出发,介绍适用于多核微处理器的细粒度并行编程模型 CUDA,以及其适用于“并行计算”课程教学的一系列优势,接着对当前可用的几种并行编程模型进行分析 和比较,最后给出采用CUDA编程模型的一个矩阵与矩阵相乘的教学实例。 关键词:并行计算;实践教学;CUDA
型主要有3种:消息传递接口MPI、线程接口POSIX和基 于指令的OpenMP。这三种编程模型各有比较鲜明的特点。 本节将它们和本文选用的CUDA编程模型一并进行分析 和比较。
3・1 POSIX
并行粒度 存储模式 数据调用方式 学习难度 可扩展性
4矩阵与矩阵相乘并行算法教学实例
矩阵与矩阵相乘并行算法是最常用也最具代表性的 并行算法之一,十分适合作为学生对并行算法实践的入门
万方数据
”卜…一1而磊蕊i墨圈隧蕊————…
啪 乏享 啪 ||
∞乱。一Lo
镶镧《
由此可见,相对于多核CPU而言,GPU的高度并行
J
体系结构天然地适合进行并行计算的研究和教学。而在 2007年以前,GPU的并行程序设计还主要是通过OpenGL 或Direct3D这种图形API来完成,入门难度较高。所以在 高性能计算的研究者们对于利用GPU进行并行计算的迫 切需求下,CUDA编程模型诞生了。
计算”课程教学的一系列优势,并给出对几种主流并行编 程模型与CUDA的分析和比较,最后提供一个基于CUDA 的矩阵与矩阵相乘程序作为教学实例。
2多核微处理器发展趋势
过去的20年间,提高运行频率是CPU性能提高的主 要方式,然而,自2003年以来,这种趋势发生了变化, 不断提高的CPU频率带来了高功耗和高发热量,使得主流 CPU频率止步于4 GHz,并向单芯片多处理器(Chip Multi Processors,CMP),即多核方向发展。2005年,Intel和AMD 正式向主流消费级市场推出了双核心的CPU产品,2007 年推出了4核心的CPU,按照各厂商的发展路线图,今后 大约每2年单CPU上的核心数将翻番。但由于市场变化 和研制成本的原因,多核CPU的每个核都基于以往CPU 的单核设计,保留了如乱序执行等很多单核时代的复杂 执行方式,使得其对于科学计算等问题的计算能力提高非 常有限。 此时,以游戏加速和图形处理为初衷设计的 GPU(graphics
University of Illinois at
由图可见,GPU的浮点运算速度可以达到CPU的5 倍以上。带来这种数据处理能力差别的主要原因在于GPU 最早为并行处理大量三维计算机图形学中的顶点和像素 数据而设计,近年来为通用计算又进行了一系列改进。其 天生并行的体系结构决定了GPU非常擅长以并行的方式 运行高运算强度的应用。以nVidia GPU为例,与CPU体 系结构相比,GPU体系结构的优势主要有: (1)单芯片上的更多处理器(核)与G80核心GPU包 含的128个核心相比,CPU目前最高仅达到4核,虽然 CPU每个核的运算能力高于GPU上的单核,但后者凭借 更多核的并行在计算能力上高出很多; (2)将更多的晶体管用于计算单元GPU运算能力远 高于CPU的重要原因是GPU将更多的晶体管用于计算单 元。目前CPU将约70%的晶体管用于Cache;而GPU晶 体管的80%以上是计算单元; (3)超多活动线程G80 GPU能够保持12288个活动 线程的上下文,与此相比,CPU通过线程池管理的线程不 过数十个。GPU超多活动线程可以隐藏大量计算单元的访 存延迟,在处理数据敏感的应用时要比CPU的Cache方式 更加有效; (4)高显存带宽 GPU与其显示设备内存间的带宽超
万方数据
》》卜—————]囊豳豳霹里里型塑型!!
次存取的数据。当每个线程访问不同bank的时候,共享内 存的存取延迟与寄存器的存取延迟一样低,即数百倍地低 于片外显示内存或主存的存取延迟,所以对共享内存的有 效显式操作是提高CUDA并行程序运行效率的关键。本文 第4节会给出一个使用共享内存的教学实例。 总体来讲,CUDA编程模型中基于多核的SIMT细粒 度并行方式和对存储器的显式操作是十分理想的课程教 学工具,有助于学生设计既贴近硬件体系结构又独立于运 行平台的并行程序。虽然学生在算法实践初期会觉得细粒 度的并行程序设计较难接受,但就我们的教学经验来看, 具有计算机体系结构和编程语言基础的学生大约在4周内 可以对CUDA的并行编程模型基本熟悉,况且在算法实践 中获得数十倍性能提升带来的成就感也会促使学生逐渐 克服学习的困难。
processing
unit,图形处理器)以超出摩尔定
律的速度发展,并开始在非图形的高性能计算领域被大量 使用。图1为近年来同等市场价格CPU和GPU的浮点运 算速度对比图。
作者简介:王智广(1 964-),男,教授,CCF高级会员,主要研究方向为分布式计算和并行计算;刘伟峰(1981一),男,中国石 油大学(北京)计算机科学与技术系2006届硕士,工程师,CCF会员,主要研究方向为图形处理器架构,高性能计算可视化。
过CPU与内存的带宽10倍以上。配合超多活动线程,使 GPU十分适合大规模并行处理高运算强度的应用。 正是由于这些原因,在国际高性能计算研究领域,针 对以GPU为代表的硬件细粒度并行计算的研究是近年来 的一个新的热点。并诞生了大量基于GPU的科学计算改 进算法,其领域涵盖各类数值模拟方法,包括计算天体物 理、计算流体力学、计算量子化学,甚至计算金融学在内 的众多领域已经从GPU计算中获益。
2.1
SIMT运行方式 与以往SIMD和MIMD的并行计算常用指令和数据流
运行方式相比,CUDA程序的运行方式被称为SIMT(Single
Instruction Multiple
Thread,单指令多线程),其意义是可以
让程序设计人员把编程的SIMD硬件对象作为若干个标量 处理器调用,即SIMT没有固定的矢量宽度,并允许每一 条线程占据各自路径,在不受SIMD可编程性制约的前提 下保证每个处理器核心一直处于完全被利用状态。这样在 并行程序设计上就可以将精力专注于程序线程的拆分,达 到提高并行化效果并且降低程序编写难度的目的。 2.2显式数据调用 CUDA的访存指令与C语言相同,但增加了一项重要 特性,即对共享内存(SharedMemory)的显式操作。共享内 存是GPU芯片内的一块分为16个bank的16KB存储器, 主要作用是作为并发线程间的共享数据存放空间,另外也 可以显式地将其当成Cache使用,存放并发线程其需要多