侵权投诉

剖析GPU分支分歧对性能的影响

FPGA干货 2021-08-13 16:07 次阅读

在先前文章中,我们谈到现代GPU发展出SIMT(Single Instruction Multiple Thread)的执行结构,硬件线程池的线程们有相对独立的运行上下文,以Warp为单位分发到一组处理单元按SIMD的模式运行。

这些Warp内的线程共享同样的PC,以锁步的方式执行指令,但是每个线程又可以有自己的执行分支。很自然衍生的一个问题就是现代GPU如何有效的处理Branch Divergence(分支分歧)?

一方面为适应复杂图形渲染以及通用计算的要求,GPU编程语言像其它高级语言一样需要支持各种各样的流控制(Flow Control)指令,比如ifswitchdoforwhile等等,这些指令都会导致分支分歧。

另一方面GPU并行计算的特点要求所有处理单元整齐划一地执行相同指令,才能够取得性能最大化。如何较好地解决这两种不同要求导致的冲突,一直是GPU研究中的热点难点问题。在这里笔者没有能力深入探讨,只是浅尝辄止做一般介绍,主要求这个系列内容完整,不足甚至谬误之处,请各位看官不吝指正。

一,分支分歧对性能的影响

这一节我们首先来讨论下分支分歧对GPU性能的影响。以如下ifelse代码为例,我们看下GPU一般是如何来处理分支分歧的?

if (cond) {。。。} else {。。。}

假设一个Warp中有16个线程判断条件为真,另外16个线程条件为假,所以一半线程会执行if中的语句,另一半线程执行else中的语句。这看起来像个悖论,我们知道Warp中的线程同一时刻只能执行相同的指令。

实际上遇到分支分歧时GPU会顺序执行每个分支路径,而禁用不在此路径上的线程,直到所有有线程使能的分支路径都走完,线程再重新汇合到同一执行路径。每个分支都有些线程不干活或者干无用功,Warp实际上需要执行的指令数目大增。

假设每个分支任务量大致相同,分支分歧造成的性能损失少则原先的一半,最坏的情况如果每个线程执行分支都不一致,性能下降为最高时候的1/32。

所以无论在设计算法还是分配处理数据的时候,我们都要小心尽量避免同一个Warp内线程出现分支分歧的状况,在遇到流控制指令的时候,最好能够选择同样的路径。

二,如何实现Reconvergence

上一节我们讲了Warp的线程产生了分支分歧之后,为求性能最佳,不可能让它们一直放任自流,最终还是要尽可能在合适时机把它们重新汇合(Reconverge)起来。但这一切是如何实现的呢?

按照参考1的说法,“The SM uses a branch synchronization stack to manage independent threads that diverge and converge” 。下面根据可接触到的文献我们看看大概是如何实现的,不一定跟GPU产商的实际做法一致。

我们称这个Warp运行时栈为SIMT Stack,每个Warp拥有一个SIMT栈用于处理SIMT执行模式中的分支分歧。

首先我们需要先确定分支分歧的最近重汇合点(Reconvergence Point),一般可以选用造成分支分歧节点的直接后序支配节点(Immediate post-dominator,若控制流图的节点n 到终结节点的每一条路径均要经过节点d,则称节点d后序支配节点n,如d与n之间没有任何其他节点后序支配n,则称节点d直接后序支配节点n)。

这可以通过编译时的控制流分析得到。左边是我们假想的一段GPU伪代码,右边是对应的控制流图,我们假设SIMD通道的数目是4,每个节点边上的掩码数字代表通道上线程在该节点基本块有没有使能。

SIMT栈结构每个条目由执行指令PC、分支重汇合PC(RPC)和使能线程掩码三部分组成。执行流从节点B分支分歧到节点E重新汇合时SIMT栈的更新过程。执行的时候,遇到流控制指令,我们将各个分支依次入栈,栈顶条目的PC会被送到取指单元开始相应分支路径的处理。

只有条目掩码中使能的线程会处于活跃状态,当下一条PC等于栈顶条目RPC的时候,说明该分支已经到了汇合点,栈顶条目会被弹出,开始下一分支的处理以至所有执行线程汇合并共同执行接下来的指令。值得注意的是真实环境下GPU都设计有一些特殊指令来维护SIMT栈。

下图表示上面代码在时间轴上的执行过程,实心箭头表示对应线程在该执行节点处于活跃状态,反之空心箭头代表不活跃状态。

