融合计算方法及可读存储介质与流程

专利2022-06-29  77


本申请涉及计算技术领域,具体涉及融合计算方法及可读存储介质。



背景技术:

在复杂的长向量计算中,需要尽可能的发挥计算资源的作用,增加处理器的吞吐量。同时希望数据读取灵活,提高计算效率,缩短运算时间,尽可能高效的满足计算需求。

现有的单指令多数据流(simd)是指处理器对多个数据同时执行单条指令所确定的相同操作。simd能够用一个指令同时驱动多个计算单元,并行处理多个数据,能够实现计算单元的并行,缩短运算时间,增加处理器的吞吐量。但它需要将数据拼接成短向量存在于同一个寄存器中,因此读取时采取连续寻址,不够灵活。不能完全满足大规模的向量计算应用。



技术实现要素:

为解决上述技术问题,本申请实施例提供一种融合计算方法及计算机可读存储介质。

本申请实施例提供一种融合计算方法,包括:获取微控制指令序列并分配给启动的多个线程,其中,所述微控制指令序列包括计算任务的计算类型;基于所述计算任务的计算类型,确定融合计算方式;根据所述融合计算方式,通过动态资源表调度所述线程执行所述计算任务。

本申请实施例还提供一种计算机可读存储介质,其上存储有处理器程序,所述处理器程序用于执行如上所述的融合计算方法。

本申请实施例提供的技术方案,提供了一种融合计算的技术方案,克服了只采用单指令多数据流(simd)、单指令多线程和同步多线程的其中一种计算方式的各方面的缺点,能够根据计算类型确定融合计算方式,同时控制多个计算单元,可以节省大量硬件资源,而且针对计算类型确定融合计算方式,开发了线程并行和计算单元并行的能力,提高了计算效率,并且利用动态资源表对计算资源进行监控和记录,调度线程执行计算任务,能够充分利用计算资源,进一步提高计算效率。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请一实施例提供的一种融合计算方法流程示意图之一。

图2是本申请一实施例提供的一种融合计算方法流程示意图之二。

图3是本申请一实施例提供的一种融合计算方法流程示意图之三。

图4是本申请一实施例提供的一种融合计算装置功能组成框图之一。

图5是本申请一实施例提供的一种融合计算装置功能组成框图之二。

图6是本申请一实施例提供的一种控制器功能组成框图。

图7是本申请一实施例提供的一种计算单元功能组成框图。

图8为本申请一实施例提供的电子设备示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

应当理解,本申请的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”是用于区别不同对象,而不是用于描述特定顺序。本申请的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。

本申请实施例提供的技术方案,针对单指令多数据流(simd)、单指令多线程和同步多线程的向量计算方式的各方面的缺点,提供了一种融合计算方法及计算机可读存储介质。

下面,将参照附图对本申请的实施例进行详细描述。首先,对本申请中用到的一些技术术语进行说明。

指令字:是一条包含至少两个独立字段的指令,是将计算量的存储地址信息和所需的操作信息打包而成,其中,该计算量由至少一段信息组成,可以对每一段信息执行不同的操作,也可以执行相同的操作。可选地,指令字是多条普通指令拼接而成。指令字也可以是超长指令字(vliw),包含多个独立字段,每一个字段可以独立控制一个计算单元,相当于一条指令。其中,指令字中包括标量指令和/或向量指令。一个指令字可以同时控制多个计算单元,节省大量硬件资源。

短向量或标量:计算单元能接受的向量包括短向量或标量,长度由计算单元的硬件决定。

长向量:是与短向量相对的说法,为多个短向量的合并。

超长向量,也是一个相对的概念,比长向量更长或者是多个长向量的合并,超长向量的计算更需要融合计算方式的强计算能力和高效率。

线程,是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。其中,一个进程可以有很多线程,每条线程串行或并行执行不同的任务。线程是独立调度和分派的基本单位。同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(callstack),自己的寄存器环境(registercontext),自己的线程本地存储(thread-localstorage)。

单指令多数据流(simd),是指处理器执行单条指令,单条指令对多个数据确定相同的操作。一条simd指令能同时驱动多个计算单元,但是每个计算单元由硬件结构决定只能进行短向量运算或标量计算。当需要进行两个长向量的加法运算时,在单指令多数据流(simd)的情景下,将长向量拆成若干个短向量,驱动若干个向量加法计算单元,并行地执行这些短向量的加法运算。随后,将短向量的加法结果合并,即得到长向量的加法运算结果。在单指令多数据流(simd)中任意时刻指令流都是单一的。单指令多数据流(simd)能够用一个指令并行处理多个数据,同时驱动多个计算单元,实现了计算单元的并行,缩短了运算时间,增加处理器的吞吐量。但它需要将数据拼接成短向量存在于同一个寄存器中,因此读取时采取连续寻址,不够灵活。

单指令多线程,是指多个线程运行同一条单指令。每个线程只能用一个计算单元,但不同线程可以有不同的数据。每个计算单元由硬件结构决定只能进行短向量运算或标量计算。单指令多线程也是将长向量拆成短向量,分配在不同的线程进行计算,通过多个线程的并行来执行长向量的相同类型的运算。单指令多线程实现了多个线程的并行来执行单条指令,可以使线程拥有独立的寄存器,支持独立寻址,更为灵活。

同步多线程,是指处理器在同一个时钟周期内可以执行多个不同类型线程的指令,计算效率高。每个线程用到一个计算单元,每个计算单元由硬件结构决定只能进行短向量运算或标量计算。通过多个线程的并行来执行长向量的不同类型的运算。同步多线程可以支持不同指令的多线程运行,当一个线程被阻塞时,可以通过上下文切换来运行另一个线程的指令,因此存在频繁而复杂的线程切换,影响计算效率。

图1是本申请一实施例提供的一种融合计算方法流程示意图之一,示出了融合计算方法的控制流程。

参见图1,在s110中,控制器获取微控制指令序列并分配给启动的多个线程,其中,微控制指令序列包括计算任务的计算类型。

微控制指令序列包括一系列微指令、待计算的向量以及对向量的操作信息,以特定的格式提供了执行计算所需要的信息。其中,操作信息包括向量计算任务的计算类型、操作数或操作数地址以及其他比如代表指令顺序的id号等信息,根据硬件内部的计算单元的功能决定。

可选地,控制器可以通过获取指令字,将指令字译码为微控制指令序列。具体而言,控制器的译码器将接收到的指令字进行译码,得到硬件计算单元能够识别的微控制指令序列。译码包括确定指令种类(算术/分支/访存)和要被使用的寄存器。例如加法指令可译码为包括取指微指令、计算地址微指令、取操作数微指令、加法运算微指令。微指令最简单的组成形式是将每个控制信号用一个控制位来表示。当需要这个信号时,该位为1;不需要时,该位为0。

一个微控制指令序列包括至少一个计算任务,所述计算任务可以划分成多个子任务。控制器将微控制指令序列分配给启动的多个线程,多个线程执行一个子任务。每个线程有独立的存储空间并且可以独立寻址。使用多线程可提高程序的执行吞吐率和执行效率。

参见图1,在s120中,控制器基于计算任务的计算类型,确定融合计算方式。

一般计算方式分别为单指令多数据流(simd)、单指令多线程和同步多线程。根据单指令多线程、单指令多数据流(simd)、同步多线程三种方式的特性,可以根据计算类型实现其中两者的融合,但对此并不做限制。

可选地,本申请实施例的融合计算方式包括但不限于单指令多线程和单指令多数据流融合的计算方式、同步多线程和单指令多数据流融合的计算方式的一种。

可选地,当计算类型相同时,确定单指令多线程和单指令多数据流融合的计算方式;当计算类型不同时,确定同步多线程和单指令多数据流融合的计算方式。单指令多数据流(simd)、单指令多线程和同步多线程三种计算方式各有各的优缺点。在大规模的超长向量计算应用中,就需要融合其优点,避开其缺点,以便最大限度的开发并行计算的能力,以提高计算效率。

在一个可选地实施例中,微控制指令序列中计算任务的计算类型包括但不限于超长向量的加法、减法、乘法等等。对微控制指令序列中的操作信息进行分析,如果指令执行的计算类型相同,以向量计算为例,例如都是向量的加法操作和减法操作,则确定融合计算方式为单指令多线程和单指令多数据流(simd)融合的计算方式。

可选地,所述融合指的是每个线程运行一条simd指令,其中,每个simd指令驱动至少一个计算单元。具体分析如下:单指令多数据流(simd)的计算方式是对多个数据同时执行单条指令所确定的相同操作。利用多个计算单元一起进行向量计算,开发计算单元并行的能力。单指令多线程的计算方式是多个线程运行同一条指令,每一个线程能用一个计算单元,可以有不同的数据。在单指令多线程和单指令多数据流(simd)融合的计算方式中,每个线程运行一条simd指令,每个线程就能用多个计算单元,于是多线程多计算单元,提高了计算效率。

在另一个可选地实施例中,对微控制指令序列中的操作信息进行分析,如果指令执行的计算类型不同,例如一些是向量的加法操作,另一些是乘法操作,则确定融合计算方式为同步多线程和单指令多数据流(simd)的融合计算方式。

