一种cpu+gpu协同并行计算动态负载均衡方法

xiaoxiao2020-7-22  11

一种cpu+gpu协同并行计算动态负载均衡方法
【专利摘要】本发明公开了一种CPU+GPU协同并行计算动态负载均衡方法,主要包括在单节点内,主线程处理输入参数并完成相应初始化操作,然后创建1+N个计算设备控制线程,分别控制节点内CPU设备和N个GPU设备,CPU控制线程再根据节点内计算核数创建若干并行计算线程,CPU与GPU设备间采用动态负载均衡的方案,实现并行效率的最优化。启用的GPU计算设备数和CPU计算线程数目可根据用户需要手动配置。本发明中,负载均衡方案兼容纯CPU架构平台和CPU+GPU混合架构平台,并且支持配置多种不同型号GPU设备的工作站系统,大大提高了软件的平台适应性、并行效率和整体运行性能。
【专利说明】—种CPU+GPU协同并行计算动态负载均衡方法
【技术领域】
[0001]本发明涉及计算机高性能计算领域、科学计算领域,具体涉及一种CPU+GPU协同并行计算动态负载均衡方法。
【背景技术】
[0002]硬件系统在新技术的推动下进行着快速演进,表现出更好的性能、更低的价格,如传统CPU从单核向多核直至众核发展。随着多核体系结构处理器的普及,应用软件多线程并行处理方式将逐渐成为主流。另外,GPU除了传统的应用(图形显示,多用于游戏)以外,由于其超强的浮点计算能力,越来越多地应用在数学计算上,并且逐渐开始进入计算的主流。面向GPU编程的高级语言和开发工具也开始大量涌现。
[0003]随着CPU多核架构处理器和GPU众核架构处理器的普及,在多核CPU架构基础上扩展GPU架构设备的混合架构计算平台,将越来越多地被应用于密集计算领域,如高性能计算领域。应用CPU+GPU协同并行计算提高软件的运行效能逐渐成为主流,如何实现CPU+GPU协同计算的负载均衡,将CPU+GPU混合架构平台的计算性能发挥到极致,成为软件工程师面临的挑战。

【发明内容】

[0004]针对如何实现CPU和GPU计算设备协同计算的负载均衡这一重点和难点,本发明提出CPU+GPU协同并行计算的动态负载均衡方案及软件实现方法,在传统动态负载均衡方式难以发挥作用的场合有效解决了这一难题。
[0005]本发明公开了一种CPU+GPU协同并行计算动态负载均衡方法,其解决所述技术问题采用的技术方案如下:所述CPU+GPU协同并行计算动态负载均衡方法,利用当前主流的多核CPU计算设备和GPU架构设备协同并行计算,使CPU和各GPU设备的任务负载匹配各自的计算能力,其主要内容包括:主线程处理输入参数并完成相应初始化操作、主线程创建计算设备控制线程以及CPU+GPU异构架构中动态负载均衡方案;
在单节点内,主线程处理输入参数并完成相应初始化操作,然后创建1+N个计算设备控制线程,分别控制节点内CPU设备和N个GPU设备,CPU控制线程再根据节点内计算核数创建若干并行计算线程,CPU与GPU设备间采用动态负载均衡的方案,实现并行效率的最优化。
[0006]进一步,所述主线程处理输入参数并完成相应初始化操作中,所述主线程初始化操作包括:扫描节点内GPU计算设备数和型号、节点内CPU计算核数,并为每个GPU设备创建一个GPU属性数据结构对象。
[0007]进一步,所述主线程创建计算设备控制线程中,所有CPU核作为一个整体计算设备,系统中N个GPU每个GPU作为一个计算设备,系统中主线程共创建1+N个设备控制线程,这1+N个设备控制线程为I个CPU控制线程和N个GPU控制线程,分别控制节点内CPU设备和N个GPU设备。[0008]进一步,所述每个设备控制线程,具有记录其所属计算设备属性信息及作业信息的数据结构,称为设备控制线程参数;其中,所述设备属性信息的数据结构成员包括:设备类型、设备ID号及其它设备属性信息;所述作业信息数据结构成员包括:作业大小、作业总时间、单位作业平均时间、相对性能加速比指数。
[0009]进一步,所述CPU控制线程根据启用的节点内计算核数创建若干更细粒度的并行计算线程,并且CPU端各细粒度并行计算线程采用互斥锁的方式通信,并依此竟争计算任务,实现动态负载均衡。
[0010]进一步,所述CPU控制线程创建M=SYSC0RE_NUM-N个细粒度并行计算线程,SYSC0RE_NUM为启用的系统核数,默认为自动检测的系统核数,N为启动的GPU设备数。
[0011 ] 进一步,所述GPU控制线程控制一个GPU计算设备,负责读数据、管理该GPU计算、输出结果数据。
[0012]进一步,所述CPU+GPU异构架构中的CPU设备和N个GPU设备,各设备完全独立并行处理,各设备控制线程需要独立进行数据读写操作;
进一步,所述主线程为各控制线程分别创建一个输出数据体控制句柄;并且,各设备控制线程需要多线程化的读写接口支持,各控制线程使用线程化读、写接口,分别输出至一个独立的数据体,每个数据体都对应一个独立的头文件,头文件描述了数据体的基本属性。
[0013]进一步,所述CPU+GPU异构架构中的动态负载均衡方案,是指CPU控制线程和N个GPU控制线程根据计算能力强弱,通过互斥锁竟争计算任务。
[0014]进一步,所述动态负载均衡方案兼容纯CPU架构平台和CPU+GPU混合架构平台,并且支持配置多种不同型号GPU设备的工作站系统。
[0015]进一步,本发明所述CPU+GPU协同并行计算动态负载均衡方法中,主线程等待所有控制线程退出后,完成的后续操作包括:对多个输出的数据体进行拼接、销毁控制线程、销毁进度条、关闭数据体控制句柄、输出作业日志等;其中,对多个输出数据体进行拼接,并没有生成真正的数据体,而只是创建了一个最终输出数据体的头文件,该头文件描述了数据体的名字及基本属性,并指向其包含的多个数据体的头文件。
[0016]进一步,本发明所述CPU+GPU协同并行计算动态负载均衡方法中,启用的GPU计算设备数和CPU计算核(线程)数可手动配置。
[0017]本发明公开的CPU+GPU协同并行计算动态负载均衡方法的有益效果是:
本方法实现了 CPU多核架构计算设备和GPU众核架构计算设备的协同并行计算的动态
负载均衡方案,支持、兼容纯CPU架构平台、CPU+GPU混合架构平台和搭载不同CPU、GPU型号设备的平台,各设备根据实时性能,动态划分计算任务,实现所有计算设备“能者多劳”,大大提高了软件的平台适应性、并行计算效率和整体运行性能。
【专利附图】