ada94e44-fbb9-11eb-9bcf-12bb97331649.png

基于SIMT栈的Reconvergence方案并不完美,其中一个很大的问题是Warp内线程细粒度同步的时候很容易引发死锁。按照Nvidia的说法,“algorithms requiring fine-grainedsharing of data guarded by locks or mutexes can easily lead to deadlock,depending on which warp the contending threads come from.”。

以下面代码为例,某幸运线程拿到锁之后,在最近重汇合点C等着与大部队接头,不幸的是它无法执行下面的Exch指令以释放锁,导致其它线程只能在B处空转,形成死锁。

adb72852-fbb9-11eb-9bcf-12bb97331649.png

从更高的层次上理解,分支分歧导致的顺序执行只发生在Warp内的线程,Warp之间却相互不受干扰,这种不一致的处理方式对算法移植的适应性还是可预测性都会带来影响。Nvidia从Volta GPU开始做出了改进。

提出了“Independent Thread Scheduling”的方法,使得所有线程无关所在Warp可以具有同样并发执行能力,为此相比之前的GPU其Warp内所有线程共享PC以及运行栈,Volta GPU的线程都分别有各自的PC和运行栈,如下图所示。

adc43d30-fbb9-11eb-9bcf-12bb97331649.png

如此针对同样的GPU程序以及分支分歧,Volta与之前的GPU相比有截然不同的调度行为。我们注意到在Volta中所有的Warp线程并没有一起强制汇合执行Z基本块,主要考虑到Z可能作为生产者需要提供其它执行分支依赖的的数据。

回到我们先前死锁的例子,在Volta中这个死锁便可迎刃而解。如果我们明显了解相关分支不存在同步行为,为优化性能计,CUDA提供了 __syncwarp() 函数以便强制汇合。

add48e2e-fbb9-11eb-9bcf-12bb97331649.png

主要参考资料

NVIDIA Tesla: A Unified Graphics and Computing Architecture

Dynamic Warp Formation and Scheduling for Efficient GPU Control Flow

https://developer.nvidia.com/blog/inside-volta/

General-Purpose Graphics Processor Architectures

编辑:jq

原文标题:近距离看GPU计算(3)

文章出处:【微信号:gh_6fde77c41971,微信公众号:FPGA干货】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

STM32F103最小系统是由哪些部分组成的

STM32F103最小系统是由哪些部分组成的? STM32F103最小系统的编程方法是什么? ...
发表于 10-21 09:23 0次 阅读

怎样去设置STM32堆栈空间的大小呢

怎样去设置STM32堆栈空间的大小呢?STM32有哪几种调节堆栈空间大小的方式?...
发表于 10-21 07:33 0次 阅读

简述ElasticSearch的实现

1.近实时搜索 1.1 实时与近实时 实时搜索(Real-time Search)很好理解,对于一个....
的头像 马哥Linux运维 发表于 10-20 14:45 218次 阅读

一文汇总并发http请求最快的几种实现方式用

假如有一个文件,里面有 10 万个 url,需要对每个 url 发送 http 请求,并打印请求结果....
的头像 Linux爱好者 发表于 10-20 14:36 85次 阅读
一文汇总并发http请求最快的几种实现方式用

编程sector0中的page0时候总是失败问题

本篇文章是《LPC技术小贴士-自动添加中断向量校验位》的番外篇。 最近在支持客户的时候遇到这样一个问....
的头像 恩智浦MCU加油站 发表于 10-20 10:56 317次 阅读
编程sector0中的page0时候总是失败问题

NVIDIA和VMware宣布推出Workspace ONE XR Hub

NVIDIA和VMware宣布推出Workspace ONE XR Hub,帮助企业将XR串流传输至....
的头像 NVIDIA英伟达 发表于 10-20 10:00 223次 阅读

简述基于UDS的BootLoader架构设计及规范

01 BootLoader概述 1.1 Boot Loader设计目的 车载控制器软件需要满足两方面....
的头像 汽车工程师 发表于 10-20 09:43 615次 阅读
简述基于UDS的BootLoader架构设计及规范

虹科时间敏感网络评估套件加速评估TSN网络功能

时间敏感网络(TSN)允许合并OT和IT世界,并确保确定性以太网网络中所有设备的互操作性和标准化。这....
的头像 广州虹科电子科技有限公司 发表于 10-20 09:21 531次 阅读

麒麟980/麒麟970/麒麟960处理器怎么样

