CUDA基本介绍
如何选购硬件
目前(2008. 12)只有CUDA能够完全发挥新一 代GPU的全部计算能力。Nvidia的G80以上的 GPU能够支持CUDA。
GT200系列不仅性能更强,而且具有很多实用 的新特性
Tesla专用流处理器拥有更大的显存和更高的核 心频率,通过降低显存频率,屏蔽不需要的图形 单元和改善散热获得了更好的稳定性,适合服务 器或者集群使用
CUDA基本介绍
基于Nvidia GPU的通 用计算开发 张舒
电子科技大学 电子工程学院 06级硕士研究生 信号探测与获取技术专业 研究方向:合成孔径雷达成像与雷达目标像识别 信号处理与模式识别的算法与硬件实现研究
GPU的优势
强大的处理能力 GPU接近1Tflops/s
高带宽
140GB/s
不适合的应用
需要复杂数据结构的计算如树,相关矩阵,链表, 空间细分结构等,则不适用于使用GPU进行计 算。
串行和事务性处理较多的程序 并行规模很小的应用,如只有数个并行线程 需要ms量级实时性的程序
需要重新设计算法和数据结构或者打包处理
CUDA 执行模型
重点是将CPU做为终端(Host),而GPU做为服务 器(Server)或协处理器(Coprocessor),或者设备 (Device),从而让GPU来运行一些能够被高 度线程化的程序。
Kernel不是一个完整的程序,而只是其中的一个 关键并行计算步
Kernel以一个网格(Grid)的形式执行,每个网格 由若干个线程块(block)组成,每一个线程块 又由最多512个线程(thread)组成。
grid block thread
一个grid最多可以有65535 * 65535个block 一个block总共最多可以有512个thread,在三个
如果一个warp内需要执行N个分支,那么SM就需要把每一 个分支的指令发射到每一个SP上,再由SP根据线程的逻 辑决定需不需要执行。这是一个串行过程,此时SIMT完 成分支的时间是多个分支时间之和。
存储器模型
Register Local shared Global Constant Texture Host memory Pinned host memory
CUDA的硬件架构适合通用计算
G8x系 G9x系 GT200系列 标量机架构提高了处理效率,更加适合通用计算 增加了shared memory和同步机制,实现线程间
通信 以通用的处理器矩阵为主,辅以专用图形单元
GTX280性能
933 Gflops(MAD)单精度 116 Gflops双精度(MAD )
CUDA的基本思想是尽量得开发线程级并行 (Thread Level Parallel),这些线程能够在硬 件中被动态的调度和执行。
CUDA执行模型
调用核程序时CPU调用 API将显卡端程序的二进 制代码传到GPU
grid运行在SPA上 block运行在SM上 thread运行在SP上
grid block thread
而SIMT中的warp中的每个线程的寄存器都是私 有的,它们只能通过shared memory来进行通信。
分支性能
与现代的微处理器不同,Nvidia的SM没有预测执行机制 -没有分支预测单元(Branch Predicator)。
在需要分支时,只有当warp中所有的线程都计算出各自 的分支的地址,并且完成取指以后,warp才能继续往下 执行。
每个SM中有16K shared memory 一共可以声明64K的constant memory,但每个
SM的cache序列只有8K 可以声明很大的texture memory,但是实际上的
texture cache序列为每SM 6-8K
使用存储器时可能出现的问题
致命问题:无法产生正确结果 多个block访问global同一块,以及block内
constant memory, texture memory
利用GPU用于图形计算的专用单元发展而来的 高速只读缓存
速度与命中率有关,不命中时将进行对显存的访 问
常数存储器空间较小(只有64k),支持随机访问。 从host端只写,从device端只读
纹理存储器尺寸则大得多,并且支持二维寻址。 (一个数据的“上下左右”的数据都能被读入缓 存)适合实现图像处理算法和查找表
频率提高遇到了瓶颈 从p4时代至今主流处理器 频率一直在2GHz-3GHz左右
架构上已无潜力可挖。超线程 多流水线 复杂的 分支预测 大缓存等技术已经将性能发挥到了极 致,但是通用计算中的指令级并行仍然偏低
上述技术占用了芯片上的绝大多数晶体管和面积, 目的却只是让极少数的执行单元能够满负荷工作
寄存器与local memory
对每个线程来说,寄存器都是线程私有的--这与 CPU中一样。如果寄存器被消耗完,数据将被 存 储 在 本 地 存 储 器 ( local memory)。Local memory 对 每 个 线 程 也 是 私 有 的 , 但 是 local memory中的数据是被保存在显存中,而不是片 内的寄存器或者缓存中,速度很慢。线程的输入 和中间输出变量将被保存在寄存器或者本地存储 器中。
低成本
Gflop/$和Gflops/w高于CPU
当前世界超级计算机五百强的入门门槛为 12Tflops/s
一个三节点,每节点4GPU的集群,总处理能力 就超过12Tflops/s,如果使用GTX280只需10万 元左右,使用专用的Tesla也只需20万左右
GPU /CPU计算能力比较
GPU/CPU存储器带宽比较
CUDA:目前最佳选择
未来的发展趋势
GPU通用计算进一步发展:更高版本的CUDA, OpenCL
新产品涌现:Nvidia和AMD的下一代产品,Intel 的LarraBee
CPU+GPU产品:减少了CPU-GPU通信成本, 但存储器带宽和功耗面积等可能将制约集成度。 在较低端的应用中将有用武之地。
短
GPU
1.78 (FX9800GTX+)
较小 容易 无需修改代码 通过PCI-E,实际速度一 般为3G左右,通过API实 现,较简单 低 显存,容量较大,速度 高 短
FPGA
1.02 (互联网资料中单片FPGA最大
值)
大
难
需要修改代码
需要为FPGA编写额外的驱动 程序,实现通信协议需要额
外的硬件资源
SIMT编程模型
SIMT是对SIMD(Single Instruction, Multiple Data,单指令多数据)的一种变形。
两者的区别在于:SIMD的向量宽度是显式的, 固定的,数据必须打包成向量才能进行处理;而 SIMT中,执行宽度则完全由硬件自动处理了。 (每个block中的thread数量不一定是32)
适合的应用
GPU只有在计算高度数据并行任务时才能发挥 作用。在这类任务中,需要处理大量的数据,数 据的储存形式类似于规则的网格,而对这写数据 的进行的处理则基本相同。这类数据并行问题的 经典例子有:图像处理,物理模型模拟(如计算 流体力学),工程和金融模拟与分析,搜索,排 序。
在很多应用中取得了1-2个数量级的加速
硬件资源模块化,根据市场定位裁减 高度并行 存在TPC SM 两层 每个SM又有8SP SM内存在高速的shared memory和同步机制 原子操作有利于实现通用计算中的数据顺序一致
性 shared memory Texture cache constant
cache等高速片内存储器有助于提高数据访问速 度,节省带宽
GPU/CPU架构比较
延迟与吞吐量
CPU: 通过大的缓存保证线程访问内存的低延迟, 但内存带宽小,执行单元太少,数据吞吐量小 需要硬件机制保证缓存命中率和数据一致性
GPU: 高显存带宽和很强的处理能力提供了很大 的数据吞吐量 缓存不检查数据一致性 直接访问显存延时可达数百乃至上千时钟周期
单核CPU已经走到了尽头
GPU能够更好的利用摩尔定律提供的 晶体管
图形渲染过程高度并行,因此硬件也是高度并行 的
少量的控制单元,大量的执行单元 显存被固化在了PCB上,拥有更好的EMI性能,
因此运行频率高于内存 通过更大的位宽实现了 高带宽
当前的单核并行计算产品
IBM Cell 应用主要见于PS3 SUN Niarraga NPU NV/ATI GPU 大规模应用
Shared memory
用于线程间通信的共享存储器。共享存储器是一 块可以被同一block中的所有thread访问的可读 写存储器。
访问共享存储器几乎和访问寄存器一样快,是实 现线程间通信的延迟最小的方法。
共享存储器可以实现许多不同的功能,如用于保 存共用的计数器(例如计算循环次数)或者block的 公用结果(例如计算512个数的平均值,并用于以 后的计算)。
全局存储器
使用的是普通的显存,无缓存,可读写,速度慢 整个网格中的任意线程都能读写全局存储器的任
意 位 置 , 并 且 既 可 以 从 CPU 访 问 , 也 可 以 从 CPU访问。
各种存储器的延迟
register: 1 周期 shared memory: 1 周期( 无bank conflict ) - 16
周期( 发生16路 bank conflict) texture memory: 1 ( 命中) - 数百周期(不命中) constant memory: 1 ( 命中) - 数百周期( 不命中) global local memory: 数百周期
各存储器大小
每个SM中有64K(GT200)或者32K(G8x, G9x) 寄存器,寄存器的最小单位是32bit的register file
GPU最为常见,受市场牵引发展最快,性价比 最高
架构比较
CPU GPU FPGA实现比较