【附图说明】
[0018]附图1为本发明中CPU和GPU设备协同并行计算的示意图;
附图2为本发明中CPU和N个GPU计算设备的任务划分示意图。
【具体实施方式】
[0019]下面通过实施例,对本发明所述一种CPU+GPU协同并行计算动态负载均衡方法做进一步详细说明,并不造成对本发明的限制。
[0020]本发明的目的在于提供一种CPU+GPU协同并行计算动态负载均衡方法,利用当前主流的多核CPU计算设备和GPU架构设备协同并行计算,使CPU和各GPU设备的任务负载匹配各自的计算能力,最大化提升硬件计算资源利用率,提升软件运行效能的方法。
[0021]本发明所述CPU+GPU协同并行计算动态负载均衡方法,实现了 CPU多核架构处理器+GPU众核架构处理器的协同并行计算的动态负载均衡方案,主要涉及CPU+GPU异构架构处理器协同并行计算、GPU架构众核处理器并行计算、CPU多核多线程并行计算技术、基于信号量及互斥锁实现线程间通信的技术;
该CPU+GPU协同并行计算动态负载均衡方法的主要内容是,在单节点内,主线程处理输入参数并完成相应初始化操作,然后创建1+N个计算设备控制线程,分别控制节点内CPU设备和N个GPU设备,CPU控制线程再根据节点内计算核数创建若干并行计算线程,CPU与GPU设备间采用动态负载均衡的方案,实现并行效率的最优化。该CPU+GPU协同并行计算动态负载均衡方法主要包括:主线程处理输入参数并完成相应初始化操作、主线程创建计算设备控制线程以及CPU+GPU异构架构中动态负载均衡方案。
[0022]下面分别对本发明CPU+GPU协同并行计算动态负载均衡方法的几个部分进行说明:
所述主线程初始化操作包括:扫描节点内GPU计算设备数和型号、节点内CPU计算核数,并为每个GPU设备创建一个GPU属性数据结构对象。
[0023]所述主线程创建设备控制线程中,所有的CPU核作为一个整体计算设备,系统中的N个GPU每个GPU作为一个计算设备,因此,该系统中共创建1+N个设备控制线程分别为CPU控制线程和GPU控制线程;所述每个设备控制线程,具有记录其所属计算设备属性信息及作业信息的数据结构,称为设备控制线程参数;其中,所述设备属性信息的数据结构成员包括:设备类型、设备ID号及其它设备属性信息;所述作业信息数据结构成员包括:作业大小、作业总时间、单位作业平均时间、相对性能加速比指数;
并且,所述CPU控制线程根据启用的节点内计算核数创建若干更细粒度的并行计算线程;进一步,CPU控制线程创建M=SYSC0RE_NUM-N个细粒度并行计算线程,SYSC0RE_NUM为启用的系统核数,默认为自动检测的系统核数,N为启动的GPU设备数;进一步,CPU端各细粒度并行计算线程采用互斥锁的方式通信,并依此竟争计算任务,实现动态负载均衡;
同时,所述GPU控制线程控制一个GPU计算设备,负责读数据、管理该GPU计算、输出结果数据。
[0024]在本CPU+GPU异构架构中节点内CPU设备和N个GPU设备,要实现各设备完全独立并行处理,各设备控制线程需要独立进行数据读写操作;并且,主线程为各设备控制线程分别创建一个输出数据体控制句柄;各设备控制线程需要多线程化的读写接口支持;进一步,所述各设备控制线程使用线程化读、写接口,分别输出至一个独立的数据体,每个数据体都对应一个独立的头文件,头文件描述了数据体的基本属性。
[0025]本CPU+GPU异构架构中动态负载均衡方案是指,各设备控制线程采用动态负载均衡方式,即CPU控制线程和N个GPU控制线程根据计算能力强弱,通过互斥锁竟争计算任务;总体计算进度计数变量为各设备控制线程共享的变量,且通过互斥锁加以保护;
并且所述动态负载均衡方案兼容纯CPU架构平台和CPU+GPU混合架构平台,并且支持配置多种不同型号GPU设备的工作站系统,大大提高了软件的平台适应性、并行效率和整体运行性能。并且,所启用的GPU计算设备数和CPU计算线程数目可根据用户需要手动配置。
[0026]本发明所述CPU+GPU协同并行计算动态负载均衡方法中,主线程等待所有控制线程退出后,进行后续操作,完成的后续操作包括:对多个输出的数据体进行拼接、销毁控制线程、销毁进度条、关闭数据体控制句柄、输出作业日志等;进一步,对多个输出数据体进行拼接,并没有生成真正的数据体,而只是创建了一个最终输出数据体的头文件,该头文件描述了数据体的名字及基本属性,并指向其包含的多个数据体的头文件。
[0027]实施例:
为了使本发明的目的、技术方案和优点更加清晰,下面结合文字描述和实施例,对本发明作以下详细说明。
[0028]本发明所述CPU+GPU协同并行计算动态负载均衡方法中,软件功能及运行流程概述:
1)主线程参数预处理;
2)主线程扫描GPU设备型号和数量,并为每个GPU设备创建结构化设备属性(Handle);
3)主线程进行其它初始化操作,如创建进度条、创建输出数据体控制句柄等;
4)主线程根据输入参数,确定启用的GPU设备数N、CPU计算核数M;
5)主线程初始化(设备)控制线程参数数组;
6)主线程为CPU设备创建I个控制线程,为各GPU设备分别创建一个GPU控制线程;
7)各设备控制线程分别运行指定规模的性能测试作业,将运行的时间开销及其它相关结果存储至共享的数组中对应该线的位置,然后该线程发出一个信号sem_post (TestRunFinish_sem),通知主线程本线程试运行结束,然后等待主线程发出任务分配完毕的信号sem_wait (SetJobFinish_sem),继而启动正式运行;
8)主线程等待所有设备控制线程都发出测试运行完毕的信号sem_wait (TestRunFinish_sem),然后依据各设备控制线程返回的试运行性能结果,为各设备控制线程分配作业(计算任务),然后主线程向所有设备控制线程发出分配任务完毕的信号sem_post (SetJobFinish_sem),而后继续执行;
9)各控制线程分别控制对应的设备进行计算,各控制线程完成一个单位的计算任务就更新一次总体计算进度计数变量的值;
a)CPU控制线程管理CPU设备,根据启用的CPU计算核数(默认为自动检测的系统核数)创建更细粒度的并行计算线程,这些细粒度并行计算线程通过互斥锁竞争计算任务;
b)一个GPU控制线程管理一个GPU设备,负责源数据由内存拷贝至GPU显存、启动GPU计算Kernel函数、结果数据由GPU显存拷贝至内存等操作;
c)CPU端的各计算线程通过共享的互斥锁竟争计算任务,实现动态负载均衡;
d)各控制线程均独自进行读取源数据、源数据预处理、计算、输出结果数据等操作,各控制线程完全并行,分别输出独立的结果文件;
e)各控制线程完成各自的计算任务后自行退出;
10)主线程依据总体计算进度计数变量的值更新进度条;
11)主线程待所有控制线程退出后,完成后继操作;a)对各控制线程输出的数据体进行拼接;
b)销毁控制线程、销毁进度条、关闭数据体控制句柄、输出作业日志等;
12)主线程退出,程序退出。
[0029]本发明所述CPU+GPU协同并行计算动态负载均衡方法中,CPU和GPU设备协同并行计算的示意,如附图1所示;CPU和N个GPU计算设备的任务划分如附图2所示。
[0030]将本发明所述方法应用于某个典型的石油行业应用软件模块CPU+GPU协同计算并行程序开发项目,并利用真实数据进行性能测试:
1)测试环境及测试数据
测试环境包括硬件环境、软件环境:
【权利要求】
1.一种CPU+GPU协同并行计算动态负载均衡方法,其特征在于,所述CPU+GPU协同并行计算动态负载均衡方法利用多核CPU计算设备和GPU架构设备协同并行计算,使CPU和各GPU设备的任务负载匹配各自的计算能力,其主要内容包括:主线程初始化操作、主线程创建计算设备控制线程以及CPU+GPU异构架构中动态负载均衡方案; 在单节点内,主线程处理输入参数并完成相应初始化操作,然后创建1+N个计算设备控制线程,即I个CPU控制线程和N个GPU控制线程,分别控制节点内CPU设备和N个GPU设备,CPU控制线程再根据节点内计算核数创建若干并行计算线程,CPU与GPU设备间采用动态负载均衡方案。
2.根据权利要求1所述的CPU+GPU协同并行计算动态负载均衡方法,其特征在于,所述主线程处理输入参数并完成相应初始化操作中,所述主线程初始化操作包括:扫描节点内GPU计算设备数和型号、节点内CPU计算核数,并为每个GPU设备创建一个GPU属性数据结构对象。
3.根据权利要求1所述的CPU+GPU协同并行计算动态负载均衡方法,其特征在于,所述每个设备控制线程,具有记录其所属计算设备属性信息及作业信息的数据结构; 其中,所述设备属性信息的数据结构成员包括:设备类型、设备ID号及其它设备属性信息;所述作业信息数据结构成员包括:作业大小、作业总时间、单位作业平均时间、相对性能加速比指数。
4.根据权利要求1所述的CPU+GPU协同并行计算动态负载均衡方法,其特征在于,所述CPU控制线程根据启用的节点内计算核数创建若干更细粒度的并行计算线程,并且CPU端各细粒度并行计算 线程采用互斥锁的方式通信,并依此竟争计算任务。
5.根据权利要求4所述的CPU+GPU协同并行计算动态负载均衡方法,其特征在于,所述CPU控制线程创建M=SYSCORE_NUM-N个细粒度并行计算线程,SYSCORE_NUM为启用的系统核数,默认为自动检测的系统核数,N为启动的GPU设备数。
6.根据权利要求1所述的CPU+GPU协同并行计算动态负载均衡方法,其特征在于,所述GPU控制线程控制一个GPU计算设备,负责读数据、管理该GPU计算、输出结果数据。
7.根据权利要求1所述的CPU+GPU协同并行计算动态负载均衡方法,其特征在于,所述节点内CPU设备和N个GPU设备中,各设备完全独立并行处理,各设备控制线程需要独立进行数据读写操作; 所述主线程为各设备控制线程分别创建一个输出数据体控制句柄;并且,各设备控制线程需要多线程化的读写接口支持,各控制线程使用线程化读、写接口,分别输出至一个独立的数据体,每个数据体都对应一个独立的头文件,头文件描述了数据体的基本属性。
8.根据权利要求1所述的CPU+GPU协同并行计算动态负载均衡方法,其特征在于,所述CPU+GPU异构架构中的动态负载均衡方案,是指CPU控制线程和N个GPU控制线程根据计算能力强弱,通过互斥锁竟争计算任务;所述动态负载均衡方案兼容纯CPU架构平台和CPU+GPU混合架构平台,并且支持配置多种不同型号GPU设备的工作站系统。
9.根据权利要求1所述的CPU+GPU协同并行计算动态负载均衡方法,其特征在于,在单节点内,主线程等待所有控制线程退出后,完成的后续操作包括:对多个输出的数据体进行拼接、销毁控制线程、销毁进度条、关闭数据体控制句柄、输出作业日志等;其中,对多个输出数据体进行拼接,并没有生成真正的数据体,而只是创建了一个最终输出数据体的头文件,该头文件描述了数据体的名字及基本属性,并指向其包含的多个数据体的头文件。
10.根据权利要求2所述的CPU+GPU协同并行计算动态负载均衡方法,其特征在于,启用的GPU计算设备数和CPU计算线程数可手动配置。
【文档编号】G06F9/50GK103902387SQ201410175626
【公开日】2014年7月2日 申请日期:2014年4月29日 优先权日:2014年4月29日
【发明者】吴庆, 张广勇, 吴韶华, 王娅娟 申请人:浪潮电子信息产业股份有限公司

最新回复(0)