具体而言,单指令多数据流(simd)的计算方式如上所述,对多个数据同时执行单条指令所确定的相同操作。利用多个计算单元一起进行向量计算,开发计算单元并行的能力。

单指令多线程的计算方式是多个线程同时运行同一条指令。如果要执行不同类型的计算操作,则多个线程需要变为串行操作。例如,几轮计算执行加法指令,几轮计算执行乘法指令。如果采用单指令多线程和单指令多数据流(simd)融合计算方式来实现不同类型的计算操作,需要不同的线程根据条件执行指令序列的不同分支,即不同的线程根据不同的输入数据满足的条件,运行不同的指令。需要用条件进行判断要运行的指令,也会较大的影响计算效率。因此,在执行向量的不同类型计算操作时,不适合采用单指令多线程的计算方式。

同步多线程的计算方式是指处理器在同一个时钟周期内可以执行不同类型线程的指令,同时就可以进行不同指令操作,例如加法和乘法计算。因此,在执行向量的不同类型计算操作时,考虑同步多线程和单指令多数据流(simd)的融合计算方式中。在这种融合计算方式中,相比于上述的单指令多线程和单指令多数据流(simd)融合的计算方式,用同步多线程代替单指令多线程,可以同时在一轮中既进行加法计算又进行乘法计算,以进行向量的不同类型的计算操作,并同样可以开发多线程并行的能力。在同步多线程中,为了实现多线程,处理器支持多个硬件上下文(多线程),并能够在一个时钟周期内从多个上下文中取出指令并执行。

融合计算方式为同步多线程和单指令多数据流(simd)的融合计算方式的融合方法与单指令多线程和单指令多数据流(simd)融合的计算方式基本类似,区别就在于同步多线程中的线程能执行不同的指令,进行不同类型的计算。

在此,对于其中的多个涉及向量的不同类型的计算操作,例如一些是加法和减法操作,另一些是加法和乘法操作,选择同步多线程和单指令多数据流的融合计算方式。不仅可以节省硬件资源,而且同时开发计算单元并行的能力和多线程并行的能力,提高计算效率。

参见图1,在s130中,根据融合计算方式,控制器通过动态资源表调度线程执行计算任务。

其中,控制器单元中的调度器可以维护一张动态的资源使用情况表,我们称为动态资源表。可选地,如用位图实现这样一张表,位图中的0代表资源空闲,1代表资源繁忙,不同种类的资源可以有不同的资源使用情况表。计算群以合适的时间间隔向控制器单元发送资源使用的情况以更新位图。所述动态资源表用于表示实时的硬件资源使用情况,以便找出空闲计算单元来调度线程执行计算任务,本申请对动态资源表的实现不作任何限制。

其中,所述计算群是指总的计算资源,由多个计算子集群构成,计算子集群包括计算单元和共享存储器。例如在一个可能的融合计算硬件设计方式中,20个乘法器和50个加法器共用一个共享存储器和一个局部同步器,从而这20个乘法器、50个加法器和共享存储器被事实上划分为了一个小的计算子集群,计算群由多个这样的计算子集群构成。

可选地,根据计算群中空闲计算单元的数量和功能,将启动的多个线程打包成线程组,通过动态资源表调动线程组至空闲计算单元执行计算任务,其中,线程组包括至少一个线程。

调度线程组相比于调度线程,效率更高,相对也更有序,减少线程切换的频率,能够提高计算效率。

线程被打包成线程组,线程组的大小是由硬件资源决定的,也就是计算群中空闲计算单元的数量和功能控制的,功能指的是空闲计算单元的类型,例如是加法器还是乘法器等等。一般来说,线程组中线程数量的设置遵循以下两个原则:第一,能尽可能地充分使用硬件的计算资源;第二,提供计算通信的便利。每个线程组的大小与计算类型和总的空闲计算单元数量有关,所述线程组的大小不大于所述硬件的计算资源中空闲计算单元的总数。

根据同类功能的空闲计算单元总数量,能同时运行的线程数作为一个线程组,将至少一个线程打包成线程组。同步执行的线程组的数目一般由计算子集群的数目决定,而一个线程组的线程数目则由一个计算子集群中的空闲计算单元数目决定。

可选地,不同计算类型的线程处于不同线程组也就是执行不同功能的线程处于不同的线程组,所述不同线程组在不同功能的空闲计算单元上执行。具体来说,在单指令多线程和单指令多数据流(simd)融合的计算方式中,以向量计算为例,向量的计算类型相同也就是计算群中空闲计算单元的功能相同时,例如都是加法器执行加法运算,线程就都是加法线程。每个加法线程需要的加法计算单元数量相同。根据总的加法计算单元数量,将至少一个线程打包成一个加法线程组。例如,启动的多个线程中,每个线程运行一条simd指令,simd指令一次驱动多个计算单元,所有空闲计算单元的总数量除以这多个计算单元的数量,就是可同时执行的最大线程数。将这个最大数量的线程打包成一个线程组同时运行,最后可以打包成多个线程组,充分利用计算单元的资源,提高计算效率。

在同步多线程和单指令多数据流(simd)融合的计算方式中,以向量计算为例,向量的计算类型不同也就是计算群中空闲计算单元的功能不同时,例如有加法器执行加法运算也有乘法器执行乘法运算,线程就有加法线程也有乘法线程。每个加法线程需要的加法计算单元数量相同。根据总的加法计算单元数量,将至少一个线程打包成一个线程组。每个乘法线程需要的乘法计算单元数量相同。根据总的乘法计算单元数量,将至少一个线程打包成一个线程组。加法线程和乘法线程不能打包在同一线程组。

一个微控制指令序列包括至少一个计算任务,计算任务可以划分成多个子任务。控制器将微控制指令序列分配给启动的多个线程,多个线程执行一个子任务。每个线程有独立的存储空间并且可以独立寻址。使用多线程可提高程序的执行吞吐率和执行效率。

例如在单指令多线程和单指令多数据流(simd)的融合计算方式中,子任务需要1000个加法线程执行,假设总共有20个计算子集群,每个计算子集群有50个加法器和20个乘法器。

做加法计算的时候,例如每个加法线程执行一条加法simd指令,一条simd加法指令驱动5个加法器(由硬件决定的),那么一个线程可以同时驱动5个加法器。每个计算子集群的50个加法器就可以同时执行10个加法线程,就将10个加法线程打包为一个线程组,1000个加法线程则可以打包为100个线程组,同理每个乘法线程执行一条乘法simd指令,一条simd乘法指令驱动5个乘法器(由硬件决定的),那么一个线程可以同时驱动5个乘法器,每个计算子集群的20个乘法器就可以同时执行4个乘法线程。控制器设置一个线程组包含10个线程,就将4个乘法线程和6个非活跃线程打包为一个线程组,1000个乘法线程则可以打包为250个乘法线程组。其中,非活跃线程是不运行任务的空闲线程。

20个子集群,可以同时计算20个加法线程组,共200个加法线程。1000个加法线程总共5轮即可计算完成。

如果总共有998个加法线程,而不是1000个加法线程,最后的剩余线程数为8个,不足一个线程组,则用非活跃线程填充。其中,非活跃线程是不运行任务的空闲线程。同一个线程组中的线程可以通过共享存储器进行通信,通过局部同步器进行同步。

在此,也可以直接启动20个线程完成计算,但是浪费了simd同时驱动多个计算单元的能力,增加了线程调节的负担。实际中,具体启动多少个线程,需要根据实际的计算资源和计算任务进行测量,原则上最大化并行以便不浪费计算资源。

可选地,控制器通过动态资源表调度线程组执行计算任务,具体包括:当线程组因为访问存储单元而阻塞时,使阻塞的线程组进入等待队列;在存储单元中的阻塞的线程组的输入数据准备好后,使阻塞的线程组进入准备队列;通过动态资源表,确定空闲计算单元;在空闲计算单元调度执行准备队列中的线程组执行计算任务。

具体而言,当线程组因为访问存储单元而阻塞时,执行上下文切换后,使阻塞的线程组进入等待队列。通过信号监测,可以监测输入数据准备状态。当输入数据准备好后,可以通过中断信号进行提醒。但并不以此为限。

在存储单元中的阻塞的线程组的输入数据准备好后,线程组继续运行的条件满足后,使阻塞的线程组进入准备队列。不但能在原本该线程组执行的硬件处理单元上调度该线程组,还能通过全局调度信息查找空闲的硬件资源对该线程组进行调度。

控制器单元中的调度器中设置动态资源表,可选地,如用位图实现这样的动态资源表,位图中的0代表资源空闲,1代表资源繁忙,不同种类的资源可以有不同的资源使用情况表。计算群以合适的时间间隔向控制器单元发送资源使用的情况以更新位图。基于动态资源表,确定空闲计算单元。在空闲计算单元调度执行准备队列中的线程组。在阻塞队列中被阻塞的线程组的执行条件被满足后,该线程组被调往准备队列执行计算任务。

可选地,调度所述准备队列中的线程组至所述空闲计算单元去执行所述计算任务,调度器按照顺序调度执行准备队列中的线程组,也就是先来先服务的原则。

