一种图形处理器及其资源调度方法、装置与流程

文档序号:17835680发布日期:2019-06-05 23:31阅读:210来源:国知局
本发明涉及计算机
技术领域
:,特别是涉及一种图形处理器、一种资源调度方法、一种资源调度装置、一种电子设备以及一种可读存储介质。
背景技术
::随着图形处理器(graphicprocessingunit,gpu)通用计算技术的发展,gpu不再局限于图像处理,能够实现众多类型的通用程序,已经广泛应用于不同的领域。gpu通常包含多个独立的流式多处理器(streammultiprocessor,sm),且每个sm独立管理各自的三类关键资源。这三类关键资源分别为:寄存器、共享内存和线程束调度器项(warpscheduleoptions,wps)。gpu在运行kernel程序时,需要针对这三类关键资源进行资源分配和回收。当前gpu运行核(kernel)程序时,主要以线程块(threadblock,tb)tb和线程束(warp)两种不同粒度,将kernel程序的任务分发到不同的sm,使得sm以相应的粒度进行资源分配和回收。若某个sm的剩余关键资源不满足一个最小可运行的任务调度单元的运行需求时,则gpu就不会再向该sm发送kernel程序的任务,造成该sm的资源碎片。例如,在某个sm的剩余wps数量低于kernel程序的一个warp所需要的wps数量时,gpu就不会再向该sm分发该kernel程序的任务;又如,在某个sm的剩余共享内存资源不满足该kernel程序的一个tb所需要的共享内存资源时,gpu也不会再向该sm分发该kernel程序的任务。由于gpu中每个sm的物理资源相同,且可运行的程序任务也相同,因此gpu中所有的sm都存在关键资源碎片,造成gpu资源浪费,降低了gpu的性能和资源利用率。技术实现要素:本发明实施例提供一种新的gpu、一种资源调度方法、一种资源调度装置、一种电子设备以及一种可读存储介质,解决gpu中每个sm存在资源碎片所造成资源浪费的问题。为达到上述目的,本发明的实施例采用如下技术方案:第一方面,提供一种资源调度方法,应用于图形处理器中,该图形处理器包括全局调度器和至少两个流式多处理器sm,该方法包括:全局调度器接收核程序,将所述核程序中的第一线程块发送给第一sm;在第一sm接收到第一线程块后,若第一sm检测到该第一sm的剩余资源量不满足第一线程块所需要的运行条件,将第一线程块记录为横跨线程块,并将横跨线程块的至少一个线程束发送给第二sm。显然,本实施方式在sm不能完成全局调度器所分发的线程块时,可以将该线程块记录为横跨线程块,并且可将横跨线程块的至少一个线程束发送给另一个sm,从而使得横跨线程块可访问两个sm的资源,实现了sm之间的资源共享,进而能够解决gpu中单个sm存在资源碎片所造成资源浪费的问题,提高了整块gpu的资源利用率。结合第一方面,在第一方面的第一种可能的实现方式中,还包括:第一sm为所述横跨线程块中的至少一个线程束分配资源。本实施方式能够将所述第一sm当前的剩余资源分配给所述横跨线程块,从而能够采用第一sm当前剩余资源执行横跨线程块中的线程束,达到充分利用第一sm的剩余资源的目的,提高资源利用率。结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,还包括:第二sm接收到所述横跨线程块的至少一个线程束后,为接收到的横跨线程块的至少一个线程束分配资源。本实施方式在所述第二sm接收到所述第一sm所发送的横跨线程块的至少一个线程束后,可以直接分配分配所述横跨线程块的至少一个线程束所需要的剩余资源,从而能够采用第二sm中的资源执行横跨线程块中的线程束,在实现第一sm与第二sm之间的资源组合分配的同时,简化了横跨线程块的资源分配流程,提高了资源分配效率。结合第一方面至第一方面的第二种可能的实现方式中的任一可能的实施方式,在第一方面的第三种可能的实现方式中,该方法还包括:第二sm在执行完横跨线程块中的线程束后,生成对应的第二sm完成信息;并将所述第二sm完成信息发送给所述第一sm;所述第一sm在执行完横跨线程块中的线程束后,依据所述第二sm发送的第二sm完成信息,对所述横跨线程块对应记录的线程块信息进行更新,以及将更新后的线程块信息发送给全局调度器。从而,使得全局调度器能够接收到第一sm针对横跨线程块所发送的线程块信息,并能够根据该线程块信息确定出横跨线程块中已被第一sm和第二sm执行完,以及能够确定第一sm和第二sm已释放该横跨线程块横跨线程所占用的资源,以便后续可以重新向第一sm和第二sm分发线程块,提高线程块的分发效率;并且使得全局调度器可以依据接收到的更新后的线程块信息实时更新sm信息,以便后续能够根据更新后的sm信息向sm分发线路块,确保全局调度器中记录的sm信息的准确性。结合第一方面至第一方面的第二种可能的实现方式中的任一可能的实施方式,在第一方面的第四种可能的实现方式中,该方法还包括:第一sm在执行完横跨线程块中的线程束后,生成对应的第一sm完成信息,并将所述第一sm完成信息发送给所述第二sm;所述第二sm在执行完横跨线程块中的线程束后,依据所述第一sm发送的第一sm完成信息,对所述横跨线程块对应记录的线程块信息进行更新,以及将更新后的线程块信息发送给全局调度器。从而,使得全局调度器能够接收到第二sm针对横跨线程块所发送的线程块信息,并能够根据该线程块信息确定出横跨线程块中已被第一sm和第二sm执行完,以及能够确定第一sm和第二sm已释放该横跨线程块横跨线程所占用的资源,以便后续可以重新向第一sm和第二sm分发线程块,从而提高线程块的分发效率;并且使得全局调度器可以依据接收到的更新后的线程块信息实时更新sm信息,以便后续能够根据更新后的sm信息向sm分发线路块,确保全局调度器中记录的sm信息的准确性。结合第一方面至第一方面的第二种可能的实现方式中的任一可能的实施方式,在第一方面的第五种可能的实现方式中,还包括:当核程序中有剩余待分发的线程块时,全局调度器检测图形处理器中的第三sm的的剩余共享内存容量是否满足单个线程块所需要的共享内存容量;检测到所述第三sm的剩余共享内存容量满足单个线程块所需要的共享内存容量后,向所述第三sm发送所述核程序中的一个待分发的线程块。本实施方式在图形处理器中的共享内存不是核程序的资源瓶颈时,可以向图形处理器中的sm多分配一个线程块,从而能够最大程度占满了gpu中所有sm的瓶颈资源,进一步地提高gpu资源的利用率。结合第一方面至第一方面的第二种可能的实现方式中的任一可能的实施方式,在第一方面的第六种可能的实现方式中,在将所述核程序中的第一线程块发送给第一sm之前,还包括:确定第一线程块所需要的第一资源数量;依据第一sm对应的sm信息以及所述第一资源数量进行分配,确定向第一sm分配的线程块数量。随后,可按照向第一sm分配的线程块数量,向第一sm分发相应的第一线程块,从而实现了以线程块为任务调度单位,将核程序中的线程块分发给gpu中相互连接的各sm,保证核程序中的线程块分发效率。结合第一方面的第六种可能的实现方式,在第一方面的第七种可能的实现方式中,sm信息为所述全局调度器依据sm中记录的线程块信息确定的,该方法还包括:sm针对接收到的线程块记录对应的线程块信息,并将记录的线程块信息发送给所述全局调度器;所述全局调度器依据每一个sm所发送的线程块信息,确定每一个sm对应的sm信息。从而,使得全局调度器可以依据sm中记录的线程块信息实时更新sm信息,以便后续能够根据更新后的sm信息向sm分发线路块。第二方面,提供了一种新的图形处理器,包括:全局调度器和至少两个流式多处理器sm;其中,所述全局调度器接收到核程序,将所述核程序中的第一线程块发送给第一sm;第一sm接收第一线程块,在检测到第一sm的剩余资源量不满足第一线程块所需的运行条件后,将所述第一线程块记录为横跨线程块,将横跨线程块的至少一个线程束发送给第二sm。第二线程块接收到第一sm所发送的横跨线程块的至少一个线程束后,为接收到的横跨线程块的至少一个线程束分配资源。与现有的gpu相比,本实施方式提供的gpu在第一sm的剩余资源量不满足第一线程块所需的运行条件时,可将所述第一线程块记录为横跨线程块,并将横跨线程块的至少一个线程束发送给第二sm,使得sm之间可以共享部分资源,从而解决了gpu中单个sm存在资源碎片所造成资源浪费的问题,提高了整块gpu的资源利用率。结合第二方面,在第二方面的第一种可能的实现方式中,所述sm包括仲裁器、块调度器和从调度器;在同一sm中,所述块调度器的一端连接所述仲裁器,另一端连接所述从调度器;所述第一sm中的从调度器与所述第二sm中的仲裁器相连接。本实施方式中的gpu在第一sm不能完成一个完整的线程块时,可以通过第一sm中的块调度器将第一sm当前不能运行的线程块记录为横跨线程块,并且可以通过第一sm中的从调度器将横跨线程块发送给第二sm,从而使得第一sm当前剩余的空闲资源能够与第二sm的资源进行组合分配,进而能够充分利用第一sm中的资源,提高资源利用率。结合第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述第一sm中的从调度器将所述第一sm确定的横跨线程块的至少一个线程束发送给所述第二sm的仲裁器;第二sm中的仲裁器接收所述第一sm的从调度器所发送的横跨线程块的至少一个线程束。本实施方式在第二sm接收到线程块后,可以通过第二sm的仲裁器判断出线程块的来源,进而可与基于线程块的来源确定出第二sm当前所接收到的线程块是否是横跨线程块,判断过程简单。第三方面,提供一种资源调度装置,应用于图形处理器中,所述图形处理器包括全局调度器和至少两个流式多处理器sm,所述装置包括:全局调度器模块和sm调度器模块。其中,全局调度器模块,用于在全局调度器接收到核程序后,将所述核程序中的第一线程块发送给第一sm。sm调度器模块,用于在第一sm接收到所述第一线程块后,检测到第一sm的剩余资源量不满足第一线程块所需要的运行条件,将所述第一线程块记录为横跨线程块,并将所述横跨线程块的至少一个线程束发送给第二sm。结合第三方面,在第三方面的第一种可能的实现方式中,所述sm调度器模块,还用于在所述第一sm中为所述横跨线程块中的至少一个线程束分配资源。结合第三方面的第一种可能的实现方式,在第三方面的第二种可能的实现方式中,所述sm调度器模块,还用于所述第二sm接收到所述横跨线程块的至少一个线程束后,为接收到的横跨线程块的至少一个线程束分配资源。结合第三方面至第三方面的第二种可能的实现方式中的任一可能的实施方式,在第三方面的第三种可能的实现方式中,所述sm调度器模块,还用于在第二sm执行完横跨线程块中的线程束后,生成对应的第二sm完成信息;并将所述第二sm完成信息发送给所述第一sm。此外,所述sm调度器模块,还用于在所述第一sm执行完横跨线程块中的线程束后,依据所述第二sm发送的第二sm完成信息,对所述横跨线程块对应记录的线程块信息进行更新,以及将更新后的线程块信息发送给全局调度器。结合第三方面至第三方面的第二种可能的实现方式中的任一可能的实施方式,在第三方面的第四种可能的实现方式中,所述sm调度器模块,还用于在第一sm执行完横跨线程块中的线程束后,生成对应的第一sm完成信息,并将所述第一sm完成信息发送给所述第二sm。此外,所述sm调度器模块,还用于在所述第二sm执行完横跨线程块中的线程束后,依据所述第一sm发送的第一sm完成信息,对所述横跨线程块对应记录的线程块信息进行更新,以及将更新后的线程块信息发送给全局调度器。结合第三方面至第三方面的第二种可能的实现方式中的任一可能的实施方式,在第三方面的第五种可能的实现方式中,所述全局调度器模块,还用于当所述核程序中有剩余待分发的线程块时,检测所述图形处理器中的第三sm的剩余共享内存容量是否满足单个线程块所需要的共享内存容量;检测到所述第三sm的剩余共享内存容量满足单个线程块所需要的共享内存容量后,向所述第三sm发送所述核程序中的一个待分发的线程块。结合第三方面至第三方面的第二种可能的实现方式中的任一可能的实施方式,在第三方面的第六种可能的实现方式中,所述全局调度器模块,还用于确定第一线程块所需要的第一资源数量;依据第一sm对应的sm信息以及所述第一资源数量进行分配,确定向第一sm分配的线程块数量。结合第三方面至第六种可能的实现方式,在第三方面的第七种可能的实现方式中,所述sm调度器模块,还用于针对sm接收到的线程块记录对应的线程块信息,并将记录的线程块信息发送给所述全局调度器;所述全局调度器模块,还用于依据所述全局调度器接收到的每一个sm所发送的线程块信息,确定每一个sm对应的sm信息。第四方面,提供一种电子设备,其特征在于,包括一个或多个处理器;和其上存储有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述电子设备执行上述第一方面至第一方面的第七种可能的实现方式中的任一项所提供的资源调度方法。第五方面,提供一种可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述第一方面至第一方面的第七种可能的实现方式中的任一项所提供的资源调度方法。与现有技术相比,本发明实施例包括以下优点:综上,本发明实施例可以以线程块为任务调度单位,将核程序中的线程块分发给gpu中的sm,保证核程序中的线程块分发效率;且sm可在剩余空闲资源不能满足线程块的运行条件时,将该线程块记录为横跨线程块,并将横跨线程块的至少一个线程束发送另一个sm,实现了sm之间的资源共享,提高gpu资源的利用率;以及在gpu中的共享内存不是核程序的瓶颈资源时,可以再向sm下发核程序中的一个线程块,能够最大程序地占满gpu中所有sm的瓶颈资源,进一步地提高程序运行效率和gpu资源的利用率。附图说明为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1是本发明实施例中的一种图形处理器的结构示意图;图2是本发明的一种资源调度方法实施例的步骤流程图;图3是本发明一个示例中的一种gpu的框架示例图;图4是本发明一个示例中的核程序下发到gpu上的线程块分布示意图;图5a是本发明的一种资源调度方法可选实施例的步骤流程图;图5b是本发明一个可选实施中的一种资源调度方法的步骤流程图;图6是本发明的另一种资源调度方法实施例的步骤流程图;图7是本发明的另一种资源调度方法可选实施例的步骤流程图;图8是本发明的又一种资源调度方法实施例的步骤流程图;图9是本发明的又一种资源调度方法可选实施例的步骤流程图;图10是本发明的一种资源调度装置实施例的结构框图;图11是本发明的一种资源调度装置可选实施例的结构框图;图12是本发明的另一种资源调度装置实施例的结构框图;图13是本发明的又一种资源调度装置实施例的结构框图;图14是本发明的另一种资源调度装置可选实施例的结构框图;图15是本发明实施例的一种电子设备的一种可能的逻辑结构示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。为了最小化sm的资源浪费,本发明实施例提供一种新的gpu,如图1所示。该gpu100可以包括全局调度器110和至少两个流式多处理器sm120。其中,全局调度器110分别与各sm120相连接,用于向各sm120分发核程序中的线程块。sm120接收全局调度器所分发的线程块,并运行所述线程块中的线程束。在具体实现中,全局调度器可以接收核程序,并且可以将该核程序中的第一线程块发送给第一sm。第一sm可以接收到所述全局调度器所发送的第一线程块,并且可以检测第一sm的剩余资源量是否满足所述第一线程块所需的运行条件。其中,第一线程块可以用于表征全局调度器分发给第一sm的完整线程块。若第一sm当前的剩余资源量能够满足单个线程块所需要的运行条件,则可以分配所述全局调度器分发的线程块所需要的全部资源,亦即在第一sm的剩余资源量满足所述第一线程块所需的运行条件时,第一sm可以分配第一线程块所需要的全部资源。若第一sm当前的剩余资源量不满足单个线程块所需要的运行条件,则可以将所述全局调度器分发的线程块记录为横跨线程块,并将所述第一sm当前的剩余资源量分配给所述横跨线程块中的线程束,以及向所述第二sm发送所述横跨线程块的至少一个线程束。可见,本发明实施例在检测到第一sm的剩余资源量不满足所述第一线程块所需的运行条件后,可以将第一线程块记录为横跨线程块,并且可以将所述横跨线程块的至少一个线程束发送给第二sm。第二sm接收到所述第一sm所发送的横跨线程块的至少一个线程束后,可以为接收到的横跨线程块的至少一个线程束分配资源,即能够分配所述横跨线程块所需要的剩余资源。当然,还可以通过其他方式将横跨线程中的至少一个线程束发送给第二sm,本发明实施例对此不作限制。例如,全局调度器在检测到第一sm当前的剩余资源量不满足第一线程块所需的运行条件后,可以将该第一线程块记录为横跨线程块,可以基于第一sm当前的剩余资源量,将横跨线程块中的部分线程束发送给第一sm,触发第一sm为接收到的横跨线程块中的部分线程束分配资源,以达到充分利用第一sm的资源的目的;并且可以将该横跨线程块的剩余线程束发送给第二sm,以通过第二sm为该横跨线程块的剩余线程束分配资源,实现了相邻的sm之间共享部分资源的目的。本发明实施例中,gpu中的各sm可以具有连接关系,并且可以基于连接关系进行通信,如第一sm可以向第二sm发送横跨线程块中的线程束,使得第二sm能够接收到第一sm所发送的横跨线程块中的线程束。优选的,第二sm可以是与第一sm相连接的相邻sm。在本发明的一个示例中,gpu中相邻的两个sm可以分为第一sm和第二sm,并且可以将第一sm作为相互连接的相邻两个sm中的主sm,将第二sm作为相互连接的相邻两个sm中的从sm。其中,主sm可以用于向从sm发送横跨线程块中的一个或多个线程束,该横跨线程块为所述主sm在不能运行单个线程块中的所有线程束时所接收到的线程块。具体的,当主sm当前的剩余资源量小于单个线程块所需要的第一资源量时,即在主sm当前不能运行某个线程块中的所有线程束时,可以将该线程块记录为横跨线程块,并且可以通过主sm将该横跨线程块中的一个或多个线程束发送给与该主sm相连接的从sm,从而可以通过主sm和从sm中的资源,来运行该横跨线路块中的所有线程束。需要说明的是,本示例中的主sm和从sm是相对概念,一个sm既可以是一个tb的从sm,同时也可以是另外一个tb的主sm。例如,可以将横跨线程块的前部分所在sm称为主sm,将横跨线程块的后部分所在sm称为从sm,本发明实施例对此不做限制。在本发明实施例的gup中,相邻的sm之间相互连接,从而使得相邻的sm之间可以共享部分资源,如可以共享sm内部的三关键资源:warp调度器项、寄存器和共享内存等。具体的,在单个tb所需资源超过当前sm的剩余资源时,可以将当前sm的剩余资源与该sm的相邻sm的资源进行组合分配,从而解决了gpu中单个sm存在资源碎片所造成资源浪费的问题,提高了整块gpu的资源利用率。在本发明的一个可选实施例中,sm可以包括仲裁器、块调度器和从调度器,亦即在gpu中的每一个sm可以包括仲裁器、块调度器和从调度器。在同一sm中,块调度器的一端连接仲裁器,另一端连接所述从调度器。在sm接收到线程块后,可以由仲裁器判断该线程块的来源,并且可依据线程块的来源,触发sm中的块调度器记录该线程块对应的线程块信息。相邻的两个sm可以相互连接,如第一sm中的从调度器可以与所述第二sm中的仲裁器相连接。可选的,第一sm的调度优先级可以高于第二sm的调度优先级。第一sm中的从调度器可以将第一sm中记录的横跨线程块发送给所述第二sm的仲裁器。第二sm中的仲裁器可以接收所述第一sm的从调度器所发送的横跨线程块的至少一个线程束。可选的,第二sm中的仲裁器还可以接收所述全局调度器所分发的第一线程块。例如,结合上述示例,当主sm不能运行全局调度器所下发的线程块中的所有线程束时,gpu可以通过主sm中的块调度器,将该线程块记录为横跨线程块;并且可以通过主sm中的从调度器,将该横跨线程块的至少一个线程束发送给从sm的仲裁器,使得从sm可以接收到来自主sm所发送的横跨线程块的至少一个线程束,从而使得横跨线程块可以访问主sm和从sm的资源,即能够通过主sm和从sm的资源完成该横跨线程块的运行。显然,本发明实施例中第一sm的资源能够与第二sm的资源进行组合分配给横跨线程块,从而能够充分利用sm中的资源,提高资源利用率。参照图2,示出了本发明的一种资源调度方法实施例的步骤流程图,具体可以包括如下步骤:步骤201,全局调度器接收核程序,将所述核程序中的第一线程块发送给第一sm。需要说明的是,本发明实施例中的资源调度方法可以应用在gpu中。该gpu可以包括全局调度器和至少两个流式多处理器sm,且相邻的两个sm相互连接,如上述实施例中所提出的新的gpu。本发明实施例中的核(kernel)程序为能够在gpu上运行的程序,一个kernel程序可以包含至少两个线程块,一个线程块可以包含至少两个线程束。在本发明实施例中,全局调度器可以对接收到的核程序中的线程块进行分配,并向各sm分发相应的线程块,即将核程序中的第一线程块发送给第一sm。第一线程块可以用于表征核程序中待分发的一个完整的线程块。在具体实现中,本发明实施例中的gpu可以通过总线接口(pciexpress,pcie)与服务器主处理器(centralprocessingunit,cpu)连接。当服务器中操作系统给gpu下发程序任务时,可以通过cpu向gpu发送一个kernel程序,从而使得gpu可以接收到kernel程序。在kernel程序到达gpu的全局逻辑调度器后,即在全局调度器接收到kernel程序后,可对该kernel程序中的线程块进行分配,并向gpu中的各sm分发相应的线程块,即将kernel程序中的第一线程块发送给第一sm。例如,全局调度器可以针对该kernel程序,计算向gpu中每个第一sm分配的线程块数量;从而可以按照分配的线程块数量,向每个第一sm分发相应的第一线程块。步骤202,第一sm接收所述第一线程块。步骤203,第一sm检测到所述第一sm的剩余资源量不满足所述第一线程块所需的运行条件,将所述第一线程块记录为横跨线程块。本发明实施例中,在第一sm接收到所述全局调度器分发的线程块后,可以检测所述第一sm的剩余资源量是否满足所述第一线程块所需的运行条件,即检测所述第一sm当前的剩余资源量是否能够满足单个线程块所需的运行条件。若第一sm当前的剩余资源量满足单个线程块所需要的运行条件,则可以基于所述第一sm当前的剩余资源量,为所述全局调度器分发的线程块分配所需要的全部资源。若第一sm当前的剩余资源量不满足单个线程块所需要的运行条件,则可以将所述第一线程块记录为横跨线程块,即将所述全局调度器分发的线程块记录为横跨线程块,然后执行步骤204。步骤204,将所述横跨线程块的至少一个线程束发送给第二sm。在本发明实施例中,在sm接收到全局调度器所分发的线程块后,可以依据该sm当前的剩余资源量,判断sm当前是否能够运行单个线程块中的所有线程束,即检测sm当前的剩余资源量是否满足单个线程块所需要的运行条件。若sm当前的剩余资源量满足单个线程块所需要的运行条件,则可以基于该sm当前的剩余资源,分配该线程块所需要的全部资源,以通过该sm分配的资源完成该线程块的运行;若sm当前的剩余资源量不满足单个线程块所需要的运行条件,则可以将该线程块记录为横跨线程块,并可以将该横跨线程块的至少一个线程束发送给另一个sm,以触发另一个sm分配该横块线程块所需要的剩余资源。可见,本发明实施例在sm不能完成全局调度器所分发的线程块时,亦即在sm当前的剩余资源量不能满足单个线程块所需要的运行条件时,可以将该全局调度器所分发的线程块记录为横跨线程块,同时可以将该sm作为该横跨线程块对应的第一sm,如将该sm记录为横跨线程块对应的第一sm,并且可以将横跨线程块中的至少一个线程束发送给另一个sm。在另一个sm接收到该横跨线程块中的至少一个线程束后,可以作为该横跨线程块对应的第二sm,如将另一个sm记录为横跨线程块对应的第二sm,从而使得横跨线程块可以访问第一sm和第二sm中的资源。其中,第一sm与第二sm之间可以具有连接关系,可选的,第二sm,可以是与该第一sm相连接的相邻sm。当然,第二sm也可以是能够与第一sm进行通信的其他sm,本发明实施例对此不作具体限制。在本发明的一种可选实施方式中,还包括:第一sm为所述横跨线程块中的至少一个线程束分配资源。具体的,可将所述第一sm当前的剩余资源分配给所述横跨线程块,从而能够充分利用第一sm中的资源,提高资源利用率。在本发明实施例中,可选地,还包括:所述第二sm接收到所述横跨线程块的至少一个线程束后,为接收到的横跨线程块的至少一个线程束分配资源。具体的,在所述第二sm接收到所述第一sm所发送的横跨线程块后,分配所述横跨线程块所需要的剩余资源,从而能够采用第二sm中的资源执行横跨线程块中的线程束,在实现第一sm与第二sm之间的资源组合分配的同时,简化了横跨线程块的资源分配流程,提高了资源分配效率。需要说明的是,本发明实施例中的gpu还可以包括:命令分发器(commanddispatcher)、数据传输引擎(datatransferengine)、片上互联网络(interconnectionnetwork)模块、二级缓存模块等等。本发明实施例对此不作限制。参照图3,示出了本发明一个示例中的一种gpu的框架示例图。如图3所示,本示例中的gpu100包含了与pcle130相连接的命令分发器140、全局调度器110、与全局调度器110相连接的多个sm120、数据传输引擎150、片上互联网络模块160以及二级缓存模块170,等等。其中,二级缓存模块170可以包括一个或多个内存控制器(memcontroller),该二级缓存模块170可以与动态随机存取存储器(dynamicrandomaccessmemory,dram)180相连接。gpu中所包含的多个sm120,可以分别标记为sm0、sm1、sm2……smn-1,如图4所示。sm0可以表示第一个sm,sm1可以表示第二个sm,如此类推,smn-1可以表示第n个sm,n为大于1的整数。需要说明的是,sm可以作为gpu中的计算单元(computingunit,cu),可以用于执行核程序中的各线程块中所包含的线程束。不相邻的两个sm可以不相连,如图4所示,sm0不直接与sm2相连接。全局调度器在分配kernel程序中的线程块时,可以根据该核程序中每个线程块所需要的资源数量以及各sm中的可用资源数量,确定出各sm对应分配的线程块数量,如在每个sm中的可用资源数量能够满足2.5个线程块的运行条件时,全局调器可以确定向每个线程块分配的线程块数量为2.5,进而可以按照每个线程块分配的线程块数量为2.5,将核程序中的tb0、tb1和tb2这三个线程块发送给sm0,将核程序中的tb3和tb4这两个线程块发送给sm1;其中sm0可以将tb2发送给sm1,即tb2为横跨线程块。当然,全局调度器也可以按照其他方式确定向sm分配的线程块,如在sm存在可用资源情况下,就向该sm下发线程块,本发明实施例对此不作限制。例如,结合上述示例,全局调度器也可以确定向sm0分配的线程块数量为3,向sm1分配的线程块数量为2,进而可以按照sm0对应分配的线程块数量3向sm0分发tb0、tb1和tb2这三个线程块,按照sm1对应分配的线程块数量2向sm0分发tb3和tb4这两个线程块。图4中的横跨线程块tb2共享使用了相邻sm0与sm1之间的可用资源,从而使得gpu能够同时运行tb0、tb1、tb2、tb3、tb4这五个线程块;而按照现有技术中只能同时运行tb0、tb1、tb3、tb4这四个线程块,即与现有技术相比,本发明实施例能够最大化利用相邻sm间的资源,提高了核程序的运行效率。需要说明的是,tb1可以表示核程序中的第一个线程块;tb2可以表示核程序中的第二个线程块,如此类推,tbm可以表示核程序中的第m个线程块,m为大于1的整数。参照图5a,示出了本发明的一种资源调度方法可选实施例的步骤流程图,具体可以包括如下步骤:步骤501,全局调度器对接收到的核程序中的线程块进行分配,确定向sm分配的线程块数量。在本发明实施例中,gpu中的全局调度器110可以包括:kernel状态寄存器表(kernelstatusregisterstable,ksrt)、sm驱动器(smdriver)和流式多处理器状态寄存器表(smstatusregisterstable,smsrt)。其中,kernel状态寄存器表可以用于存储gpu中每个未完成运行的kernel程序对应的程序信息,该程序信息可以包括:未分发线程块数量和资源需要总数量。未分发线程块数量可以用于确定kernel程序中还未分发线程块的数量。资源需要总数量可以用于确定运行kernel程序需要资源的数量,如可以包括运行kernel程序所需要的寄存器数量、共享内存、wps数量等,本发明实施例对此不作限制。smsrt可以用于存储gpu中各sm对应的sm信息。sm信息可以用于确定sm中当前剩余的空闲资源,如可以包括可用资源数量,具体可以包括:sm可用的寄存器数量(aregs)、sm中可用的共享内存容量(asmem)、sm中可用warp调度器项数量(awps),等等。当然,sm信息还可以包括其他信息,如sm的线程块状态寄存器表(threadblockstatusregisterstable,tbsrt)中可用的tb表项(atbs),本发明实施例对此不作限制。tb表项可以用于记录sm中接收到的线程块对应的线程块信息。在本发明的一个可选实施例中,将所述核程序中的第一线程块发送给第一sm之前,还可以包括:确定第一线程块所需要的第一资源数量;依据第一sm对应的sm信息以及所述第一资源数量进行分配,确定向第一sm分配的线程块数量。具体的,全局调度器可以依据所述核程序的程序信息,确定第一线程块所需要的第一资源数量;依据第一sm对应的sm信息以及所述第一资源数量进行分配,从而可以确定出向第一sm分配的线程块数量。例如,全局调度器可分别依据第一sm对应的sm信息,确定第一sm的可用资源数量,其中所述sm信息为所述全局调度器依据sm中记录的线程块信息确定的;依据所述第一资源数量和第一sm中的可用资源数量进行计算,确定第一sm对应分配的线程块数量。具体而言,在kernel程序到达全局调度器后,全局调度器可以针对该kernel程序,在kernel状态寄存器表记录对应的程序信息,并且可以根据该程序信息确定出该kernel程序中单个线程块所需要的资源数量,如可根据运行该kernel程序所需要的共享内存以及该kernel程序中所包含的线程块的数量,确定出单个线程块所需要的共享内存;同理,可以依据该kernel程序所需要的寄存器数量、wps数量以及该kernel程序中所包含的线程块的数量,确定出单个线程块所需要的寄存器数量和wps数量等等。因此,全局调度器可依据程序信息确定出当前所要分发的第一线程块所需要的第一资源数量。此外,全局调度器可以根据smsrt中存储的每一个sm对应的sm信息,确定出每一个sm当前剩余的空闲资源,并且可基于每一个sm当期剩余的空闲资源确定出每一个sm的可用资源数量,如可以依据第一sm对应的sm信息确定出第一sm当前剩余的空闲资源,以基于第一sm当前剩余的空闲资源确定出第一sm的可用资源数量;从而可以根据每一个sm的可用资源数量以及第一线程块所需要的第一资源数量进行计算,得到每一个sm对应分配的线程块数量,如可以依据第一sm的可用资源数量和第一资源数量进行计算,确定出第一sm分配的线程块数量。步骤502,按照向sm分配的线程块数量,向sm分发相应的线程块。具体的,全局调度器在确定出第一sm对应分配的线程块数量后,可以通过sm驱动器,按照第一sm对应分配的线程块数量,向第一sm发送相应的第一线程块,从而使得第一sm可以接收到该全局调度器所分发的第一线程块。步骤503,sm在接收到线程块后,通过仲裁器判断该线程块是否是横跨线程块。在本发明实施例中,可选的,gpu中的sm设置有仲裁器、块调度器和tbsrt。其中,块调度器可以用于针对sm接收到的线程块,在tbsrt记录对应的线程块信息。在sm接收到线程块后,可通过该sm中的仲裁器判断其所接收到的线程块是否是横跨线程块。在一种实施方式中,sm在接收到线程块后,通过仲裁器判断该线程块是否是横跨线程块可以包括:依据接收到的线程块的来源,判断接收到的线程块是否是横跨线程块;若接收到的线程块的来源为所述全局调度器,则确定接收到的线程块不是横跨线程块,即可以确定接收到的线程块为全局调度器所分发的第一线程块;若接收到的线程块的来源为相邻sm,则确定接收到的线程块是横跨线程块。可选地,相邻sm的调度优先级可以高于所述sm的调度优先级。具体而言,在gpu中的每一个sm接收到分发的线程块后,可以由仲裁器判断出该线程块的来源。在仲裁器判断出线程块的来源后,sm中的块调度器可以依据该线程块的来源,在tbsrt中记录该线程块对应的线程块信息。记录的线程块信息可以包括:线程块编号(tbid)、所需寄存器数量、所需共享内存起始地址、任务编号(taskid)、程序指针(pc)、线程块中的未分发的warp数量、从信息、主信息、远程warp完成信息、线程束完成信息、第二sm完成信息、线程块完成信息等等,本发明实施例对此不作限制。其中,tbid可以用于表示当前线程块在核程序中的编号;主信息可以用于记录线程块是否位于第一sm,如可用于确定线程块是否位于主sm中;从信息可以用于记录线程块是否位于第二sm,如可用于确定线程块是否位于从sm中;远程warp完成信息可以用于确定远程warp是否完成,第二sm完成信息可以用于确定第二sm中的横跨tb是否完成、线程束完成信息可以用于确定该线程块中所包含的某一个线程束是否完成、线程块完成信息可以用于确定该线程块中的所有线程束是否完成。在sm接收到来自全局调度器的第一线程块时,可以确定该sm接收到的线程块是全局调度器所发送的完整线程块,执行步骤505。在sm接收到来自相邻sm的线程块时,可以确定sm接收到的线程块是相邻sm所发送的横跨线程块,执行步骤504。步骤504,分配所述横跨线程块所需要的剩余资源。本发明实施例在确定接收到的线程块是横跨线程块后,可通过所述sm中的块调度器,将所述sm记录为所述横块线程块对应的第二sm,并且可以通过所述第二sm分配所述横跨线程块所需要的剩余资源。具体的,在sm中的仲裁器判断出线程块的来源为相邻sm后,sm可以确定当前所接收到线程块不是一个完整线程块;并且可以通过sm中的块调度器,在tbsrt中将当前sm记录为该线程块对应的第二sm,以及可以将第二sm当前剩余的空闲资源,直接分配给横跨线程块中的线程束,从而可以利用该第二sm分配的资源运行该横跨线程块中的线程束。当然,在判断出线程块的来源为全局调度器时,sm中的块调度器也可以将当前sm记录为该线程块对应的第一sm,本发明实施例对此不作限制。步骤505,判断所述sm的剩余资源量是否小于线程块所需要的资源数量。在本发明实施例中,sm的剩余资源量可以用于表示当前sm中所剩余的空闲资源的数量。在确定sm接收到的线程块是全局调度器所发送的完整线程块,可以通过判断sm当前的剩余资源量是否小于线程块所需要的资源数量,来确定sm当前能够运行线程块中的所有线程束。若sm当前的剩余资源量不小于线程块所需要的资源数量,则确定所述sm当前能够运行线程块中的所有线程束,执行步骤506。若所述sm当前的剩余资源量小于线程块所需要的资源数量,则确定所述sm当前不能够运行线程块中的所有线程束,执行步骤507。步骤506,基于sm的剩余资源量,为所述全局调度器分发的线程块分配所需要的全部资源。具体的,在第一sm接收到所述全局调度器分发的线程块后,若第一sm当前的剩余资源量能够满足单个线程块所需要的运行条件,则基于所述第一sm当前的剩余资源量,为所述全局调度器分发的线程块分配所需要的全部资源,从而可以采用第一sm为线程块分配全部资源,运行该线程块中的所有线程束,进而完成该线程块的执行。步骤507,将所述全局调度器分发的线程块记录为横跨线程块,并将所述横跨线程块的至少一个线程束发送给与所述sm相连接的相邻sm。在本发明实施例中,可选地,gpu中的sm还可以设置有从调度器。在具体实现中,可通过sm中的块调度器,将sm中记录的横跨线程块的至少一个线程束发送给与其相连的相邻sm。本发明实施例中,可通过所述第一sm中的从调度器,将记录的横跨线程块中的线程束发送给第二sm。可选地,所述第一sm的调度优先级可以高于第二sm的调度优先级;在gpu中包含多个sm的情况下,可以设置各sm对应的调度优先级,进而可以按照调度优先级从高到低的顺序,向各sm分发相应的线程块。在一种实施方式中,可按照各sm的编号顺序来确定各sm的调度优先级,如可以是sm的编号越小,sm的调度优先级就越高,具体的,结合上述示例,sm0的调度优先级可以高于sm1的调度优先级。当然,还可以按照其他方式确定gpu中各sm的调度优先级,如可以基于sm的性能来设置sm的调度优先级,具体的,如可设置为sm的性能越高,sm的调度优先级就越高,本发明实施例对此不作限制。在sm当前剩余的空闲资源不能满足一个完整线程块的运行条件时,可以通过该sm中的块调度器,在tbsrt中将来自全局调度器所分发的线程块记录为横跨线程块,并且可以将该sm作为记录的横跨线程块,以及可以该sm中的从调度器将记录的横跨线程块的至少一个线程束发送给与该sm相连接的第二sm,使得第二sm可以接收到该横跨线程块的至少一个线程束,进而可以通过第一sm和第二sm运行横跨线程块中的所有线程束。作为本发明的一个示例,在sm接收到线程块后,可以在判断出线程块的来源为全局调度器时,通过该sm中的块调度器在tbsrt中将该线程块对应的主信息设置为0;并且在确定出该sm当前能够运行该线程块中的所有线程束时,可将线程块对应的从信息设置为0,以标记出该线程块不是横跨线程块;以及,在确定出该sm当前不能运行该线程块中的所有线程束时,可将线程块对应的从信息设置为1,从而能够将该线程块记录为横跨线程块,同时能够将该sm记录为该横跨线程块对应的主sm。同理,在判断出线程块的来源为相邻sm时,即在确定出接收到的线程块为横跨线程块后,可以通过该sm中的块调度器在tbsrt中将该线程块对应的主信息设置为1,以将该sm记录为该横跨线程块对应的从sm。可选的,还可以通过该sm中的块调度器在tbsrt中将该线程块对应的从信息设置为0,本示例对此不作限制。在本发明的一个可选实施中,该方法还可以包括:第一sm为所述横跨线程块中的至少一个线程束分配资源。具体而言,在将sm记录为所述横跨线程块对应的第一sm后,可以将该sm当前剩余的空闲资源分配给该横跨线程块;并且在第二sm在接收到横跨线程块的至少一个线程束后,可以为接收到的横跨线程块的至少一个线程束分配资源,亦即分配所述横跨线程块所需要的剩余资源。可见,本发明实施例在第一sm的剩余资源量不满足所述第一线程块所需的运行条件时,可通过第二sm分配该横跨线程块所需要的剩余资源,从而可以利用第一sm和第二sm分配的资源完成该横块线程块的运行,即能够充分利用第一sm当前剩余的空闲资源。在第一sm和第二sm完成该横块线程块的运行后,可以释放该横块线程块所占用的第一sm和第二sm的资源,进而可以将释放的资源分配给下一个待执行的线程块。在本发明的一个可选实施例中,sm信息为所述全局调度器依据sm中记录的线程块信息确定的,所述方法还包括:sm针对接收到的线程块记录对应的线程块信息,并将记录的线程块信息发送给所述全局调度器;所述全局调度器依据每一个sm所发送的线程块信息,确定每一个sm对应的sm信息。从而,使得全局调度器可以依据sm中记录的线程块信息实时更新sm信息,以便后续能够根据更新后的sm信息向sm分发线路块。在本发明的一种实施方式中,第二sm在执行完横跨线程块中的线程束后,生成对应的第二sm完成信息;并将所述第二sm完成信息发送给所述第一sm;所述第一sm在执行完横跨线程块中的线程束后,依据所述第二sm发送的第二sm完成信息,对所述横跨线程块对应记录的线程块信息进行更新,以及将更新后的线程块信息发送给全局调度器,从而可以触发全局调度器依据接收到的更新后的线程块信息实时更新sm信息,以便后续能够根据更新后的sm信息向sm分发线路块,确保全局调度器中记录的sm信息的准确性。例如,在第二sm执行完横跨线程块中的线程束后,可以通知第一sm其已完成横跨线程块的运行,使得第一sm可以在执行完横跨线程块后,向全局调度器反馈该横跨线程块对应的线程块完成信息。具体的,在第一sm完成横跨线程块中的线程束,且第二sm也完成该横跨线程块的线程束时,可以通过第一sm将该横跨线程块对应的线程块完成信息提交给全局调度器,以释放该横跨线程块所占用的资源。需要说明的是,也可以通过第二sm将横跨线程块对应的线程块完成信息发送给全局调度器,即第一sm在执行完横跨线程块中的线程束后,可以通知第二sm其已完成横跨线程块的执行,使得第二sm在完成整个横跨线程块的执行后通知全局调度器,本发明实施例对此不作限制。在本发明的另一种实施方式中,第一sm在执行完横跨线程块中的线程束后,生成对应的第一sm完成信息,并将所述第一sm完成信息发送给所述第二sm;所述第二sm在执行完横跨线程块中的线程束后,依据所述第一sm发送的第一sm完成信息,对所述横跨线程块对应记录的线程块信息进行更新,以及将更新后的线程块信息发送给全局调度器,从而可以触发全局调度器依据接收到的更新后的线程块信息实时更新sm信息,以便后续能够根据更新后的sm信息向sm分发线路块,确保全局调度器中记录的sm信息的准确性。在实际处理中,当一个kernel程序需要独占gpu的多个核心,gpu通常是以运行单个程序的方式对该kernel程序进行运行,直到完成该kernel程序中所有的线程块。若tb内需要运行同步障(barrier),即同步同一个tb内的各线程束(warp),则gpu在该tb内所有warp完成同步障操作后,才能运行后续操作,并重置同步障。因此,gpu释放tb所占的共享内存资源,不能以tb为粒度,可以按warp粒度来释放。具体而言,在分发一个完整的线程块时,gpu中的sm需要有足够的共享内存供完整的线程块载入。在确定有足够的共享内存供完整的线程块载入后,可以通过判断warp调度器项和寄存器数量是否满足一个线程束的运行要求,来运行该线程块中的线程束。因此,在分配资源的过程中,若gpu的资源瓶颈不是共享内存,则在向各sm分发相应的线程块后,可以在再向该gpu中的指定sm分发一个线程块,使得指定sm多运行一个线程块中的线程束,加快核程序的运行效率,进一步提高gpu性能和资源利用率。在本发明实施例中,sm在每个warp执行barrier时,可以更新sm中的同步障线程束标识位(barrier_warp_bit)。该同步障线程束标识位可以用于确定sm中某一个线程块中的线程束需要完成barrier。例如,主sm在横跨线程块中的warp执行barrier时,可以设置sm中的同步障线程束标识位(barrier_warp_bit),并且可以判断该横跨线程块所有warp是否到达barrier。如果从sm中的横跨线程块的所有warp到达barrier,则从sm可以通知主sm的远程同步位(remote_sycn_bit),从而触发主sm填充主sm上的远程同步位(remote_sycn_bit)。主sm可以判断横跨线程块的所有warp是否到达barrier。如果主sm上的横跨线程块的所有warp到达barrier后,且主sm上的远程同步位(remote_sycn_bit)被填充,则可以重置主sm的远程同步位(remote_sycn_bit)和同步障线程束标识位(barrier_warp_bit),从而触发主sm中横跨线程块的所有warp继续执行。此外,在重置从sm的远程同步位(remote_sycn_bit)和同步障线程束标识位(barrier_warp_bit)后,从sm中横跨线程块的所有warp也可以继续执行。需要说明的是,本发明实施例中的指定sm可以根据sm当前所剩余的共享内存容量来确定,如在gpu中的某一个sm当前剩余的空闲共享内存容量能够达到一个线程块所需要的共享内存容量时,可以将该sm确定为指定sm。在本发明的一个可选实施例中,所述将所述核程序中的第一线程块发送给第一sm之后,所述方法还包括如下步骤,如图5b所示:步骤508,当所述核程序中有剩余待分发的线程块时,全局调度器检测所述图形处理器中的第三sm的剩余共享内存容量是否满足单个线程块所需要的共享内存容量。在本发明实施例中,第三sm可以用于表征gpu中的最后一个分发的sm,如可以是gpu中调度优选级最低的sm,又如可以是gpu中编号最后的一个sm。当然,第三sm也可以是当前图形处理器中任意一个能够满足单个线程块所需要的共享内存容量的sm,本发明实施例对此不作限制。具体而言,gpu中的全局调度器在向第一sm分发完线程块后,可以对第一sm对应分配的线程块数量进行统计,得到核程序当前已分发的线程块数量,进而可以基于当前已分发的线程块数量确定是否分发完该核程序中的线程块。例如,可以通过判断当前已分发的线程块数量是否达到该核程序中所包含的线程块数量,来确定是否分发完所述核程序中的线程块;若当前已分发的线程块数量达到该核程序中所包含的线程块数量,则可以确定已分发完该核程序中的线程块,等待新的核程序到达全局调度器,以在新的核程序到达全局调度器后,再通过该全局调度器对新到达的核程序中的线程块进行分配;否则,可以确定该核程序中有剩余待分发的线程块,然后可通过判断图形处理器当前可用的共享内存容量是否能够满足单个线程块所需要的共享内存容量,来判断共享内存是否是该核程序的瓶颈资源。步骤509,所述全局调度器检测到所述第三sm的剩余共享内存容量满足单个线程块所需要的共享内存容量后,向所述第三sm发送所述核程序中的一个待分发的线程块。本发明实施例中,若第三sm的剩余共享内存容量满足单个线程块所需要的共享内存容量,则可与再向第三sm分发所述核程序中的一个待分发的线程块。亦即,在图形处理器中的共享内存不是核程序的资源瓶颈时,可与再向该图形处理器中的指定sm分发该核程序中的一个线程块。例如,全局调度器可以根据核程序中的每个线程块所需要的资源和当前gpu中每个sm中的可用资源,确定出该核程序的资源瓶颈。若核程序的资源瓶颈为sm中的寄存器或者warp调度器项,则可以判断出sm中的共享内存不是该核程序的瓶颈资源,执行步骤510;若核程序的资源瓶颈为sm中的共享内存,则可在sm释放已分发的线程块所占用的资源后,再向该sm分发下一个线程块,直到完成该核程序中的线程块的分发。作为本发明的一个示例,在核程序的每个线程块需要4千字节(kilobyte,kb)共享内存、16个warp调度器项及11776个寄存器的情况下,若gpu中包含了16个sm,且每个sm配置了16kb共享内存、48个warp调度器项及32768个寄存器,则可确定每个sm的共享内存可满足该核程序的4个tb,warp调度器项可满足3个tb,寄存器可够满足2个tb,因此可以确定该核程序的资源瓶颈为寄存器,并且可以确定16个sm所具有的总寄存器数量为524288个,以及可以确定gpu首次可以运行的完整线程块的数量为44个。其中,第一个sm的编号为sm0,可以给sm0分发完整的线程块tb0、tb1以及横跨线程块tb2。该横跨线程块tb2所占用的共享内存可以来自sm0,且tb2中的前12个warp所占用的寄存器全部属于sm0,第13个warp所占用的前384个可寄存器可以来自sm0,第13个warp所占用的后352个寄存器可以来自sm1,以及tb2中前13个warp所占用的warp调度器项可来自sm0,tb2中剩余的3个warp所占用的全部寄存器和warp调度器项可以来自sm1,以此类推,直到向gpu中的16个sm15分发完44个完整的线程块。需要说明的是,一个线程块可以完整地放入到sm的共享内存中,该共享内存可以横跨相互连接的相邻sm,并且可以在sm中有足够的线程块调度项和寄存后才允许该线程块中的线程束。gpu中的全局调度器在判断出共享内存不是核程序的资源瓶颈后,可以向该gpu中的最后一个sm再下发第45个tb,即在向sm15下发tb44。由于资源受限,在sm15中当前只能运行tb44中的8个warp;并且可在sm15执行完tb44中的一个warp释放资源后,再利用释放的资源运行tb44中剩余没有运行的线程块,直到完成该tb44中所有线程束的运行。在经过首次分发核程序的线程块后,可以最大程度占满了gpu中所有sm的瓶颈资源,然后可以等待sm返回线程束完成信息。如果gpu中还有核程序中未分发的线程块,则可以判断返回线程束完成信息的sm的空闲共享内存是否能够满足单个线程块的运行需求。例如,全局调度器在sm0返回线程束完成信息后,可以通过计算重新确定该sm0当前剩余的空闲内存。若sm0当前剩余的空闲内存能够满足一个线程块的运行需求,则可以向sm0分发第46个tb(即tb45),然后继续等待该gpu中各sm返回其他线程块的完成信息。在分发核程序中的线程块后,可以等待该核程序中所有线程块对应的线程块完成信息。在等待到核程序中所有线程块对应的线程块完成信息后,可以生成该核程序对应的完成信息并返回给cpu。可选的,gpu在向cpu返回核程序对应的完成信息后,可以等待新的核程序的到达;并在等待到新的核程序到达后,可以返回执行步骤501,以对新的核程序进行资源分配。综上,本发明实施例可以以线程块为任务调度单位,将核程序中的线程块分发给gpu中相互连接的各sm,保证核程序中的线程块分发效率;且相邻sm之间相互连接,使得sm可在当前剩余空闲资源不能满足单个线程块的运行条件时,将分发的线程块作为横跨线程块发送与其相连接的相邻sm,实现了相邻sm之间的资源共享,提高gpu资源的利用率;以及在共享内存不是核程序的瓶颈资源时,可以再向sm下发核程序中的一个线程块,能够最大程序地占满gpu中所有sm的瓶颈资源,进一步地提高程序运行效率和gpu资源的利用率。需要是说明的是,本发明实施例提供的资源调度方法还可以应用在gpu的资源调度系统中。该资源调度系统可以包括:全局调度器和与该全局调度器相连接的至少两个流式多处理器sm,且相邻的两个sm相互连接。在资源调度系统中,相互连接的相邻sm之间的资源可以组合分配,实现了相邻sm之间的资源共享,从而能够给最小化sm的资源浪费。其中,全局调度器的资源调度方法可以是在全局调度器接收到核程序后,针对核程序向各sm分发相应的线程块,以通过各sm来分配线程块所需要的资源;sm的资源调度方法可以是在sm接收线程块后,分配线程块所需要的资源,并且可采用分配的资源运行线程块中的线程束。参照图6,示出了本发明的另一种资源调度方法实施例的步骤流程图。本发明实施例中的调度方法可以在全局调度器中实施,具体可以包括如下步骤:步骤601,全局调度器接收核程序。步骤602,将所述核程序中的第一线程块发送给第一sm。具体的,在kernel程序到达全局逻辑调度器后,全局逻辑调度器可以在kernel状态寄存器表记录该核程序对应的程序信息,随即可依据该核程序对应的程序信息,对该核程序中的线程块进行分配,并向各sm分发相应的线程块,如将核程序中的第一线程块发送给第一sm。其中,sm可用于分配所述线程块所需要的资源,相邻的两个sm分为第一sm和第二sm。例如,全局调度器可以根据该程序信息确定出该kernel程序中单个线程块所需要的第一资源数量。在确定出单个线程块所需要的第一资源数量后,可以基于该第一资源数量以及各sm对应的sm信息进行计算,得到向各sm对应分配的线程块数量。该sm对应的sm信息可以用于确定当前剩余的空闲资源。其中,第一资源数量可以包括单个线程块所需要的寄存器数量、单个线程块所需要的共享内存和单个线程块所需要的wps数量等,本发明实施例对此不作限制。全局调度器在确定出各sm对应分配的线程块数量后,可以通过sm驱动器,分别按照各sm对应分配的线程块数量,向各sm发送相应的线程块,使得sm可以接收到该全局调度器所分发的线程块,从而可以通过sm分配线程块所需要的资源。当sm不能运行全局调度器所下发的线程块中的所有线程束时,如在某一个sm当前剩余的空闲资源不满足一个线程块的运行需求时,可以将该线程块称为横跨线程块,并且可以通过该sm将横跨线程块发送给与该sm相连接的相邻sm,使得该横跨线程块可以访问相邻两个sm的资源,实现了相邻sm之间的资源共享,从而解决了单个sm存在资源碎片所造成资源浪费的问题,提高资源利用效率。参照图7,示出了本发明的另一种资源调度方法可选实施例的步骤流程图,具体可以包括如下步骤:步骤701,全局调度器在接收到核程序后,依据所述核程序的程序信息,确定第一线程块所需要的第一资源数量。在本发明实施例中,在核程序到达全局调度器后,全局调度器可以在kernel状态寄存器表中获取该核程序对应的程序信息,进而可以基于获取到的程序信息确定出该核程序中每个线程块所需要的资源数量,如确定出当前所要分发的第一线程块所需要的第一资源数量。该第一资源数量可以包括:第一线程块所需要的共享内存、第一线程块所需要的寄存器数量以及第一线程块所需要的wps数量等等,本发明实施例对此不作限制。例如,全局调度器可以依据接收到的核程序对应的程序信息,确定出该核程序的每个tb需要4kb共享内存、16个warp调度器项及11776个寄存器。步骤702,依据第一sm对应的sm信息以及所述第一资源数量进行分配,确定向第一sm分配的线程块数量。在本发明实施例中,全局调度器可以设置有一个smsrt。该smsrt可以用于存储gpu中各sm对应的sm信息。全局调度器可以从该smsrt中提取出各sm对应的sm信息,进而可以依据各sm对应的sm信息,确定出各sm的可用资源数量;然后可依据所述第一资源数量和各sm中的可用资源数量进行计算,确定各sm对应分配的线程块数量,如可以依据所述第一资源数量和第一sm中的可用资源数量进行计算,确定向第一sm分配的线程块数量。在本发明的一种可选实施方式中,该方法还包括:所述全局调度器接收每一个sm所发送的线程块信息;并依据每一个sm所发送的线程块信息,确定每一个sm对应的sm信息。在实际处理中,sm在执行完线程块或线程束后,可以释放该线程块或者线程束所占用的资源,并且可以将相应的完成信息返回给全局调度器,从而使得全局调度器可以依据sm返回的线程块或线程束对应的完成信息,更新smsrt。在本发明的一种可选实施方式中,全局调度器依据各sm对应的sm信息,确定各sm的可用资源数量,可以包括:分别接收各sm所记录的线程块信息,所述线程块信息为sm中的块调度器针对sm接收到的线程块进行记录的;分别依据各sm记录的线程块信息,确定各sm对应的sm信息,分别从各sm对应的sm信息中提取各sm的可用资源数量。具体而言,当sm执行完线程块中的每一个线程束后,可以释放该线程束所占用的资源,如释放该线程束所占用的寄存器、线程束调度项等,并可通过sm中的块调度器在tbsrt中记录该线程束对应的线程束完成信息,即更新该线程块对应的线程块信息,以及可以将更新后的线程块信息返回给全局调度器,从而使得全局调度器可以依据接收到的线程块信息对smsrt中记录的sm信息进行更新,进而可以依据更新后的sm信息实时地确定出各sm的可用资源数量。当然,sm也可以在执行完线程块后,释放该线程块所占用的所有资源,如释放线程块所占用的共享内存、寄存器、线程束调度项等,并且可以通过sm中的块调度器在tbsrt中记录该线程块对应的线程块完成信息,即更新该线程块对应的线程块信息,以及可以将更新后的线程块信息返回给全局调度器,本发明实施例对此不作限制。在本发明实施例中,可选地,全局调度器可以对各sm的可用资源数量进行统计,确定出所有sm对应的可用资源总数量,进而可以采用该可用资源总数量和单个线程块所需要的第一资源数量进行计算,确定出当前每个sm对应分配资源数据量。步骤703,按照向第一sm分配的线程块数量,向第一sm分发相应的线程块。步骤704,当所述核程序中有剩余待分发的线程块时,所述全局调度器检测所述图形处理器中的第三sm的剩余共享内存容量是否满足单个线程块所需要的共享内存容量。在本发明实施例中,可选地,第一sm的调度优先级可以高于第二sm的调度优先级。全局调度器在向各sm分发相应的线程块之后,可基于各sm对应分配的线程块数量,判断是否分发完所述核程序中的线程块。若所述核程序中的线程块已经分发完,则执行步骤710;若所述核程序中的线程块没有分发完,则可以检测所述图形处理器中的第三sm的剩余共享内存容量是否满足单个线程块所需要的共享内存容量,如判断所述图形处理器当前可用的共享内存容量是否能够满足单个线程块所需要的共享内存容量,以判断共享内存是否是所述核程序的瓶颈资源。若共享内存不是核程序的瓶颈资源,则可以执行步骤705,以继续对该核程序中的线程块进行分发。步骤705,若第三sm的剩余共享内存容量满足单个线程块所需要的共享内存容量,则再向第三sm分发所述核程序中的一个待分发的线程块。具体的,全局调度器在判断出共享内存不是核程序的资源瓶颈后,可以再向第三sm分发所述核程序中的一个待分发的线程块,如再向调度优先级最低的sm下发一个完整的线程块,然后执行步骤706。具体的,全局调度器在判断出共享内存不是核程序的资源瓶颈后,可以再向第三sm多分发一个线程块,提高核程序的运行效率。其中,第三sm可以为各sm中调度优先级最低的sm。步骤706,等待sm返回线程束完成信息。在等待到sm返回线程束完成信息后,执行步骤707。步骤707,判断是否分发完核程序中的所有线程块。若核程序中的所有线程块已被分发完,则执行步骤710;若核程序中的所有线程块没有被分发完,则可以执行步骤708。步骤708,判断当前sm的空闲共享内存是否能够满足单个线程块的运行需求。若当前sm的空闲共享内存能够满足单个线程块的运行需求,则执行步骤709;若当前sm的空闲共享内存不能满足单个线程块的运行需求,则可以返回执行步骤706。步骤709,向当前sm下分发该核程序中的一个线程块,并返回执行步骤706。步骤710,判断是否完成已分发的所有线程块的运行。具体的,全局调度器在分发完核程序中的线程块后,可以执行步骤711。需要说明的是,在没有等待到所有线程块对应的线程块完成信息之前,全局调度器可确定sm没有完成已分发的所有线程块的运行,可以返回执行步骤706,直到完成已分发的所有线程块的运行。步骤711,等待sm返回已分发的所有线程块对应的线程块完成信息。在等待到所有线程块对应的线程块完成信息后,可以确定已完成核程序中所有线程块,并可将该核程序对应的完成信息返回给cpu。可选的,在向cpu返回核程序对应的完成信息后,全局调度器可以等待新的核程序到达;并在等待到新的核程序到达后,可以返回执行步骤701,以对新的核程序进行资源分配。综上,本发明实施例中的全局调度器可以以线程块为任务调度单位,将核程序中的线程块分发给相互连接的各sm,提高核程序中的线程块分发效率;并且在共享内存不是核程序的瓶颈资源时,可以再向sm下发核程序中的一个线程块,能够最大程序地占满gpu中所有sm的瓶颈资源,进一步地提高程序运行效率和资源利用率。参照图8,示出了本发明的又一种资源调度方法实施例的步骤流程图。本发明实施例中的资源调度方法可以在sm中实施,具体可以包括如下步骤:步骤801,在第一sm接收到所述全局调度器分发的第一线程块后,检测第一sm的剩余资源量是否满足第一线程块所需要的运行条件。在本发明实施例中,在sm接收到线程块后,判断所述线程块是否是横跨线程块。在具体实现中,sm接收到的线程块可以来自全局调度器,也可以来自与其相连接的相邻sm,等等。在接收到线程块后,sm可以依据线程块的来源,来判断接收到的线程块是否为横跨线程块。若线程块来源是全局调度器,则可以确定当前所接收到的线程块不是横跨线程块,执行步骤802;若线程块来源是相邻sm,则可以确定当前所接收到的线程块为相邻sm所发送的横跨线程块,然后可直接分配该横跨线程块的至少一个线程束所需要的资源,并可采用分配的资源运行该横跨线程块中的线程束。例如,sm在接收到来自全局调度器的线程块后,如在接收到的线程块不是相邻sm所发送的横跨线程块时,可以通过判断sm当前的剩余资源量是否小于单个线程块所需要的第一资源数量,来判断sm当前的剩余资源量能够满足单个线程块所需要的运行条件。如果sm当前的剩余资源量是大于或等于单个线程块所需要的第一资源数量,则可以确定sm当前的剩余资源量能够满足单个线程块所需要的运行条件,即sm当前能够运行单个线程块中的所有线程束,执行步骤802;如果sm当前的剩余资源量小于单个线程块所需要的第一资源数量,则可以执行步骤803。步骤802,第一sm为所述第一线程块分配其所需要的全部资源。本发实施例在第一sm当前的剩余资源量大于或等于第一资源数量时,则可以基该第一sm当前的剩余资源量,分配一个完整的线程块所需要的全部资源,并采用所述全部资源运行该线程块中的所有线程。例如,在sm当前的剩余资源量不小于所述第一资源数量时,sm可以为当前所接收到的线程块分配其运行时所需要的全部资源,进而可以通过分配给该线程块的全部资源,运行该线程块中所包含的所有线程束,以完成该线程块的运行。步骤803,将所述第一线程块记录为横跨线程块,并将所述横跨线程块的至少一个线程束发送给第二sm。本发明实施例在第一sm当前的剩余资源量小于所述第一资源数量时,可以将全局调度器分发的线程块线程块记录为横跨线程块,并可将记录的横跨线程块的至少一个线程束发送给第二sm,从而可以触发第二sm分配该横块线程所需要的资源,使得横跨线程块可以访问第一sm和第二sm中的资源,即横跨线程块可以访问两个sm的资源,实现了sm之间的资源组合分配,进而解决了单个sm存在资源碎片所造成资源浪费的问题,提高资源利用效率。其中,第一sm与第二sm可以具有连接关系,如第二sm可以是与第一sm相连接的相邻sm,。当然,第二sm也可以是能够与第一sm进行通信的其他sm,本发明实施例对此不作具体限制。在本发明的一个可选实施例中,还包括:第一sm为所述横跨线程块中的至少一个线程束分配资源。具体的,sm在不能完成全局调度器所分发的线程块时,可以将该线程块记录为横跨线程块,并且可以作为该横跨线程块对应的第一sm,将当前剩余的空闲资源分配给该横跨线程块,以及可以将该横跨线程块中的至少一个线程束发送给与其相连接的第二sm,以通过第二sm分配该横块线程所需要的剩余资源,从而使得横跨线程块可以访问第一sm和第二sm中的资源,即横跨线程块可以访问相邻两个sm的资源,实现了相邻sm之间的资源组合分配,进而解决了单个sm存在资源碎片所造成资源浪费的问题,提高资源利用效率。在本发明实施例中,可选地,还包括:第二sm接收到所述横跨线程块的至少一个线程束后,为接收到的横跨线程块的至少一个线程束分配资源。本发明实施例中,在所述第二sm接收到所述第一sm所发送的横跨线程块后,分配所述横跨线程块所需要的剩余资源。具体的,sm在接收到横跨线程块的至少一个线程束后,可以基于当前剩余的空闲资源,分配该横跨线程块的至少一个线程束所需要的剩余资源,从而可以采用分配给该横跨线程块的资源运行该横跨线程块中的线程束。作为本发明的一个可选示例,sm可以设置有从调度器、仲裁器、块调度器,tbsrt等等。相互连接的相邻两个sm可以分为第一sm和第二sm,且第一sm的调度优先级可以高于第二sm的调度优先级。第一sm的从调度器可以与sm的仲裁器相连接。在本示例中,sm在接收到全局调度器所分发的线程块后,可以通过仲裁器确定出当前所接收到的线程块的来源,从而可以触发sm中的块调度器依据该线程块的来源,在tbsrt中对应的线程块信息。此外,sm在不能完成线程块中的所有线程束时,如在sm当前剩余的空闲资源不满足单个线程块的运行条件时,可以通过该sm中的块调度器将当前不能运行的线程块记录为横跨线程块,同时可以作为记录的横跨线程块对应的第一sm,将当前剩余的空闲资源分配给横跨线程块,并且可以通过从调度器将记录的横跨线程块的至少一个线程束发送给其相连接的第二sm,从而可以通过第二sm分配该横跨线程块所需要的剩余资源。第二sm在接收到第一sm所发送的横跨线程块后,可以通过仲裁器判断出该横跨线程块的来源,并且可以通过块调度器对该横跨线程块进行记录,生成该横跨线程块对应的线程块信息,以及可以基于第一sm分配该该横跨线程块的资源,为该横跨线程块分配其所需要的剩余资源,使得该横跨线程块可以访问第二sm中的资源。从而,可以采用第一sm和第二sm所分配的资源运行横跨线程块中的所有线程束,实现了相邻sm之间的资源共享,达到最小化sm的资源浪费的目的。参照图9,示出了本发明的又一种资源调度方法可选实施例的步骤流程图,具体可以包括如下步骤:步骤901,在sm接收到线程块后,依据所述线程块的来源,判断所述线程块是否是横跨线程块。本发明实施例在sm接收到线程块后,可以通过所述sm中的仲裁器,依据所述线程块的来源,判断所述线程块是否是横跨线程块。具体的,若接收到的线程块的来源为全局调度器,则sm可以确定当前所接收到的线程块不是横跨线程块,执行步骤902。若接收到的线程块的来源为相邻sm,则sm可以确定当前所接收到的线程块是横跨线程块,执行步骤906。其中,相邻sm的调度优先级可以高于该sm的调度优先级。步骤902,判断sm当前的剩余资源量能够满足单个线程块所需要的运行条件。在具体实现中,sm在确定出当前所接收到的线程块不是横跨线程块后,可以作为本发明实施例中的第一sm,并且可通过判断所述sm当前的剩余资源量是否小于单个线程块所需要的第一资源数量,来确定当前是否能够运行单个线程块中的所有线程束。具体的,若sm当前的剩余资源量不小于所述第一资源数量,则可以确定sm当前能够运行单个线程块中的所有线程束,执行步骤905。若sm当前的剩余资源量小于所述第一资源数量,则可以确定sm当前不能运行单个线程块中的所有线程束,然后可以执行步骤903。在本发明实施例中,可选地,在sm是gpu的资源调度系统中调度优先级最低的sm的情况下,该sm在确定出当前不能运行单个线程块中的所有线程束后,如在sm不是gpu的资源调度系统中调度优先级最低的sm的情况下,即gpu的资源调度系统中存在与该sm相连接的第二sm,该sm在确定出当前不能运行单个线程块中的所有线程束后,可执行步骤903。在本发明的一个可选实施例中,还包括:判断所述第一sm当前的剩余资源量是否能够满足线程块中单个线程束的运行需求;若所述第一sm当前的剩余资源量能够满足所述单个线程束的运行需求,则基于所述第一sm当前的剩余资源量,为所述全局调度器分发的线程块中的可运行线程束分配所需要的资源。在具体实现中,本发实施例可以通过判断sm当前的剩余资源量是否小于单个线程束所需要的第二资源数量,来确定sm当前的剩余资源量是否能够满足线程块中单个线程束的运行需求。若所述sm当前的剩余资源量不小于所述第二资源数量,则可以确定sm当前的剩余资源量能够满足线程块中单个线程束的运行需求,然后可基于该sm当前的剩余资源量,为全局调度器分发的线程块中的可运行线程束分配所需要的资源,以通过分配的资源执行所述可运行线程束。例如,在当前的剩余资源量不小于第二资源数量时,第一sm可以确定当前剩余的空闲资源能够满足单个线程束的运行需求,并且可以基于当前剩余的空闲资源确定出该线程块中的可运行线程束。第一sm可以将当前剩余的空闲资源分配给该线程块,从而可以通过分配的资源执行该线程块中的可运行线程束。sm在执行完该线程块中所有的线程束后,可以释放该线程块所占用的所有资源,如释放线程块所占用的共享内存、寄存器、线程束调度项等,并且可以通过sm中的块调度器,在tbsrt中记录该线程块对应的线程块完成信息,即更新该线程块对应的线程块信息,以及可以将更新后的线程块信息返回给全局调度器,以触发全调度器依据更新后的线程块信息对smsrt。当然,sm在执行完线程块中的每一个线程束后,也可以释放该线程束所占用的资源,如释放该线程束所占用的寄存器、线程束调度项等,并可通过sm中的块调度器在tbsrt中记录该线程束对应的线程束完成信息,以及可以将该线程束完成信息返回给全局调度器,本发明实施例对此不作限制。在当前的剩余资源量小于第二资源数量时,sm可以在执行完其他线程块中线程束,并释放资源后,再为该线程块中的线程束分配资源。步骤903,将所述全局调度器分发的线程块记录为横跨线程块,并将所述横跨线程块的至少一个线程束发送给与所述sm相连接的相邻sm。具体而言,在sm不能运行单个线程块中的所有线程束的情况下,可以通过该sm中的块调度器,将该线程块记录为横跨线程块,同时可以将该sm记录为记录的横跨线程块对应的第一sm,以及可以通过该sm中的从调度器,可以将块调度器记录的横跨线程块的至少一个线程束发送给与该第一sm相邻的第二sm,从而使得第二sm可接收到横跨线程块的至少一个线程束,并且可触发第二sm步骤907,以通过第二sm分配所述记录的横跨线程块所需要的剩余资源。其中,第一sm的调度优先级高于所述第二sm的调度优先级。步骤904,为所述横跨线程块中的至少一个线程束分配资源。在本发明实施例中,可选地,在将所述sm记录为所述横跨线程块对应的第一sm之后,可以将第一sm的剩余资源分配给记录的横跨线程块,即充分利用第一sm中的空闲资源,能够最小化sm中的资源浪费。在第二sm接收到第一sm所发送的横跨线程块后,该第二sm可以直接分配该横跨线程块的至少一个线程束所需要的剩余资源,从而利用该第一sm和第二sm分配该该横跨线程块的资源,完成该横跨线程块的运行。当然,本发明实施例中也可以在将sm当前的剩余资源分配给横跨线程块后,再将横跨线程块发送给与该sm相连接的相邻sm,本发明实施例对此不作限制。例如,第一sm可将当前的剩余资源分配给横跨线程块后,再对该横跨线程块进行记录,以及将该横跨线程块发送给与其相连接的第二sm。步骤905,分配所述线程块所需要的全部资源。具体的,本发明实施例中可基于第一sm当前的剩余资源量,为全局调度器分发的线程块分配所需要的全部资源,并采用分配的全部资源,运行该线程块中的所有线程束。步骤906,为接收到的横跨线程块的至少一个线程束分配资源。本发明实施例中的sm在接收到的线程块是横跨线程块时,可以分配横跨线程块所需要的剩余资源。具体的,第二sm在接收到所述第一sm所发送的横跨线程块后,可直接分配所述横跨线程块中的线程束所需要的剩余资源,并且可采用分配的资源运行所述横跨线程块中的线程束。显然,本发明实施例在sm接收到的线程块是横跨线程块时,可直接分配横跨线程块所需要的剩余资源,从而简化了为横跨线程分配资源的流程,提高资源分配效率。具体的,sm在完成线程块的运行后,可以释放该线程块所占用的所有资源,如释放线程块所占用的共享内存、寄存器、线程束调度项等,并且可以通过sm中的块调度器在tbsrt中记录该线程块对应的线程块完成信息,即更新该线程块对应的线程块信息,以及可以将更新后的线程块信息返回给全局调度器,以触发全局调度器依据更新后的线程块信息对smsrt中记录的sm信息进行更新。需要说明的是,sm也可以在执行一个线程束后,通过sm中的块调度器在tbsrt中记录该线程束对应的线程束完成信息,即更新该线程块对应的线程块信息,本发明实施例对此不作限制。在本发明实施例中,sm可以依据tbsrt表中记录的线程块信息判断属于同一线程块的所有线程束是否完成。在属于同一线程块的所有线程束完成后,sm可以判断当前所完成的线程块是否为横跨线程块。例如,在完成的线程块为横跨线程块的情况下,若该sm作为该横跨线程块对应的从sm,则该sm可以将该横跨线程块对应的完成信息发送给主sm,以通知主sm其已经完成横跨线程块中的线程束。若该sm作为该横跨线程块对应的主sm,则该sm可以判断该横跨线程块对应的从sm是否完成该横跨线程块的运行,并在判断出从sm也完成该线程块后,向全局调度器发送该横块线程块对应的完成信息。在本发明的一个可选实施例中,所述方法还可以包括:第二sm在执行完横跨线程块中的线程束后,生成对应的第二sm完成信息,并将所述第二sm完成信息发送给所述第一sm;所述第一sm在执行完横跨线程块中的线程束后,生成对应的第一sm完成信息;并依据所述第一sm完成信息和所述第二sm发送的第二sm完成信息,对所述横跨线程块对应记录的线程块信息进行更新,以及将更新后的线程块信息发送给全局调度器。具体而言,当sm作为横块线程块对应的第二sm,在运行完该横跨线程块后,可以向发送该横跨线块的相邻sm返回对应的第二sm完成信息。相邻sm作为该横跨线程块对应的第一sm,在接收到该横跨线程块对应的第二sm完成信息,且执行完该横跨线程后,可以向全局调度器返回该横跨线程块对应的线程块完成信息,从而使得全局调度器可以依据该横跨线程块对应的线程块完成信息,对smsrt中记录的sm信息进行更新。显然,本发明实施例中的全局调度器能够接收到第一sm针对横跨线程块所发送的线程块信息,并能够根据该线程块信息确定出横跨线程块中的线程束已被第一sm和第二sm执行完,以及能够确定第一sm和第二sm已释放该横跨线程块横跨线程所占用的资源,以便后续可以重新向第一sm和第二sm分发线程块,从而提高线程块的分发效率;并且使得全局调度器可以依据接收到的更新后的线程块信息实时更新sm信息,以便后续能够根据更新后的sm信息向sm分发线路块,确保全局调度器中记录的sm信息的准确性。在本发明的另一个可选实施例中,所述方法还可以包括:第一sm在执行完横跨线程块中的线程束后,生成对应的第一sm完成信息,并将所述第一sm完成信息发送给所述第二sm;所述第二sm在执行完横跨线程块中的线程束后,生成对应的第二sm完成信息;并依据所述第二sm完成信息和所述第一sm发送的第一sm完成信息,对所述横跨线程块对应记录的线程块信息进行更新,以及将更新后的线程块信息发送给全局调度器。具体的,当sm作为横块线程块对应的第一sm,在运行完该横跨线程块后,可以向接收该横跨线块的相邻sm发送对应的第一sm完成信息。相邻sm作为该横跨线程块对应的第二sm,在接收到该横跨线程块对应的第一sm完成信息,且执行完该横跨线程后,可以向全局调度器返回该横跨线程块对应的线程块完成信息,从而使得全局调度器可以依据该线程块完成信息,对smsrt中记录的sm信息进行更新。显然,本发明实施例中的全局调度器能够接收到第二sm针对横跨线程块所发送的线程块信息,并能够根据该线程块信息确定出横跨线程块中的线程束已被第一sm和第二sm执行完,以及能够确定第一sm和第二sm已释放该横跨线程块横跨线程所占用的资源,以便后续可以重新向第一sm和第二sm分发线程块,从而提高线程块的分发效率;并且使得全局调度器可以依据接收到的更新后的线程块信息实时更新sm信息,以便后续能够根据更新后的sm信息向sm分发线路块,确保全局调度器中记录的sm信息的准确性。需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作并不一定是本发明实施例所必须的。参照图10,示出了本发明的一种资源调度装置实施例的结构框图。本发明实施例中的资源调度器装置可以应用在图形处理器中,该图形处理器可以包括全局调度器和至少两个流式多处理器sm。具体的,该资源调度装置可以包括如下模块:全局调度器模块1010,用于在全局调度器接收到核程序后,将所述核程序中的第一线程块发送给第一sm;sm调度器模块1020,用于在在所述第一sm接收到所述第一线程块后,检测到所述第一sm的剩余资源量不满足所述第一线程块所需的运行条件,将所述第一线程块记录为横跨线程块,将所述横跨线程块的至少一个线程束发送给第二sm。本发明实施例的gpu在sm不能完成全局调度器所分发的线程块时,可以将该线程块记录为横跨线程块,同时可以通过该sm将横跨线程块发送给另一个sm,从而使得横跨线程块可以访问两个sm的资源,即能够将一个sm的资源与另一个sm的资源进行组合分配,实现了sm间的资源共享,从而解决了gpu中单个sm存在资源碎片所造成资源浪费的问题,提高了整块gpu的资源利用率。参照图11,示出了本发明的一种资源调度装置可选实施例的结构框图。可选地,第一sm的调度优先级可以高于第二sm的调度优先级。本发明实施例中的sm调度器模块1020,可以包括:块调度器1021和从调度器1022。其中,块调度器1021,用于将所述全局调度器分发的线程块记录为横跨线程块;从调度器1022,用于将所述横跨线程块发送给与所述第一sm相邻的第二sm。本发明实施例中的gpu可以通过sm中的从调度器将横跨线程块发送给第二sm,从而使得横跨线程块可以访问相邻两个sm之间的资源,实现了相邻sm之间的资源共享。在本发明的一个可选实施例中,所述全局调度器模块1010,还用于当所述核程序中有剩余待分发的线程块时,检测所述图形处理器中的第三sm的剩余共享内存容量是否满足单个线程块所需要的共享内存容量;检测到所述第三sm的剩余共享内存容量满足单个线程块所需要的共享内存容量后,向所述第三sm发送所述核程序中的一个待分发的线程块。例如,全局调度器模块1010在向各sm分发相应的线程块之后,在所述核程序中有剩余待分发的线程块时,判断所述图形处理器当前可用的共享内存容量是否能够满足单个线程块所需要的共享内存容量;若能够满足,则再向各sm中优先级最低的sm分发所述核程序中的一个待分发的线程块。可见,本发明实施例在向各sm分发相应的线程块之后,若共享内存不是核程序的瓶颈资源时,则可以再向sm下发核程序中的一个线程块,从而能够最大程序地占满gpu中所有sm的瓶颈资源,进一步地提高程序运行效率和gpu资源的利用率。在本发明的一个可选实施例中,所述sm调度器模块1020,还用于在所述第一sm中为所述横跨线程块中的至少一个线程束分配资源,如将所述第一sm当前的剩余资源分配给所述横跨线程块。进一步的,所述sm调度器模块1020,还用于所述第二sm接收到所述横跨线程块的至少一个线程束后,为接收到的横跨线程块的至少一个线程束分配资源,如在所述第二sm接收到所述第一sm所发送的横跨线程块后,分配所述横跨线程块所需要的剩余资源。进一步地,在本发明的一个实施例中,所述sm调度器模块1020还可以包括:仲裁器1023。仲裁器1023,用于依据所述分发的线程块的来源,判断所述分发的线程块是否是横跨线程块;若所述分发的线程块的来源为所述全局调度器,则确定所述分发线程块不是横跨线程块;若所述线程块的来源为相邻sm,则确定所述线程块是横跨线程块,所述相邻sm的调度优先级高于所述sm的调度优先级。在本发明的一个可选实施例中,所述sm调度器模块1020还用于在第二sm执行完横跨线程块中的线程束后,生成对应的第二sm完成信息;并将所述第二sm完成信息发送给所述第一sm。此外,所述sm调度器模块还用于在所述第一sm执行完横跨线程块中的线程束后,依据所述第二sm发送的第二sm完成信息,对所述横跨线程块对应记录的线程块信息进行更新,以及将更新后的线程块信息发送给全局调度器。在本发明的另一个可选实施例中,所述sm调度器模块1020还用于在第一sm执行完横跨线程块中的线程束后,生成对应的第一sm完成信息,并将所述第一sm完成信息发送给所述第二sm。所述sm调度器模块1020还用于在所述第二sm执行完横跨线程块中的线程束后,依据所述第一sm发送的第一sm完成信息,对所述横跨线程块对应记录的线程块信息进行更新,以及将更新后的线程块信息发送给全局调度器。进一步的,本发明实施例中的全局调度器模块1010,还用于确定第一线程块所需要的第一资源数量;依据第一sm对应的sm信息以及所述第一资源数量进行分配,确定向第一sm分配的线程块数量。可选地,全局调度器模块1010可以包括:分配子模块1011和分发子模块1012。其中,分配子模块1011,用于依据所述核程序的程序信息,确定第一线程块所需要的第一资源数量;依据第一sm对应的sm信息以及所述第一资源数量进行分配,确定向第一sm分配的线程块数量。分发子模块1012,用于分别按照向第一sm分配的线程块数量,向第一sm分发相应的线程块。综上,本发明实施例中的资源调度装置可以以线程块为任务调度单位,将核程序中的线程块分发给gpu中相互连接的各sm,保证核程序中的线程块分发效率;且相邻sm之间相互连接,使得sm可在当前剩余空闲资源不能满足单个线程块的运行条件时,将分发的线程块作为横跨线程块发送与其相连接的相邻sm,实现了相邻sm之间的资源共享,提高gpu资源的利用率;以及在共享内存不是核程序的瓶颈资源时,可以再向sm下发核程序中的一个线程块,能够最大程序地占满gpu中所有sm的瓶颈资源,进一步地提高程序运行效率和gpu资源的利用率。进一步的,本发明实施例还提供一种资源调度装置应用在资源调度系统的sm中,如图12所示,具体可以包括:仲裁器1210、控制模块1220、块调度器1230和从调度器1240。其中,所述仲裁器1210,用于在第一sm中接收全局调度器分发的线程块;所述控制模块1220,用于在接收到所述全局调度器分发的线程块后,判断第一sm当前的剩余资源量是否能够满足单个线程块所需要的运行条件,若所述第一sm当前的剩余资源量能够满足单个线程块所需要的运行条件,则基于所述第一sm当前的剩余资源量,为所述全局调度器分发的线程块分配所需要的全部资源;若所述第一sm当前的剩余资源量不满足单个线程块所需要的运行条件,则可以触发所述块调度器1230将所述全局调度器分发的线程块记录为横跨线程块;所述从调度器1240,用于将所述控制模块1220记录的横跨线程块的至少一个线程束发送给与所述第一sm相邻的第二sm。此外,所述仲裁器1210,还用于在第二sm中接收第一sm发送的横跨线程块的至少一个线程束。需要说明的是,本发明实施例中的资源调度系统可以包括:全局调度器和至少两个流式多处理器sm,且相邻的两个sm相互连接。其中,全局调度器可以用于针对核程序向各sm分发相应的线程块,从而使得sm可以接收到线程块。本发明实施例在sm不能完成线程块中的所有线程束时,如在sm当前剩余的空闲资源不满足单个线程块的运行条件时,可以通过该sm中的块调度器将当前不能运行完的线程块记录为横跨线程块,并且可以通过从调度器将记录的横跨线程块的至少一个线程束发送给与该sm相连接的相邻sm,以通过相邻sm分配该横块线程所需要的剩余资源,使得横跨线程块可以访问相邻两个sm的资源,实现了相邻sm之间的资源组合分配,从而解决了单个sm存在资源碎片所造成资源浪费的问题,提高资源利用效率。在本发明的一个可选实施例中,所述第一sm的调度优先级高于所述第二sm的调度优先级。进一步的,本发明实施例中的块调度器1230,还用于将所述第一sm当前的剩余资源分配给所述横跨线程块中的至少一个线程束。在本发明的一个可选实施例中,所述控制模块1220,还用于在所述第二sm接收到所述第一sm所发送的横跨线程块的至少一个线程束后,为接收到的横跨线程块的至少一个线程束分配资源,即分配所述横跨线程块所需要的剩余资源。进一步的,在本发明的一个可选实施例中,所述块调度器1230,还用于在第二sm执行完横跨线程块中的线程束后,生成对应的第二sm完成信息,并触发所述控制模块1220将所述第二sm完成信息发送给所述第一sm;以及,在所述第一sm执行完横跨线程块中的线程束后,生成对应的第一sm完成信息。所述控制模块1220,还用于依据所述第一sm完成信息和所述第二sm发送的第二sm完成信息,触发所述块调度器1230对所述横跨线程块对应记录的线程块信息进行更新,以及将更新后的线程块信息发送给全局调度器。在本发明的另一个可选实施例中,所述块调度器1230,还用于在第一sm执行完横跨线程块中的线程束后,生成对应的第一sm完成信息,并触发所述控制模块1220将所述第一sm完成信息发送给所述第二sm;以及,在所述第二sm执行完横跨线程块中的线程束后,生成对应的第二sm完成信息。所述控制模块1220,还用于依据所述第二sm完成信息和所述第一sm发送的第一sm完成信息,触发所述块调度器1230对所述横跨线程块对应记录的线程块信息进行更新,以及将更新后的线程块信息发送给全局调度器。在本发明的一个可选实施例中,所述控制模块1220,还用于判断所述第一sm当前的剩余资源量是否能够满足线程块中单个线程束的运行需求;若所述第一sm当前的剩余资源量能够满足所述单个线程束的运行需求,则基于所述第一sm当前的剩余资源量,为所述全局调度器分发的线程块中的可运行线程束分配所需要的资源。综上,本发明实施例的资源调度装置可以在sm不能完成线程块中的所有线程束时,通过块调度器将sm当前不能运行的线程块记录为横跨线程块,同时可以将该sm当前剩余的空闲资源分配给该横块线程块,即充分利用sm中的资源,从而能够最小化sm的资源浪费;并且可以通过从调度器将记录的横跨线程块的至少一个线程束发送给与该sm相连接的相邻sm,以通过相邻sm分配该横块线程所需要的剩余资源,实现了相邻sm之间的资源组合分配。进一步的,本发明实施例中在sm接收到的线程块为横跨线程块的情况下,可以直接分配该横跨线程块所需要的资源,以采用分配的资源运行所述横跨线程块,不需要判断sm当前的空闲资源是否能够满足横跨线程块的运行需求,即简化了sm为接收到的横跨线程块分配资源的流程,从而能够提高资源分配效率以及程序运行效率。进一步的,本发明实施例还提供一种资源调度装置应用在资源调度系统的全局调度器中,如图13所示,具体可以包括如下模块:线程块分配模块1310,用于对全局调度器接收到的核程序中的线程块进行分配;线程块发送模块1320,用于向各sm分发相应的线程块。本发明实施例中的资源调度装置在全局调度器接收到核程序后,可以以线程块为任务调度单位,按照该各sm对应分配的线程块数量,向各sm分发相应的线程块,使得sm可以接收到分发的线程块,从而可以通过sm分配线程块所需要的资源,保证核程序中的线程块分发效率。其中,sm用于分配所述线程块所需要的资源。进一步的,当sm不能运行一个线程块中的所有线程束时,如在某一个sm当前剩余的空闲资源不能满足一个线程块的运行需求时,可以将该线程块称为横跨线程块,并且可以通过该sm将横跨线程块发送给与该sm相连接的相邻sm,使得该横跨线程块可以访问相邻两个sm的资源,实现了相邻sm之间的资源共享,从而解决了单个sm存在资源碎片所造成资源浪费的问题,提高资源利用效率。进一步的,第一sm的调度优先级可以高于第二sm的调度优先级。如图14所示,本发明实施例中的资源调度装置还包括如下模块:判断模块1330,用于在所述线程块发送模块向各sm分发相应的线程块之后,当所述核程序中有剩余待分发的线程块时,判断所述图形处理器当前可用的共享内存容量是否能够满足单个线程块所需要的共享内存容量;若能够满足,则触发所述线程块发送模块1320再向各sm中优先级最低的sm分发所述核程序中的一个待分发的线程块。在本发明的一个可选实施例中,所述线程块分配模块1310,还用于依据所述核程序的程序信息,确定单个线程块所需要的第一资源数量;并依据各sm对应的sm信息以及所述第一资源数量进行分配,确定向各sm分配的线程块数量。线程块发送模块1320,还用于分别按照向各sm分配的线程块数量,向各sm分发相应的线程块。进一步的,本发明实施例中的资源调度装置还包括:线程块信息接收模块1340和sm信息确定模块1350。线程块信息接收模块1340,用于接收每一个sm所发送的线程块信息。sm信息确定模块1350,用于依据每一个sm所发送的线程块信息,确定每一个sm对应的sm信息。综上,本发明实施例中的资源调度装置可以以线程块为任务调度单位,将核程序中的线程块分发给相互连接的各sm,保证核程序中的线程块分发效率;并且在共享内存不是核程序的瓶颈资源时,可以再向sm下发核程序中的一个线程块,能够最大程序地占满gpu中所有sm的瓶颈资源,进一步地提高程序运行效率和资源利用率。对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本发明的另一实施例中,还提供一种电子设备,所述电子设备包括一个或多个处理器;和其上存储有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述电子设备执行上述实施例所提供的任一资源调度方法。如图15所示,示出了本发明实施例的一种电子设备的一种可能的逻辑结构示意图。电子设备1510包括:存储器1511、处理器1512、通信接口1513、显示器1514以及总线1515。存储器1511、处理器1512、通信接口1513以及显示器1514通过总线1515相互连接。在本发明实施例中,处理器1512用于对电子设备1510的动作进行控制管理,例如,处理器1512用于执行图2中的步骤201-步骤203、图5a中的步骤501-步骤507、图5b中的步骤508-步骤510,和/或用于本发明所描述的技术的其他过程。通信接口1513用于支持电子设备1510进行通信。存储器1511,用于存储电子设备1510的程序代码和数据。显示器1514用于支持电子设备实现显示功能。其中,处理器1512可以是图形处理器、中央处理器单元,通用处理器,数字信号处理器,专用集成电路,现场可编程门阵列或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可显示后执行本发明公开内容所描述的各种示例性的逻辑方框和模块。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理器和微处理器的组合等等。总线1515可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线、pcie总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图10中本仅用一条粗线表示,但不仅有一条总线或一种类型的总线。在本发明的另一实施例中,还提供一种计算机可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述实施例所提供的任一资源调度方法。本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器运行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上运行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上运行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。尽管已描述了本发明实施例的可选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括可选实施例以及落入本发明实施例范围的所有变更和修改。最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。以上对本发明所提供的一种图形处理器、一种资源调度方法、一种资源调度装置和一种电子设备,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1