本公开的实施例涉及一种数据处理方法、装置、电子设备和计算机可读存储介质。
背景技术:
1、神经网络推理或训练的高效计算领域中,计算任务中多个动态形状算子融合时,作为生产者算子和消费者算子之间存在资源同步的问题。神经网络加速设备内具有的缓存(buffer)往往是有一定数量或者大小的限制,在生产者和消费者之间需要重复使用这些资源,如果生产者算子和消费者算子是并发或者同时执行的话,需要确保他们之间使用的资源没有冲突,只有当生产者把数据生产之后,消费者才能开始使用对应的数据。只有当消费者把数据消费完后,生产者才能把继续往共享缓存中存储新生产的数据。
技术实现思路
1、本公开至少一个实施例提供一种数据处理方法,包括:基于可用的多个共享缓存的总容量,确定数据粒度;基于所述数据粒度,将计算数据的每个维度切分为多个部分,以将所述计算数据对应的第一层级任务分为多组第二层级任务,其中,每组所述第二层级任务包括多个第二层级任务,每个所述第二层级任务的计算结果的数据量与所述多个共享缓存的总容量对应;针对每组所述第二层级任务,利用循环代码,将所述每组中的多个第二层级任务的计算结果循环存放至所述多个共享缓存,并将所述多个共享缓存的数据循环输出至数据消费者算子。
2、例如,在本公开上述实施例的至少一个示例提供的数据处理方法中,每组所述第二层级任务包括第一任务、第二任务和位于所述第一任务和所述第二任务之间的至少一个中间任务;所述循环代码包括第一代码段、第二代码段和中间代码段。针对每组所述第二层级任务,利用循环代码,将所述每组中的多个第二层级任务的计算结果循环存放至所述多个共享缓存,并将所述多个共享缓存的数据循环输出至数据消费者算子,包括:利用所述第一代码段,将所述第一任务的计算结果循环存放至所述多个共享缓存,并将所述第一任务的计算结果从所述多个共享缓存的数据循环输出至所述数据消费者算子;针对所述至少一个中间任务中的每个中间任务,利用所述中间代码段,将所述中间任务的计算结果循环存放至所述多个共享缓存,并将所述中间任务的计算结果从所述多个共享缓存的数据循环输出至所述数据消费者算子;利用所述第二代码段,将所述第二任务的计算结果循环存放至所述多个共享缓存,并将所述第二任务的计算结果从所述多个共享缓存的数据循环输出至所述数据消费者算子。
3、例如,在本公开上述实施例的至少一个示例提供的数据处理方法中,每个所述第二层级任务包括多个第三层级任务,每个第三层级任务的计算结果的数据量与一个所述共享缓存的容量对应;所述循环代码包括数据生产者算子对应的代码和所述数据消费者算子对应的代码,其中,所述数据生产者算子用于执行所述多组第二层级任务以得到所述多个第二层级任务的计算结果,所述数据消费者算子用于基于所述第二层级任务的计算结果执行下一步计算;所述数据生产者算子对应的代码用于将每个所述第二层级任务的多个第三层级任务的计算结果依次存放至所述多个共享缓存,并在每次将一个第三层级任务的计算结果存放至一个共享缓存之后,向所述数据消费者算子发送一个存放通知;所述数据消费者算子对应的代码用于将每个所述第二层级任务的多个第三层级任务的计算结果依次从所述多个共享缓存中取出,并在每次从一个共享缓存取出一个第三层级任务的计算结果之后,向所述数据生产者算子发送一个取出通知。
4、例如,在本公开上述实施例的至少一个示例提供的数据处理方法中,所述第一代码段包括:将所述第一任务包括的多个第三层级任务的计算结果依次存放至所述多个共享缓存,并在每次将一个第三层级任务的计算结果存放至一个共享缓存之后,向所述数据消费者算子发送与被存放的共享缓存对应的存放通知;在每次接收到一个所述存放通知后,从所述存放通知对应的共享缓存中取出数据,并向所述数据生产者算子发送一个与所述共享缓存对应的取出通知,以将所述第一任务的多个第三层级任务的计算结果全部输出至所述数据消费者算子。
5、例如,在本公开上述实施例的至少一个示例提供的数据处理方法中,所述中间代码段包括:在每次接收到一个所述取出通知后,将所述中间任务的一个第三层级任务的计算结果存放至所述取出通知对应的共享缓存,并向所述数据消费者算子发送与所述共享缓存对应的存放通知,以将所述中间任务的多个第三层级任务的计算结果全部存放至所述多个共享缓存;在每次接收到一个所述存放通知后,从所述存放通知对应的共享缓存中取出数据,并向所述数据生产者算子发送一个与所述共享缓存对应的取出通知,以将所述中间任务的多个第三层级任务的计算结果全部输出至所述数据消费者算子。
6、例如,在本公开上述实施例的至少一个示例提供的数据处理方法中,所述第二代码段包括:在每次接收到一个所述取出通知后,将所述第二任务的一个第三层级任务的计算结果存放至所述取出通知对应的共享缓存,并向所述数据消费者算子发送与所述共享缓存对应的存放通知,以将所述第二任务的多个第三层级任务的计算结果全部存放至所述多个共享缓存;在每次接收到一个所述存放通知后,从所述存放通知对应的共享缓存中取出数据,以将所述第二任务的多个第三层级任务的计算结果全部输出至所述数据消费者算子。
7、例如,在本公开上述实施例的至少一个示例提供的数据处理方法中,还包括:基于所述多个共享缓存的数量和同步粒度,确定所需的同步资源锁的数量。
8、例如,在本公开上述实施例的至少一个示例提供的数据处理方法中,所述数据粒度包括第一粒度、第二粒度和第三粒度;基于可用的多个共享缓存的总容量,确定数据粒度,包括:基于所述多个共享缓存的数量和每个所述共享缓存的容量,确定所述数据粒度。
9、例如,在本公开上述实施例的至少一个示例提供的数据处理方法中,基于所述多个共享缓存的数量和每个所述共享缓存的容量,确定所述数据粒度,包括:基于所述每个共享缓存的容量,确定第一尺寸和第二尺寸;将所述多个共享缓存的数量分解为第一数值和第二数值;将所述第一数值与所述第一尺寸的乘积作为所述第一粒度,将所述第二数值与所述第二尺寸的乘积作为所述第二粒度。
10、例如,在本公开上述实施例的至少一个示例提供的数据处理方法中,所述计算数据包括第一矩阵和第二矩阵,所述第一层级任务包括所述第一矩阵与所述第二矩阵相乘;其中,基于所述多个共享缓存的数量和每个所述共享缓存的容量,确定所述数据粒度,还包括:基于所述第一粒度、所述第二粒度、用于存放所述第一矩阵的多个第一缓存的容量和用于存放所述第二矩阵的多个第二缓存的容量,确定所述第三粒度。其中,基于所述第一粒度、所述第二粒度、用于存放所述第一矩阵的多个第一缓存的容量和用于存放所述第二矩阵的多个第二缓存的容量,确定所述第三粒度,包括:对所述多个第一缓存的容量和所述第一粒度进行运算,得到第三数值;对所述多个第二缓存的容量和所述第二粒度进行运算,得到第四数值;将所述第三数值和所述第四数值中的较小者作为所述第三粒度。
11、例如,在本公开上述实施例的至少一个示例提供的数据处理方法中,所述计算数据包括第一矩阵和第二矩阵,所述第一层级任务包括所述第一矩阵与所述第二矩阵相乘。基于所述数据粒度,将计算数据的每个维度切分为多个部分,以将所述计算数据对应的第一层级任务分为多组第二层级任务,包括:将所述第一矩阵在第一维度上基于所述第一粒度切分为多段,并将所述第一矩阵在第三维度上基于所述第三粒度切分为多段,以使所述第一矩阵被分为多个第一子矩阵;将所述第二矩阵在所述第三维度上基于所述第三粒度切分为多段,并将所述第二矩阵在第二维度基于所述第二粒度分为三段,以使所述第二矩阵被分为多个第二子矩阵,其中,所述第二维度上的三段中的第一段和最后一段均对应所述第二粒度;其中,任一所述第一子矩阵与三个对应的第二子矩阵相乘的任务可以作为一组所述第二层级任务,其中,所述三个对应的第二子矩阵分别对应所述第二维度上的三段。
12、本公开至少一个实施例提供一种数据处理装置,包括确定单元、切分单元和执行单元,确定单元配置为基于可用的多个共享缓存的总容量,确定数据粒度;切分单元配置为基于所述数据粒度,将计算数据的每个维度切分为多个部分,以将所述计算数据对应的第一层级任务分为多组第二层级任务,其中,每组所述第二层级任务包括多个第二层级任务,每个所述第二层级任务的计算结果的数据量与所述多个共享缓存的总容量对应;执行单元配置为针对每组所述第二层级任务,利用循环代码,将所述每组中的多个第二层级任务的计算结果循环存放至所述多个共享缓存,并将所述多个共享缓存的数据循环输出至数据消费者算子。
13、本公开至少一个实施例提供一种电子设备,包括处理器;存储器,存储有一个或多个计算机程序模块;其中,所述一个或多个计算机程序模块被配置为由所述处理器执行,用于实现本公开任一实施例提供的数据处理方法。
14、本公开至少一个实施例提供一种计算机可读存储介质,存储有非暂时性计算机可读指令,当所述非暂时性计算机可读指令由计算机执行时可以实现本公开任一实施例提供的数据处理方法。