可选地,在所述空闲计算单元调度执行准备队列中的线程组执行计算任务,还可以对线程组进行优先级排序,优先级高的线程组先调度执行。

其中,所述优先级可以是按照需要用户确定的,可选地,对线程组进行优先级排序,还可以是根据线程组的时间设置线程组的优先级。所述线程组的时间包括线程组的执行时间和线程组的等待时间。

具体而言,调度的目的是充分使用硬件资源,在一个可能的实施例中,根据线程组的执行时间确定时可以遵循两个原则,一是执行时间较短的线程组有较高的优先级,二是负载均衡原则。

为了实现原则一,可以将执行时间较短的线程组调往准备队列头部,调度器从准备队列头部来寻找需要调度的线程组,也就是执行时间短的线程组有较高的优先级。

为了实现原则二,根据线程组的执行时间评估空闲计算单元的计算负载的执行时间,根据计算负载的执行时间设置线程组的优先级。在硬件资源较为充足的情况下,可以将一个执行时间较长的线程组调往一个空闲硬件单元,将几个执行时间较短的线程组调往另一个空闲硬件单元,并使几个执行时间较短的线程组的执行时间之和大致等于执行时间较长的线程组的执行时间,也就是确定线程组的执行时间和空闲计算单元的匹配程度,根据所述匹配程度设置线程组的优先级。

在一个可能的实施例中,在根据线程组的等待时间确定优先级时,可以遵照防止饥饿原则确定其优先级。也就是在一个线程组长期处于队列尾部时,为防止其一直不被执行,应将其调往准备队列头部,使其能够先被执行。

调度器根据符合调度原则的调度算法和计算单元空闲情况将准备队列中的线程组调度至空闲计算单元,以实现全局调度,充分利用硬件资源。

可选地,在调度准备队列中的线程组至空闲计算单元去执行计算任务时还可以利用神经网络优化调度策略。首先设置多种调度策略,所述多种调度策略包括在当前空闲计算单元中所有可能的调度方式。每种调度策略对应一组调度信息,调度信息包括需要调度哪些线程组及这些线程组的分配信息。所述线程组的分配信息是指如何分配线程组,如哪些线程在一个线程组内,一个线程组内有多少个线程,共有多少个线程组等。将每种调度策略对应的调度信息和空闲计算单元的资源信息输入神经网络,得到在每种调度策略下执行计算任务的预测时间。选择与最短的执行计算任务的预测时间相对应的调度策略,去调度准备队列中的线程组至空闲计算单元去执行计算任务。所述空闲计算单元信息指的是哪些计算资源是空闲的、空闲计算单元大小等等。

具体而言,调度器可以使用机器学习算法优化调度策略,例如用深度神经网络,将调度准备队列中的线程组的调度信息和空闲计算单元信息作为输入,将调度策略运行执行计算任务的预测时间作为输出,用这样的输入输出训练深度神经网络,使该网络有对该硬件执行计算任务的总体时间具有预测能力,利用这个深度神经网络可以对各个调度信息对应的调度策略的任务执行时间进行评估,选择执行时间最短的调度策略。

可选地,调度所述准备队列中的线程组至所述空闲计算单元去执行所述计算任务,包括:获取调度至所述空闲计算单元上的线程组对应的多个微控制指令,转化微控制指令为控制信号,发送控制信号到计算群,使计算群的空闲计算单元从存储单元提取操作数执行计算任务。

可选地,线程组可以只包括一个线程,也可以包括多个线程,当线程组只包括一个线程时,通过动态资源表调动所述线程执行计算任务。

控制器获取来自多个线程组的多个微控制指令,线程组中的微控制指令,被划分为多个子任务,多个线程执行一个子任务。

转化多个微控制指令为多个控制信号。控制器的调度器接收线程组分配信息。线程组分配信息指如何分配线程组,包括线程总数量,线程组中的线程数量,线程所执行的指令序列和目前需要调度的线程组等信息。

控制器发送多个控制信号到计算群,使计算群的多个计算类型相同的空闲计算单元从存储单元提取操作数执行计算任务。

根据一些实施例,计算群的群控制器接收控制信号,并根据控制信号会得到线程组分配信息。群控制器将控制信号转化为群内控制信号发送到合适的计算单元。例如将控制信号转化为群内控制信号后,根据群内控制信号包含的计算操作的类型,加法任务发送到加法计算单元,乘法任务发送到乘法计算单元等等。

空闲计算单元的单元控制器接收群内控制信号。利用空闲计算单元基于群内控制信号,从存储单元读取输入数据。输入数据包括向量操作数。空闲计算单元读取向量操作数并进行向量计算,执行控制信号对应的线程组的计算任务。输出数据和中间结果可暂存在计算单元的第二存储器。

本实施例提供的技术方案,单指令多线程和单指令多数据流(simd)的融合计算方式,适用于相同的计算类型,同步多线程和单指令多数据流(simd)的融合计算方式,适用于不同的计算类型,可以极大的开发计算单元和线程的并行能力,可以节省硬件资源,提高计算效率。并且利用动态资源表对计算资源进行监控和记录,调度线程执行计算任务,能够充分利用计算资源,进一步提高计算效率。

图2是本申请一实施例提供的一种融合计算方法流程示意图之一,结合图1,示出了单指令多线程和单指令多数据流(simd)的融合计算方式的控制流程。

在s210中,控制器获取微控制指令序列并分配给启动的多个线程,其中,微控制指令序列包括计算任务的计算类型。

具体过程与图1的s110相同,不再赘述。

在s220中,控制器确定微控制指令序列中的计算类型相同时,则确定单指令多线程和单指令多数据流融合的计算方式。

例如,以向量计算为例,微控制指令序列中超长向量的计算类型包括但不限于超长向量的加法、减法、乘法等等。对微控制指令序列中的操作信息进行分析,如果指令执行的计算类型相同,例如都是向量的加法操作和减法操作,则确定融合计算方式为单指令多线程和单指令多数据流(simd)融合的计算方式。

单指令多数据流(simd)的计算方式是对多个数据同时执行单条指令所确定的相同操作。利用多个计算单元一起进行向量计算,开发计算单元并行的能力。

单指令多线程的计算方式是多个线程运行同一条指令,每一个线程能用一个计算单元,可以有不同的数据。

在单指令多线程和单指令多数据流融合的计算方式中,每个线程运行一条simd指令,每个simd指令驱动至少一个计算单元。每个线程就能用多个计算单元,于是多线程多计算单元,提高了计算效率。

例如获取了一条指令字,将指令字译码为计算单元硬件可以识别的微控制指令序列。微控制指令序列包括一系列指令、待计算的向量以及对向量的操作信息。假设微控制指令序列中,包括5组加法微指令,分别执行长向量的加法操作(a1 a2),(a3 a4),(a5 a6),(a7 a8),(a9 a10)。假设simd能驱动的计算单元的数量为30个,硬件中总共存在的计算单元数目为150个。

如果单独采用单指令多数据流(simd)的计算方式,单指令多数据流。将长向量a1拆成计算单元能接受的长度的多个短向量a11、a12、a13……,将长向量a2拆成多个短向量a21、a22、a23……,多个加法计算单元并行地执行这些短向量的加法运算(a11 a21)、(a12 a22)、(a13 a23)……。随后,将短向量的加法结果合并,即得到长向量(a1 a2)的加法运算结果。假设一个长向量可以拆成30个短向量,正好一个长向量可以用完simd能驱动的30个计算单元,因此,每一轮计算最多只能完成一次长向量的加法计算。完成5个长向量的加法计算需要5轮才能完成。可选地,假设所述长向量中一个长向量可以拆分的短向量数目少于simd能驱动的计算单元数目(例如20个),那么每一轮计算最多能完成大于一次长向量的加法计算,完成5个长向量的加法计算少于5轮就能完成,同理,假设长向量中一个长向量可以拆分的短向量数目大于simd能驱动的计算单元数目(例如40个),那么每一轮计算不能完成一个长向量的加法计算,完成5个长向量的加法计算大于5轮才能完成。为了更好地理解本方案的优势,下文中以一个长向量正好拆为30个短向量进行比较,但不以此作为限制。

如果单独采用单指令多线程的计算方式,单指令多线程。通过多个线程运行同一条指令。在传统单指令多线程模型中,每一个线程对标量和短向量进行运算。计算长向量的加法时,需要多个线程计算,也要把长向量拆成计算单元能接受的长度的短向量或标量,以便多个线程执行短向量加法或标量加法。例如分别计算多个短向量加法得到该长向量的值。假设在单指令多线程的计算方式中有5个线程,每个线程只能运行一个短向量,也就是如果每轮只驱动5个线程,每个线程一次只能用一个加法计算单元,这样的话5个线程用5个计算单元,每轮只能完成5个短向量加法,其中所述5个短向量是一个长向量的30个短向量中的5个短向量。那么5个长向量的加法总共150个短向量,需要30轮计算才能完成5个长向量(a1 a2),(a3 a4),(a5 a6),(a7 a8),(a9 a10)的加法。在此需要指出的是,单指令多线程计算方式中,多线程执行相同类型的向量计算,如果线程足够多也可以一轮完成5个长向量的加法计算,但是线程之间的任务依赖和等待等切换的任务调度会非常复杂。

