主页 > 加入信游 >

信游平台:流面向计算的GPU存储资源动态分配技术研究

发布时间:2019-04-26 13:57

作为典型的基于TaskPipeline的计算模型,流计算由两部分组成:数据流和任务。在流计算的执行期间,需要按照流水线的顺序顺序处理数据流。同时,任务之间的数据生成与消费数据(生产者 - 消费者)之间存在关系,即前一任务操作的输出数据是下一个任务的输入数据。这种计算模式广泛应用于多媒体处理、信号处理、数据挖掘、金融计算等领域。

流计算程序的GPU顺序执行可能导致两个问题:第一,片上计算资源利用率不同,第二,频繁访问片外存储器。为了减少不同任务计算不均匀对GPU计算资源和存储资源的影响,本文提出了一种支持双任务并发执行的动态调度方法,可以支持GPU同时运行两个任务,并动态监控每项任务的计算。扩展和性能可扩展性,以实现最佳的计算资源分配。

1计算资源分配

计算资源分配的核心问题是为同时执行的两个任务找到计算资源的最佳分配。要做到这一点,最直接的方法是遍历所有配置方法,记录每种配置方法的性能,并找到最佳解决方案。这种基于遍历的方法引入了配置太差的配置,因此遍历过程可能会导致性能下信游平台:降。因此,提出了性能曲线的线性插值方法,以快速准确地找到最优配置方法。在下面的讨论中,需要调度的两个任务分别表示为K1和K2,并且它们共同占用的共享计算资源的数量表示为N.两个任务的执行时间是T1(n)和T2(n),其中n是分配给任务的计算资源的数量。由于两个任务同时执行,并且两个任务在计算每个数据流时具有固定的计算量,因此运行两个任务的时间由最慢的任务时间决定,即:

信游平台:流面向计算的GPU存储资源动态分配技术研究

信游平台:流面向计算的GPU存储资源动态分配技术研究

T(n)= MAX(T1(n),T2(N-n))(1)

调度的目的是选择适当的n以最小化Tn(n)的值。由于T1(n)和T2(n)都是非解析函数,因此难以通过解析找到等式(1)的最小值。然而,由于时间函数T1(n)和T2(n)是单调递减函数,因此Tn(n)获得最小值的充分条件是:

T1(N)= T2(N-N)(2)

通过迭代计算方法,可以得到近似的最优资源分配值,不会对程序性能造成重大损失。2缓存资源分配

多任务并发执行中的任务之间的临时数据可以存储在最后一级缓存中,从而减少了内存访问次数。由于缓存资源所需的不同任务的数量不相同,因此面向任务级管道的缓存结构被设计为为每个任务分配最佳缓存资源。在任务管道中,上一个任务生成的数据将由下一个任务使用。下一个任务用完后,其他任务很少使用该数据。基于这种观察,为任务生成的数据应尽可能地存储在缓存中,并且一旦读取数据,就应立即从缓存中替换它以释放缓存空间。给出了支持多任务并发执行的缓存结构和管理策略。

新的缓存结构将两个标识符Kernel_ID和Stream_ID添加到传统的缓存行结构中。 Kernel_ID记录访问该行的数据的任务编号,Stream_ID记录行数据所属的流的编号。对于不存储有效数据的高速缓存行,两个标志位的值都初始化为-1。添加了两个标识符的高速缓存的工作方式如下:当从计算单元发送存储器访问请求时,相应的Kernel_ID和Stream_ID信息被添加到存储器访问请求中。新的缓存机制以与传统缓存(丢失和命中判断以及数据块的相应处理)相同的方式处理获取请求的数据处理,除了添加对标识符的操作:如果获取请求是1,则为1读取操作并且缺少高速缓存,相应高速缓存行的标识符被初始化为存储器访问请求中的标识符信息; 2如果内存访问请求是读操作,并且缓存命中,则相应的标识符保持不变;如果存储器访问请求是写入操作,则无论高速缓存未命中还是命中,都将更新相应高速缓存行的标识符信息,并用存储器访问请求中的标识符信息替换。因此,在新的缓存结构下,可以阐明缓存中的数据源。当有任务时,您可以快速找到属于该任务但不再需要的数据,以便数据被缓存替换。

3硬件成本评估

资源动态分配的硬件开销如下所述。支持计算资源分配的硬件单元称为动态任务分配器(DKA),其负责在同时执行两个任务时计算最佳计算资源分配模式(即,分配给两个任务的计算资源的数量)。硬件单元可以集成到当前GPU全局任务调度单元中。

DKA的主要硬件开销来自查找表和插值计算单元的存储空间。假设在GPU中集成了24个SM,对于一对任务,需要25个存储单元来记录各种计算资源分配中的该对任务的性能。每个存储单元需要记录3条信息,即存储NK1需要5位,存储K1_perf和K2_perf需要16位。因此,每个存储单元需要37位的存储空间。假设DKA可以支持任务管道长度为8,那么9组(缓冲池也需要一组查找表)查找表存储空间,接近1KB(9x25x37bits),这个区域开销非常小。此外,DKA还需要插值计算单元和几个组合逻辑。考虑到插值计算单元的硬件开销小于标准浮点运算单元,并且当前GPU包括数十万个浮点运算单元,可以认为额外引入的插值计算的硬件开销单位是为系统。它很小。对于支持并发执行任务的缓存结构,硬件结构只进行了微小的更改,因此引入的额外硬件开销很小。由于每个高速缓存行添加两个标识符,它们需要3位(存储Kernel_ID,可以支持8个任务)和5位(存储Stream_ID,它可以支持32个数据流,并且数据流的ID号可以被回收)。空间。目前典型的GPU缓存包含12K缓存行(缓存大小为768KB),新的存储结构增加了12KB的存储空间,占当前缓存空间的不到1.5%。

4。结论

本文讨论了任务级不规则计算模型,即流程计算所代表的程序包括任务级管道,但不同任务的计算规模差异很大。对于这种不规则的计算模式,各个任务的顺序执行可能导致芯片上的空闲计算资源。当前典型的多任务并发机制采用基于抢占式的静态调度方法,可以将更多任务传递给计算资源,从而消除了计算资源空闲的问题。但是,当同时执行多个任务时,该机制无法为每个任务提供最佳资源分配。因此,本文提出了一种双任务动态调度机制,可以动态分析每个任务的计算规模,从而为每个任务提供适当的计算资源和缓存资源。这种机制可以提高计算性能并减少内存访问次数,随着GPU上计算资源规模的不断扩大,动态调度机制的优势将变得更加重要。

上一篇:浅析中国传统绘画的形象与造型特征

下一篇:地理选修考试问题探讨