前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DAY82:阅读Compute Capability 6.x

DAY82:阅读Compute Capability 6.x

作者头像
GPUS Lady
发布2018-10-23 11:03:20
7060
发布2018-10-23 11:03:20
举报
文章被收录于专栏:GPUS开发者GPUS开发者

我们正带领大家开始阅读英文的《CUDA C Programming Guide》,今天是第82天,我们正在讲解计算能力,希望在接下来的19天里,您可以学习到原汁原味的CUDA,同时能养成英文阅读的习惯。

关注微信公众号,可以看到之前的阅读

本文共计290字,阅读时间30分钟

前情回顾:

DAY 75:阅读Configuration Options

DAY76:阅读标准数学函数

DAY77:阅读Intrinsic Functions

DAY78:阅读Texture Fetching

DAY79:阅读 Compute Capabilities

DAY80:阅读Compute Capability 3.x

DAY81:阅读Compute Capability 5.x

H.5. Compute Capability 6.x

H.5.1. Architecture

A multiprocessor consists of:

  • 64 (compute capablity 6.0) or 128 (6.1 and 6.2) CUDA cores for arithmetic operations,
  • 16 (6.0) or 32 (6.1 and 6.2) special function units for single-precision floating-point transcendental functions,
  • 2 (6.0) or 4 (6.1 and 6.2) warp schedulers.

When a multiprocessor is given warps to execute, it first distributes them among its schedulers. Then, at every instruction issue time, each scheduler issues one instruction for one of its assigned warps that is ready to execute, if any.

A multiprocessor has:

  • a read-only constant cache that is shared by all functional units and speeds up reads from the constant memory space, which resides in device memory,
  • a unified L1/texture cache for reads from global memory of size 24 KB (6.0 and 6.2) or 48 KB (6.1),
  • a shared memory of size 64 KB (6.0 and 6.2) or 96 KB (6.1).

The unified L1/texture cache is also used by the texture unit that implements the various addressing modes and data filtering mentioned in Texture and Surface Memory.

There is also an L2 cache shared by all multiprocessors that is used to cache accesses to local or global memory, including temporary register spills. Applications may query the L2 cache size by checking the l2CacheSize device property (see Device Enumeration).

The cache behavior (e.g., whether reads are cached in both the unified L1/texture cache and L2 or in L2 only) can be partially configured on a per-access basis using modifiers to the load instruction.

H.5.2. Global Memory

Global memory behaves the same way as devices of compute capability 5.x (See Global Memory).

H.5.3. Shared Memory

Shared memory behaves the same way as devices of compute capability 5.x (See Shared Memory).

本文备注/经验分享:

Pascal这一代的章节非常简单。本章小结主要说明了,本代有两种不同的计算能力(还有一种是6.2, TX2,这里略过了)。分别为计算能力6.0和计算能力6.1,具体的正好对应专业卡和家用卡的各个型号。