如果采用单指令多线程和单指令多数据流融合的计算方式,根据单指令多数据流(simd)的特点,能一次驱动多个计算单元。根据单指令多线程的特点,可以启动多个线程,每个线程只能驱动一个计算单元,线程就是运行的指令和它们所需要的资源组成的。而采用单指令多线程和单指令多数据流(simd)的融合计算方式时,就是启动多个线程,然后每个线程运行一条simd指令,那么每个线程通过运行simd指令就能用到多个计算单元。以上述例子的前提为例,对于5个长向量的加法(a1 a2),(a3 a4),(a5 a6),(a7 a8),(a9 a10),就可以5个线程并行同时进行(单指令多线程包括5个线程),每个线程用到30个加法计算单元(一次simd能驱动30个计算单元),一轮计算就可以驱动150个计算单元执行(在硬件中总的计算单元数目允许的情况下,假设总的计算单元数目不足150个,以计算单元的数目为准),一轮计算即可5个线程同时完成5个长向量的加法,尽量大的开发计算单元和线程并行的能力,而且比单采用一种计算方式计算的向量的长度更长,可以实现超长向量的运算。

在此仅仅举例说明单指令多线程和单指令多数据流(simd)的融合计算方式的并行计算的过程,并不以此为限。

对于其中的多个涉及向量的相同类型的计算操作,例如都是加法操作,选择单指令多线程和单指令多数据流simd的融合计算方式。不仅可以节省硬件资源,而且同时开发计算单元并行的能力和多线程并行的能力,提高计算效率。

在s230中,控制器将线程打包成线程组。

调度线程组相比于调度线程,效率更高,相对也更有序,减少线程切换的频率,能够提高计算效率。

根据计算群中空闲计算单元的数量和功能,将启动的多个线程打包成线程组,通过动态资源表调动线程组执行计算任务,其中,线程组包括至少一个线程。功能就是计算单元的类型,例如是加法器还是乘法器等等

线程被打包成线程组,线程组的大小是由硬件资源决定的。一般来说,线程组中线程数量的设置遵循以下两个原则:第一,能尽可能地充分使用硬件的计算资源;第二,提供计算通信的便利。每个线程组的大小与计算类型和总的空闲计算单元数量有关。

根据同类功能的空闲计算单元总数量,能同时运行的线程数作为一个线程组,将至少一个线程打包成线程组。

在单指令多线程和单指令多数据流(simd)的融合计算方式中,计算类型相同。以向量计算为例,向量的计算类型相同,例如都是加法运算,线程就都是加法线程。每个加法线程需要的加法计算单元数量相同。根据总的加法计算单元数量,将至少一个加法线程打包成一个加法线程组。例如,启动的多个线程中,每个线程运行一条simd指令,simd指令一次驱动多个计算单元,所有空闲计算单元的总数量除以这多个计算单元的数量,就是可同时执行的最大线程数。将这个最大数量的线程打包成一个线程组同时运行,最后可以打包成多个线程组调用执行,充分利用计算单元的资源,提高计算效率。

在s240中,根据单指令多线程和单指令多数据流(simd)的融合计算方式,控制器通过动态资源表调度线程组执行计算任务。

其中,控制器单元中的调度器可以维护一张动态的资源使用情况表,我们称为动态资源表,如用位图实现这样一张表,位图中的0代表资源空闲,1代表资源繁忙,不同种类的资源可以有不同的资源使用情况表。计算群以合适的时间间隔向控制器单元发送资源使用的情况以更新位图。所述动态资源表用于表示实时的硬件资源使用情况,以便找出空闲硬件来调度线程组执行计算任务。

其中,所述计算群是指总的计算资源,由多个计算子集群构成,计算子集群包括计算单元和共享存储器。例如在一个可能的融合计算硬件设计方式中,20个乘法器和50个加法器共用一个共享存储器和一个局部同步器,从而这20个乘法器、50个加法器和共享存储器被事实上划分为了一个小的计算子集群,计算群由多个这样的计算子集群构成。

根据计算群中空闲计算单元的数量,将启动的多个线程打包成线程组,通过动态资源表调动线程组至空闲计算单元执行计算任务。

根据同类空闲计算单元总数量,能同时运行的线程数作为一个线程组,将至少一个线程打包成线程组。同步执行的线程组的数目一般由计算子集群的数目决定,而一个线程组的线程数目则由一个计算子集群中的空闲计算单元数目决定。

例如在单指令多线程和单指令多数据流(simd)的融合计算方式中,子任务需要1000个加法线程执行,假设总共有20个计算子集群,每个计算子集群有50个加法器和20个乘法器。

做加法计算的时候,例如每个加法线程执行一条加法simd指令,一条simd加法指令驱动5个加法器(由硬件决定的),那么一个线程可以同时驱动5个加法器。每个计算子集群的50个加法器就可以同时执行10个加法线程,就将10个加法线程打包为一个线程组,1000个加法线程则可以打包为100个线程组。

20个子集群,可以同时计算20个加法线程组,共200个加法线程。1000个加法线程总共5轮即可计算完成。

如果总共有998个加法线程,而不是1000个加法线程,最后的剩余线程数为8个,不足一个线程组,则用非活跃线程填充。其中,非活跃线程是不运行任务的空闲线程。同一个线程组中的线程可以通过共享存储器进行通信,通过局部同步器进行同步。

在此,也可以直接启动20个线程完成计算,但是浪费了simd同时驱动多个计算单元的能力,增加了线程调节的负担。实际中,具体启动多少个线程,需要根据实际的计算资源和计算任务进行测量,原则上最大化并行以便不浪费计算资源。

控制器通过动态资源表调度线程组执行计算任务,具体包括以下步骤。

在s241中,当线程组因为访问存储单元而阻塞时,使阻塞的线程组进入等待队列。

当线程组因为访问存储单元而阻塞时,执行上下文切换后,使阻塞的线程组进入等待队列。通过信号监测,可以监测输入数据准备状态。当输入数据准备好后,可以通过中断信号进行提醒。但并不以此为限。

在s242中,在存储单元中的阻塞的线程组的输入数据准备好后,使阻塞的线程组进入准备队列。

在存储单元中的阻塞的线程组的输入数据准备好后,线程组继续运行的条件满足后,使阻塞的线程组进入准备队列。不但能在原本该线程组执行的硬件处理单元上调度该线程组,还能通过全局调度信息查找空闲的硬件资源对该线程组进行调度。

在s243中,基于动态资源表,确定空闲计算单元。

控制器单元中的调度器中设置动态资源表,可选地,如用位图实现这样的动态资源表,位图中的0代表资源空闲,1代表资源繁忙,不同种类的资源可以有不同的资源使用情况表。计算群以合适的时间间隔向控制器单元发送资源使用的情况以更新位图。基于动态资源表,确定空闲计算单元。在空闲计算单元调度执行准备队列中的线程组。在阻塞队列中被阻塞的线程组的执行条件被满足后,该线程组被调往准备队列。

在s244中,调度准备队列中的线程组至空闲计算单元去执行计算任务。

可选地,调度器按照顺序调度执行准备队列中的线程组。

可选地,对线程组进行优先级排序,优先级高的线程组先调度执行。对线程组进行优先级排序,包括但不限于根据执行时间长短设置线程组的优先级。

可选地,基于负载均衡原则,根据线程组的执行时间评估空闲计算单元的计算负载的执行时间,根据所述计算负载的执行时间设置线程组的优先级空闲计算单元。

可选地,根据等待时间的长短设置线程组的优先级。举例说明,调度的目的是充分使用硬件资源,因此在按调度时间分配时,可以遵循三个原则,一是执行时间较短的线程组有较高的优先级,二是负载均衡原则,三是防止饥饿原则。

为了实现原则一,可以将执行时间较短的线程组调往准备队列头部,调度器从准备队列头部来寻找需要调度的线程组。

为了实现原则二,根据线程组的执行时间评估空闲计算单元的计算负载的执行时间,根据计算负载的执行时间设置线程组的优先级。在硬件资源较为充足的情况下,可以将一个执行时间较长的线程组调往一个空闲硬件单元,将几个执行时间较短的线程组调往另一个空闲硬件单元,并使几个执行时间较短的线程组的执行时间之和大致等于执行时间较长的线程组的执行时间,也就是确定线程组的执行时间和空闲计算单元的匹配程度,根据所述匹配程度设置线程组的优先级。

在一个可能的实施例中,在根据线程组的等待时间确定优先级时,可以遵照防止饥饿原则确定其优先级。也就是在一个线程组长期处于队列尾部时,为防止其一直不被执行,应将其调往准备队列头部,使其能够先被执行。

调度器根据符合调度原则的调度算法和资源空闲情况将准备队列中的线程组调度至空闲硬件单元,以实现全局调度,充分利用硬件资源。