麒麟980/麒麟970/麒麟960处理器怎么样?有什么区别?有什么差距?...
发表于 10-20 07:56 0次 阅读

怎么启动ADC?ADC的编程有哪些

ADC的原理是什么?怎么启动ADC?启动之后怎么得到数据呢?ADC的编程有哪些? ...
发表于 10-20 07:30 0次 阅读

如何去避免heisenbug呢

frangi黑森矩阵是什么意思? 如何去避免heisenbug呢?有哪些解决办法? ...
发表于 10-19 09:03 0次 阅读

SRv6的转发流程是怎样进行的

SRv6是什么意思? SRv6是由哪几部分组成的? SRv6的转发流程是怎样进行的? ...
发表于 10-19 08:46 0次 阅读

如何使用中断屏蔽解决LED灯被多个进程访问所引发的竞态问题

什么是中断屏蔽?中断屏蔽有何特点?中断屏蔽的编程步骤有哪些?...
发表于 10-19 06:07 0次 阅读

生命科学领域所需要的哪些软件是北鲲云超算平台所提供的

毫无疑问,云计算的使用是生命科学发展的大趋势。随着云计算在生命科学行业中的应用场景越来越丰富,云计算....
发表于 10-18 17:44 36次 阅读

编程基础和C语言基础讲解

大家上午好!      今天给大家讲解编程基础和C语言基础,此为连载视频,会持续更新,大家多多关注!有问题...
发表于 10-18 10:13 101次 阅读

单片机编程需要掌握哪些知识

单片机是什么? 单片机编程需要掌握哪些知识? ...
发表于 10-18 08:33 0次 阅读

请问一下STM32是如何使用bool类型的

STM32是如何使用bool类型的? 怎样进行stm32相关编程呢? ...
发表于 10-18 06:03 0次 阅读

关于Python18个你不知道的高效编程技巧

初识Python语言,觉得python满足了我上学时候对编程语言的所有要求。python语言的高效编....
的头像 马哥Linux运维 发表于 10-15 11:23 254次 阅读

英特尔表示第二代独显将在明年面世,但并没有挖矿限制