如同前一节所说, Pascal实际上并无和Maxwell的本质区别,而这代的卡的推出,正好迎来了AI和深度学习的浪潮, 于是这两个实际上可以看成, 分别对Maxwell进行了不同方面修补后的更新版本: (1)6.0计算能力添加了200%的FP16(半精度)的通用计算能力。具体的说,是增加了几条packed的半精度的计算指令。这些指令和普通的float(单精度的)计算覆盖基本是一样的,只是每条可以同时计算2个打包装一起的半精度数据(half2),这样做维持通用化的基础上,6.0简单的这样添加,就得到了200%的半精度性能提升,而没有对系统的其他部件(例如寄存器的读写)造成压力。 (2)6.1计算能力则添加的是400%的INT8(具体的说,还有INT16 * INT8的指令,不过这个先不用说)。这两种指令的添加,使得6.1在低精度的运算场合,取得了长足的进步(400%啊)!但是这一代的最大问题是,这两种Pascal对Maxwell的新增指令, 没有统一起来。具体到深度学习领域,则很多时候,在运算的时候需要使用FP16训练,而推导的时候需要使用INT8部署给终端。 这样很多时候用户需要购买两种卡(6.0和6.1),但好在6.1的卡的便宜很多(家用卡), 在用户实际的做出产品并出售的时候,这这些用户的客户们那里, 还是能找到很多INT8的应用场合的。实际上,这个都已经是两年多前的事情了, 具体的NV内部的立项估计更早,但是从今天的角度看(例如华为前天推出的新芯片),主打的2个领域就是FP16和INT8, 不能不说NV开创了一个时代,很高瞻远瞩。不仅仅如此,和这些专用的芯片不同,Pascal这一代除了新增的这两点外,还是一款通用的CUDA计算平台,对于非AI的用户,它们依然可以看成是更好的通用高性能计算的设备: 6.0将每个SM里面的计算单元数量砍半(参考本章节开头),这样在同样的SP数量的情况下, 实际上可用的资源翻倍(Shared Memory不太到翻倍,请参考本章节数据),有利于普通的高性能计算场合的性能提升。 此外,虽然Pascal是对Maxwell的修补,而Maxwell只是当初的试水之作(最初NV说Maxwell永远不出专业卡--虽然后来改变了说法),但是6.0的Pascal依然翻倍了资源,同时增加了double的性能到1/2,这样6.0还是一款很好的科学计算用途的卡。这点值得用户考虑。 这是从K80以来, GP100是当时唯一的更好选择了。且这代的专业卡(6.0)很多还配置了HBM2显存。这种显存的带宽非常高。 而且作为专业卡,HBM2的6.0 Pascal具体之前的专业卡所没有的特殊特性:开启了ECC后,不损失显存带宽。这是因为HBM2的显存使用了额外的引脚来传输校验数据,不占用通用的带宽(以前的卡开ECC都将损失带宽的,比例随着具体的代的不同而不同) 这代是对专业用户的一个很重要的用途。 此外,这代的卡还引入了NVLink,当然,直到后来的Turing才逐渐的推广开。这点另说了。这是6.0的Pascal,在非深度学习的应用场合的的用途。 这代卡别忘记了还有6.1的,主要是家用系列(部分专业卡也是6.1的。只要是一些低端),这也是为了昨天我们看到手册的章节几乎没有提到2代Maxwell的原因,也是为何今天的关于Pascal的章节,很多地方直接描述成:Same as Compute Capablity 5.X的原因。这里的5.X,更精确的应该说是5.2, 这两个太像了。 包括5.2开始引入的BUG/Feature, 部分情况下L1会被自动禁用,也在6.1的Pascal身上完美继承下来。单考虑到这代卡从28nm制程进化到了16nm(以及部分低端的14nm),功耗还是得到了极大的优化的, 这样这代的两种卡(6.0和6.1)都应该看成是更好的Maxwell。同时还有对专业数值计算,以及深度学习市场的开进。 除了手册章节上的这些,这代的Pascal还有一些非CUDA计算方面,但是却能影响到CUDA计算方面的改进: 一个就是NVENC编码性能的提升,根据用户的实际测试,Pascal 6.1的HEVC编码质量和后期的GM206之类的Maxwell并无区别,质量非常好,国内的视频压制组,如果没有自己的能力去钻研x265的编码参数,则很多已经转向了Pascal开始的NVENC了。速度快而省电。 具体到我们能看到的表现则是,计算能力5.2后期的卡,在编码的时候,或者转码的时候,解码单元(NVDEC), 编码单元(NVENC)和通用计算单元(SM)都有不少的占用率,功耗也较大。但是Pascal直接将大部分的工作转换到GPU内部的硬件IP Block上完成了,用nvidia-smi观察一个具体的转码过程,会发现SM的使用率基本是0%。等等!这对普通高性能通用计算的用户来说有什么用途? 巧合的是,论坛前几天有个帖子,某行业的用户有个较大的图片,在CPU上解开后,数据大约是3GB,跨越PCI-E传输到显存,需要较长的时间。 该用户最后使用了一个笨办法,先CPU解码,再CPU上FFMPEG编码,将编码后的bitstream(较小字节数)传输到显存后,再继续解码。用户自认为这样提速了。 但是实际上,如果正确的利用Pascal的硬件解码单元,应当直接传输原始没有展开的图片到显存,然后就地利用硬件解码,这样可以极大的减少CPU的使用率(基本0%了)和传输时间。这是Pascal的非CUDA通用计算方面的提升,辅助CUDA计算的一个很好的例子。 不仅仅如此,这代的的确很多用户是从事AI和深度学习行业的,这行业的输入数据往往具有一个特点,数据量大,例如一个具体的视频应用行业(例如pol.ice从一个城市的数以万计的摄像头中搜索嫌疑人),它的从摄像头来的264或者265码流是海量的数据量的。再例如常规的静态图片训练一个网络,现在的dataset动辄几百GB和上TB。这么大的数据量,本代的Pascal卡,配合高性能的解码之类的能力,可以有效的硬件解码,高速喂给GPU里面的计算部分。而不是等待CPU缓慢的将码流解开,转换成普通的RGB或者YUV数据。 实际上,从2年后的今年我们看来,总是会为一些NV的前瞻性而感叹:这些年来,视频的编解码,半精度,INT8,这3点几乎应该是这一代的卡(也包括6.2的TX2),所买回去的用户的主要3大主力用途。NV在整个行业没有起来的时候,准确的瞄准了这3点,并针对市场提前进行研发,这种前瞻性,很是值得敬佩。实际上,很多不从事AI和深度学习的用户,光第一个方面(编解码)也是它们的主力用途。因为这一代的卡的无限路编解码能力只对专业卡开放(家用卡限制并发2路NVENC编码) 还曾经出现过,为了这第一点用途,有用户购买了大量的TX2,自行拼凑在一个1U的机箱里面,从而获取巨大的编解码路数和性能。也是一个很好的这代Pascal的这3大应用里面的1点的具体表现。 本章节大致如此。此外,这代的Pascal依然是通用高性能计算平台。用户买回卡后,这点传统强项,还是很重要的。

有不明白的地方,请在本文后留言

或者在我们的技术论坛bbs.gpuworld.cn上发帖

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GPUS开发者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前情回顾:
  • H.5. Compute Capability 6.x
  • H.5.1. Architecture
  • H.5.2. Global Memory
  • H.5.3. Shared Memory
相关产品与服务
高性能计算平台
高性能计算平台(TencentCloud High Performance Computing,THPC)是一款腾讯云自研的高性能计算资源管理服务,集成腾讯云上的计算、存储、网络等产品资源,并整合 HPC 专用作业管理调度、集群管理等软件,向用户提供弹性灵活、性能卓越、自助化的计算服务。可以帮助您高效地管理云上高性能计算资源,实现弹性使用云上高性能计算资源的需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档