CN103282888B - 数据处理方法、图像处理器gpu及第一节点设备 - Google Patents
数据处理方法、图像处理器gpu及第一节点设备 Download PDFInfo
- Publication number
- CN103282888B CN103282888B CN201180003244.XA CN201180003244A CN103282888B CN 103282888 B CN103282888 B CN 103282888B CN 201180003244 A CN201180003244 A CN 201180003244A CN 103282888 B CN103282888 B CN 103282888B
- Authority
- CN
- China
- Prior art keywords
- gpu
- communication data
- nodal point
- node device
- cpu
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multi Processors (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明实施例提供了一种数据处理方法、图像处理器GPU及第一节点设备,涉及通信技术领域,所述数据处理方法包括:当CPU启动本节点设备的GPU的内核程序时,GPU运行内核程序,内核程序包括至少一个预设的GPU通信API;当GPU的内核程序运行至预设的GPU通信API时,GPU获取第一通信数据;GPU判断预设的GPU通信API对应的通信操作是用于发送的通信操作还是用于接收的通信操作,如果是用于发送的通信操作时,GPU将第一通信数据存储至显存的预设的缓冲区,使CPU将第一通信数据由预设的缓冲区复制至本节点设备的内存中;如果是用于接收的通信操作时,GPU从预设的缓冲区获取第二通信数据。本发明提高了系统的计算效率。
Description
技术领域
本发明涉及通信技术领域,特别涉及一种数据处理方法、图像处理器GPU及第一节点设备。
背景技术
在分布式环境下,节点设备之间的数据通信机制是分布式并行计算的基础。在典型的分布式并行计算系统中,同属一个任务的各个进程之间存在一定的共享数据或数据流动,这些进程需要在特定位置进行同步。当在节点设备中加入GPU(Graphic ProcessingUnit,图形处理器),就组成了分布式GPU系统。
在分布式GPU系统中,同属一个任务的各个进程由不同节点设备的GPU分别运行,其中节点设备可以为商用服务器;由于各个进程之间存在一定的共享数据,因此需要节点间的通信机制来实现所述共享数据的流动。例如当第一节点设备的GPU1的第一进程需要共享第二节点设备的GPU2的第二进程的通信数据时,由于GPU的从处理器特性,第二节点设备的CPU(Central Processing Unit,中央处理器)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(Application Programming Interface,应用程序编程接口),所述预设的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(Message Passing Interface,消息传递接口)等现有技术来实现,在此不再赘述。
本实施例中,所述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(Application Programming Interface,应用程序编程接口),所述预设的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(Stream Multiprocessors,流多处理器)预设一个缓冲区,其中所述预设的缓冲区包括多个字段,这些字段至少包括标示信号位和通信数据缓冲区,如图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(Message Passing Interface,消息传递接口)等现有技术来实现,在此不再赘述。
本实施例中,还可以将不同节点设备上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提供的一种第一节点设备实施例的结构示意图;本实施例中所述第一节点设备和第二节点设备均可以为商用服务器,但是并不局限于此。
所述第一节点设备包括:CPU 40和GPU 50;其中所述GPU 50的功能与实施例4中GPU的功能类似,具体可参见实施例4的相关描述,在此不再赘述。
所述CPU 40,用于启动本节点设备的图形处理器GPU的内核程序;将第一通信数据由预设的缓冲区复制至本节点设备的内存中;复制第二通信数据至所述预设的缓冲区中。
所述CPU 40,进一步用于将所述第一通信数据经第二节点设备的CPU传输至所述第二节点设备的GPU,使所述第二节点设备的GPU共享所述第一通信数据。
所述CPU 40,进一步用于检验所述第一通信数据是否有效,如果是,将所述第一标示信号位的状态设置为复位状态;如果否,将所述标示信号位的状态设置为接收错误状态。
本实施例中,在第一节点设备的GPU的内核程序中需要共享中间运行数据的地方插入预设的GPU通信API,当所述GPU的内核程序运行至所述预设的GPU通信API时,获取运行完的部分内核程序的中间运行数据,即第一通信数据;所述GPU判断所述GPU通信API对应的通信操作是用于发送的通信操作还是用于接收的通信操作,根据判断结果由所述GPU和本节点设备的CPU执行相应处理,完成GPU的通信操作,使所述CPU获取第一通信数据,所述GPU获取第二通信数据,相比较像有技术而言,本实施例在GPU的内核程序运行过程中及时获取中间运行数据(第一通信数据和第二通信数据),使得第二节点设备无需等待第一节点设备的整个内核程序运行完之后再获取中间运行数据,缩短了第二节点设备上进程的运行时间,提高了系统的计算效率。
此外,本实施例在GPU的内核程序运行过程中实现了单节点设备上GPU和CPU之间的双向通信;且通过在GPU的内核程序运行过程中实现单节点设备上GPU和CPU之间双向通信的基础上,结合现有集群内部不同节点设备之间的CPU之间的通信机制,实现了集群内部不同节点设备上GPU运行时的双向通信。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (18)
1.一种数据处理方法,其特征在于,所述方法包括:
当第一节点设备的中央处理器CPU启动本节点设备的图形处理器GPU的内核程序时,所述本节点设备的GPU运行所述内核程序,所述内核程序包括至少一个预设的GPU通信应用程序编程接口API;
当所述本节点设备的GPU的内核程序运行至所述预设的GPU通信API时,所述本节点设备的GPU获取第一通信数据;
所述本节点设备的GPU判断所述预设的GPU通信API对应的通信操作是用于发送的通信操作还是用于接收的通信操作,如果是用于发送的通信操作时,所述本节点设备的GPU将所述第一通信数据存储至本节点设备的显存的预设的缓冲区,使所述第一节点设备的CPU将所述第一通信数据由所述预设的缓冲区复制至本节点设备的内存中,并由所述第一节点设备的CPU将所述第一通信数据经第二节点设备的CPU传输至所述第二节点设备的GPU;如果是用于接收的通信操作时,所述本节点设备的GPU从所述预设的缓冲区获取第二通信数据,其中所述第二通信数据由所述第一节点设备的CPU复制至所述预设的缓冲区中,所述第二通信数据是所述第二节点设备上的GPU的内核程序生成的第二通信数据。
2.根据权利要求1所述的方法,其特征在于,所述内核程序包括至少两个子内核程序,每两个子内核程序之间存在一个所述预设的GPU通信API。
3.根据权利要求2所述的方法,其特征在于,所述本节点设备的GPU获取第一通信数据包括:
所述本节点设备的GPU获取所述子内核程序的通信数据。
4.根据权利要求1所述的方法,其特征在于,所述预设的缓冲区包括标示信号位和通信数据缓冲区;所述标示信号位包括第一标示信号位和第二标示信号位,所述通信数据缓冲区包括第一通信数据缓冲区和第二通信数据缓冲区,其中所述第一标示信号位和所述第一通信数据缓冲区对应于所述用于发送的通信操作,所述第二标示信号位和所述第二通信数据缓冲区对应于所述用于接收的通信操作。
5.根据权利要求4所述的方法,其特征在于,所述本节点设备的GPU将所述第一通信数据存储至本节点设备的显存的预设的缓冲区,使所述第一节点设备的CPU将所述第一通信数据由所述预设的缓冲区复制至本节点设备的内存中包括:
所述本节点设备的GPU将所述第一通信数据存储至本节点设备的显存的第一通信数据缓冲区,设置所述第一标示信号位的状态为置位状态,使所述第一节点设备的CPU在查询到所述第一标示信号位的状态为置位状态后将所述第一通信数据缓冲区中的第一通信数据复制至本节点设备的内存中。
6.根据权利要求4所述的方法,其特征在于,所述本节点设备的GPU从所述预设的缓冲区获取第二通信数据,其中所述第二通信数据由所述第一节点设备的CPU复制至所述预设的缓冲区中包括:
当本节点设备的GPU查询到所述第二标示信号位的状态为置位状态时,所述本节点设备的GPU从所述第二通信数据缓冲区中获取第二通信数据,其中所述第二通信数据由所述第一节点设备的CPU复制至所述第二通信数据缓冲区中,所述第二标示信号位的状态由所述第一节点设备的CPU设置为置位状态。
7.根据权利要求6所述的方法,其特征在于,所述本节点设备的GPU从所述第二通信数据缓冲区中获取所述第二通信数据之后,进一步包括:
所述本节点设备的GPU检验所述第二通信数据是否有效,如果是,将所述第二标示信号位的状态设置为复位状态;如果否,将所述第二标示信号位的状态设置为接收错误状态。
8.根据权利要求1-7任一项所述的方法,其特征在于,进一步包括:
所述第一节点设备的CPU将所述第一通信数据经第二节点设备的CPU传输至所述第二节点设备的GPU,使所述第二节点设备的GPU共享所述第一通信数据。
9.一种图形处理器GPU,其特征在于,包括:
运行模块,用于当第一节点设备的中央处理器CPU启动本节点设备的图形处理器GPU的内核程序时,运行所述内核程序,所述内核程序包括至少一个预设的GPU通信应用程序编程接口API;
获取模块,用于当所述本节点设备的GPU的内核程序运行至所述预设的GPU通信API时,获取第一通信数据;
判断处理模块,用于判断所述预设的GPU通信API对应的通信操作是用于发送的通信操作还是用于接收的通信操作,如果是用于发送的通信操作时,将所述第一通信数据存储至本节点设备的显存的预设的缓冲区,使所述第一节点设备的CPU将所述第一通信数据由所述预设的缓冲区复制至本节点设备的内存中,并由所述第一节点设备的CPU将所述第一通信数据经第二节点设备的CPU传输至所述第二节点设备的GPU;如果是用于接收的通信操作时,从所述预设的缓冲区获取第二通信数据,其中所述第二通信数据由所述第一节点设备的CPU复制至所述预设的缓冲区中,所述第二通信数据是所述第二节点设备上的GPU的内核程序生成的第二通信数据。
10.根据权利要求9所述本地节点设备的GPU,其特征在于,所述内核程序包括至少两个子内核程序,每两个子内核程序之间存在一个所述预设的GPU通信API。
11.根据权利要求10所述本地节点设备的GPU,其特征在于,所述获取模块包括:
获取单元,用于获取所述子内核程序的通信数据。
12.根据权利要求9所述本地节点设备的GPU,其特征在于,所述预设的缓冲区包括标示信号位和通信数据缓冲区;所述标示信号位包括第一标示信号位和第二标示信号位,所述通信数据缓冲区包括第一通信数据缓冲区和第二通信数据缓冲区,其中所述第一标示信号位和所述第一通信数据缓冲区对应于所述用于发送的通信操作,所述第二标示信号位和所述第二通信数据缓冲区对应于所述用于接收的通信操作。
13.根据权利要求12所述本地节点设备的GPU,其特征在于,所述判断处理模块包括:
存储设置单元,用于将所述第一通信数据存储至本节点设备的显存的第一通信数据缓冲区,设置所述第一标示信号位的状态为置位状态,使所述第一节点设备的CPU在查询到所述第一标示信号位的状态为置位状态后将所述第一通信数据缓冲区中的第一通信数据复制至本节点设备的内存中。
14.根据权利要求12所述本地节点设备的GPU,其特征在于,所述判断处理模块包括:
查询获取单元,用于当本节点设备的GPU查询到所述第二标示信号位的状态为置位状态时,从所述第二通信数据缓冲区中获取第二通信数据,其中所述第二通信数据由所述第一节点设备的CPU复制至所述第二通信数据缓冲区中,所述第二标示信号位由所述第一节点设备的CPU设置为置位状态。
15.根据权利要求14所述本地节点设备的GPU,其特征在于,进一步包括:
检验设置模块,用于在所述从所述第二通信数据缓冲区中获取所述第二通信数据之后,检验所述第二通信数据是否有效,如果是,将所述第二标示信号位的状态设置为复位状态;如果否,将所述第二标示信号位的状态设置为接收错误状态。
16.一种第一节点设备,其特征在于,包括中央处理器CPU和如权利要求9-15任一项所述的图形处理器GPU;
所述第一节点设备的CPU,用于启动本节点设备的图形处理器GPU的内核程序;将第一通信数据由预设的缓冲区复制至本节点设备的内存中;复制第二通信数据至所述预设的缓冲区中。
17.根据权利要求16所述的第一节点设备,其特征在于,所述第一节点设备的CPU,进一步用于将所述第一通信数据经第二节点设备的CPU传输至所述第二节点设备的GPU,使所述第二节点设备的GPU共享所述第一通信数据。
18.根据权利要求16所述的第一节点设备,其特征在于,所述第一节点设备的CPU,进一步用于检验所述第一通信数据是否有效,如果是,将所述第一标示信号位的状态设置为复位状态;如果否,将所述标示信号位的状态设置为接收错误状态。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2011/084764 WO2013097098A1 (zh) | 2011-12-27 | 2011-12-27 | 数据处理方法、图形处理器gpu及第一节点设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103282888A CN103282888A (zh) | 2013-09-04 |
CN103282888B true CN103282888B (zh) | 2017-03-08 |
Family
ID=48696189
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201180003244.XA Active CN103282888B (zh) | 2011-12-27 | 2011-12-27 | 数据处理方法、图像处理器gpu及第一节点设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN103282888B (zh) |
WO (1) | WO2013097098A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113986771B (zh) * | 2021-12-29 | 2022-04-08 | 北京壁仞科技开发有限公司 | 用于调试目标程序代码的方法及装置、电子设备 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103716635B (zh) * | 2013-12-12 | 2017-04-19 | 浙江宇视科技有限公司 | 一种提升智能分析性能的方法和装置 |
WO2017049583A1 (en) * | 2015-09-25 | 2017-03-30 | Intel Corporation | Gpu-cpu two-path memory copy |
CN107333136A (zh) * | 2017-06-26 | 2017-11-07 | 西安万像电子科技有限公司 | 图像编码方法和装置 |
CN110969565B (zh) * | 2018-09-28 | 2023-05-16 | 杭州海康威视数字技术股份有限公司 | 图像处理的方法和装置 |
CN111506420B (zh) * | 2020-03-27 | 2023-09-22 | 北京百度网讯科技有限公司 | 内存同步方法、装置、电子设备及存储介质 |
CN113703943A (zh) * | 2021-08-30 | 2021-11-26 | 联想(北京)有限公司 | 数据处理方法、装置及电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5572572A (en) * | 1988-05-05 | 1996-11-05 | Transaction Technology, Inc. | Computer and telephone apparatus with user friendly interface and enhanced integrity features |
CN1250567A (zh) * | 1997-03-13 | 2000-04-12 | 国际商业机器公司 | 连到计算机网络上的信息站和服务器 |
CN101802789A (zh) * | 2007-04-11 | 2010-08-11 | 苹果公司 | 多处理器上的并行运行时执行 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8286198B2 (en) * | 2008-06-06 | 2012-10-09 | Apple Inc. | Application programming interfaces for data parallel computing on multiple processors |
CN101599009A (zh) * | 2009-04-30 | 2009-12-09 | 浪潮电子信息产业股份有限公司 | 一种异构多处理器上并行执行任务的方法 |
-
2011
- 2011-12-27 CN CN201180003244.XA patent/CN103282888B/zh active Active
- 2011-12-27 WO PCT/CN2011/084764 patent/WO2013097098A1/zh active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5572572A (en) * | 1988-05-05 | 1996-11-05 | Transaction Technology, Inc. | Computer and telephone apparatus with user friendly interface and enhanced integrity features |
CN1250567A (zh) * | 1997-03-13 | 2000-04-12 | 国际商业机器公司 | 连到计算机网络上的信息站和服务器 |
CN101802789A (zh) * | 2007-04-11 | 2010-08-11 | 苹果公司 | 多处理器上的并行运行时执行 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113986771B (zh) * | 2021-12-29 | 2022-04-08 | 北京壁仞科技开发有限公司 | 用于调试目标程序代码的方法及装置、电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN103282888A (zh) | 2013-09-04 |
WO2013097098A1 (zh) | 2013-07-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103282888B (zh) | 数据处理方法、图像处理器gpu及第一节点设备 | |
CN100533370C (zh) | 多处理器系统及运行多处理器系统的方法 | |
CN105700907B (zh) | 利用针对本地检查点的卸载程序模型 | |
US9971635B2 (en) | Method and apparatus for a hierarchical synchronization barrier in a multi-node system | |
Li et al. | NUMA-aware shared-memory collective communication for MPI | |
US7971029B2 (en) | Barrier synchronization method, device, and multi-core processor | |
CN107278299A (zh) | 经由可重配置的虚拟交换机实现次级总线功能性的方法、装置和系统 | |
CN107967180B (zh) | 基于numa虚拟化环境下资源全局亲和度网络优化方法和系统 | |
CN104303174A (zh) | 通过处理器间互连来隧道传输平台管理消息 | |
CN107438838A (zh) | 打包的写完成 | |
CN104854845B (zh) | 使用高效的原子操作的方法和装置 | |
CN105612502A (zh) | 虚拟重试队列 | |
CN103399894A (zh) | 一种基于共享存储池的分布式事务处理方法 | |
JP2004506265A (ja) | 分散処理システムにおけるロックの実行 | |
CN103348333A (zh) | 用于分级高速缓存设计中的高速缓存之间的高效通信的方法和装置 | |
CN117806833B (zh) | 一种数据处理系统、方法及介质 | |
CN103455371A (zh) | 用于优化的管芯内小节点间消息通信的方法和系统 | |
CN115118738A (zh) | 基于rdma的灾备方法、装置、设备及介质 | |
CN104142871A (zh) | 用于数据备份的方法、装置和分布式文件系统 | |
CN110290166A (zh) | 跨集群数据交互方法、系统、装置及可读存储介质 | |
CN103412739A (zh) | 一种基于地震数据处理的数据传输方法及系统 | |
Shin et al. | Automatic generation of transaction level models for rapid design space exploration | |
CN102959529A (zh) | 用于缓存的网络的广播协议 | |
US11467836B2 (en) | Executing cross-core copy instructions in an accelerator to temporarily store an operand that cannot be accommodated by on-chip memory of a primary core into a secondary core | |
US20140164324A1 (en) | Utilization of data structures to synchronize copies of a resource |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |