CN114091085A - 用于二元操作的数据访问控制系统及其方法 - Google Patents

用于二元操作的数据访问控制系统及其方法 Download PDF

Info

Publication number
CN114091085A
CN114091085A CN202210023259.2A CN202210023259A CN114091085A CN 114091085 A CN114091085 A CN 114091085A CN 202210023259 A CN202210023259 A CN 202210023259A CN 114091085 A CN114091085 A CN 114091085A
Authority
CN
China
Prior art keywords
dimension
input data
data
last
size
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.)
Granted
Application number
CN202210023259.2A
Other languages
English (en)
Other versions
CN114091085B (zh
Inventor
郭冉
柳俊丞
郑泽康
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Oneflow Technology Co Ltd
Original Assignee
Beijing Oneflow Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Oneflow Technology Co Ltd filed Critical Beijing Oneflow Technology Co Ltd
Priority to CN202210023259.2A priority Critical patent/CN114091085B/zh
Publication of CN114091085A publication Critical patent/CN114091085A/zh
Application granted granted Critical
Publication of CN114091085B publication Critical patent/CN114091085B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/604Tools and structures for managing or administering access control systems

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Health & Medical Sciences (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Automation & Control Theory (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开涉及一种用于二元操作的数据访问控制系统及其方法。所述系统包括:数据接口组件,获取用于二元操作的第一输入数据和第二输入数据的维度数量、维度尺寸以及所处内存地址指针;维度推导组件,确定所获取的将被用于二元操作的第一输入数据和第二输入数据的形状是否相同,并对于彼此不同的第一输入数据和第二输入数据,通过数据维度充填和形状扩展,推导出输出数据的维度和维度尺寸;以及维度简化组件,通过从无需充填或已经完成充填的第一输入数据和第二输入数据删除维度尺寸为1的相同维度或合并彼此相同的相邻维度,获得维度简化的第一输入数据和第二输入数据。

Description

用于二元操作的数据访问控制系统及其方法
技术领域
本公开涉及一种数据处理技术。更具体地说,本公开涉及一种用于二元操作的数据访问控制系统及其方法。
背景技术
在深度学习普及的现在,二元操作在深度学习的网络中十分常见,包括二元的计算操作(加/减/乘/除)、二元逻辑操作(与/或/非/异或)等等。二元操作的两个输入数据可能是相同形状数据,也可能是不同形状的数据。二元操作作为一种简单操作,在深度学习中一种密集型简单运算,因此,在二元操作中,就会频繁进行数据的加载和保存,因此数据加载和保存往往是深度学习网络中的性能瓶颈,因此如何减少数据加载和保存的频度,对提高深度学习网络的性能具有现实的意义。
因此,人们需要一种能够减少数据加载和保存频度的二元操作方法和技术,从而提高数据处理系统的性能。
发明内容
本发明的一个目的是解决至少上述问题,具体而言,本公开提供一种用于二元操作的数据访问控制系统,包括:数据接口组件,获取用于二元操作的第一输入数据和第二输入数据的维度数量、维度尺寸以及所处内存地址指针;维度推导组件,确定所获取的将被用于二元操作的第一输入数据和第二输入数据的形状是否相同,并对于彼此不同的第一输入数据和第二输入数据,通过数据维度充填和形状扩展,推导出输出数据的维度和维度尺寸;以及维度简化组件,通过从无需充填或已经完成充填的第一输入数据和第二输入数据删除维度尺寸为1的相同维度或合并彼此相同的相邻维度,获得维度简化的第一输入数据和第二输入数据。
根据本公开的用于二元操作的数据访问控制系统,还包括:向量化组件,在确定第一输入数据和第二输入数据的末维的维度尺寸都大于1并且第一输入数据和第二输入数据所处内存空间的地址指针和末维的维度尺寸为2或4的整数倍的情形下,将第一输入数据和第二输入数据的末维的维度尺寸以2或4个元素为一组进行分割成多组,以便第一输入数据和第二输入数据能够在末维维度上以2或4个元素为一组同时进行向量化存取。
根据本公开的用于二元操作的数据访问控制系统,还包括:向量化组件,在确定第一输入数据末维的维度尺寸大于1而第二输入数据的末维的维度尺寸等于1并且第一输入数据所处内存空间的地址指针和末维的维度尺寸为2或4的整数倍,将第一输入数据的末维的维度以2或4个元素为一组进行分割成多组,以便第一输入数据能够在末维维度上以2或4个元素为一组进行向量化存取。
根据本公开的用于二元操作的数据访问控制系统,还包括:向量化组件,在作为二维数据的第一输入数据和第二输入数据所处内存空间的地址指针为2或4的整数倍的情况下,将第一输入数据和第二输入数据的第二维以2或4个元素为一组进行分割成多组,并在确定最后一组的元素的相对初始位置的偏移量超过第二维的尺寸时,使得该元素的第一维标记数递增1,以便第一输入数据和第二输入数据能够在第二维度上按组进行向量化存取。
根据本公开的用于二元操作的数据访问控制系统,还包括:分片组件,在确定第一输入数据和第二输入数据的沿着其中所选择维度的数据量之和大于为其分配的缓存空间的情况下,将第一输入数据和第二输入数据基于所选择维度平均分割成多个分片数据,以便沿着所选择维度的分片数据量之和小于所分配的缓存空间。
根据本公开的另一个方面,提供了一种用于二元操作的数据访问控制方法,包括:获取用于二元操作的第一输入数据和第二输入数据的维度数量、维度尺寸以及所处内存地址指针;确定所获取的将被用于二元操作的第一输入数据和第二输入数据的形状是否相同;对于彼此不同的第一输入数据和第二输入数据,通过数据维度充填和形状扩展,推导出输出数据的维度和维度尺寸;以及通过从无需充填或已经完成充填的第一输入数据和第二输入数据删除维度尺寸为1的相同维度或合并彼此相同的相邻维度,获得维度简化的第一输入数据和第二输入数据。
根据本公开的用于二元操作的数据访问控制方法,还包括:确定第一输入数据和第二输入数据的末维的维度尺寸是否都大于1;第一输入数据和第二输入数据所处内存空间的地址指针和末维的维度尺寸是否为2或4的整数倍;在确定第一输入数据和第二输入数据的末维的维度尺寸都大于1并且第一输入数据和第二输入数据所处内存空间的地址指针和末维的维度尺寸为2或4的整数倍的情形下,将第一输入数据和第二输入数据的末维的维度尺寸以2或4个元素为一组进行分割成多组,以便第一输入数据和第二输入数据能够在末维维度上以2或4个元素为一组进行向量化存取。
根据本公开的用于二元操作的数据访问控制方法,还包括:确定第一输入数据末维的维度尺寸大于1而第二输入数据的末维的维度尺寸等于1;确定第一输入数据所处内存空间的地址指针和末维的维度尺寸是否都为2或4的整数倍;在确定第一输入数据末维的维度尺寸大于1而第二输入数据的末维的维度尺寸等于1并且第一输入数据所处内存空间的地址指针和末维的维度尺寸为2或4的整数倍,将第一输入数据的末维的维度以2或4个元素为一组进行分割成多组,以便第一输入数据能够在末维维度上以2或4个元素为一组进行向量化存取。
根据本公开的用于二元操作的数据访问控制方法,还包括:确定作为二维数据的第一输入数据和第二输入数据所处内存空间的地址指针是否为2或4的整数倍;以及在作为二维数据的第一输入数据和第二输入数据所处内存空间的地址指针为2或4的整数倍的情况下,将第一输入数据和第二输入数据的第二维以2或4个元素为一组进行分割成多组,并在最后不足2或4的元素分割成为所属行的最后一组,并依次判断每个元素的第一维标记数是否超过第二维的尺寸,并在超过时使得该元素的第一维标记数递增1,以便第一输入数据和第二输入数据能够在第二维度上按组进行向量化存取。
根据本公开的用于二元操作的数据访问控制方法,还包括:在确定第一输入数据和第二输入数据的沿着其中所选择维度的数据量之和大于为其分配的缓存空间的情况下,将第一输入数据和第二输入数据基于所选择维度平均分割成多个分片数据,以便沿着所选择维度的分片数据量之和小于所分配的缓存空间。
通过根据本公开的一种用于二元操作的数据访问控制系统及方法,对数据输入数据进行存取控制,一方面通过维度简化,减少数据量以及数据运算量,另一方面通过对数据进行向量化和分块,实现向量化存取,充分利用内存带宽,将多个数据打包成更大的数据类型进行存取,计算时再一个个元素计算,因此在二元操作时提升整体性能。
本发明的其它优点、目标和特征将部分通过下面的说明体现,部分还将通过对本发明的研究和实践而为本领域的技术人员所理解。
附图说明
图1所示的是根据本公开的用于二元操作的数据访问控制系统的原理示意图。
图2所示的是根据本公开的用于二元操作的数据访问控制系统100进行向量化存取的第一实例示意图。
图3所示的是根据本公开的用于二元操作的数据访问控制系统100进行向量化存取的第二实例示意图。
图4所示的是根据本公开的用于二元操作的数据访问控制系统100进行向量化存取的第三实例示意图。
图5所示的是根据本公开的用于二元操作的数据访问控制系统100进行数据分片存取的实例示意图。
具体实施方式
下面结合实施例和附图对本发明做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,在下文中,两个二元操作的输入数据之一可以被称为第一输入数据也可以被称为第二输入数据。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
为了使本领域技术人员更好地理解本公开,下面结合附图和具体实施方式对本公开作进一步详细说明。
图1所示的是根据本公开的用于二元操作的数据访问控制系统100的原理示意图。如图1所示,数据访问控制系统100包括:数据接口组件110、维度推导组件120以及维度简化组件130。所述数据接口组件110获取用于二元操作的第一输入数据Src0和第二输入数据Src1的维度数量、维度尺寸以及所处内存地址指针。
作为二元操作的第一输入数据Src0和第二输入数据Src1,存在三种情况,第一输入数据Src0和第二输入数据Src1为张量、第一输入数据Src0为标量而第二输入数据Src1为张量或者第一输入数据Src0为张量而第二输入数据Src1为标量。因此,根据本公开的数据接口组件110包含三种数据接口组件分别为数据接口组件110-1、数据接口组件110-2以及数据接口组件110-3,其分别可以通过不同Launch来实现。
在Src0和Src1均为张量(Tensor)的情况下,通过下面的launch来实现:
void Launch(StreamContext* stream ctx,size t num src0 dims ,constint64 t* src0 dims ,const void* src0 ,size t num srcl dims ,const int64 t*srcl dims ,const void* srcl ,void* dst)
在该数据接口组件中,获取第一输入数据Src0的维度数num_src0_dims、各个维度的形状参数src0_dims以及其指针src0,第二输入数据Src1的维度数num_src1_dims、各个维度的形状参数src1_dims以及其指针src1,还获得输出数据Dst的指针。第一输入数据Src0和第二输入数据Src1可以是相同形状的,也可以是不同形状的。
在第一输入数据Src0为标量(Scalar)而第二输入数据Src1为张量的情况下,通过下面的launch来实现:
void Launc h(StreamContext* stream_ctx,Scalar src0,size_t num_srcl_dims,const_int64_t* srcl_dims ,const void* srcl,void*dst)
在该数据接口组件中,获取第二输入数据Src1的维度数num_src1_dims、各个维度的形状参数src1_dims以及其指针src1,第一输入数据src0,还获得输出数据Dst的指针。
在第一输入数据Src0为张量而第二输入数据Src1为标量(Scalar)的情况下,通过下面的launch来实现:
void Launch(StreamContext* stream_ctx,size_t num src0 dims,constint64 t* src0_dims ,const void* src0 ,Scalar srcl ,void* dst)
在该数据接口组件110中,获取第一输入数据Src0的维度数num_src0_dims、各个维度的形状参数src0_dims以及其指针src0,第二输入数据src0,还获得输出数据Dst的指针。
维度推导组件120确定所获取的将被用于二元操作的第一输入数据Src0和第二输入数据Src1的形状是否相同,并对于彼此不同的第一输入数据和第二输入数据,通过数据维度充填和形状扩展,使得第一输入数据Src0和第二输入数据Src1具有相同的维度和维度尺寸。具体而言,维度推导组件120进行输出数据的维度推导。
具体而言,在第一输入数据Src0和第二输入数据Src1的维度相同但是某个维度的维度尺寸不同的情况下(例如同一维度的元素数量不同),如果某一维度的维度尺寸为1,则可以在该数据的该维度上进行扩展(Broadcast),对于维度尺寸不为1的维度,不能进行该扩展。这些扩展在实际进行计算时通过反复调用同一元素的方式进行。举例而言,例如:若第一输入数据Src0的输入形状为 (10,3,5),第二输入数据Src1的输入形状为 (1,3,1),则会在第二输入数据Src1的第0维和第3维上扩展后进行二元操作,得到输出数据Dst的形状为(10,3,5)。或者,例如,第一输入数据Src0的输入形状src0_dims(10,2),第二输入数据Src1的输入形状为src1_dims(10,1) 维度推导组件120通过推导得到dst(10,2)。概括而言,就是dst_dim 为max(src0_dim,src1_dim),并且对为1的那个维度的维度尺寸(dim)进行扩展。或者举例而言,若第一输入数据Src0的输入形状为 (10,3,5),第二输入数据Src1的输入形状为 (2,3,2),因为任何一维上Src0和Src1不相同,但都不为1,因此无法扩展。
在第一输入数据Src0的维度num_src0_dims和第二输入数据Src1的维度num_src1_dims不相等时,则维度推导组件120首先对较小维度的dims向左充填,使得充填后第一输入数据Src0的维度num_src0_dims和第二输入数据Src1的维度num_src1_dims相同。在两者充填到相同dims后,按按照相同情形下的推导方式进行Dst维度推导。举例而言,如果第一输入数据Src0的输入形状为src0_dims(10,2,3),第二输入数据Src1的输入形状为src1_dims(2,3),则维度推导组件120先会对第二输入数据Src1的输入形状 src1_dims(2,3)向左充填1到第二输入数据Src1经过充填后的输入形状 src1_dims (1,2,3),再由第一输入数据Src0的输入形状src0_dims(10,2,3)以及第二输入数据Src1经过充填后的输入形状 src1_dims (1,2,3)推导得到dst: (10,2,3)。或者,例如,如果第一输入数据Src0的输入形状为src0_dims(2,3),第二输入数据Src1的输入形状为 src1_dims(10,2,2,1),则维度推导组件120先会对维度较小的第一输入数据Src0的输入形状src0_dims(2,3)向左充填1到第一输入数据Src0经过充填后的输入形状的src0_dims Src0(1,1,2,3),再由第一一输入数据Src0的经过充填后的输入形状 src0_dims(1,1,2,3)以及第二输入数据Src1的输入形状 src1_dims(10,2,2,1)推导得到dst(10,2,2,3)。
随后,如图1所示,维度简化组件130通过从无需充填或已经充填的第一输入数据Src0和第二输入数据Src1删除维度尺寸为1的相同维度或合并彼此相同的相邻维度,获得维度简化的第一输入数据Src0和第二输入数据Src1。通俗而言,维度简化组件130就是遍历两个输入数据中的所有维度,然后去掉两个输入数据中对应维度且维度尺寸为1的维度。举例来说,如果第一输入数据Src0的输入形状为src0_dims(10,1,5),第二输入数据Src1的输入形状为 src1_dims(10,1,1),则两者对应的第二维的维度尺寸都为1,则可以同时删除第二维,从而使得经过删除处理后的第一输入数据Src0的输入形状为src0_dims(10,5),第二输入数据Src1的输入形状为 src1_dims s(10,1)。这样就是的输入数据得到维度简化,使得随后的二元操作变得简单,从而减少了二元操作中存取数据的频度,提高了二元操作的效率,也就提升了整体性能。在另一种情况下维度简化组件130遍历两个输入数据中的所有维度,基于遍历所维度信息,可以对两个输入数据中的对应相邻且形状尺寸形同的两个维度进行合并成一个维度。举例而言,如果第一输入数据Src0的输入形状为src0_dims(10,2,3,5,1),第二输入数据Src1的输入形状为 src1_dims(2,3,1,1)。在进行推导过程中进行充填之后,第二输入数据Src1的经过充填后的输入形状为 src1_dims(1,2,3,1,1)。此时,第一输入数据Src0的输入形状src0_dims(10,2,3,5,1)和第二输入数据Src1的经过充填后的输入形状src1_dims(1,2,3,1,1)在各自第2维度和第3维度是具有对应相等的维度尺寸,因此可以将两者各自的第2和3维度合并为一个维度,其尺寸为两个相邻维度的尺寸乘积,例如为6,这样这两个维度的总元素数量没有发生变化。经过合并之后,第一输入数据Src0的合并后的输入形状为src0_dims(10,6,5,1),第二输入数据Src1的合并后的输入形状为src1_dims(1,6,1,1)。需要指出的是,在合并的同时,可以同时进行维度删除,例如第一输入数据Src0的合并后的输入形状src0_dims(10,6,5,1)与第二输入数据Src1的合并后的输入形状src1_dims(1,6,1,1)在第四维度的尺寸都为1,因此可以删除各自的第4维度,因此通过合并和删除后的维度数量为3维,即第一输入数据Src0的维度合并和删除后的输入形状为src0_dims(10,6,5),第二输入数据Src1的维度合并和删除后的输入形状为 src1_dims(1,6,1)。在此基础上,维度推导组件120再基于第一输入数据Src0的维度合并和删除后的输入形状src0_dims(10,6,5)和第二输入数据Src1的维度合并和删除后的输入形状src1_dims(1,6,1)基础上推导出输出数据的维度和形状为dst_dims:(10,6,5)。
这样,通过维度填充以及维度简化,使得输入数据在被用于进行二元操作时数据的存取频度降低,极大地缩减二元操作的计算量,从而显著提高二元操作的速度,提升了包含二元操作的数据处理的速度和性能。
可选择地,如图1所述,本公开的用于二元操作的数据访问控制系统100还包括向量化组件140。由于多维数据在进行存储过程中,都展开成一维进行存储,因此在进行存取时能够依据末维进行数据连续存取。为此,本公开可以按照末维进行数据向量化存取,充分利用内存带宽减少数据的存储的频度,使得一次存取的数据量更大。为此,本公开的向量化组件140在第一输入数据Src0和第二输入数据Src1的末维的维度尺寸相等且都大于1,并且第一输入数据Src0和第二输入数据Src1所处内存空间的地址指针和末维的维度尺寸为2或4的整数倍的情形下,将第一输入数据和第二输入数据的末维的维度尺寸以2或4个元素为一组进行分割成多组,以便第一输入数据和第二输入数据能够在末维维度上以2或4个元素为一组同时进行向量化存取。
图2所示的是根据本公开的用于二元操作的数据访问控制系统100进行向量化存取的第一实例示意图。如图2所示,作为一个例子,显示了第一输入数据Src0和第二输入数据Src1的最后一维,包含有8个元素。在实际数据中,维度可以为多维,为方便描述起见,仅仅显示一维。为了一次存取更大的数据量,首先需要数据存储的地址指针数量为一次存取数据量的整数倍。因此,向量化组件140首先基于第一输入数据的地址空间的指针src0以及第二输入数据的地址空间的指针src1是否是2或4的整数倍,如果是,则确定第一输入数据Src0和第二输入数据Src1的最后一维的维度尺寸是否为2或4的整数倍。如果是2或4的整数倍,则优先选择4作为向量化的尺寸(pack_size),即将第一输入数据Src0和第二输入数据Src1的最后一维的维度尺寸从8修改为2。如果不是4是的倍数是2的倍数,则将将第一输入数据Src0和第二输入数据Src1的最后一维的维度尺寸从8修改为4。通过这种方式对输入数据的存取控制,使得随后的二元操作的逻辑节点在进行二元操作时在逐一读取和存取元素时,一次可以针对最后一维读取2个或4个元素构成的向量化数据,从而极大地减少了二元操作在进行数据存取是的频度。需要指出的是,尽管这里对数据进行了向量化,但是在实际计算时,还是针对每个向量化数据中的每个元素进行逐一二元操作。在进行向量化处理后,维度推导组件120还是需要进行重新推导,获得修改后的输出数据的维度形状。图2中显示的向量化尺寸为2。意味着每次逻辑节点在实际进行二元操作时从第一输入数据的存储空间和第二输入数据的存储空间读取的是包含2个元素的向量化数据,产生的也是包含2个元素的向量化数据。
图3所示的是根据本公开的用于二元操作的数据访问控制系统100进行向量化存取的第二实例示意图。向量化组件140在确定第一输入数据Src0末维的维度尺寸大于1而第二输入数据Src1的末维的维度尺寸等于1并且第一输入数据所处内存空间的地址指针和末维的维度尺寸为2或4的整数倍,将第一输入数据的末维的维度以2或4个元素为一组进行分割成多组,以便第一输入数据能够在末维维度上以2或4个元素为一组进行向量化存取。如图3所示,,作为一个例子,显示了第一输入数据Src0和第二输入数据Src1为二维数据,最为第一输入数据Src0的末维的每一行包含有8个元素。在实际数据中,维度可以为多维。第二输入数据Src1的末维(每一行)的维度尺寸等于1,即每行一个元素。为了一次存取第一输入数据Src0的更大的数据量,首先需要第一输入数据Src0存储的地址指针数量为一次存取数据量的整数倍。因此,向量化组件140首先基于第一输入数据的地址空间的指针src0是否是2或4的整数倍,如果是,则确定第一输入数据Src0的最后一维的维度尺寸是否为2或4的整数倍。如果是2或4的整数倍,则优先选择4作为向量化的尺寸(pack_size),即将第一输入数据Src0的最后一维的维度尺寸从8修改为2。如果不是4的倍数而是2的倍数,则将第一输入数据Src0的最后一维的维度尺寸从8修改为4。通过这种方式对第一输入数据的存取,使得随后的二元操作的逻辑节点在进行二元操作时在逐一读取和存储元素时,一次可以针对最后一维读取2个或4个元素构成的向量化数据,从而极大地减少了二元操作在进行数据存取是的频度。需要指出的是,尽管这里对数据进行了向量化,但是在实际计算时,还是针对每个向量化数据中的每个元素进行逐一二元操作。在进行向量化处理后,维度推导组件120还是需要进行重新推导,获得修改后的输出数据的维度形状。图3中显示的向量化尺寸为2,意味着每次逻辑节点在实际进行二元操作时从第一输入数据的存储空间和第二输入数据的存储空间读取的是包含2个元素的向量化数据,产生的也是包含2个元素的向量化数据。由于第二输入数据的末维的尺寸为1,因此无需对其进行向量化存取控制。
图4所示的是根据本公开的用于二元操作的数据访问控制系统100进行向量化存取的第三实例示意图。在确定第一输入数据和/或第二输入数据为二维输入数据的情况下,向量化组件140在作为二维数据的第一输入数据和第二输入数据所处内存空间的地址指针为2或4的整数倍的情况下,直接将第一输入数据和/或第二输入数据的第二维以2或4个元素为一组进行分割成多组,并在确定最后一组的元素的相对初始位置的偏移量超过第二维的尺寸时,使得该元素的第一维标记数递增1,以便第一输入数据和第二输入数据能够在第二维度上按组进行向量化存取。如图4所示,在输入数据为二维数据的情况下无需要求输入数据的最后一维能被向量化尺寸(pack_size)整除,只需要考虑数据的指针是否对齐,其内存指针数是否为向量化尺寸的整数倍。以图4所示的二维数据,以float数据类型为例,假设形状为(4,19),第二维,即行的尺寸为19,不能被2或4整除。若要求最后一维不能被pack_size整除,则只能得到pack_size为1,只能一次读取一个元素,不能有效利用内存带宽。若不要求最后一维能被向量化尺寸整除,则可以使向量化尺寸为4,每次读4个元素,可以更好利用内存带宽。对于最后一维不能被整除的情况,被向量化(pack)的几个元素存在不属于同一行的情形。因此,在以向量化尺寸一次存储多个元素是,可能会取出的数据不属于同一行。这时候,在进行存取时,需要判断每个元素属于这个维度中的哪一行,以确定其具体位置。因此,需要在按照向量化尺寸读出一组元素来后,需要对每个向量化尺寸的元素组的第1个元素求得行id(row_id)和列id(col_id),然后推算其它元素的行id和行id。由此,在计算得到每个向量化尺寸的一组元素中的第一个元素的行id( first_row_id) 和列id(first_col_id)后,每个元素需要判断(first_col_id + i > cols),是否超出了该行的大小,如果超出了cols大小就加一行row_id = first_row_id + 1, col_id = first_col_id+ i - cols - 1。
具体到如图4所示的,以向量化数据5为例,第1个元素相对于起始位置的偏移量(offset)为17,则其列id为17 % cols = 17以及行id为17 / cols = 0,得到它的first_row_id=0, first_col_id = 17。 第2个元素判断first_col_id+1< cols,因此row_id为0,col_id为18。第4个元素判断first_col_id
+ 3 = 20 > cols,因此row_id = first_row_id + 1 = 1, col_id = first_col_id + 3 - cols - 1 = 0,得到第四个元素的row_id 和col_id。因此在进行二元操作时,第4个元素对对应的是另一个输入数据的对应位置元素。由此,在进行二维数据的存取是,通过在获取每个向量化尺寸元素组的同时推导组内每个元素的位置,可以无需考虑第二维的维度尺寸是否为2或4的倍数,就可以直接按照4个一组的方式进行数据存取,只需要基于偏移量获取每个元素的行列位置即可。这就使得二元操作的输入数据能够以最大的向量化尺寸进行存取。
返回参见图1。如图1所示,根据本公开的用于二元操作的数据访问控制系统100还包括分片组件150,其在确定第一输入数据Src0和第二输入数据Src1的沿着其中所选择维度的数据量之和大于为其分配的缓存空间的情况下,将第一输入数据Src0和第二输入数据Src1基于所选择维度平均分割成多个分片数据,以便沿着所选择维度的分片数据量之和小于所分配的缓存空间。图5所示的是根据本公开的用于二元操作的数据访问控制系统100进行数据分片存取的实例示意图。通俗而言,就是将输入数据沿着其较大的维度进行分割,使得输入数据分割成多个小的分片数据,以便适应缓存空间大小,从而减少重复获取同一数据的情况。具体而言,如图5所示,在如上所述对输数据进行向量化处理并修改dims之后,src0_dims为(m,n), src1_dims为(1,n),得到dst_dims为(m,n),对于每个位置dst[i][j]的计算,需要读src0 [i][ j]和srcl [0] [j] ,src1虽然只有n个数,但是需要读m * n次。如果n的值不大时,在第一行处理完后,后面的计算需要的src1的值通常能在本地缓存中找到,不需要再次访问内存空间进行读取,虽然src1 的n个元素需要读m * n 次,但是总开销是n,没有多余的数据读取。但是在n特别大时,例如在读取第一输入数据的第一行的n个元素和第二输入数据n个元素就已经几乎占满为本次二元操作分配的缓存空间时,如果在对第一输入数据的第二行的n个元素与第二输入数据n个元素进行二元操作时,如果在读取了第一输入数据的第二行的n个元素过程中,缓存空间就已经被充满的情况下,缓存的第二输入数据n个元素可能就完全或部分被驱逐出所述缓存空间,即后读入的数据缓存会将前面读入的数据驱逐出缓存。所以会出现在第一行处理完后,第二行使用时需要读src1的值,但是在缓存中找不到,需要重新读取的情况。如果需要重新读取第二输入数据,就会导致重复开销。为此,本公开为了消除对第二输入数据的重复读取开销,沿着最后一维对第一输入数据Src0和第二输入数据Src1进行分片分割处理,这样就可以在进行第一输入数据Src0和第二输入数据Src1进行逐分片的存取,使得第一输入数据Src0成为Src0-0,Src0-1…;第二输入数据Src1成为Src1-0、Src1-1…,如图5所述,将巨大维度的n分为多个比较小的块,每次处理一块,因为每次数据的比较小,不会出现一行中后读入的数据将先读入的数据驱逐出缓存的情况,因此在第一次读完后,后续每次读src1的值都能在缓存中找到,没有多余的数据读取。分片尺寸大小可以根据实际需要或根据缓存空间的大小进行适应性配置。
需要指出的是,尽管在上面的描述中按照一定的顺序描述了维度推导组件120以及维度简化组件130以及向量化组件140的运行过程,但是在实际使用中,彼此之间并没有时间上的先后顺序,可以在无需充充填维度的情况下,先进行维度简化后进行维度推导。在需要进行向量化处理的情况下,在进行向量化处理之后进行维度推导。可选择地,在进行维度简化之后,可以重新进行维度推导。
在本公开的数据访问控制系统100的访问控制下,对于输出数据的每个元素,由它的偏移(offset)得到在ndims上对应的dst_nd_index。再根据dst_nd_index得到src0和src1的nd_index 。如果第一第一输入数据Src0的形状为(2,5)第二输入数据Src1形状为(2,1)。推导出的dst的形状为(2,5),其第7个元素,偏移量为7,由此可以得到该元素的dst_nd_index为(1,1),遍历2个dim,由dst_nd_index得到src0和src1的nd_index,如果某个维度上src_dim大小是1,则设src_index[i]=0。对于第1个维度, src0_dims的大小是1 ,将src0_nd_i ndex[0]设为0,对于第2个维度, src1_dims 的大小1,将src1_nd_index[1]设为0,最终得到src0_nd_indx为(0,1), src1_nd_index为(1.0),再由src_nd_index得到在内存中的偏移offset,取出值参与后续计算。在计算过程中涉及频繁的offset到nd_index的相互转换,借助NdIndexOffsetHelper实现。对于index大小在in t32表示范围内的情况,我们采用int32作为indexType,因为使用int32数据类型作index在做坐标换算时相对int64类型速度更快。
本公开从向量化数据存取可以更好的利用内存带宽,提升整体性能角度出发,对数据的访问进行控制,通过维度简化降低二元操作中数据运算量,以及通过数据向量化在内存带宽的范围内尽可能提高单次数据存取的数据量,从而进一步降低数据存取的频次,由此提高数据访问存取效率。此外,在Kernel执行时如果数据量小于int32表示范围则采用int32数据类型作为index类型,从而减少坐标换算的开销。
以上结合具体实施例描述了本公开的基本原理,但是,需要指出的是,对本领域的普通技术人员而言,能够理解本公开的方法和装置的全部或者任何步骤或者部件,可以在任何计算装置(包括处理器、存储介质等)或者计算装置的网络中,以硬件、固件、软件或者它们的组合加以实现,这是本领域普通技术人员在阅读了本公开的说明的情况下运用他们的基本编程技能就能实现的。
因此,本公开的目的还可以通过在任何计算装置上运行一个程序或者一组程序来实现。所述计算装置可以是公知的通用装置。因此,本公开的目的也可以仅仅通过提供包含实现所述方法或者装置的程序代码的程序产品来实现。也就是说,这样的程序产品也构成本公开,并且存储有这样的程序产品的存储介质也构成本公开。显然,所述存储介质可以是任何公知的存储介质或者将来所开发出来的任何存储介质。
还需要指出的是,在本公开的装置和方法中,显然,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。并且,执行上述系列处理的步骤可以自然地按照说明的顺序按时间顺序执行,但是并不需要一定按照时间顺序执行。某些步骤可以并行或彼此独立地执行。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。

Claims (10)

1.一种用于二元操作的数据访问控制系统,包括:
数据接口组件,获取用于二元操作的第一输入数据和第二输入数据的维度数量、维度尺寸以及所处内存地址指针;
维度推导组件,确定所获取的将被用于二元操作的第一输入数据和第二输入数据的形状是否相同,并对于彼此不同的第一输入数据和第二输入数据,通过数据维度充填和形状扩展,推导出输出数据的维度和维度尺寸;以及
维度简化组件,通过从无需充填或已经完成充填的第一输入数据和第二输入数据删除维度尺寸为1的相同维度或合并彼此相同的相邻维度,获得维度简化的第一输入数据和第二输入数据。
2.根据权利要求1所述的用于二元操作的数据访问控制系统,还包括:
向量化组件,在确定第一输入数据和第二输入数据的末维的维度尺寸都大于1并且第一输入数据和第二输入数据所处内存空间的地址指针和末维的维度尺寸为2或4的整数倍的情形下,将第一输入数据和第二输入数据的末维的维度尺寸以2或4个元素为一组进行分割成多组,以便第一输入数据和第二输入数据能够在末维的维度上以2或4个元素为一组进行向量化存取。
3.根据权利要求1所述的用于二元操作的数据访问控制系统,还包括:
向量化组件,在确定第一输入数据末维的维度尺寸大于1而第二输入数据的末维的维度尺寸等于1并且第一输入数据所处内存空间的地址指针和末维的维度尺寸为2或4的整数倍,将第一输入数据的末维的维度以2或4个元素为一组进行分割成多组,以便第一输入数据能够在末维的维度上以2或4个元素为一组进行向量化存取。
4.根据权利要求1所述的用于二元操作的数据访问控制系统,还包括:
向量化组件,在作为二维数据的第一输入数据和第二输入数据所处内存空间的地址指针为2或4的整数倍的情况下,将第一输入数据和第二输入数据的第二维以2或4个元素为一组进行分割成多组,并在确定最后一组的元素的相对初始位置的偏移量超过第二维的尺寸时,使得该元素的第一维标记数递增1,以便第一输入数据和第二输入数据能够在第二维度上按组进行向量化存取。
5.根据权利要求1所述的用于二元操作的数据访问控制系统,还包括:
分片组件,在确定第一输入数据和第二输入数据的沿着其中所选择维度的数据量之和大于为其分配的缓存空间的情况下,将第一输入数据和第二输入数据基于所选择维度平均分割成多个分片数据,以便沿着所选择维度的分片数据量之和小于所分配的缓存空间。
6.一种用于二元操作的数据访问控制方法,包括:
获取用于二元操作的第一输入数据和第二输入数据的维度数量、维度尺寸以及所处内存地址指针;
确定所获取的将被用于二元操作的第一输入数据和第二输入数据的形状是否相同;
对于彼此不同的第一输入数据和第二输入数据,通过数据维度充填和形状扩展,推导出输出数据的维度和维度尺寸;以及
通过从无需充填或已经完成充填的第一输入数据和第二输入数据删除维度尺寸为1的相同维度或合并彼此相同的相邻维度,获得维度简化的第一输入数据和第二输入数据。
7.根据权利要求6所述的用于二元操作的数据访问控制方法,还包括:
确定第一输入数据和第二输入数据的末维的维度尺寸是否都大于1;
第一输入数据和第二输入数据所处内存空间的地址指针和末维的维度尺寸是否为2或4的整数倍;
在确定第一输入数据和第二输入数据的末维的维度尺寸都大于1并且第一输入数据和第二输入数据所处内存空间的地址指针和末维的维度尺寸为2或4的整数倍的情形下,将第一输入数据和第二输入数据的末维的维度尺寸以2或4个元素为一组进行分割成多组,以便第一输入数据和第二输入数据能够在末维维度上以2或4个元素为一组进行向量化存取。
8.根据权利要求6所述的用于二元操作的数据访问控制方法,还包括:
确定第一输入数据末维的维度尺寸大于1而第二输入数据的末维的维度尺寸等于1;
确定第一输入数据所处内存空间的地址指针和末维的维度尺寸是否都为2或4的整数倍;
在确定第一输入数据末维的维度尺寸都大于1和第二输入数据的末维的维度尺寸等于1并且第一输入数据所处内存空间的地址指针和末维的维度尺寸为2或4的整数倍,将第一输入数据的末维的维度以2或4个元素为一组进行分割成多组,以便第一输入数据能够在末维的维度上以2或4个元素为一组进行向量化存取。
9.根据权利要求6所述的用于二元操作的数据访问控制方法,还包括:
确定作为二维数据的第一输入数据和第二输入数据所处内存空间的地址指针是否为2或4的整数倍;以及
在作为二维数据的第一输入数据和第二输入数据所处内存空间的地址指针为2或4的整数倍的情况下,将第一输入数据和第二输入数据的第二维以2或4个元素为一组进行分割成多组,并在最后不足2或4的元素分割成为所属行的最后一组,并依次判断每个元素的第一维标记数是否超过第二维的尺寸,并在超过时使得该元素的第一维标记数递增1,以便第一输入数据和第二输入数据能够在第二维度上按组进行向量化存取。
10.根据权利要求6所述的用于二元操作的数据访问控制方法,还包括:
在确定第一输入数据和第二输入数据的沿着其中所选择维度的数据量之和大于为其分配的缓存空间的情况下,将第一输入数据和第二输入数据基于所选择维度平均分割成多个分片数据,以便沿着所选择维度的分片数据量之和小于所分配的缓存空间。
CN202210023259.2A 2022-01-10 2022-01-10 用于二元操作的数据访问控制系统及其方法 Active CN114091085B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210023259.2A CN114091085B (zh) 2022-01-10 2022-01-10 用于二元操作的数据访问控制系统及其方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210023259.2A CN114091085B (zh) 2022-01-10 2022-01-10 用于二元操作的数据访问控制系统及其方法

Publications (2)

Publication Number Publication Date
CN114091085A true CN114091085A (zh) 2022-02-25
CN114091085B CN114091085B (zh) 2022-04-15

Family

ID=80308465

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210023259.2A Active CN114091085B (zh) 2022-01-10 2022-01-10 用于二元操作的数据访问控制系统及其方法

Country Status (1)

Country Link
CN (1) CN114091085B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106909320A (zh) * 2017-02-20 2017-06-30 北京中科睿芯科技有限公司 一种多维数据扩充传输的方法、装置以及系统
CN110555522A (zh) * 2019-09-23 2019-12-10 北京中科寒武纪科技有限公司 数据处理方法、装置、计算机设备和存储介质
CN112488305A (zh) * 2020-12-22 2021-03-12 西北工业大学 一种神经网络存储组织结构及其可配置管理方法
WO2021140867A1 (ja) * 2020-01-10 2021-07-15 株式会社日立製作所 ストレージシステム、及び、記憶制御方法
CN113836049A (zh) * 2021-09-17 2021-12-24 海飞科(南京)信息技术有限公司 存储器访问方法和电子装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106909320A (zh) * 2017-02-20 2017-06-30 北京中科睿芯科技有限公司 一种多维数据扩充传输的方法、装置以及系统
CN110555522A (zh) * 2019-09-23 2019-12-10 北京中科寒武纪科技有限公司 数据处理方法、装置、计算机设备和存储介质
WO2021140867A1 (ja) * 2020-01-10 2021-07-15 株式会社日立製作所 ストレージシステム、及び、記憶制御方法
CN112488305A (zh) * 2020-12-22 2021-03-12 西北工业大学 一种神经网络存储组织结构及其可配置管理方法
CN113836049A (zh) * 2021-09-17 2021-12-24 海飞科(南京)信息技术有限公司 存储器访问方法和电子装置

Also Published As

Publication number Publication date
CN114091085B (zh) 2022-04-15

Similar Documents

Publication Publication Date Title
US6381740B1 (en) Method and system for incrementally improving a program layout
KR102572757B1 (ko) 집약성을 개선하기 위한 머신 학습 모델들의 수정
US20180121388A1 (en) Symmetric block sparse matrix-vector multiplication
CN113313247B (zh) 基于数据流架构的稀疏神经网络的运算方法
CN114064984B (zh) 一种基于稀疏数组链表的世界状态增量更新方法及装置
CN109992210A (zh) 数据存储方法、装置及电子设备
CN112015765B (zh) 基于缓存价值的Spark缓存淘汰方法及系统
US5333291A (en) Stride enhancer for high speed memory accesses with line fetching mode and normal mode employing boundary crossing determination
CN112085644A (zh) 多列数据排序方法、装置、可读存储介质和电子设备
CN112070652A (zh) 数据压缩、解压方法、可读存储介质和电子设备
CN109993293A (zh) 一种适用于堆叠式沙漏网络的深度学习加速器
CN111310115B (zh) 数据处理方法、装置及芯片、电子设备、存储介质
CN116107754A (zh) 一种面向深度神经网络的内存管理方法及系统
US7530063B2 (en) Method and system for code modification based on cache structure
CN114091085B (zh) 用于二元操作的数据访问控制系统及其方法
CN116150563B (zh) 一种业务执行方法、装置、存储介质及电子设备
CN1319801A (zh) 用于循环冗余校验的有效计算方法及装置
Hogg et al. An indefinite sparse direct solver for large problems on multicore machines
CN103514107B (zh) 高性能数据缓存系统和方法
CN111783984A (zh) 一种神经网络运算方法、装置、设备及存储介质
CN113128688B (zh) 通用型ai并行推理加速结构以及推理设备
CN111783977B (zh) 一种基于分区域梯度更新的神经网络训练过程中间值存储压缩方法和装置
CN114218136A (zh) 一种面向脉动阵列的面积友好存储地址映射方法
CN112269947A (zh) 空间文本数据的缓存方法、装置、电子设备及存储介质
CN112068948A (zh) 数据散列方法、可读存储介质和电子设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant