数据处理方法、图像处理器GPU及第一节点设备与流程

文档序号:11996193阅读:209来源:国知局
数据处理方法、图像处理器GPU及第一节点设备与流程
本发明涉及通信技术领域,特别涉及一种数据处理方法、图像处理器GPU及第一节点设备。

背景技术:
在分布式环境下,节点设备之间的数据通信机制是分布式并行计算的基础。在典型的分布式并行计算系统中,同属一个任务的各个进程之间存在一定的共享数据或数据流动,这些进程需要在特定位置进行同步。当在节点设备中加入GPU(GraphicProcessingUnit,图形处理器),就组成了分布式GPU系统。在分布式GPU系统中,同属一个任务的各个进程由不同节点设备的GPU分别运行,其中节点设备可以为商用服务器;由于各个进程之间存在一定的共享数据,因此需要节点间的通信机制来实现所述共享数据的流动。例如当第一节点设备的GPU1的第一进程需要共享第二节点设备的GPU2的第二进程的通信数据时,由于GPU的从处理器特性,第二节点设备的CPU(CentralProcessingUnit,中央处理器)2在所述GPU2运行完第二进程后,将所述通信数据复制到自身内存后经第一节点设备的CPU1传输至所述GPU1,使所述GPU1执行第一进程的处理过程。在实现本发明的过程中,发明人发现现有技术至少存在以下问题:当所述GPU1的第一进程在运行时需要共享所述GPU2的第二进程的中间运行数据时,第一进程也需要等待所述GPU2运行完整个第二进程后,才能获取第二进程的中间运行数据,延长了第一进程的运行时间,从而降低了系统的计算效率。

技术实现要素:
为了提高系统的计算效率,本发明实施例提供了一种数据处理方法、图像处理器GPU及第一节点设备。所述技术方案如下:一种数据处理方法,所述方法包括:当第一节点设备的中央处理器CPU启动本节点设备的图形处理器GPU的内核程序时,所述GPU运行所述内核程序,所述内核程序包括至少一个预设的GPU通信应用程序编程接口API;当所述GPU的内核程序运行至所述预设的GPU通信API时,所述GPU获取第一通信数据;所述GPU判断所述预设的GPU通信API对应的通信操作是用于发送的通信操作还是用于接收的通信操作,如果是用于发送的通信操作时,所述GPU将所述第一通信数据存储至本节点设备的显存的预设的缓冲区,使所述CPU将所述第一通信数据由所述预设的缓冲区复制至本节点设备的内存中;如果是用于接收的通信操作时,所述GPU从所述预设的缓冲区获取第二通信数据,其中所述第二通信数据由所述CPU复制至所述预设的缓冲区中。一种图形处理器GPU,包括:运行模块,用于当第一节点设备的中央处理器CPU启动本节点设备的图形处理器GPU的内核程序时,运行所述内核程序,所述内核程序包括至少一个预设的GPU通信应用程序编程接口API;获取模块,用于当所述GPU的内核程序运行至所述预设的GPU通信API时,获取第一通信数据;判断处理模块,用于判断所述预设的GPU通信API对应的通信操作是用于发送的通信操作还是用于接收的通信操作,如果是用于发送的通信操作时,所述GPU将所述第一通信数据存储至本节点设备的显存的预设的缓冲区,使所述CPU将所述第一通信数据由所述预设的缓冲区复制至本节点设备的内存中;如果是用于接收的通信操作时,所述GPU从所述预设的缓冲区获取第二通信数据,其中所述第二通信数据由所述CPU复制至所述预设的缓冲区中。一种第一节点设备,包括中央处理器CPU和上述图形处理器GPU;所述CPU,用于启动本节点设备的图形处理器GPU的内核程序;将第一通信数据由预设的缓冲区复制至本节点设备的内存中;复制第二通信数据至所述预设的缓冲区中。本发明实施例提供的技术方案的有益效果是:在第一节点设备的GPU的内核程序中需要共享中间运行数据的地方插入预设的GPU通信API,当所述GPU的内核程序运行至所述预设的GPU通信API时,获取运行完的部分内核程序的中间运行数据,即第一通信数据;所述GPU判断所述GPU通信API对应的通信操作是用于发送的通信操作还是用于接收的通信操作,根据判断结果由所述GPU和本节点设备的CPU执行相应处理,完成GPU的通信操作,使所述CPU获取第一通信数据,所述GPU获取第二通信数据,相比较现有技术而言,本实施例在GPU的内核程序运行过程中及时获取中间运行数据(第一通信数据和第二通信数据),使得第二节点设备无需等待第一节点设备的整个内核程序运行完之后再获取中间运行数据,缩短了第二节点设备上进程的运行时间,提高了系统的计算效率。附图说明为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明实施例1提供的一种数据处理方法实施例的流程图;图2是本发明实施例2提供的一种数据处理方法实施例的流程图;图3是本发明实施例3提供的一种数据处理方法实施例的流程图;图4为本发明实施例3提供的预设的缓冲区的结构示意图;图5是本发明实施例3提供的不同节点间GPU的通信交互示意图;图6是本发明实施例4提供的一种图形处理器GPU实施例的第一结构示意图;图7是本发明实施例4提供的一种图形处理器GPU实施例的第二结构示意图;图8是本发明实施例4提供的一种图形处理器GPU实施例的第三结构示意图;图9是本发明实施例4提供的一种图形处理器GPU实施例的第四结构示意图;图10是本发明实施例5提供的一种第一节点设备实施例的结构示意图。具体实施方式本发明实施例提供一种数据处理方法、图像处理器GPU及第一节点设备。为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。实施例1参考图1,图1是本发明实施例1提供的一种数据处理方法实施例的流程图;所述数据处理方法包括:S101:当第一节点设备的中央处理器CPU启动本节点设备的图形处理器GPU的内核程序时,所述GPU运行所述内核程序,所述内核程序包括至少一个预设的GPU通信应用程序编程接口API。S102:当所述GPU的内核程序运行至所述预设的GPU通信API时,所述GPU获取第一通信数据。S103:所述GPU判断所述GPU通信API对应的通信操作是用于发送的通信操作还是用于接收的通信操作,如果是用于发送的通信操作时,所述GPU将所述第一通信数据存储至本节点设备的显存的预设的缓冲区,使所述CPU将所述第一通信数据由所述预设的缓冲区复制至本节点设备的内存中;如果是用于接收的通信操作时,所述GPU从所述预设的缓冲区获取第二通信数据,其中所述第二通信数据由所述CPU复制至所述预设的缓冲区中。本实施例中,所述GPU的内核程序中包含了预设的GPU通信API,使GPU具有了主动通信的功能。当所述GPU的内核程序执行到所述预设的GPU通信API时,表示GPU想要发送或者接收通信数据,相应的,本节点设备上的CPU就从预设的缓冲区中取通信数据或者将通信数据复制到所述预设的缓冲区中,从而间接的实现了GPU的通信操作,进而实现了当GPU内核程序运行过程中同一节点设备上CPU和GPU之间的双向通信。本实施例中,在第一节点设备的GPU的内核程序中需要共享中间运行数据的地方插入预设的GPU通信API,当所述GPU的内核程序运行至所述预设的GPU通信API时,获取运行完的部分内核程序的中间运行数据,即第一通信数据;所述GPU判断所述GPU通信API对应的通信操作是用于发送的通信操作还是用于接收的通信操作,根据判断结果由所述GPU和本节点设备的CPU执行相应处理,完成GPU的通信操作,使所述CPU获取第一通信数据,所述GPU获取第二通信数据,相比较像有技术而言,本实施例在GPU的内核程序运行过程中及时获取中间运行数据(第一通信数据和第二通信数据),使得第二节点设备无需等待第一节点设备的整个内核程序运行完之后再获取中间运行数据,缩短了第二节点设备上进程的运行时间,提高了系统的计算效率。实施例2参考图2,图2是本发明实施例2提供的一种数据处理方法实施例的流程图;所述数据处理方法包括:S201:当第一节点设备的CPU1启动本节点设备的GPU1的内核程序时,所述GPU1运行所述内核程序。此步骤中,所述GPU1的内核(kernel)程序包括至少一个预设的GPU通信API(ApplicationProgrammingInterface,应用程序编程接口),所述预设的GPU通信API将所述GPU1的内核程序分割成多个子内核程序,因此所述内核程序包括至少两个子内核程序,每个子内核程序内不存在通信操作;所述预设的GPU通信API为GPU支持的通信API,其对应着不同的通信操作,其中所述通信操作包括用于发送的通信操作和用于接收的通信操作。S202:当所述GPU1的内核程序运行至所述预设的GPU通信API时,所述GPU1获取第一通信数据。此步骤中,当所述GPU1运行至所述预设的GPU通信API时,所述GPU1结束当前部分的子内核程序的运行,获取第一通信数据,其中所述第一通信数据为刚刚运行完的所述子内核程序的通信数据。S203:所述GPU1判断所述预设的GPU通信API对应的通信操作是用于发送的通信操作还是用于接收的通信操作,如果是用于发送的通信操作,执行S204;如果是用于接收的通信操作,执行S205。S204:所述GPU1将所述第一通信数据存储至本节点设备的显存的预设的缓冲区,使所述CPU将所述第一通信数据由所述预设的缓冲区复制至本节点设备的内存中。当所述预设的GPU通信API对应的通信操作是用于发送的通信操作时,表示GPU1想要将所述第一通信数据发送至本节点设备的CPU1,但是由于GPU的从处理器特性,因此只能由本节点的CPU1从预设的缓冲区获取所述第一通信数据。具体为:当所述预设的GPU通信API对应的通信操作是用于发送的通信操作时,所述GPU1将所述第一通信数据存储至本节点设备的显存的预设的缓冲区中,将内核程序切换成CPU代码,由所述CPU1运行自身的程序。当所述CPU1运行至用于接收的通信操作对应的CPU通信API时,所述CPU1将所述第一通信数据复制至本节点设备的内存中。其中所述预设的缓冲区由用户指定。S205:所述GPU1从所述预设的缓冲区获取第二通信数据,其中所述第二通信数据由所述CPU1复制至所述预设的缓冲区中。当所述预设的GPU通信API对应的通信操作是用于接收的通信操作时,表示所述CPU1想要将第二通信数据发送至所述GPU1。具体为:当所述预设的GPU通信API对应的通信操作是用于接收的通信操作时,将内核程序切换成CPU代码,由所述CPU1运行自身的程序。当所述CPU1运行至用于发送的通信操作对应的CPU通信API时,所述CPU1将所述第二通信数据从本节点设备的内存中复制至本节点设备的显存的所述预设的缓冲区中。其中所述第二通信数据可以是所述CPU1自身运行的程序的通信数据;也可以是第二节点设备上GPU2的内核程序生成的第二通信数据,具体地,第二节点设备的CPU2将第二通信数据从第二节点设备上的预设的缓冲区中复制至第二节点设备的内存上,所述CPU2再将所述第二通信数据传输至所述CPU1。所述预设的GPU通信API执行完成后,继续执行所述GPU的内核程序的下续部分,即顺序执行所述GPU的内核程序的其余子内核程序。对于所述GPU的内核程序中存在多个GPU通信API时,GPU循环执行上述S202-S205的流程,直至整个GPU的内核程序的结束。本实施例中,所述方法还包括:所述第一节点设备的CPU1将所述第一通信数据经第二节点设备的CPU2传输至所述第二节点设备的GPU2,使所述第二节点设备的GPU2共享所述第一通信数据;同理,第二节点设备上的GPU2也可以将其第二通信数据顺序经CPU2、CPU1传输至GPU1,从而实现了集群内部不同节点设备上GPU运行时的双向通信。其中不同节点设备上CPU间的通信机制,可以采用socket(套接字)或MPI(MessagePassingInterface,消息传递接口)等现有技术来实现,在此不再赘述。本实施例中,所述GPU的内核程序中包含了预设的GPU通信API,使GPU具有了主动通信的功能。当所述GPU的内核程序执行到所述预设的GPU通信API时,表示GPU想要发送或者接收通信数据,相应的,本节点设备上的CPU就从预设的缓冲区中取通信数据或者将通信数据复制到所述预设的缓冲区中,从而间接的实现了GPU的通信操作,进而实现了当GPU内核程序运行过程中同一节点设备上CPU和GPU之间的双向通信。本实施例中,在第一节点设备的GPU的内核程序中需要共享中间运行数据的地方插入预设的GPU通信API,当所述GPU的内核程序运行至所述预设的GPU通信API时,获取运行完的部分内核程序的中间运行数据,即第一通信数据;所述GPU判断所述GPU通信API对应的通信操作是用于发送的通信操作还是用于接收的通信操作,根据判断结果由所述GPU和本节点设备的CPU执行相应处理,完成GPU的通信操作,使所述CPU获取第一通信数据,所述GPU获取第二通信数据,相比较像有技术而言,本实施例在GPU的内核程序运行过程中及时获取中间运行数据(第一通信数据和第二通信数据),使得第二节点设备无需等待第一节点设备的整个内核程序运行完之后再获取中间运行数据,缩短了第二节点设备上进程的运行时间,提高了系统的计算效率。此外,本实施例在GPU的内核程序运行过程中实现了单节点设备上GPU和CPU之间的双向通信;且通过在GPU的内核程序运行过程中实现单节点设备上GPU和CPU之间双向通信的基础上,结合现有集群内部不同节点设备之间的CPU之间的通信机制,实现了集群内部不同节点设备上GPU运行时的双向通信。实施例3参考图3,图3是本发明实施例3提供的一种数据处理方法实施例的流程图;本实施例中将CPU和GPU之间的通信封装在CPU设备和GPU设备的上一层,该层为分布式GPU系统提供基本的通信操作。所述数据处理方法包括:S301:当第一节点设备的CPU1启动本节点设备的GPU1的内核程序时,所述GPU1运行所述内核程序。此步骤中,所述GPU1的内核(kernel)程序包括至少一个预设的GPU通信API(ApplicationProgrammingInterface,应用程序编程接口),所述预设的GPU通信API对应着不同的通信操作,其中所述通信操作包括用于发送的通信操作和用于接收的通信操作。GPU的内核(kernel)程序中包含了预设的GPU通信API,使GPU具有了主动通信的功能。S302:当所述GPU1的内核程序运行至所述预设的GPU通信API时,所述GPU1获取第一通信数据。此步骤中,当所述GPU1运行至所述预设的GPU通信API时,获取第一通信数据,其中所述第一通信数据为刚刚运行完的内核程序的通信数据。S303:所述GPU1判断所述预设的GPU通信API对应的通信操作是用于发送的通信操作还是用于接收的通信操作,如果是用于发送的通信操作,执行S304;如果是用于接收的通信操作,执行S305。S304:所述GPU1将所述第一通信数据存储至本节点设备的显存的预设的缓冲区,使所述CPU1将所述第一通信数据由所述预设的缓冲区复制至本节点设备的内存中。本实施例中,由于CPU可以直接访问本节点设备的GPU的显存,于是在本节点设备的显存中为GPU的每个SM(StreamMultiprocessors,流多处理器)预设一个缓冲区,其中所述预设的缓冲区包括多个字段,这些字段至少包括标示信号位和通信数据缓冲区,如图4所示,图4为本发明实施例3提供的预设的缓冲区的结构示意图。其中,所述通信数据缓冲区还可以包括通信数据的长度,即CPU或GPU程序需要通信的数据的大小。所述标示信号位可以包括第一标示信号位和第二标示信号位,所述通信数据缓冲区可以包括第一通信数据缓冲区和第二通信数据缓冲区,其中所述第一标示信号位和所述第一通信数据缓冲区对应于所述用于发送的通信操作,即所述第一标示信号位和所述第一通信数据缓冲区分别为,当所述CPU接收所述GPU的通信数据时对应的标示信号位和通信数据缓冲区,所述第二标示信号位和所述第二通信数据缓冲区对应于所述用户接收的通信操作,即所述第二标示信号位和所述第而通信缓冲区分别为,当所述GPU接收所述CPU的通信数据时对应的的标示信号位和通信数据缓冲区。所述标示信号位的状态包括复位状态、置位状态和接收错误状态,其中所述复位状态可以为0,所述置位状态可以为1,所述接收错误状态可以为除0和1外的其余数值。此步骤中,具体地,当所述预设的GPU通信API对应的通信操作是用于发送的通信操作时,所述GPU1将所述第一通信数据存储至本节点设备的显存的第一通信数据缓冲区,设置所述第一标示信号位的状态为置位状态。所述GPU1不断查询(即轮询)所述第一标示信号位的状态,当所述第一标示信号位的状态为置位状态时,所述GPU1继续查询所述第一标示信号位的状态;当所述第一标示信号位的状态为接收错误状态时,所述GPU1重新将第一通信数据复制至所述第一通信数据缓冲区中,并将所述第一标示信号位的状态设置为置位状态;当所述第一标示信号位的状态为复位状态时,所述GPU1查询所述第二标示信号位的状态是否为置位状态,如果是,执行类似S305中的相应流程,如果否,则继续查询所述第二标示信号位的状态是否为置位状态,直至所述第二标示信号位的状态为置位状态为止。所述CPU1上负责通信的线程也在一直不断的查询所述第一标示信号位的状态,当所述CPU1在查询到所述第一标示信号位的状态为置位状态时,所述CPU1将计数器清零,将所述第一通信数据缓冲区中的第一通信数据复制至本节点设备的内存中。所述CPU1获取所述第一通信数据后,对所述第一通信数据进行检验,具体地可以通过添加校验位来检验所述第一通信数据是否有效。所述CPU1检验所述第一通信数据是否有效,如果是,所述CPU1将所述第一标示信号位的状态设置为复位状态,如果否,所述CPU1将所述第一标示信号位的状态设置为接收错误状态。当所述CPU1将所述第一表示信号位的状态设置为接收错误状态后,所述CPU1判断所述计数器是否达到预设阈值,如果是,报告错误次数过多,设备或许有异常,程序终止;如果否,所述计数器加1。当所述计数器加1后,所述CPU1再循环对获取到的新的第一通信数据执行检验。所述CPU1将所述第一标示信号位的状态设置为复位状态后,继续执行其自身的程序,进行数据处理,当所述CPU1不需要继续与所述GPU1进行通信时,直接结束自身程序;当所述CPU1需要继续与所述GPU1进行通信时,所述CPU1将第二通信数据复制至所述第二通信数据缓冲区中,并将所述第二标示信号位的状态设置为置位状态。所述CPU1不断查询所述第二标示信号位的状态,当所述第二标示信号位的状态为置位状态时,所述CPU1继续查询所述第二标示信号位的状态;当所述第二标示信号位的状态为接收错误状态时,所述CPU1重新将第二通信数据复制至所述第二通信数据缓冲区中,并将所述第二标示信号位的状态设置为置位状态;当所述第二标示信号位的状态为复位状态时,所述CPU1判断是否需要接收GPU待发送的第一通信数据,如果是,查询所述第一标示信号位的状态是否是置位状态,如果否,继续运行其自身的程序。S305:所述GPU1从所述预设的缓冲区获取第二通信数据,其中所述第二通信数据由所述CPU1复制至所述预设的缓冲区中。此步骤中,具体地,当所述预设的GPU通信API对应的通信操作是用于接收的通信操作时,所述GPU1不断的查询所述第二标示信号位的状态,当所述第二标示信号位的状态为置位状态时,表示所述CPU1已经将第二通信数据复制至第二通信数据缓冲区中,且所述CPU1已经将所述第二标示信号位的状态设置为置位状态,所述GPU1将计数器清零,从所述第二通信数据缓冲区中获取第二通信数据。S306:所述GPU1检验所述第二通信数据是否有效,如果是,将所述第二标示信号位的状态设置为复位状态;如果否,将所述第二标示信号位的状态设置为接收错误状态。此步骤中,当所述第二标示信号位的状态为复位状态后,所述GPU1继续执行器内核程序,进行数据处理,当再次遇到所述预设的GPU通信API时,执行相应的处理。S307:所述GPU1判断所述计数器是否达到预设阈值,如果是,报告错误次数过多,设备或许有异常,程序终止;如果否,所述计数器加1。当所述计数器加1后,所述CPU1返回至S306,对获取到的新的第二通信数据执行检验流程。本实施例中,所述方法还包括:所述第一节点设备的CPU1将所述第一通信数据经第二节点设备的CPU2传输至所述第二节点设备的GPU2,使所述第二节点设备的GPU2共享所述第一通信数据;同理,第二节点设备上的GPU2也可以将其第二通信数据顺序经CPU2、CPU1传输至GPU1,从而实现了集群内部不同节点设备上GPU运行时的双向通信;如图5所示,图5是本发明实施例3提供的不同节点间GPU的通信交互示意图;图5中实线表示第一通信数据的通信路径,虚线表示第二通信数据的通信路径。其中,不同节点设备上CPU间的通信机制,可以采用socket(套接字)或MPI(MessagePassingInterface,消息传递接口)等现有技术来实现,在此不再赘述。本实施例中,还可以将不同节点设备上GPU之间的双向通信封装成云通信层API放置在云端供GPU分布式系统的上层应用开发人员(用户)使用,其中所述云通信层API中还加入了对任务调度策略得优化(对用户透明),这样就有效的避免死锁和效率低下等问题,保证了GPU分布式系统的正确性和稳定性。其中所述云通信层API用于编写分布式GPU计算任务,所述云通信层API提供三个API,具体为:发送操作API、接收操作API和同步操作API。其中,发送操作API:CLOUD_Send(data_type,data_length,data_buffer,destination)接收操作API:CLOUD_Recv(data_type,data_length,data_buffer,source)其中,data_type是待发送/待接收的数据单位的类型,data_length是数据内容的大小(即多少个单位的数据),data_buffer是待发送/待接收到的数据缓冲,destination是发送操作的目的地址,source是接收操作的数据来源地址。CLOUD_Send()和CLOUD_Recv()操作失败将返回错误代码。当用户使用所述云通信层API的发送操作API/接收操作API时,系统采用任务调度策略优化的方法,具体为,本实施例中设置一个全局计算task(任务)分发队列,即在分发计算task之前,识别出带有发送/接收操作的计算task,按照带有发送操作的计算task放置在所有带有接收操作的计算task之前的顺序设置全局计算task分发队列;当分发计算task时,按照所述全局计算task队列进行分发操作,从而保证了用户的分布式程序的任务中的发送/接收操作的时序的正确性,从而解决由GPU任务的独占性而带来的错误的发送和错误的接收操作产生的死锁现象。同步操作API:CLOUD_Sync()在运行时,当进行同步操作的任务数量过量时,该方法将返回错误。当用户使用所述云通信层API的同步操作API时,系统采用任务调度策略优化的方法,具体为,在分发计算task前,识别需要进行同步操作的计算任务,将这些计算task分发到系统内的不同节点上(即一个节点上不能有一个以上的计算任务),设置全局标识位,当所有节点上的需要同步的计算任务都准备就绪运行时,统一调度运行这些计算任务,从而保证了用户的分布式程序的任务中的同步操作的范围的正确性。其中GPU任务的独占性决定了,进行同步操作的任务数量不能超过系统允许的同时运行的任务数量,系统在调度的时候,需要将进行同步的任务同时处于运行状态,否则会对系统性能带来损害。本实施例中,在第一节点设备的GPU的内核程序中需要共享中间运行数据的地方插入预设的GPU通信API,当所述GPU的内核程序运行至所述预设的GPU通信API时,获取运行完的部分内核程序的中间运行数据,即第一通信数据;所述GPU判断所述GPU通信API对应的通信操作是用于发送的通信操作还是用于接收的通信操作,根据判断结果由所述GPU和本节点设备的CPU执行相应处理,完成GPU的通信操作,使所述CPU获取第一通信数据,所述GPU获取第二通信数据,相比较像有技术而言,本实施例在GPU的内核程序运行过程中及时获取中间运行数据(第一通信数据和第二通信数据),使得第二节点设备无需等待第一节点设备的整个内核程序运行完之后再获取中间运行数据,缩短了第二节点设备上进程的运行时间,提高了系统的计算效率。此外,本实施例在GPU的内核程序运行过程中实现了单节点设备上GPU和CPU之间的双向通信;且通过在GPU的内核程序运行过程中实现单节点设备上GPU和CPU之间双向通信的基础上,结合现有集群内部不同节点设备之间的CPU之间的通信机制,实现了集群内部不同节点设备上GPU运行时的双向通信。实施例4参考图6,图6是本发明实施例4提供的一种图形处理器GPU实施例的第一结构示意图;所述GPU包括:运行模块501,用于当第一节点设备的中央处理器CPU启动本节点设备的图形处理器GPU的内核程序时,运行所述内核程序,所述内核程序包括至少一个预设的GPU通信应用程序编程接口API。获取模块502,用于当所述GPU的内核程序运行至所述预设的GPU通信API时,获取第一通信数据。判断处理模块503,用于判断所述预设的GPU通信API对应的通信操作是用于发送的通信操作还是用于接收的通信操作,如果是用于发送的通信操作时,所述GPU将所述第一通信数据存储至本节点设备的显存的预设的缓冲区,使所述CPU将所述第一通信数据由所述预设的缓冲区复制至本节点设备的内存中;如果是用于接收的通信操作时,所述GPU从所述预设的缓冲区获取第二通信数据,其中所述第二通信数据由所述CPU复制至所述预设的缓冲区中。其中所述内核程序包括至少两个子内核程序,每两个子内核程序之间存在一个所述预设的GPU通信API。所述获取模块502包括:获取单元5021,如图7所示,图7是本发明实施例4提供的一种图形处理器GPU实施例的第二结构示意图;所述获取单元5021,用于获取所述子内核程序的通信数据。在本实施例的另一实施方式中,所述预设的缓冲区包括标示信号位和通信数据缓冲区;所述标示信号位包括第一标示信号位和第二标示信号位,所述通信数据缓冲区包括第一通信数据缓冲区和第二通信数据缓冲区,其中所述第一标示信号位和所述第一通信数据缓冲区对应所述CPU接收所述GPU的标示信号位和通信数据缓冲区,所述第二标示信号位和所述第二通信数据缓冲区对应所述GPU接收所述CPU的标示信号位和通信数据缓冲区。其中,所述判断处理模块503包括:所述存储设置单元5031,如图8所示,图8是本发明实施例4提供的一种图形处理器GPU实施例的第三结构示意图;所述存储设置单元5031,用于将所述第一通信数据存储至本节点设备的显存的第一通信数据缓冲区,设置所述第一标示信号位的状态为置位状态,使所述CPU在查询到所述第一标示信号位的状态为置位状态后将所述第一通信数据缓冲区中的第一通信数据复制至本节点设备的内存中。或者,所述判断处理模块503包括:查询获取单元5032,用于当GPU查询到所述第二标示信号位的状态为置位状态时,从所述第二通信数据缓冲区中获取第二通信数据,其中所述第二通信数据由所述CPU复制至所述第二通信数据缓冲区中,所述第二标示信号位由所述CPU设置为置位状态。进一步地,所述GPU还包括:检验设置模块504,如图9所示,图9是本发明实施例4提供的一种图形处理器GPU实施例的第四结构示意图;所述检验设置模块504,用于在所述从所述第二通信数据缓冲区中获取所述第二通信数据之后,检验所述第一通信数据是否有效,如果是,将所述第二标示信号位的状态设置为复位状态;如果否,将所述第二标示信号位的状态设置为接收错误状态。本实施例中,在第一节点设备的GPU的内核程序中需要共享中间运行数据的地方插入预设的GPU通信API,当所述GPU的内核程序运行至所述预设的GPU通信API时,获取运行完的部分内核程序的中间运行数据,即第一通信数据;所述GPU判断所述GPU通信API对应的通信操作是用于发送的通信操作还是用于接收的通信操作,根据判断结果由所述GPU和本节点设备的CPU执行相应处理,完成GPU的通信操作,使所述CPU获取第一通信数据,所述GPU获取第二通信数据,相比较像有技术而言,本实施例在GPU的内核程序运行过程中及时获取中间运行数据(第一通信数据和第二通信数据),使得第二节点设备无需等待第一节点设备的整个内核程序运行完之后再获取中间运行数据,缩短了第二节点设备上进程的运行时间,提高了系统的计算效率。实施例5参考图10,图10是本发明实施例5提供的一种第一节点设备实施例的结构示意图;本实施例中所述第一节点设备和第二节点设备均可以为商用服务器,但是并不局限于此。所述第一节点设备包括:CPU40和GPU50;其中所述GPU50的功能与实施例4中GPU的功能类似,具体可参见实施例4的相关描述,在此不再赘述。所述CPU40,用于启动本节点设备的图形处理器GPU的内核程序;将第一通信数据由预设的缓冲区复制至本节点设备的内存中;复制第二通信数据至所述预设的缓冲区中。所述CPU40,进一步用于将所述第一通信数据经第二节点设备的CPU传输至所述第二节点设备的GPU,使所述第二节点设备的GPU共享所述第一通信数据。所述CPU40,进一步用于检验所述第一通信数据是否有效,如果是,将所述第一标示信号位的状态设置为复位状态;如果否,将所述标示信号位的状态设置为接收错误状态。本实施例中,在第一节点设备的GPU的内核程序中需要共享中间运行数据的地方插入预设的GPU通信API,当所述GPU的内核程序运行至所述预设的GPU通信API时,获取运行完的部分内核程序的中间运行数据,即第一通信数据;所述GPU判断所述GPU通信API对应的通信操作是用于发送的通信操作还是用于接收的通信操作,根据判断结果由所述GPU和本节点设备的CPU执行相应处理,完成GPU的通信操作,使所述CPU获取第一通信数据,所述GPU获取第二通信数据,相比较像有技术而言,本实施例在GPU的内核程序运行过程中及时获取中间运行数据(第一通信数据和第二通信数据),使得第二节点设备无需等待第一节点设备的整个内核程序运行完之后再获取中间运行数据,缩短了第二节点设备上进程的运行时间,提高了系统的计算效率。此外,本实施例在GPU的内核程序运行过程中实现了单节点设备上GPU和CPU之间的双向通信;且通过在GPU的内核程序运行过程中实现单节点设备上GPU和CPU之间双向通信的基础上,结合现有集群内部不同节点设备之间的CPU之间的通信机制,实现了集群内部不同节点设备上GPU运行时的双向通信。需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1