首页 > 硬件数码 > 外设配件 > 正文

挑战卡皇TITAN!GTX 780 SLI巅峰测试(5)
2013-06-06 10:44  中关村在线    我要评论()
字号:T|T

GK110核心新编码和指令优化

新ISA编码:每个线程255个寄存器

可由线程访问的寄存器的数量在 GK110 中已经翻了两番,允许线程最多访问 255 个寄存器。由于增加了每个线程可用的寄存器数量,Fermi 中承受很大寄存器压力或泄露行为的代码的速度能大大的提高。典型的例子是在 QUDA 库中使用 CUDA 执行格点 QCD(量子色动力学)计算。基于 QUDA fp64 的算法由于能够让每个线程使用更多寄存器并减少的本地内存泄漏,所以其性能提高了 5.3 倍。

Shuffle 指令

为了进一步提高性能,Kepler 采用 Shuffle 指令,它允许线程在 Warp 中共享数据。此前,Warp 内线程之间的数据共享需要存储和加载操作以通过共享内存传递数据。使用 Shuffle 指令,Warp 可以读取来自Warp 内其他线程中任意排列的值。Shuffle 支持任意索引引用(即任何线程读取任何其他线程)。有用的 Shuffle 子集包括下一线程(由固定量弥补抵消)和 Warp 中线程间 XOR “蝴蝶”式排列,也称为 CUDA 性。

Shuffle 性能优于共享内存,因此存储和加载操作能够一步完成。Shuffle 也可以减少每个线程块所需共享内存的数量,因为数据在 Warp 级交换也不需要放置在共享内存中。在 FFT 的情况下,需要共享一个 Warp 内的数据,通过使用 Shuffle 获得 6%的性能增益。

1

此示例表明某些变量可以在 Kepler 中使用 Shuffle 指令。

原子运算

原子内存运算对并行编程十分重要,允许并发线程对共享数据结构执行正确的读‐修改‐写运算。原子运算如 add、min、max 和 compare,swap 在某种意义上也是也是原子运算,如果在没有其他线程干扰的情况下执行读、修改和写运算。原子内存运算被广泛用于并行排序、归约运算、建制数据结构而同时不需要锁定线程顺序执行。

Kepler GK110 全局内存原子运算的吞吐量较 Fermi 时代有大幅的提高。普通全局内存地址的原子运算吞吐量相对于每频率一个运算来说提高了 9 倍。独立的全局地址的原子运算的吞吐量也明显加快,而且处理地址冲突的逻辑已经变得更有效。原子运算通常可以按照类似全局负载运算的速度进行处理。此速度的提高使得原子运算足够快得在内核内部循环中使用,消除之前一些算法整合结

果所需要的单独的归约传递。Kepler GK110 还扩展了对全局内存中 64‐位原子运算的本机支持。除了 atomicAdd、atomicCAS 和 atomicExch(也受 Fermi 和 Kepler GK104 支持)之外,GK110 还支持以下功能:

atomicMin、atomicMax、atomicAnd、atomicOr、atomicXor

其他不受本机支持的原子运算(例如 64 位浮点原子运算)可以使用 compare‐and‐swap (CAS) 指令模拟。

纹理改进

GPU 的专用硬件纹理单元对于需要取样或过滤图像数据的计算机程序来说是宝贵的资源。Kepler中的纹理吞吐量与 Fermi 相比有明显提高,每个SMX单元包含16纹理过滤单元,对比Fermi GF110 SM 提高了4倍。

此外,Kepler改变了管理纹理状态的方法。在Fermi时代,为让GPU引用纹理,必须在固定大小绑定表中分配“槽”才能启动 Grid。表中槽数量最终限制程序一次可以读取多少个独特的纹理。最终,在 Fermi 中限制程序仅可以同时访问128纹理。

Kepler中有无绑定纹理,不需要额外步骤:纹理状态已保存为内存中的对象,硬件按需获取这些状态对象,绑定表过时。这有效地消除了计算程序引用独特纹理数量的任何限制。相反,程序可以在任何时间映射纹理和通纹理处理周围。

Kepler 内存子系统:L1、L2、ECC

Kepler的内存层次结构与Fermi类似。Kepler架构支持统一内存加载和存储的请求路径,每个SMX 多处理器有一个L1缓存。Kepler GK110 还使编译器指示为只读数据增设一个新的缓存,如下所述。

1

64KB可配置共享内存和L1缓存

在 Kepler GK110 架构(如在上一代 Fermi 架构)中,每个 SMX 有 64 KB 的片上存储器,可配置为 48 KB 的 共享存储器和 16 KB 的 L1 缓存,或配置为 16 KB 的共享存储器和 48 KB 的 L1 缓存。Kepler 目前在配置共享存储器的分配和 L1 缓存方面的灵活性更大,允许共享存储器和 L1 缓存之间以 32KB/32KB 划分。为了支持 SMX 单元增加的吞吐量,用于 64 位或更大负载运算的共享存储器带宽相对 Fermi SM 也增加一倍,到每主频 256B。

48KB只读‐数据缓存

除 L1 缓存之外,Kepler 为只读数据引入 48 KB 缓存为了函数的持续时间。在 Fermi 时代,该缓存只能由纹理单元访问。专家程序员通常发现它的优势是通过将数据映射为纹理来加载数据,但这种方法有很多局限性。

在 Kepler 中,除了大大提高了该缓存的容量之外,还伴随着纹理功力的提高,我们决定让缓存为一般负载运算直接访问 SM 。使用只读的路径好处极大,因为它使负载和工作组的影响远离共享/L1缓存路径。此外,其他情况下,只读数据缓存更高的标签带宽支持全速非对齐内存访问模式。

