当前位置:
文档之家› [GPU计算]CUDA基本介绍
[GPU计算]CUDA基本介绍
0.119 (Core2 E6700中单核)
小 容易 无需修改代码 不需要 高
1.78 (FX9800GTX+)
较小 容易 无需修改代码 通过PCI-E,实际速度一 般为3G左右,通过API实 现,较简单 低 显存,容量较大,速度 高 短
片外存储器
开发周期
内存,容量大,速度低
短
当前的GPU开发环境
不适合的应用
需要复杂数据结构的计算如树,相关矩阵,链表, 空间细分结构等,则不适用于使用GPU进行计 算。 串行和事务性处理较多的程序 并行规模很小的应用,如只有数个并行线程 需要ms量级实时性的程序
需要重新设计算法和数据结构或者打包处理
CUDA 执行模型
重点是将CPU做为终端(Host),而GPU做为服务 器(Server)或协处理器(Coprocessor),或者设备 (Device),从而让GPU来运行一些能够被高 度线程化的程序。 CUDA的基本思想是尽量得开发线程级并行 (Thread Level Parallel),这些线程能够在硬 件中被动态的调度和执行。
GPU最为常见,受市场牵引发展最快,性价比 最高
架构比较
CPU GPU FPGA实现比较
硬件 AES-128解 密实测速度 (GByte/s) 开发难度 增加功能 硬件升级 与主控端通信 性能/成本 CPU GPU FPGA 1.02 (互联网资料中单片FPGA最大 值) 大 难 需要修改代码 需要为FPGA编写额外的驱动 程序,实现通信协议需要额 外的硬件资源 高 FPGA板上内存,一般为 DDRII, 速度低 长
Cg:优秀的图形学开发环境,但不适合GPU通 用计算开发 ATI stream:硬件上已经有了基础,但只有低层 次汇编能够使用所有资源。高层次抽象Brook本 质上是基于上一代GPU的,缺乏良好的编程模 型 OpenCL:联合制定的标准,抽象层次较低,对 硬件直接操作更多,代码需要根据不同硬件优化 CUDA:目前最佳选择
未来的发展趋势
GPU通用计算进一步发展:更高版本的CUDA, OpenCL 新产品涌现:Nvidia和AMD的下一代产品,Intel 的LarraBee CPU+GPU产品:减少了CPU-GPU通信成本, 但存储器带宽和功耗面积等可能将制约集成度。 在较低端的应用中将有用武之地。
CUDA的硬件架构适合通用计算
如何选购硬件
ห้องสมุดไป่ตู้
目前(2008. 12)只有CUDA能够完全发挥新一 代GPU的全部计算能力。Nvidia的G80以上的 GPU能够支持CUDA。 GT200系列不仅性能更强,而且具有很多实用 的新特性 Tesla专用流处理器拥有更大的显存和更高的核 心频率,通过降低显存频率,屏蔽不需要的图形 单元和改善散热获得了更好的稳定性,适合服务 器或者集群使用
单核CPU已经走到了尽头
频率提高遇到了瓶颈 从p4时代至今主流处理器 频率一直在2GHz-3GHz左右 架构上已无潜力可挖。超线程 多流水线 复杂的 分支预测 大缓存等技术已经将性能发挥到了极 致,但是通用计算中的指令级并行仍然偏低 上述技术占用了芯片上的绝大多数晶体管和面积, 目的却只是让极少数的执行单元能够满负荷工作
SM架构
DUAL-Issue 并发
每二周期可以发射 一次指令 FPU和SFU指令延迟 是四周期
某些情况下可以让FPU和SFU并发执行,实现超标量 理论处理能力峰值没有计算dual-issue 双精度浮点计算不能dual-issue
CUDA架构GPU硬件特点
硬件资源模块化,根据市场定位裁减 高度并行 存在TPC SM 两层 每个SM又有8SP SM内存在高速的shared memory和同步机制 原子操作有利于实现通用计算中的数据顺序一致 性 shared memory Texture cache constant cache等高速片内存储器有助于提高数据访问速 度,节省带宽
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: 数百周期
grid block thread
一个grid最多可以有65535 * 65535个block 一个block总共最多可以有512个thread,在三个 维度上的最大值分别为512, 512和64
grid block thread
grid之间通过global memory交换数据 block之间不能相互通信,只能通过global memory共享数据,不要让多个block写同一区段 内容(不保证数据一致性和顺序一致性) 同一block内的thread可以通过shared memory 和同步实现通信 block间粗粒度并行,block内thread细粒度并行
G8x系 G9x系 GT200系列 标量机架构提高了处理效率,更加适合通用计算 增加了shared memory和同步机制,实现线程间 通信 以通用的处理器矩阵为主,辅以专用图形单元
GTX280性能
933 Gflops(MAD)单精度 116 Gflops双精度(MAD ) 512bit位宽ddr3显存,提供了140GB/s的带宽 1G的显存
各存储器大小
每个SM中有64K(GT200)或者32K(G8x, G9x) 寄存器,寄存器的最小单位是32bit的register file 每个SM中有16K shared memory 一共可以声明64K的constant memory,但每个 SM的cache序列只有8K 可以声明很大的texture memory,但是实际上的 texture cache序列为每SM 6-8K
分支性能
与现代的微处理器不同,Nvidia的SM没有预测执行机制 -没有分支预测单元(Branch Predicator)。 在需要分支时,只有当warp中所有的线程都计算出各自 的分支的地址,并且完成取指以后,warp才能继续往下 执行。 如果一个warp内需要执行N个分支,那么SM就需要把每一 个分支的指令发射到每一个SP上,再由SP根据线程的逻 辑决定需不需要执行。这是一个串行过程,此时SIMT完 成分支的时间是多个分支时间之和。
SIMT编程模型
SIMT是对SIMD(Single Instruction, Multiple Data,单指令多数据)的一种变形。 两者的区别在于:SIMD的向量宽度是显式的, 固定的,数据必须打包成向量才能进行处理;而 SIMT中,执行宽度则完全由硬件自动处理了。 (每个block中的thread数量不一定是32) 而SIMT中的warp中的每个线程的寄存器都是私 有的,它们只能通过shared memory来进行通信。
warp
Warp是硬件特性带来的概念,在CUDA C语言 中是透明的(除vote函数),但应用中不能忽略 一个warp中有32个线程,这是因为SM中有8个 SP,执行一条指令的延迟是4个周期,使用了流 水线技术 一个half warp中有16个线程,这是因为执行单 元的频率是其他单元的两倍,每两个周期才进行 一次数据传输
CUDA基本介绍
基于Nvidia GPU的通 用计算开发 张舒
电子科技大学 电子工程学院 06级硕士研究生 信号探测与获取技术专业 研究方向:合成孔径雷达成像与雷达目标像识别 信号处理与模式识别的算法与硬件实现研究
GPU的优势
强大的处理能力 GPU接近1Tflops/s 高带宽 140GB/s 低成本 Gflop/$和Gflops/w高于CPU 当前世界超级计算机五百强的入门门槛为 12Tflops/s 一个三节点,每节点4GPU的集群,总处理能力 就超过12Tflops/s,如果使用GTX280只需10万 元左右,使用专用的Tesla也只需20万左右
存储器模型
Register Local shared Global Constant Texture Host memory Pinned host memory
寄存器与local memory
对每个线程来说,寄存器都是线程私有的--这与 CPU中一样。如果寄存器被消耗完,数据将被 存 储 在 本 地 存 储 器 ( local memory)。Local memory 对 每 个 线 程 也 是 私 有 的 , 但 是 local memory中的数据是被保存在显存中,而不是片 内的寄存器或者缓存中,速度很慢。线程的输入 和中间输出变量将被保存在寄存器或者本地存储 器中。