电子发烧友网报道(文/周凯扬)英特尔进军独立显卡已经不是什么新鲜事了,首发的Iris Xe MAX(....
的头像 电子发烧友网 发表于 10-15 10:23 358次 阅读

解析JD-BQX6 六要素传感器应用范围

六要素传感器应用范围,传感器揉合了超声波制造的专业技术,适用于陆地和海洋环境。测量精度较高,没有机械....
发表于 10-14 16:13 20次 阅读

简述六要素环境传感器工作原理

六要素环境传感器工作原理。内置各种气象传感器,无任何移动部件的一个结构紧凑的新型仪器。其具有精度高,....
发表于 10-14 16:11 25次 阅读

人工智能将如何重振摩尔定律的良性循环

前言:在这篇文章中,天数智芯首席技术官吕坚平博士阐述了当今AI硬件渊源,跳脱过去芯片设计窠臼,提倡以....
发表于 10-13 17:02 1814次 阅读
人工智能将如何重振摩尔定律的良性循环

能快速找到代码运行最慢部分的编程神器

天下武功,唯快不破。 编程也不例外,你的代码跑的快,你能快速找出代码慢的原因,你的码功就高。 今天分....
的头像 Linux爱好者 发表于 10-13 16:40 137次 阅读

NVIDIA首席技术官 Michael Kagan解读数据中心新时代

现如今,各行各业都能看到人工智能的兴起,而这背后,离不开数据中心的高速处理。 NVIDIA 首席技术....
的头像 NVIDIA英伟达 发表于 10-13 16:32 414次 阅读

什么是AIoT AIoT的核心是什么

AIoT即AI+IoT,指的是人工智能技术与物联网在实际应用中的落地融合,是未来物联网发展的重要方向....
的头像 美格智能 发表于 10-13 15:32 605次 阅读

深入解读DOCA的三大应用场景

由 NVIDIA 中国隆重推出的人工智能类音频节目再次开讲啦,在这里,你将与 NVIDIA 共同见证....
的头像 NVIDIA英伟达企业解决方案 发表于 10-13 11:15 320次 阅读

简述MPSoC VCU调试方法和调试流程

概要介绍 MPSoC VCU在很多产品中得到了应用。在不同产品的调试过程中,有一些共同的办法。 首先....
的头像 FPGA开发圈 发表于 10-13 10:43 146次 阅读
简述MPSoC VCU调试方法和调试流程

英特尔第二代独显明年面世,但并无挖矿限制

英特尔进军独立显卡已经不是什么新鲜事了,首发的Iris Xe MAX(DG1)性能只能说是一张“甜品....
的头像 E4Life 发表于 10-13 09:38 1658次 阅读
英特尔第二代独显明年面世,但并无挖矿限制

创客火Drone:bit编程无人机,轻松搭建一台专业无人机

更多无人机STEAM教育资讯,可关注公众号“创客火无人机”。        fqj
的头像 创客火无人机 发表于 10-12 15:22 162次 阅读
创客火Drone:bit编程无人机,轻松搭建一台专业无人机

HBM3万事俱备 只欠标准定稿

电子发烧友网报道(文/周凯扬)从PC时代走向移动与AI时代,芯片的架构也从以CPU为中心走向了以数据....
的头像 电子发烧友网 发表于 10-12 14:54 268次 阅读

DTU连接不稳定的解决办法是什么

DTU是物联网的终端设备,在工业信息化不断推进的背景下,DTU的市场需求也在不断增长,它具有网络覆盖....
发表于 10-12 09:28 62次 阅读

超大Transformer语言模型的分布式训练框架

NVIDIA Megatron 是一个基于 PyTorch 的框架,用于训练基于 Transform....
的头像 NVIDIA英伟达企业解决方案 发表于 10-11 16:46 157次 阅读
超大Transformer语言模型的分布式训练框架

Go+1.0即将发布——让改变发生

10月15日,Go+1.0发布会将于上海召开,会上将发布Go+1.0的相关特性和Go+的发展路线图,....
的头像 话说科技 发表于 10-11 14:49 197次 阅读

学习PLC编程的9个小妙招 新手必看

编辑:jq
的头像 PLC技术圈 发表于 10-11 10:40 378次 阅读
学习PLC编程的9个小妙招 新手必看

嵌入式与普通计算机的区别

嵌入式与普通计算机的区别
的头像 lhl545545 发表于 10-09 16:36 696次 阅读

简述国产GPGPU的进阶之路

电子发烧友网报道(文/吴子鹏)2021年一月,上海天数智芯半导体有限公司(以下简称:天数智芯)宣布,....
的头像 电子发烧友网 发表于 10-09 15:48 285次 阅读

NVIDIA GPU服务器和软件框架解决IDC机房数字化难题

近年来随着智慧城市建设和技术突飞猛进发展,IDC 机房成为各企业、城市的数据中枢和管理大脑,IDC ....
的头像 NVIDIA英伟达企业解决方案 发表于 10-09 15:02 277次 阅读

热虹吸散热技术解决GPU服务器散热问题

随着深度学习、仿真、BIM设计、AEC行业在各行各业应用的发展,在AI技术虚拟GPU技术的加持之下,....
发表于 10-09 14:11 42次 阅读

游戏本CPU+GPU新组合亮相,4800H瞬间不香了

游戏次世代到来,这两年更加精美的游戏大作频繁出世,游戏画面呈现更加精美,对电脑性能的要求也更加严苛,....
的头像 话说科技 发表于 10-09 11:24 242次 阅读
游戏本CPU+GPU新组合亮相,4800H瞬间不香了

C#入门经典.清华大学出版社第五版pdf

C#入门经典.清华大学出版社第五版pdf
发表于 10-09 10:01 27次 阅读

如何用List组件减小JS运行内存

每种编程语言都有它的内存管理机制,不同设备上可用内存不同,分配给JS引擎可用的内存范围也不同。例如运....
的头像 HarmonyOS开发者 发表于 10-08 17:46 202次 阅读

为什么说PHP是最糟糕的编程语言

PHP是一门有趣的编程语言。语言与利用语言构建的程序通常属于两种设计理念。这里我指的不是瀑布式或敏捷....
的头像 程序人生 发表于 10-08 16:50 261次 阅读

C++基础语法十大排序算法后五个分享

本期是C++基础语法分享的第十六节,今天给大家来梳理一下十大排序算法后五个! 归并排序 归并排序:把....
的头像 C语言编程学习基地 发表于 10-08 15:06 205次 阅读
C++基础语法十大排序算法后五个分享

如何在没有正式培训的情况下学习编程

从编程小白到完成第一款 Web 应用,我只用了 90 天,而且大多数时间都是在苦恼自己是否能成为开发....
的头像 程序人生 发表于 10-08 10:22 171次 阅读

微软在10月5正式推送 Windows 11

2021 年10 月5 日,北京——微软今日宣布开始推送 Windows 11,符合条件的 Wind....
的头像 微软科技 发表于 10-08 09:48 543次 阅读

资深GPU芯片设计专家吕坚平博士加盟天数智芯,曾主导多家商业巨头GPU研发及商业化落地

(2021年9月30日,中国上海)中国第一家7纳米GPGPU云端芯片及高性能算力系统提供商——上海天....
发表于 09-30 20:13 449次 阅读
资深GPU芯片设计专家吕坚平博士加盟天数智芯,曾主导多家商业巨头GPU研发及商业化落地

联想集团科创板上市申请已获受理,100亿元募资作何用途?

9月30日晚间,上交所官网显示,联想集团有限公司(以下简称"联想集团")科创板上市申请已获受理,公司....
发表于 09-30 18:20 607次 阅读
联想集团科创板上市申请已获受理,100亿元募资作何用途?

焊接机器人的编程流程及技巧介绍

焊接机器人的编程流程是怎样的?焊接编程有哪些技巧?焊接机器人能够在重复动作中实现稳定焊接,完成批量产....
发表于 09-30 16:18 357次 阅读

aigo国民好物 固态硬盘P3000和P7000如何选

互联网高度发达的今天,大众对于PC的需求也与日俱增,很多人在购买PC的时候为了避坑都会选择自己挑选硬....
的头像 全态科技 发表于 09-30 11:00 265次 阅读

市场公认高性价比、性能强的2款SSD固态硬盘推荐

PC在日常生活中已经是一个不可替代的物品了,看剧,工作,办公等等都离不开它。很多人为了省钱和避坑都会....
的头像 全态科技 发表于 09-30 10:42 917次 阅读

学习嵌入式系统C语言编程的关键点

1、真正深刻地认识存储器 冯.诺伊曼说过“程序等于算法加数据结构”。首先,算法是什么?算法是通过存储....
的头像 单片机匠人 发表于 09-29 15:48 1634次 阅读

面向ROS开发者的NVIDIA AI Perception

NVIDIA这一最新宣布,向ROS开发者社区提供整套感知技术。
发表于 09-29 10:36 1505次 阅读
面向ROS开发者的NVIDIA AI Perception

苹果13什么版本价格最低

iPhone 13和iPhone 13 mini为4核心GPU,iPhone 13 Pro和iPho....
的头像 倩倩 发表于 09-28 09:56 403次 阅读
苹果13什么版本价格最低

Imagination和腾讯WeTest开展深度合作,助力开发者获取GPU关键报告

WeTest的PerfDog工具新增全平台全架构80多种GPU Counter,为开发者详尽解读Po....
发表于 09-27 14:20 1440次 阅读
Imagination和腾讯WeTest开展深度合作,助力开发者获取GPU关键报告

PC上有哪些好用的设计软件?

提起做设计,那肯定就离不开设备。目前的主流设备不是电脑就是平板。在Windows系统占绝大多数的情况....
的头像 科讯视点 发表于 09-27 10:55 368次 阅读
PC上有哪些好用的设计软件?

三里屯苹果店外顾客冒雨排队

9月24日,苹果13系列正式全渠道开售,北京三里屯苹果店外顾客因冒雨排队取货被冲上了热搜,即使下着大....
的头像 lhl545545 发表于 09-24 14:38 2642次 阅读

C++中位域以及union联合详解

位域 Bit mode:2;//mode 占 2 位 类可以将其(非静态)数据成员定义为位域(bit....
的头像 C语言编程学习基地 发表于 09-24 11:31 240次 阅读

OpenHarmony HDF平台驱动框架及驱动适配介绍

开源项目 OpenHarmony是每个人的 OpenHarmony OpenHarmony系统平台驱....
的头像 OpenAtom OpenHarmony 发表于 09-24 11:16 282次 阅读
OpenHarmony HDF平台驱动框架及驱动适配介绍

剖析汽车ECU的bootloader程序

BootLoad(简称Boot)是一种启动加载程序,或者称为引导程序,我们在操作系统和嵌入式开发中经....
的头像 汽车工程师 发表于 09-24 10:52 285次 阅读
剖析汽车ECU的bootloader程序

C++中const以及this指针的使用

const 作用 修饰变量,说明该变量不可以被改变; 修饰指针,分为指向常量的指针(pointer ....
的头像 C语言编程学习基地 发表于 09-23 11:39 286次 阅读