该路径的使用是由编译器自动管理(通过参数 C99 访问任何变量或称为常量的数据结构)。标准关键字 “const_restrict” 将被编译器标记以通过只读数据缓存加载。

改进的L2缓存

Kepler GK110 GPU 具有 1536KB 的专用 L2 缓存内存,是 Fermi 架构中 L2 的 2 倍。L2 缓存是SMX 单元之间主要数据统一点,处理所有加载、存储和纹理请求并提供跨 GPU 之间有效、高速的数据共享。Kepler 上的 L2 缓存提供的每时钟带宽是 Fermi 中的 2 倍。之前不知道数据地址的算法,如物理求解器、光线追踪以及稀疏矩阵乘法,从高速缓存层次结构中获益匪浅。需要多个SM读取相同数据过滤和卷积内核也从中受益。

内存保护支持

与 Fermi 相同,Kepler的注册文件、共享内存、L1 缓存、L2 缓存和 DRAM 内存受单错纠正双错检测 (SECDED) ECC 代码保护。此外,只读的数据缓存‐通过奇偶校验支持单错纠正,在奇偶校验错误的情况下,缓存单元自动使失效,迫使从 L2 读取正确的数据。

ECC 校验位从 DRAM 获取必定消耗一定量的带宽,这会导致启用 ECC和停用 ECC的运算之间的差异,尤其对于内存带宽敏感的应用程序。基于 Fermi 的经验,Kepler GK110 对 ECC 校验位获取处理进行了几项优化。结果,经内部的计算应用测试套件测量,开启和关闭 ECC 的性能三角洲已经平均降低 66%。

智能细化运算:Dynamic Parallelism

在混合 CPU‐GPU 系统中,由于 GPU 的性能/ 功率比提高,使应用程序中大量并行代码完全在GPU 高效运行,提高了可扩展性和性能。为了加快应用程序的额外并行部分的处理,GPU必须支持更加多样化的并行工作负载类型。

Dynamic Parallelism 是 Kepler GK110 引入的新功能,能够让 GPU 在无需 CPU 介入的情况下,通过专用加速硬件路径为自己创造新的工作,对结果同步,并控制这项工作的调度。

在内核启动时,如果问题的规模和参数已知,那么 Fermi 在处理大型并行数据结构时效果非常好。所有的工作是从主机 CPU 启动,会运行到完成,并返回结果返回到 CPU。结果将被用来作为最终的解决方案的一部分,或通过 CPU 进行分析,然后向 GPU 发送额外的处理请求以进行额外处理。

在 Kepler GK110中,任何一个内核都可以启动另一个内核,并创建处理额外的工作所需的必要流程、事件以及管理依赖,而无需主机 CPU 的介入。T 该架构能让开发人员更容易创建和优化递归和数据依赖的执行模式,并允许更多的程序直接运行在 GPU 上。可以为其他任务释放系统CPU,或可以用功能少的 CPU 配置系统以运行相同的工作负载。

1

Dynamic Parallelism 允许应用程序中更多的并行代码直接由 GPU 本身启动(右侧图像),而不需要 CPU 的干预(左侧图像)。

Dynamic Parallelism 允许更多种并行算法在 GPU 上执行,包括不同数量的并行嵌套循环、串行控制任务线程的并行队或或卸载到 GPU 的简单的串行控制代码,以便促进应用程序的并行部分的数据局部化。

因为内核能够根据GPU 中间结果启动额外工作负载,程序员现在可以智能处理负载平衡的工作,以集中其大量资源在需要处理能力最大或与解决方案最有关的问题上。

一个例子是动态设置数值模拟的 Grid。 通常 Grid 主要集中在变化最大的地区,需要通过数据进行昂贵的前处理。另外,均匀粗 Grid 可以用来防止浪费的 GPU 资源,或均匀细 Grid 可以用来确保捕获所有功能,但这些选项的风险是在不太被注意的地区缺少模拟功能或“过度消费”的计算资源。

有了 Dynamic Parallelism,可以在运行时以数据依赖形式动态确定‐Grid解决方案。以粗 Grid开始,模拟“放大”注意的区域,同时避免在变化不大区域中不必要的计算。虽然这可以通过使用一系列的 CPU 启动的内核来完成,但是通过分析数据、作为单个模拟内核部分启动额外工作让 GPU 细化 Grid 本身要简单的多,消除了 CPU 的中断以及CPU和GPU之间的数据传输。

1

上面的例子说明了在数值模拟,采用动态调整 Grid 的好处。为了满足峰值的精度要求,固定的分辨率仿真必须运行在整个模拟域过于精细的分辨率上,而多分辨率 Grid 根据当地的变化为每个区域应用正确的模拟分辨率。

新闻热线:010-68947455

关键词: GTX 780 SLI 卡皇TITAN

责任编辑:晏井浩

我要评论

已有位网友参与评论

本类最热

科技视界

网站地图

牛华网

华军下载 | 牛华网 | 盒子 | pcsoft | 论坛

实用工具

关于我们 | 新闻投稿 | 软件发布 | 版权声明 | 意见建议 | 网站地图 | 友情连接 | RSS订阅 | 总编信箱 | 诚聘英才 | 联系我们

苏ICP证编号 B2-20090274 本站特聘法律顾问:于国富律师

Copyright (C) 1997-2012 newhua.com 牛华网 版权所有