可选地,在调度准备队列中的线程组至空闲计算单元去执行计算任务时还可以利用神经网络优化调度策略。首先设置多种调度策略,每种调度策略对应一组调度信息,调度信息包括需要调度哪些线程组及这些线程组的分配信息,所述线程组的分配信息是指如何分配线程组,如哪些线程在一个线程组内,一个线程组内有多少个线程,共有多少个线程组等。将每种调度策略的调度信息和空闲计算单元的资源信息输入神经网络。得到每种调度策略下执行计算任务的预测时间。选择与最短的执行计算任务的预测时间相对应的调度策略,去调度准备队列中的线程组至空闲计算单元去执行计算任务。所述空闲计算单元信息指的是哪些计算资源是空闲的,所述空闲计算单元大小等等。

具体而言,调度器可以使用机器学习算法优化调度策略,例如用深度神经网络,将调度准备队列中的线程组的调度信息和空闲计算单元信息作为输入,将调度策略运行执行计算任务的预测时间作为输出,用这样的输入输出训练深度神经网络,使该网络有对该硬件执行计算任务的总体时间具有预测能力,利用这个深度神经网络可以对各个调度信息对应的调度策略的任务执行时间进行评估,选择执行时间最短的调度策略。

可选地,调度所述准备队列中的线程组至所述空闲计算单元去执行所述计算任务,包括:获取调度至所述空闲计算单元上的线程组对应的多个微控制指令,转化微控制指令为控制信号,发送控制信号到计算群,使计算群的空闲计算单元从存储单元提取操作数执行计算任务。

可选地,线程组可以只包括一个线程,也可以包括多个线程。

控制器获取来自多个线程组的多个微控制指令,线程组中的微控制指令,被划分为多个子任务,多个线程执行一个子任务。

转化多个微控制指令为多个控制信号。控制器的调度器接收线程组分配信息。线程组分配信息指如何分配线程组,包括线程总数量,线程组中的线程数量,线程所执行的指令序列和目前需要调度的线程组等信息。

控制器发送多个控制信号到计算群,使计算群的多个计算类型相同的空闲计算单元从存储单元提取操作数执行计算任务。

根据一些实施例,计算群的群控制器接收控制信号,并根据控制信号会得到线程组分配信息。群控制器将控制信号转化为群内控制信号发送到合适的计算单元。例如将控制信号转化为群内控制信号后,根据群内控制信号包含的计算操作的类型,加法任务发送到加法计算单元,乘法任务发送到乘法计算单元等等。

空闲计算单元的单元控制器接收群内控制信号。利用空闲计算单元基于群内控制信号,从存储单元读取输入数据。输入数据包括向量操作数。空闲计算单元读取向量操作数并进行向量计算,执行控制信号对应的线程组的计算任务。输出数据和中间结果可暂存在计算单元的第二存储器。

本实施例提供的技术方案,根据单指令多线程和单指令多数据流(simd)的融合计算方式,控制计算群执行计算任务,适用于相同的计算类型。可以实现多个线程的并行来执行单条指令,使线程拥有独立的寄存器,支持独立寻址,更为灵活。并且可以极大的开发计算单元和线程的并行能力,节省硬件资源,提高计算效率。并进行了多线程打包成线程组,对线程组中的线程同时计算,利用动态资源表对计算资源进行监控和记录,调度线程组执行计算任务,能够充分利用计算资源,进一步提高计算效率。

图3是本申请一实施例提供的一种融合计算方法流程示意图之三,示出了同步多线程和单指令多数据流(simd)的融合计算方式的控制流程。

参见图3,在s310中,控制器获取微控制指令序列并分配给启动的多个线程,其中,微控制指令序列包括计算任务的计算类型。

具体过程与图1的s110相同,不再赘述。

参见图3,在s320中,控制器确定微控制指令序列中的多个计算类型不同时,则确定同步多线程和单指令多数据流融合的计算方式。

例如,以向量计算为例,微控制指令序列中超长向量的计算类型包括但不限于超长向量的加法、减法、乘法等等。对微控制指令序列中的操作信息进行分析,如果指令执行的计算类型不同,例如一些是向量的加法操作,另一些是乘法操作,则确定融合计算方式为同步多线程和单指令多数据流(simd)的融合计算方式。

具体来说,单指令多数据流(simd)的计算方式如上所述,对多个数据同时执行单条指令所确定的相同操作。利用多个计算单元一起进行向量计算,开发计算单元并行的能力。

同步多线程的计算方式是指处理器在同一个时钟周期内可以执行不同类型线程的指令,同时就可以进行不同指令操作,例如加法和乘法计算。因此,在执行向量的不同类型计算操作时,考虑同步多线程和单指令多数据流(simd)的融合计算方式中。在这种融合计算方式中,相比于上述的单指令多线程和单指令多数据流(simd)融合的计算方式,用同步多线程代替单指令多线程,可以同时在一轮中既进行加法计算又进行乘法计算,以进行向量的不同类型的计算操作,并同样可以开发多线程并行的能力。在同步多线程中,为了实现多线程,处理器支持多个硬件上下文(多线程),并能够在一个时钟周期内从多个上下文中取出指令并执行。

融合计算方式为同步多线程和单指令多数据流(simd)的融合计算方式的融合方法与单指令多线程和单指令多数据流(simd)融合的计算方式基本类似,区别就在于同步多线程中的线程能执行不同的指令,下述进一步说明同步多线程和单指令多数据流(simd)的融合计算方式。

例如获取了一条指令字,将指令字译码为计算单元硬件可以识别的微控制指令序列。微控制指令序列包括一系列指令、待计算的向量以及对向量的操作信息。假设微控制指令序列中,包括5组微指令,其中3条加法指令,2条乘法指令,计算5组长向量的加法或乘法(a1 a2),(a3 a4),(a5 a6),(a7×a8),(a9×a10)。计算单元的数量为30个,包括20个加法计算单元和10个乘法计算单元。

如果单独采用单指令多数据流(simd)的计算方式,单指令多数据流。将长向量a1拆成多个短向量a11、a12、a13……,将长向量a2拆成多个短向量a21、a22、a23……,多个加法计算单元并行地执行这些短向量的加法运算(a11 a21)、(a12 a22)、(a13 a23)……。随后,将短向量的加法结果合并,即得到长向量(a1 a2)的加法运算结果。同样的,将长向量a7拆成多个短向量a71、a72、a73……,将长向量a8拆成多个短向量a81、a82、a83……,多个乘法计算单元并行地执行这些短向量的乘法运算(a71×a81)、(a72×a82)、(a73×a83)……。随后,将短向量的乘法结果合并,即得到长向量(a7×a8)的乘法运算结果。在单指令多数据流(simd)模型中,任意时刻指令流都是单一的。因为是单指令,如果计算单元数量足够,每一轮计算最多也只能完成长向量的加法计算或乘法运算。所述完成3个长向量的加法计算的次数由上文可知由simd本身可以驱动的计算单元数目和硬件本身存在计算单元的数目有关。同理,完成2个长向量的乘法由simd本身可以驱动的计算单元数目和硬件本身存在计算单元的数目有关。但是长向量的加法与乘法不可以同时运算,因此总共需要至少2轮才能计算完成。

如果单独采用同步多线程的计算方式,同步多线程。处理器在同一个时钟周期内可以同时执行多个线程,且支持不同类型指令的多线程运行。可以合理利用计算系统的丰富资源,同时运行多个线程,线程就是运行的指令和它们所需要的资源组成的。

在同步多线程中,同步运行多个不同类型线程,每个线程用到一个计算单元。在传统同步多线程模型中,每一个线程对标量或短向量进行计算。计算长向量的加法时,多个线程计算,也要把长向量拆成计算单元能接受的长度的短向量或标量,以便多个线程分别执行短向量加法或标量加法。例如分别计算多个短向量加法得到该长向量加法的值。假设在同步多线程中有10个线程,每轮可以驱动10个线程,所述10个线程可以是加法线程,也可以是乘法线程,还可以是既包括加法线程又包括乘法线程,具体情况由实际需要的计算决定。以每轮驱动5个加法线程和5个乘法线程为例,每个加法线程一次只能用1个加法计算单元,每个乘法线程只能用1个乘法计算单元,这样的话每个线程每轮只能完成一个短向量加法或乘法,多轮才能完成3个长向量的加法和2个长向量的乘法,不能充分利用计算单元的资源。如果线程足够多也可以一轮完成,但是线程太多,而且涉及3条加法指令的计算和2条乘法指令的计算,容易引起线程之间的任务依赖和等待切换,任务调度会非常复杂。

如果采用同步多线程和单指令多数据流融合的计算方式,根据单指令多数据流(simd)的特点,能一次驱动多个计算单元。根据同步多线程的特点,在相同时钟周期,可以同步执行来自多个线程的指令,例如同时运行加法和乘法线程。采用同步多线程和单指令多数据流(simd)的融合计算方式时,就是同时运行多个不同类的线程,然后每个线程运行一条simd指令,每个线程通过运行simd指令就能用到多个计算单元。那么3个长向量的加法(a1 a2),(a3 a4),(a5 a6)和2个长向量的乘法(a7×a8),(a9×a10)同时进行。多个线程并行,每个加法线程用到多个加法计算单元,每个乘法线程用到多个乘法计算单元,一轮计算即可多个线程同时完成3个长向量的加法和两个长向量的乘法,尽量大的开发计算单元和线程并行的能力,而且比单采用一种计算方式计算的向量的长度更长,可以实现超长向量的运算。具体过程参见上文中单指令多数据流(simd)和单指令多线程融合的过程,区别就在于同步多线程中的线程能执行不同的指令,在例子中间还要加上乘法器,在此不在赘述。

