Date: 2022-06-23来源:沐曦光启智能研究院副院长 李兆石
本期视频我们继续以《胡闹厨房》为例,理解处理延迟不敏感应用的GPU如何利用异步并行(asynchronous parallelism)的思想,对存储资源竞争的问题另辟蹊径。
首先我们需要理解同步和异步(synchronous vs. asynchronous)的区别。回想《胡闹厨房》的例子,我们将芯片上的计算资源类比为游戏中的玩家,任务是完成顾客的订单。延迟敏感型任务中,每个订单完成的越快越好。此时,一种游戏策略是将游戏中单个订单拆成取材、切菜、烹饪等多个步骤后(订单=任务,步骤=指令),每个步骤的处理过程都由一名玩家全程关注,一旦完成,立即开始该订单后面的步骤。这就是同步处理(synchronous processing)。同步处理保证一个订单可以在最短时间内完成。但这样做的缺点是,如果一个步骤的处理过程很长,且不需要玩家干预,比如厨房中煮一锅菜,那么玩家等待这个步骤的时间就被浪费了。
所以在《胡闹厨房》游戏中,大部分情况下玩家不会站在锅边,等菜煮好,而是会在煮上菜以后去处理其它订单的步骤,这就是异步处理(asynchronous processing)。
异步处理可以缓解多个玩家之间竞争资源的问题。例如煮菜后需要装盘,如果盘子被其它订单占用,那么玩家不需要一直等待盘子被释放,而是可以选择处理其它订单。
但是相比同步处理,异步处理的一个缺点是会拖延单个订单的完成时间。一个订单完成煮菜这一步骤后,可能不会被立即装盘,而是要等到玩家腾出手,且有空盘子后才会被继续处理。所以异步处理不适用于延迟敏感型应用。
异步处理可以提高玩家的效率,避免它们闲下来等待。但如果想利用异步处理提高游戏得分,还有两个先决条件。首先,得分的评价指标需要从每个订单的完成时间,转变为一段时间内完成的订单总量,即订单的吞吐率(throughput)。然后,需要有足够多的并行订单,使得玩家闲下来等待时,可以选择切换到其它并行的子任务。
现实中GPU也是这样压榨计算资源的。相比CPU上的应用,GPU擅长处理的图形渲染和高性能计算应用,对单个任务的处理延迟都相对不敏感。这些应用的性能指标都是计算吞吐率。此外,这些应用中,可以并行的任务数量远大于GPU上计算资源的数量。于是,即使GPU上的存储资源占比远小于CPU,由于有了异步并行的机制,GPU计算资源一旦需要等待存储资源,计算资源可以异步地切换到其它并行任务。这种异步并行机制正是GPU的单指令多线程(single-instruction, multiple-thread, SIMT)的含义。