在此仅仅举例说明同步多线程和单指令多数据流(simd)的融合计算方式的并行计算的过程,并不以此为限。

在此,对于其中的多个涉及向量的不同类型的计算操作,例如一些是加法和减法操作,另一些是加法和乘法操作,选择同步多线程和单指令多数据流的融合计算方式。不仅可以节省硬件资源,而且同时开发计算单元并行的能力和多线程并行的能力,提高计算效率。

参见图3,在s330中,控制器将线程打包成线程组。

调度线程组相比于调度线程,效率更高,相对也更有序,减少线程切换的频率,能够提高计算效率。

根据计算群中空闲计算单元的数量和功能,将启动的多个线程打包成线程组,通过动态资源表调动线程组执行计算任务,其中,线程组包括至少一个线程。

线程被打包成线程组,线程组的大小是由硬件资源决定的。一般来说,线程组中线程数量的设置遵循以下两个原则:第一,能尽可能地充分使用硬件的计算资源;第二,提供计算通信的便利。每个线程组的大小与计算类型和总的空闲计算单元数量有关。

根据同类功能的空闲计算单元总数量,能同时运行的线程数作为一个线程组,将多个线程打包成线程组,其中,不同计算类型的线程处于不同线程组。功能就是计算单元的类型,例如是加法器还是乘法器等等。

在同步多线程和单指令多数据流(simd)的融合计算方式中,计算类型不同。以向量计算为例,根据总的加法计算单元数量,将至少一个加法线程打包成一个加法线程组,根据总的乘法计算单元数量,将至少一个乘法线程打包成一个乘法线程组。

通过启动的多个线程,每个线程运行一条simd指令,simd指令一次驱动多个同类计算单元,所有同类空闲计算单元的总数量除以这多个同类计算单元的数量,就是可同时执行的最大同类线程数。将这个最大数量的同类线程打包成一个同类线程组同时运行,最后可以打包成多个线程组,不同计算类型的线程处于不同线程组。充分利用计算单元的资源,提高计算效率。

参见图3,在s340中,根据同步多线程和单指令多数据流(simd)的融合计算方式,控制器通过动态资源表调度线程组执行计算任务。

其中,控制器单元中的调度器可以维护一张动态的资源使用情况表,我们称为动态资源表,如用位图实现这样一张表,位图中的0代表资源空闲,1代表资源繁忙,不同种类的资源可以有不同的资源使用情况表。计算群以合适的时间间隔向控制器单元发送资源使用的情况以更新位图。所述动态资源表用于表示实时的硬件资源使用情况,以便找出空闲硬件来调度线程组执行计算任务。

其中,所述计算群是指总的计算资源,由多个计算子集群构成,计算子集群包括计算单元和共享存储器。例如在一个可能的融合计算硬件设计方式中,20个乘法器和50个加法器共用一个共享存储器和一个局部同步器,从而这20个乘法器、50个加法器和共享存储器被事实上划分为了一个小的计算子集群,计算群由多个这样的计算子集群构成。

通过动态资源表调动线程组执行计算任务。线程组被分配到一个个的计算子集群上,假设总共有20个计算子集群,每个计算子集群有50个加法器和20个乘法器。子任务需要被划分为多个线程组,同步执行的线程组的数目一般由计算子集群的数目决定,而一个线程组的线程数目则由一个计算子集群中的空闲计算单元数目决定。

例如在同步多线程和单指令多数据流(simd)的融合计算方式中,子任务需要1000个加法线程和1000个乘法线程执行,假设总共有20个计算子集群,每个计算子集群有50个加法器和20个乘法器。

每个加法线程执行一条加法simd指令,一条simd加法指令驱动5个加法器(由硬件决定的),那么一个线程可以同时驱动5个加法器,每个计算子集群的50个加法器就可以同时执行10个加法线程。控制器设置一个线程组包含10个线程,就将10个加法线程打包为一个线程组,1000个加法线程则可以打包为100个加法线程组。

每个乘法线程执行一条乘法simd指令,一条simd乘法指令驱动5个乘法器(由硬件决定的),那么一个线程可以同时驱动5个乘法器,每个计算子集群的20个乘法器就可以同时执行4个乘法线程。控制器设置一个线程组包含10个线程,就将4个乘法线程和6个非活跃线程打包为一个线程组,1000个乘法线程则可以打包为250个乘法线程组。其中,非活跃线程是不运行任务的空闲线程。

20个子集群,可以同时计算20个加法线程组和20个乘法线程组,共200个加法线程和80个乘法线程。1000个加法线程和1000个乘法线程总共13轮即可计算完成。

如果总共有998个加法线程,而不是1000个加法线程,最后的剩余线程数为8个,不足一个线程组,则用非活跃线程填充。同一个线程组中的线程可以通过共享存储器进行通信,通过局部同步器进行同步。实际中,具体启动多少个线程,需要根据实际的计算资源和计算任务进行测量,原则上最大化并行以便不浪费计算资源。

控制器通过动态资源表调度线程组执行计算任务,具体包括以下步骤。

在s341中,当线程组因为访问存储单元而阻塞时,使阻塞的线程组进入等待队列。

当线程组因为访问存储单元而阻塞时,执行上下文切换后,使阻塞的线程组进入等待队列。通过信号监测,可以监测输入数据准备状态。当输入数据准备好后,可以通过中断信号进行提醒。但并不以此为限。

在s342中,在存储单元中的阻塞的线程组的输入数据准备好后,使阻塞的线程组进入准备队列。

在存储单元中的阻塞的线程组的输入数据准备好后,线程组继续运行的条件满足后,使阻塞的线程组进入准备队列。不但能在原本该线程组执行的硬件处理单元上调度该线程组,还能通过全局调度信息查找空闲的硬件资源对该线程组进行调度。

在s343中,基于动态资源表,确定空闲计算单元。

控制器单元中的调度器中设置动态资源表,可选地,如用位图实现这样的动态资源表,位图中的0代表资源空闲,1代表资源繁忙,不同种类的资源可以有不同的资源使用情况表。计算群以合适的时间间隔向控制器单元发送资源使用的情况以更新位图。基于动态资源表,确定空闲计算单元。在空闲计算单元调度执行准备队列中的线程组。在阻塞队列中被阻塞的线程组的执行条件被满足后,该线程组被调往准备队列。

在s344中,调度准备队列中的线程组至空闲计算单元去执行计算任务。

可选地,调度器按照顺序调度执行准备队列中的线程组。

可选地,对线程组进行优先级排序,优先级高的线程组先调度执行。对线程组进行优先级排序,包括但不限于根据执行时间设置线程组的优先级。

可选地,基于负载均衡原则,根据线程组的执行时间评估空闲计算单元的计算负载的执行时间,根据所述计算负载的执行时间设置线程组的优先级空闲计算单元。

可选地,根据等待时间的长短设置线程组的优先级。举例说明,调度的目的是充分使用硬件资源,因此在按调度时间分配时,可以遵循三个原则,一是执行时间较短的线程组有较高的优先级,二是负载均衡原则,三是防止饥饿原则。

为了实现原则一,可以将执行时间较短的线程组调往准备队列头部,调度器从准备队列头部来寻找需要调度的线程组。

为了实现原则二,根据线程组的执行时间评估空闲计算单元的计算负载的执行时间,根据计算负载的执行时间设置线程组的优先级。在硬件资源较为充足的情况下,可以将一个执行时间较长的线程组调往一个空闲硬件单元,将几个执行时间较短的线程组调往另一个空闲硬件单元,并使几个执行时间较短的线程组的执行时间之和大致等于执行时间较长的线程组的执行时间,也就是确定线程组的执行时间和空闲计算单元的匹配程度,根据所述匹配程度设置线程组的优先级。

在一个可能的实施例中,在根据线程组的等待时间确定优先级时,可以遵照防止饥饿原则确定其优先级。也就是在一个线程组长期处于队列尾部时,为防止其一直不被执行,应将其调往准备队列头部,使其能够先被执行。

调度器根据符合调度原则的调度算法和资源空闲情况将准备队列中的线程组调度至空闲硬件单元,以实现全局调度,充分利用硬件资源。

可选地,在调度准备队列中的线程组至空闲计算单元去执行计算任务时还可以利用神经网络优化调度策略。首先设置多种调度策略,每种调度策略对应一组调度信息,调度信息包括需要调度哪些线程组及这些线程组的分配信息,所述线程组的分配信息是指如何分配线程组,如哪些线程在一个线程组内,一个线程组内有多少个线程,共有多少个线程组等。将每种调度策略的调度信息和空闲计算单元的资源信息输入神经网络。得到每种调度策略下执行计算任务的预测时间。选择与最短的执行计算任务的预测时间相对应的调度策略,去调度准备队列中的线程组至空闲计算单元去执行计算任务。所述空闲计算单元信息指的是哪些计算资源是空闲的,所述空闲计算单元大小等等。

具体而言,调度器可以使用机器学习算法优化调度策略,例如用深度神经网络,将调度准备队列中的线程组的调度信息和空闲计算单元信息作为输入,将调度任务运行执行计算任务的预测时间作为输出,用这样的输入输出训练深度神经网络,使该网络有对该硬件执行计算任务的总体时间具有预测能力,利用这个深度神经网络可以对各个调度信息对应的调度策略的任务执行时间进行评估,选择执行时间最短的调度策略。

可选地,调度所述准备队列中的线程组至所述空闲计算单元去执行所述计算任务,包括:获取调度至所述空闲计算单元上的线程组对应的多个微控制指令,转化微控制指令为控制信号,发送控制信号到计算群,使计算群的空闲计算单元从存储单元提取操作数执行计算任务。

可选地,线程组可以只包括一个线程,也可以包括多个线程。

控制器获取来自多个线程组的多个微控制指令,线程组中的微控制指令,被划分为多个子任务,多个线程执行一个子任务。

转化多个微控制指令为多个控制信号。控制器的调度器接收线程组分配信息。线程组分配信息指如何分配线程组,包括线程总数量,线程组中的线程数量,线程所执行的指令序列和目前需要调度的线程组等信息。

控制器发送多个控制信号到计算群,使计算群的多个计算类型相同的空闲计算单元从存储单元提取操作数执行计算任务。

根据一些实施例,计算群的群控制器接收控制信号,并根据控制信号会得到线程组分配信息。群控制器将控制信号转化为群内控制信号发送到合适的计算单元。例如将控制信号转化为群内控制信号后,根据群内控制信号包含的计算操作的类型,加法任务发送到加法计算单元,乘法任务发送到乘法计算单元等等。

空闲计算单元的单元控制器接收群内控制信号。利用空闲计算单元基于群内控制信号,从存储单元读取输入数据。输入数据包括向量操作数。空闲计算单元读取向量操作数并进行向量计算,执行控制信号对应的线程组的计算任务。输出数据和中间结果可暂存在计算单元的第二存储器。

本实施例提供的技术方案,根据同步多线程和单指令多数据流(simd)的融合计算方式,控制计算群执行计算任务,适用于不同的计算类型。可以实现多个线程的并行来执行单条指令,使线程拥有独立的寄存器,支持独立寻址,更为灵活。并且可以极大的开发计算单元和线程的并行能力,节省硬件资源,提高计算效率。并进行了多线程打包成线程组,对线程组中的线程同时计算,利用动态资源表对计算资源进行监控和记录,调度线程组执行计算任务,能够充分利用计算资源,进一步提高计算效率。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本申请所必须的。

图4是本申请一实施例提供的一种融合计算装置功能组成框图之一。

参见图4,融合计算装置1000包括控制器100、计算群200、存储单元300。

控制器100配置为获取微控制指令序列并分配给启动的多个线程,其中,微控制指令序列包括计算任务的计算类型,基于计算任务的计算类型,确定融合计算方式,根据融合计算方式,通过动态资源表调度线程组执行计算任务。计算群200配置为在控制器100的控制下通过多种寻址方式从存储单元300提取数据,执行计算任务。存储单元300用于存储计算任务的输入数据和输出数据。

图5是本申请另一实施例提供的一种融合计算装置功能组成框图之二。

如图5所示,融合计算装置1000包括控制器100、计算群200、存储单元300。

控制器100配置为获取微控制指令序列并分配给启动的多个线程,其中,微控制指令序列包括计算任务的计算类型,基于计算任务的计算类型,确定融合计算方式,将线程打包成线程组,根据融合计算方式,通过动态资源表调度线程组执行计算任务。计算群200在控制器100的控制下通过多种寻址方式从存储单元300提取数据,执行计算任务。存储单元300用于存储计算任务的输入数据和输出数据。

如图5所示,控制器100包括第一存储器110、译码器120、调度器130、控制单元140。

具体而言,第一存储器110用于获取微控制指令序列,并存储微控制指令序列。译码器120用于将指令字译码为微控制指令序列。控制单元140配置为获取微控制指令序列并分配给启动的多个线程,其中,微控制指令序列包括计算任务的计算类型,基于计算任务的计算类型,确定融合计算方式,将线程打包成线程组。调度器130用于根据融合计算方式,通过动态资源表调度线程组执行计算任务。

如图5所示,计算群200包括群控制单元210、至少一个计算单元220。

群控制单元210接收控制信号,转换控制信号为群内控制信号,根据群内控制信号包含的计算类型,发送群内控制信号到对应的计算单元。计算单元220接收群内控制信号,从存储单元提取输入数据,执行群内控制信号对应的线程组的计算任务。

计算任务可以由几个计算单元220协同完成,如对于一个视频压缩计算,可将计算过程的预测、变换、量化和熵编码过程分配给不同的计算单元,计算单元220之间可以互相传递结果,从而构成流水线。计算单元220之间可以通信,进行数据传递。

图6是本申请一实施例提供的一种控制器功能组成框图。

如图6所示,控制单元140包括第一融合计算单元141、第二融合计算单元142。

第一融合计算单元141在计算类型相同时,基于单指令多线程和单指令多数据流的融合计算方式调用线程组执行微控制指令序列,控制计算群200执行计算任务。第二融合计算单元142在计算类型不同时,基于同步多线程和单指令多数据流的融合计算方式调用线程组执行微控制指令序列,控制计算群200执行计算任务。

调度器130包括线程组阻塞处理单元131。

线程组阻塞处理单元131在线程组因为访问存储单元而阻塞时,使阻塞的线程组进入等待队列,调度执行未阻塞的线程组的计算任务,在存储单元300中的阻塞的线程组的输入数据准备好后,使阻塞的线程组进入准备队列,基于动态资源表,确定计算群200空闲计算单元,在空闲计算单元调度执行准备队列中的线程组。在空闲计算单元调度执行准备队列中的线程组,包括但不限于顺序调度执行所述准备队列中的线程组;或者对线程组进行优先级排序,优先级高的线程组先调度执行。

对线程组进行优先级排序,包括但不限于以下几种方法。根据执行时间设置线程组的优先级;或者基于负载均衡原则,根据空闲计算单元与线程组的匹配程度设置线程组的优先级;或者根据等待时间的长短设置线程组的优先级。

图7是本申请一实施例提供的一种计算单元功能组成框图。

如图7所示,计算单元220包括第二存储器223、单元控制器221、功能部件222。

第二存储器223用于暂存计算任务的输入数据和输出数据。单元控制器221用于接收群内控制信号,基于群内控制信号控制功能部件222执行各种计算任务。功能部件222用于从存储单元300提取输入数据,执行群内控制信号对应的线程组的计算任务。功能部件222包括向量运算部件和各种针对专用算法的优化功能部件(如针对机器学习或图形处理的专用部件等)。通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。

如图8所示,本申请实施例还提供一种电子设备。该电子设备可以为一种芯片。该芯片可以包括输出单元401、输入单元402、处理器403、存储器404、通讯接口405,以及内存单元406。

存储器404作为一种非暂态计算机可读存储器,可用于存储软件程序、计算机可执行程序以及模块,如上述描述的用于一种基于人工智能处理器芯片的视频处理方法对应的程序指令/模块。处理器403通过运行存储在存储截止中的软件程序、指令以及模块,从而执行电子设备的各种功能应用以及数据处理,即实现上述实施例描述的方法。存储器404可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据电子器件的使用所创建的数据等。此外,存储器404可以包括高速随机存取存储器,还可以包括非暂态性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态性固态存储器件。在一些实施例中,存储器404可选包括相对于处理器403远程设置的存储器,这些远程存储器可以通过网络连接至电子设备。

依据以下条款可更好地理解前述内容。

条款1.一种融合计算方法,包括:获取微控制指令序列并分配给启动的多个线程,其中,所述微控制指令序列包括计算任务的计算类型;基于所述计算任务的计算类型,确定融合计算方式;根据所述融合计算方式,通过动态资源表调度所述线程执行所述计算任务。

条款2.根据条款1所述的方法,还包括:根据计算群中空闲计算单元的数量和功能,将所述启动的多个线程打包成线程组,通过动态资源表调动所述线程组至所述空闲计算单元中执行所述计算任务,其中,所述线程组包括至少一个线程。

条款3.根据条款2所述的方法,不同计算类型的线程处于不同线程组。

条款4.根据条款1至3之任一项所述的方法,所述基于所述计算任务的计算类型,确定融合计算方式,包括:当所述计算类型相同时,则确定单指令多线程和单指令多数据流融合的计算方式;当所述计算类型不同时,则确定同步多线程和单指令多数据流融合的计算方式。

条款5.根据条款4所述的方法,每条所述线程执行一条单指令多数据指令。

条款6.根据条款2所述的方法,所述通过动态资源表调度所述线程组至所述空闲计算单元执行所述计算任务,包括:当所述线程组因为访问存储单元而阻塞时,使阻塞的线程组进入等待队列;在所述存储单元中的所述阻塞的线程组的输入数据准备好后,使所述阻塞的线程组进入准备队列;通过所述动态资源表,确定空闲计算单元;调度所述准备队列中的线程组至所述空闲计算单元去执行所述计算任务。

条款7.根据条款6所述的方法,调度所述准备队列中的线程组至所述空闲计算单元去执行所述计算任务,包括:顺序调度所述准备队列中的线程组去执行所述计算任务;或者对线程组进行优先级排序,先调度优先级高的线程组执行所述计算任务。

条款8.根据条款7所述的方法,所述对线程组进行优先级排序,包括以下至少一种:根据线程组的执行时间长短设置线程组的优先级;基于负载均衡原则,根据线程组的执行时间评估空闲计算单元的计算负载的执行时间,根据所述计算负载的执行时间设置线程组的优先级;基于防止饥饿原则,根据线程组等待执行时间的长短设置线程组的优先级。

条款9.根据条款6所述的方法,调度所述准备队列中的线程组至所述空闲计算单元去执行所述计算任务,包括:设置多种调度策略,每种所述调度策略对应一组调度信息;将每种所述调度策略对应的所述调度信息和所述空闲计算单元的资源信息输入神经网络,得到每种所述调度策略下执行所述计算任务的预测时间;选择与最短的所述预测时间相对应的调度策略,去调度所述准备队列中的线程组至所述空闲计算单元去执行所述计算任务。

条款10.根据条款6-9任一项所述的方法,所述调度所述准备队列中的线程组至所述空闲计算单元去执行所述计算任务,包括:获取调度至所述空闲计算单元上的线程组所对应的微控制指令;转化所述微控制指令为控制信号;发送所述控制信号到计算群,使所述计算群的所述空闲计算单元从存储单元提取操作数执行所述计算任务。

条款11.一种融合计算装置,包括控制器、计算群、存储单元,其中,所述控制器配置为获取微控制指令序列并分配给启动的多个线程,其中,所述微控制指令序列包括计算任务的计算类型;基于所述计算任务的计算类型,确定融合计算方式;根据所述融合计算方式,通过动态资源表调度所述线程执行所述计算任务;所述计算群配置为在所述控制器的控制下执行所述计算任务;所述存储单元配置为存储所述计算任务的输入数据和输出数据。

条款12.根据条款11所述的融合计算装置,所述控制器包括第一存储器、译码器、控制单元和调度器,所述第一存储器用于获取微控制指令序列,存储所述微控制指令序列;所述译码器用于将指令字译码为微控制指令序列;所述控制单元配置为获取微控制指令序列并分配给启动的多个线程,其中,微控制指令序列包括计算任务的计算类型,基于计算任务的计算类型,确定融合计算方式,将线程打包成线程组;所述调度器用于根据融合计算方式,通过动态资源表调度线程组执行计算任务。

条款13.根据条款12所述的融合计算装置,所述控制单元包括第一融合计算单元和第二融合计算单元,所述第一融合计算单元在计算类型相同时,基于单指令多线程和单指令多数据流的融合计算方式调用线程组执行微控制指令序列,控制所述计算群执行所述计算任务;第二融合计算单元在计算类型不同时,基于同步多线程和单指令多数据流的融合计算方式调用线程组执行微控制指令序列,控制所述计算群执行所述计算任务。

条款14.根据条款13所述的融合计算装置,所述调度器包括线程组阻塞处理单元,所述线程组阻塞处理单元用于在所述线程组因为访问存储单元而阻塞时,使阻塞的线程组进入等待队列;在所述存储单元中的所述阻塞的线程组的输入数据准备好后,使所述阻塞的线程组进入准备队列;通过所述动态资源表,确定空闲计算单元;调度所述准备队列中的线程组至所述空闲计算单元去执行所述计算任务。

条款15.根据条款11所述的融合计算装置,所述计算群包括群控制单元和至少一个计算单元,所述群控制单元接收所述控制信号,转换所述控制信号为群内控制信号,发送所述群内控制信号到对应的计算单元;所述计算单元,接收所述群内控制信号,从所述存储单元提取输入数据,执行所述群内控制信号对应的线程组的计算任务。

条款16.根据条款15所述的融合计算装置,所述计算单元包括第二存储器、单元控制器、功能部件,所述第二存储器用于暂存所述计算任务的输入数据和输出数据;所述单元控制器用于接收所述群内控制信号,基于所述群内控制信号控制所述功能部件执行所述计算任务;所述功能部件用于从所述存储单元提取输入数据,执行所述群内控制信号对应的线程组的所述计算任务。

条款17.一种芯片,包括如条款11至条款16之任一项所述的融合计算装置。

条款18.一种设备,包括如条款17所述的芯片。

条款19.一种计算机可读存储介质,其上存储有处理器程序,所述处理器程序用于执行条款1至条款10之任一项所述的融合计算方法。

以上对本申请实施例进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明仅用于帮助理解本申请的方法及其核心思想。同时,本领域技术人员依据本申请的思想,基于本申请的具体实施方式及应用范围上做出的改变或变形之处,都属于本申请保护的范围。综上所述,本说明书内容不应理解为对本申请的限制。


技术特征:

1.一种融合计算方法,其特征在于,包括:

获取微控制指令序列并分配给启动的多个线程,其中,所述微控制指令序列包括计算任务的计算类型;

基于所述计算任务的计算类型,确定融合计算方式;

根据所述融合计算方式,通过动态资源表调度所述线程执行所述计算任务。

2.根据权利要求1所述的方法,其特征在于,所述方法还包括:

根据计算群中空闲计算单元的数量和功能,将所述启动的多个线程打包成线程组,通过动态资源表调动所述线程组至所述空闲计算单元中执行所述计算任务,

其中,所述线程组包括至少一个线程。

3.根据权利要求2所述的方法,其特征在于,不同计算类型的线程处于不同线程组。

4.根据权利要求1至3之任一项所述的方法,其特征在于,所述基于所述计算任务的计算类型,确定融合计算方式,包括:

当所述计算类型相同时,则确定单指令多线程和单指令多数据流融合的计算方式;

当所述计算类型不同时,则确定同步多线程和单指令多数据流融合的计算方式。

5.根据权利要求4所述的方法,其特征在于,每条所述线程执行一条单指令多数据指令。

6.根据权利要求2所述的方法,其特征在于,所述通过动态资源表调动所述线程组至所述空闲计算单元中执行所述计算任务,包括:

当所述线程组因为访问存储单元而阻塞时,使阻塞的线程组进入等待队列;

在所述存储单元中的所述阻塞的线程组的输入数据准备好后,使所述阻塞的线程组进入准备队列;

通过所述动态资源表,确定空闲计算单元;

调度所述准备队列中的线程组至所述空闲计算单元去执行所述计算任务。

7.根据权利要求6所述的方法,其特征在于,调度所述准备队列中的线程组至所述空闲计算单元去执行所述计算任务,包括:

顺序调度所述准备队列中的线程组去执行所述计算任务;或者

对线程组进行优先级排序,先调度优先级高的线程组执行所述计算任务。

8.根据权利要求7所述的方法,其特征在于,所述对线程组进行优先级排序,包括以下至少一种:

根据线程组的执行时间长短设置线程组的优先级;

基于负载均衡原则,根据线程组的执行时间评估空闲计算单元的计算负载的执行时间,根据所述计算负载的执行时间设置线程组的优先级;

基于防止饥饿原则,根据线程组等待执行时间的长短设置线程组的优先级。

9.根据权利要求6所述的方法,其特征在于,调度所述准备队列中的线程组至所述空闲计算单元去执行所述计算任务,包括:

设置多种调度策略,每种所述调度策略对应一组调度信息;

将每种所述调度策略对应的所述调度信息和所述空闲计算单元的资源信息输入神经网络,得到每种所述调度策略下执行所述计算任务的预测时间;

选择与最短的所述预测时间相对应的调度策略,去调度所述准备队列中的线程组至所述空闲计算单元去执行所述计算任务。

10.根据权利要求6至9之任一项所述的方法,其特征在于,所述调度所述准备队列中的线程组至所述空闲计算单元去执行所述计算任务,包括:

获取调度至所述空闲计算单元上的线程组所对应的微控制指令;

转化所述微控制指令为控制信号;

发送所述控制信号到计算群,使所述计算群的所述空闲计算单元从存储单元提取操作数执行所述计算任务。

11.一种计算机可读存储介质,其上存储有处理器程序,其特征在于,所述处理器程序用于执行权利要求1至10之任一项所述的融合计算方法。

技术总结
本申请提供融合计算方法及可读存储介质。所述融合计算方法包括:获取微控制指令序列并分配给启动的多个线程,其中,所述微控制指令序列包括计算任务的计算类型;基于所述计算任务的计算类型,确定融合计算方式;根据所述融合计算方式,调度所述线程执行所述计算任务。

技术研发人员:不公告发明人
受保护的技术使用者:中科寒武纪科技股份有限公司
技术研发日:2020.01.14
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-28852.html

最新回复(0)