原子访存方法、存储介质、计算机设备、装置和系统与流程

专利2022-06-29  69


本申请涉及信息处理技术领域,特别是涉及一种原子访存方法、存储介质、计算机设备、装置和系统。



背景技术:

随着人工智能领域的兴起,多层神经网络在模式识别、自动控制、生物、医学等领域的应用越来越广泛,也成功地解决了许多现代计算机难以解决的实际问题,表现出来良好的智能特性。

由于神经网络的数据较为庞大,处理器内部的存储能力有限,神经网络的运算数据以及处理器在计算过程中生成的中间数据通常不会全部存储在处理器的片上存储中,有一部分数据需要临时存放在大容量的片外存储中,这就需要处理器核在计算过程中频繁的访问片外存储,进行数据读写。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种能够通过调整访存顺序,增加对片外地址的读写覆盖步骤,同时能够满足多个操作数原子访存操作的原子访存方法、存储介质、计算机设备、装置和系统。

第一方面,提供一种原子访存方法,所述方法包括:

获取执行原子指令所需的源操作数个数;

根据所述源操作数个数,获取片外源操作数和片上源操作数;

获取所述片外源操作数对应的片外地址;

根据所述片外地址,读取访存数据;

在第一时间周期内将所述访存数据存储至所述片上源操作数对应的片上地址;

在第二时间周期内将所述片上地址中的数据存储至所述片外地址。

第二方面,本申请实施例提供了一种原子访存方法,所述方法包括:

获取执行原子指令所需的源操作数个数;

根据所述源操作数个数,获取片外源操作数和片上源操作数;

获取所述片外源操作数对应的片外地址;

根据所述片外地址,读取所述片外地址中存储的访存数据中的一段访存数据段;

在第一时间周期内将所述访存数据段存储至所述片上地址;

在第二时间周期内将所述片上地址中的所述访存数据段存储至所述片外地址;

再次读取所述片外地址中存储的访存数据中的另一段访存数据段;

在第一时间周期内将所述另一段访存数据段存储至所述片上地址;

在第二时间周期内将所述片上地址中的所述另一段访存数据段存储至所述片外地址,直到读取完所述片外地址中存储的访存数据。

第三方面,提供另一种原子访存方法,所述方法包括:

执行计算指令,并得到所述计算指令的运算结果;

获取执行原子指令所需的源操作数个数;

根据所述源操作数个数,获取片外源操作数和片上源操作数;

获取所述片外源操作数对应的片外地址;

将所述运算结果以及所述片上源操作数中的数据存储至所述片外地址。

第四方面,本申请实施例提供了另一种原子访存方法,所述方法包括:

执行计算指令,并得到所述计算指令的运算结果;

获取执行原子指令所需的源操作数个数;

根据所述源操作数个数,获取片外源操作数和片上源操作数;

获取所述片外源操作数对应的片外地址;

将所述运算结果以及所述片上源操作数中的数据段存储至所述片外地址;

将所述片上源操作数中的另一段数据段存储至所述片外地址,直到所述片上源操作数中的全部数据都存储至所述片外地址。

第五方面,本申请实施例提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面至第四方面所述的步骤。

第六方面,本申请实施例提供了一种原子访存装置,所述装置包括:

源操作数个数获取模块,用于获取执行原子指令所需的源操作数个数;

源操作数获取模块,用于根据所述源操作数个数,获取片外源操作数和片上源操作数;

片外地址获取模块,用于获取片外源操作数对应的片外地址;

访存数据读取模块,用于根据所述片外地址,读取所述访存数据;

第一存储模块,用于在第一时间周期内将所述访存数据存储至所述片上源操作数对应的片上地址;

第二存储模块,用于在第二时间周期内将所述片上地址中的数据存储至所述片外地址。

第七方面,本申请实施例提供了另一种原子访存装置,所述装置包括:

运算结果获取单元,用于执行计算指令,并得到所述计算指令的运算结果;

源操作数个数获取模块,用于获取执行原子指令所需的源操作数个数;

源操作数获取模块,用于根据所述源操作数个数,获取片外源操作数和片上源操作数;

片外地址获取模块,用于获取所述片外源操作数对应的片外地址;

存储模块,用于将所述运算结果以及所述片上源操作数中的数据存储至所述片外地址。

第八方面,本申请实施例提供了一种原子访存系统,所述系统包括:存储单元、转发单元、数据i/o单元、处理单元以及存储在所述存储单元上并可在所述处理单元上运行的计算机程序,所述转发单元连接于所述存储单元与所述数据i/o单元之间;所述存储单元,用于存储多个源操作数中的输入数据以及所述输入数据中的标量数据;所述转发单元,用于将所述数据i/o单元中的数据发送至所述存储单元;所述处理单元,用于执行拆分算法,且所述处理单元执行所述计算机程序时实现如第一方面至第四方面所述的原子访存方法的步骤。

第九方面,本申请实施例提供了一种原子访存系统,所述系统包括:存储单元、转发单元、数据i/o单元、第一处理单元、第二处理单元以及存储在所述存储单元上并可在所述第一处理单元和所述第二处理单元上运行的计算机程序,所述第二处理单元包括多核处理单元,所述转发单元连接于所述存储单元与所述数据i/o单元之间;所述存储单元,用于存储多个源操作数中的输入数据以及所述输入数据中的标量数据;所述转发单元,用于将所述数据i/o单元中的数据发送至所述存储单元;所述第一处理单元,用于执行拆分算法;所述第一处理单元和所述第二处理单元执行所述计算机程序时实现如第一方面至第四方面所述的原子访存方法的步骤。

上述原子访存方法、存储介质、计算机设备、装置和系统中,在第一时间周期内将片外地址中访存数据存储至所述片上存储单元,在第二时间周期内将片上存储单元中的数据通过转发单元直接存储至片外系统内存,从而实现对片外地址的读写覆盖,保证当前处理器核的原子性操作。

另外,上述原子访存方法、存储介质、计算机设备、装置和系统,还可以将存储单元中的运算结果以及片上多个源操作数中的数据全部存储至片外系统内存,从而实现对单一源操作数原子访存操作的功能扩展,即实现多个源操作数的原子访存操作。

附图说明

图1为一个实施例中原子访存系统1000的结构框架图;

图2为一个实施例中原子访存系统2000的结构框架图;

图3为一个实施例中原子访存系统1000的工作流程示意图;

图4为一个实施例中原子访存方法的流程示意图;

图5为另一个实施例中原子访存方法的流程示意图;

图6为一个实施例中原子访存装置的结构框架图;

图7为另一个实施例中原子访存装置的结构框架图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请的说明书和权利要求书及所述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选的还包括没有列出的步骤或单元,或可选的还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。

神经网络处理器中,大量的计算资源以及连接这些资源的网络通常集成在单芯片上,芯片中的原子访存系统可以通过硬件接口接入该芯片中,使用共享的网络资源和目的模块进行通信。其中,片上存储指的是将待处理数据存储在处理器内部的存储单元中;片外存储指的是将待处理数据存储在处理器外部的系统内存中。

在一个实施例中,如图1所示,提供了一种原子访存系统1000,该原子访存系统包括:存储单元1001、转发单元1002、数据i/o单元1003、处理单元1004以及存储在存储单元1001上并可在处理单元1004上运行的计算机程序。存储单元1001,用于存储多个源操作数中的输入数据以及输入数据中的标量数据;转发单元1002连接于存储单元1001与数据i/o单元1003之间,用于将数据i/o单元1003中的数据发送至存储单元1001;还用于将存储单元1001中的数据发送至数据i/o单元1003;处理单元1004,用于执行拆分算法,且处理单元1004执行计算机程序时实现原子访存方法的步骤。

其中,存储单元1001中包括目的地址以及多个源操作数的地址,存储单元1001用于接收数据i/o单元1003发送的访存数据,还用于存储处理单元1004的执行结果(例如:运算单元通过计算得到的计算结果)。

其中,转发单元1002串联于存储单元1001和数据i/o单元1003之间,转发单元1002用于将存储单元1001中的数据不经过处理单元1004,直接发送至数据i/o单元1003,经数据i/o单元1003进行片外存储,存储至系统内存1005。

其中,数据i/o单元1003用于进行片上和片外的数据转发,即进行存储单元1001和系统内存1005之间的数据转发。

在一个实施例中,如图2所示,提供了一种原子访存系统2000,该原子访存系统包括:存储单元2001、转发单元2002、数据i/o单元2003、第一处理单元2004a、第二处理单元2004b以及存储在存储单元2001上并可在第一处理单元2004a和第二处理单元2004b上运行的计算机程序,第二处理单元2004b包括多核处理单元。存储单元2001,用于存储多个源操作数中的输入数据以及输入数据中的标量数据;转发单元2002连接于存储单元2001与数据i/o单元2003之间,用于将数据i/o单元2003中的数据发送至存储单元2001;还用于将存储单元2001中的数据发送至数据i/o单元2003;处理单元2004,用于执行拆分算法,且处理单元2004执行计算机程序时实现原子访存方法的步骤。

其中,存储单元2001中包括目的地址以及多个源操作数的地址,存储单元2001用于接收数据i/o单元2003发送的访存数据,还用于存储处理单元2004的执行结果(例如:运算单元通过计算得到的计算结果)。

其中,转发单元2002串联于存储单元2001和数据i/o单元2003之间,转发单元2002用于将存储单元2001中的数据不经过处理单元2004a和处理单元2004b,直接发送至数据i/o单元2003,经数据i/o单元2003进行片外存储,存储至系统内存2005。

其中,数据i/o单元2003用于进行片上和片外的数据转发,即进行存储单元2001和系统内存2005之间的数据转发。

上述原子访存系统中,通过在存储单元和数据i/o单元之间设置转发单元,使存储单元中的源操作数不需要经过处理单元执行运算,直接通过转发单元发送至数据i/o单元,从而实现与系统内存的数据交互;同时该系统支持多个源操作数的原子访存操作。

在其中一个实施例中,如图3所示,若执行单一源操作数(src0)的读写操作,也就是说,执行从片外系统内存1005中获取访存数据,存储至片上存储单元1001,并将存储单元1001中的数据写回系统内存1005的原子访存操作。例如:执行原子指令atomicmonoload和atomicmonostore,在如图1所示的原子访存系统1000中,需执行dst=load(src0)和src0=store(src0)两个步骤,其中,dst表示片上目的地址;src0表示片外地址;dst=load(src0)表示一个时钟周期的前半拍将src0中的数据读取至dst;src0=store(src0)表示一个时钟周期的后半拍将dst中的数据写入src0中,并在src0的后续内存空间连续存放dst。具体工作流程为:数据i/o单元1003从片外地址a[0]中读取数据,并将该数据存储至片上地址d[0]中;存储单元1001通过转发单元1002将片上地址d[0]中的数据重新写回片外地址a[0]。

在其中一个实施例中,请一并参阅图3,数据i/o单元1003将d[0]中的数据发送至处理单元1004中进行运算,处理单元1004中的主处理单元根据解析后的多个原子运算指令,将接收到的数据进行转发和计算,并将计算结果返回至d[0];存储单元1001通过数据i/o单元1003将d[0]中存储的计算结果写入片外地址a[0];检查循环计数器,并获取循环次数,判断该循环次数是否为0,若该循环次数为0,则结束原子访存操作;若该循环次数不为0,则重复执行上述步骤,执行完毕后将该循环次数减1。

上述原子访存系统中,通过调整访存顺序,增加对片外地址的读写覆盖步骤,能够降低总线锁和缓存锁的启用几率,提高了原子操作期间的访存效率。

在其中一个实施例中,如图3所示,若执行两个源操作数(src0和src1)的读写操作,也就是说,执行从片外系统内存1005中获取src0的访存数据,存储至片上存储单元1001,并将存储单元1001中的数据写回系统内存1005的原子访存操作。例如:执行原子指令atomicbinoload和atomicbinostore,在如图1所示的原子访存系统1000中,需执行dst=load(src0)和src0=store(src0,src1)两个步骤,其中,dst表示片上目的地址;src0表示片外地址;src1表示立即数或片上地址;dst=load(src0)表示一个时钟周期的前半拍将src0中的数据分别读取至dst和src1;src0=store(src0,src1)表示一个时钟周期的后半拍将dst和src1中的数据全部写入src0中,并在src0的后续内存空间连续存放dst和src1。具体工作流程为:数据i/o单元1003从片外地址a[0]中读取数据,并将该数据分别存储至片上地址d[0]和d[1]中;存储单元1001通过转发单元1002将片上地址d[0]和d[1]中的数据重新写回片外地址a[0]。

在其中一个实施例中,请一并参阅图3,数据i/o单元1003将d[0]和d[1]中的数据发送至处理单元1004中进行运算,处理单元1004中的主处理单元根据解析后的多个原子运算指令,将接收到的数据进行转发和计算,并将计算结果返回至d[0];存储单元1001通过数据i/o单元1003将d[0]中存储的计算结果以及src1中的数据全部写入片外地址a[0];检查循环计数器,并获取循环次数,判断该循环次数是否为0,若该循环次数为0,则结束原子访存操作;若该循环次数不为0,则重复执行上述步骤,执行完毕后将该循环次数减1。

在其中一个实施例中,如图3所示,若执行三个源操作数(src0、src1和src2)的读操作,也就是说,执行从片外系统内存1005中获取src0的访存数据,存储至片上存储单元1001,并将存储单元1001中的数据写回系统内存1005的原子访存操作。例如:执行原子指令atomictrinoload和atomictrinostore,在如图1所示的原子访存系统1000中,需执行dst=load(src0)和src0=store(src0,src1,src2)两个步骤,其中,dst表示片上目的地址;src0表示片外地址;src1表示立即数或片上地址;src2表示立即数或片上地址;dst=load(src0)表示一个时钟周期的前半拍将src0中的数据分别读取至dst、src1和src2;src0=store(src0,src1,src2)表示一个时钟周期的后半拍将dst、src1和src2中的数据全部写入src0中,并在src0的后续内存空间连续存放dst、src1和src2。具体工作流程为:数据i/o单元1003从片外地址a[0]中读取数据,并将该数据分别存储至片上地址d[0]、d[1]和d[2]中;存储单元1001通过转发单元1002将片上地址d[0]、d[1]和d[2]中的数据重新写回片外地址a[0]。

在其中一个实施例中,请一并参阅图3,数据i/o单元1003将d[0]、d[1]和d[2]中的数据发送至处理单元1004中进行运算,处理单元1004中的主处理单元根据解析后的多个原子运算指令,将接收到的数据进行转发和计算,并将计算结果返回至d[0];存储单元1001通过数据i/o单元1003将d[0]中存储的计算结果以及src1和src2中的数据全部写入片外地址a[0];检查循环计数器,并获取循环次数,判断该循环次数是否为0,若该循环次数为0,则结束原子访存操作;若该循环次数不为0,则重复执行上述步骤,执行完毕后将该循环次数减1。

上述原子访存系统中,能够支持多个源操作数的数据读写,实现多个源操作数的原子访存操作。

在一个实施例中,如图4所示,提供了一种原子访存方法,该方法在如图1或图2所示的原子访存系统上运行,所述方法包括以下步骤:

步骤202,获取执行原子指令所需的源操作数个数。

其中,原子指令指的是用于执行原子操作的指令,原子指令包括原子算数指令以及原子访存指令;原子操作指的是处理器核执行过程中不会被任何线程调度机制打断的操作,原子操作一旦开始工作就一直运行到结束,中间不会有任何线程切换;源操作数指的是待处理数据,源操作数包括立即数、片上地址以及片外地址;片上地址指的是芯片内部的存储单元中的地址;片外地址指的是芯片外部系统内存中的地址;源操作数包括多种寻址方式,例如:直接立即数、寄存器寻址、间接寻址等。

具体地,根据原子指令的操作码(srcop)域,获取执行该原子指令所需的源操作数个数。原子指令的指令格式包括多个指令域,例如:name域用于标识指令类别;srcop域用于配置源操作数个数等,请参阅表1:

表1

步骤204,根据所述源操作数个数,获取片外源操作数和片上源操作数。

其中,片外源操作数指的是存储在片外系统内存中的源操作数,片外源操作数的类型包括:立即数和片外地址;片上源操作数指的是存储在片上存储单元中的源操作数,片上源操作数的类型包括:立即数和片上地址。可选的,片上源操作数可以为一个、两个或多个。根据原子指令的源操作数类型(src1vec或src2vec)域,选择第二源操作数(src1或src2)的类型。

作为一种可选的实施方式,根据所述源操作数个数,获取片外源操作数和多个片上源操作数。

步骤206,获取所述片外源操作数对应的片外地址。

其中,片外地址指的是片外系统内存中的地址。具体地,根据原子指令的片外源操作数地址(src0addr)域,获取片外源操作数(src0)对应的片外地址。

步骤208,根据所述片外地址,读取访存数据。

其中,访存数据指的是存储在片外地址中的数据。具体地,根据步骤206中获取到的片外地址,从该片外地址中读取访存数据。

步骤210,在第一时间周期内将所述访存数据存储至所述片上源操作数对应的片上地址。

其中,第一时间周期指的是处理器运行过程中的半个节拍。具体地,在处理器运行过程中的前半拍,将步骤208中读取的访存数据存储至存储单元中的片上源操作数对应的片上地址中;若片上源操作数为多个,则将步骤208中读取的访存数据存储至存储单元中的每一个片上源操作数对应的片上地址中。

步骤212,在第二时间周期内将所述片上地址中的数据存储至所述片外地址。

其中,第二时间周期指的是处理器运行过程中的半个节拍。具体地,在处理器运行过程中的后半拍,将步骤210中片上源操作数中的数据存储至步骤206中获取到的片外地址;若片上源操作数为多个,则将步骤210中每一个片上源操作数中的数据,全部存储至步骤206中获取到的片外地址。

上述原子访存方法中,在第一时间周期内将访存数据从片外系统内存读取至片上存储单元中,在第二时间周期将访存数据从片上存储单元写回至片外系统内存中,通过增加对片外地址的读写覆盖步骤,能够保证当前工作的处理器核独占该片外地址,防止其他处理器核对该片外地址进行数据读写,从而实现该处理器核的原子访存操作。

在其中一个实施例中,提供了一种原子访存方法,该方法在如图1或图2所示的原子访存系统上运行,所述方法还包括以下步骤:

步骤302,获取计算指令。

具体地,根据计算指令的指令地址,从指令存储单元中获取待执行的计算指令。

步骤304,通过指令解析单元对所述计算指令的类型进行解析,得到所述原子指令。

具体地,指令解析单元通过该计算指令的name域对该计算指令的类型进行解析,若name=15,则表示该计算指令为原子类指令。

在其中一个实施例中,步骤202具体包括以下步骤:

步骤2022,对所述原子指令进行解析,得到多个原子运算指令。

其中,原子运算指令指的是原子指令经解析以后的多个原子算数指令以及原子访存指令。

具体地,通过指令处理单元对存储在指令存储单元中的计算指令进行解析,得到多个原子算数指令以及原子访存指令,并将多个原子算数指令以及原子访存指令按照执行顺序依次存储在存储队列单元中。原子运算指令如表2所示:

表2

步骤2024,根据所述多个原子运算指令,得到执行所述原子指令所需的源操作数个数。

具体地,根据解析得到的多个原子运算指令,得到执行所述原子指令所需的单一源操作数;或者根据解析得到的多个原子运算指令,得到执行所述原子指令所需的多个源操作数。可选的,源操作数个数可以为一个、两个或多个。

在其中一个实施例中,步骤208具体包括以下步骤:

步骤2082a,判断是否享有总线控制权。

具体地,通过数据i/o单元将当前处理器核的核标识发送至仲裁单元进行仲裁,仲裁单元将接收到的核标识与预存核标识进行比较,判断当前处理器核是否享有总线控制权。

步骤2084b,若享有总线控制权,则通过直接内存访问单元读取所述访存数据。

具体地,若仲裁单元接收到的核标识与预存核标识匹配,则当前处理器核享有总线控制权,允许当前处理器核根据片外地址,从系统内存中读取访存数据;若仲裁单元接收到的核标识与预存核标识不匹配,则当前处理器核不享有总线控制权,禁止当前处理器核从系统内存中读取访存数据。

上述原子访存方法中,通过判断当前处理器核是否享有总线控制权,从而实现与系统内存之间进行数据交互的原子访存操作。

在其中一个实施例中,步骤208具体还包括以下步骤:

步骤2082a’,判断所述片外地址是否被占用。

具体地,根据与片外地址对应的状态标识,判断该片外地址是否被占用。例如:若片外地址对应的状态标识state=1(假设state=1表示片外地址被占用),则表示该片外地址已被占用。

步骤2084b’,判断是否接收到总线返回的访存成功的响应信息。

其中,处理器核发起访存请求后,会接收到总线返回的响应信息,该响应信息包括访存成功的响应信息以及访存失败的响应信息。具体地,根据处理器核接收到的响应信息,判断该响应信息是否为访存成功的响应信息。

步骤2084c’,若所述片外地址未被占用且接收到所述总线返回的访存成功的响应信息,则通过直接内存访问单元读取所述访存数据。

具体地,若片外地址对应的状态标识为未被占用且接收到访存成功的响应信息,则允许当前处理器核根据片外地址,从系统内存中读取访存数据;若片外地址对应的状态标识为被占用且未接收到访存成功的响应信息,则禁止当前处理器核从系统内存中读取访存数据。

上述原子访存方法中,通过判断片外地址是否被占用以及是否接收到访存成功的响应信息,从而实现与系统内存之间进行数据交互的原子访存操作。

在其中一个实施例中,提供了一种原子访存方法,该方法在如图1或图2所示的原子访存系统上运行,所述方法还包括以下步骤:

步骤402,将所述片上源操作数中的数据发送至运算单元执行运算,并获取运算结果。

其中,运算单元指的是根据原子指令的功能执行相应计算的硬件单元,包括一个主处理电路和多个从处理电路。具体地,将片上源操作数中的数据发送至运算单元执行相应计算,得到目的操作数。

步骤404,将所述运算结果存储至存储单元。

其中,存储单元指的是处理器核内部的片上存储空间,包括缓存、寄存器的任意组合,用于存储输入数据以及输入数据中的标量数据。具体地,将计算得到的目的操作数存储至片上缓存中,完成当前原子指令操作的写回阶段。

步骤406,将所述存储单元中的数据存储至所述片外地址。

具体地,将存储单元中的数据通过转发单元存储至片外地址。

作为一种可选的实施方式,将存储单元中的运算结果以及片上源操作数中的数据,通过转发单元全部存储至片外地址。

上述原子访存方法中,通过将片上的运算结果以及片上源操作数中的数据全部存储至片外地址,能够保证当前处理器核独占该片外地址,避免其他处理器核访问该片外地址;同时能够实现多个源操作数的原子访存操作。

在其中一个实施例中,步骤406具体包括以下步骤:

步骤4062,通过转发单元将所述存储单元中的数据发送至数据i/o单元。

其中,转发单元指的是连接于存储单元与数据i/o单元之间的硬件单元。具体地,存储单元中的数据经转发单元直接发送至数据i/o单元,而无需经运算单元参与运算。

步骤4064,通过所述数据i/o单元将所述存储单元中的数据发送至直接内存访问单元。

步骤4066,通过所述直接内存访问单元将所述存储单元中的数据存储至所述访存地址。

在一个实施例中,提供了一种原子访存方法,由于神经网络处理器中,输入数据的数据规模往往较为庞大,因此需要对输入数据按照一定的拆分粒度拆解为多个数据段,多次执行原子操作,也就是说,需要将一条完整的原子操作指令拆解为多个原子操作请求。该方法在如图1或图2所示的原子访存系统上运行,所述方法包括以下步骤:

步骤502,获取执行原子指令所需的源操作数个数。

请参阅步骤202。

步骤504,根据所述源操作数个数,获取片外源操作数和片上源操作数。

请参阅步骤204。

步骤506,获取所述片外源操作数对应的片外地址。

请参阅步骤206。

步骤508,根据所述片外地址,读取所述片外地址中存储的访存数据中的一段访存数据段。

其中,访存数据段指的是,数据规模较大的访存数据按照拆分粒度进行拆分后的、符合当前带宽处理能力的数据。每一访存数据段的读取过程请参阅步骤208。

步骤510,在第一时间周期内将所述访存数据段存储至所述片上地址。

每一访存数据段的执行过程请参阅步骤210。

步骤512,在第二时间周期内将所述片上地址中的所述访存数据段存储至所述片外地址。

每一访存数据段的执行过程请参阅步骤212。

反复执行步骤508至步骤512,直到读取完片外地址中存储的拆解后的全部访存数据段为止。

上述原子访存方法中,将大规模的输入数据进行拆解,拆解后的数据段反复执行同样的访存操作,从而将重复性的原子操作包含在一条指令内,使得指令设计更加合理。

在一个实施例中,如图5所示,提供了一种原子访存方法,该方法在如图1或图2所示的原子访存系统上运行,所述方法包括以下步骤:

步骤602,执行计算指令,并得到所述计算指令的运算结果。

其中,计算指令包括原子指令和非原子指令;计算指令的运算结果包括执行原子指令得到的运算结果,以及执行非原子指令得到的运算结果。

具体地,在运算单元中执行该计算指令,运算单元中的主处理电路根据该计算指令的功能进行数据转发,通过计算得到多个运算结果。

步骤604,获取执行原子指令所需的源操作数个数。

请参阅步骤202。

步骤606,根据所述源操作数个数,获取片外源操作数和片上源操作数。

请参阅步骤204。

步骤608,获取所述片外源操作数对应的片外地址。

请参阅步骤206。

步骤610,将所述运算结果以及所述片上源操作数中的数据存储至所述片外地址。

具体地,将步骤602中的多个运算结果以及多个片上源操作数中的数据,通过转发单元直接存储至系统内存中相应的片外地址。

上述原子访存方法中,通过将多个运算结果以及片上多个源操作数中的数据全部存储至片外系统内存,从而实现对单一源操作数原子访存操作的功能扩展,即实现多个源操作数的原子访存操作。

在其中一个实施例中,步骤610具体包括以下步骤:

步骤6102a,判断是否享有总线控制权。

请参阅步骤2084a。

步骤2084b,若享有总线控制权,则通过转发单元将所述运算结果以及所述片上源操作数中的数据存储至所述片外地址。

具体地,若仲裁单元接收到的核标识与预存核标识匹配,则当前处理器核享有总线控制权,允许当前处理器核通过转发单元将片上存储单元中的运算结果以及所述片上源操作数中的数据全部存储至所述片外地址;若仲裁单元接收到的核标识与预存核标识不匹配,则当前处理器核不享有总线控制权,禁止当前处理器核对该片外地址进行写操作。

上述原子访存方法中,通过判断当前处理器核是否享有总线控制权,从而实现多个源操作数对系统内存的写操作。

在其中一个实施例中,步骤610具体还包括以下步骤:

步骤6102a’,判断所述片外地址是否被占用。

请参阅步骤2084a’。

步骤6104b’,判断是否接收到总线返回的访存成功的响应信息。

请参阅步骤2084b’。

步骤6104c’,若所述片外地址未被占用且接收到所述总线返回的访存成功的响应信息,则通过转发单元将所述运算结果以及所述片上源操作数中的数据存储至所述片外地址。

具体地,若片外地址对应的状态标识为未被占用且接收到访存成功的响应信息,则允许当前处理器核通过转发单元将片上存储单元中的运算结果以及所述片上源操作数中的数据全部存储至所述片外地址;若片外地址对应的状态标识为被占用且未接收到访存成功的响应信息,则禁止当前处理器核对该片外地址进行写操作。

上述原子访存方法中,通过判断片外地址是否被占用以及是否接收到访存成功的响应信息,从而实现多个源操作数对系统内存的写操作。

在一个实施例中,提供了一种原子访存方法,由于神经网络处理器中,输入数据的数据规模往往较为庞大,因此需要对输入数据按照一定的拆分粒度拆解为多个数据段,多次执行原子操作,也就是说,需要将一条完整的原子操作指令拆解为多个原子操作请求。该方法在如图1或图2所示的原子访存系统上运行,所述方法包括以下步骤:

步骤702,执行计算指令,并得到所述计算指令的运算结果。

请参阅步骤602。

步骤704,获取执行原子指令所需的源操作数个数。

请参阅步骤604。

步骤706,根据所述源操作数个数,获取片外源操作数和片上源操作数。

请参阅步骤606。

步骤708,获取所述片外源操作数对应的片外地址。

请参阅步骤608。

步骤710,将所述运算结果以及所述片上源操作数中的数据段存储至所述片外地址。

其中,数据段指的是,数据规模较大的数据按照拆分粒度进行拆分后的、符合当前带宽处理能力的数据。每一数据段的存储过程请参阅步骤610。

步骤712,将所述片上源操作数中的另一段数据段存储至所述片外地址,直到所述片上源操作数中的全部数据都存储至所述片外地址。

反复执行步骤710,直到片上源操作数中的全部数据都存储至片外地址为止。

上述原子访存方法中,将大规模的输入数据进行拆解,拆解后的数据段反复执行同样的访存操作,从而将重复性的原子操作包含在一条指令内,使得指令设计更加合理。

基于同样的发明构思,本申请提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述实施例所提及方法的步骤。

在一个实施例中,如图6所示,提供了一种原子访存装置,该装置包括:源操作数个数获取模块801、源操作数获取模块802、片外地址获取模块803、访存数据读取模块804、第一存储模块805以及第二存储模块806,其中:

源操作数个数获取模块801,用于获取执行原子指令所需的源操作数个数;

源操作数获取模块802,用于根据所述源操作数个数,获取片外源操作数和片上源操作数;

片外地址获取模块803,用于获取片外源操作数对应的片外地址;

访存数据读取模块804,用于根据所述片外地址,读取所述访存数据;

第一存储模块805,用于在第一时间周期内将所述访存数据存储至所述片上源操作数对应的片上地址;

第二存储模块806,用于在第二时间周期内将所述片上地址中的数据存储至所述片外地址。

在其中一个实施例中,如图7所示,提供了一种原子访存装置,该装置包括:运算结果获取模块901、源操作数个数获取模块902、源操作数获取模块903、片外地址获取模块904以及存储模块905,其中:

运算结果获取模块901,用于执行计算指令,并得到所述计算指令的运算结果;

源操作数个数获取模块902,用于获取执行原子指令所需的源操作数个数;

源操作数获取模块903,用于根据所述源操作数个数,获取片外源操作数和片上源操作数;

片外地址获取模块904,用于获取所述片外源操作数对应的片外地址;

存储模块905,用于将所述运算结果以及所述片上源操作数中的数据存储至所述片外地址。

关于原子访存装置的具体限定可以参见上文中对于原子访存方法的限定,在此不再赘述。上述原子访存装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

应该理解的是,虽然图4和5的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图4和5中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本申请所必须的。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。

所述集成的单元如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储器包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储器中,存储器可以包括:闪存盘、只读存储器(read-onlymemory,rom)、随机存取器(randomaccessmemory,ram)、磁盘或光盘等。

以上对本申请实施例进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。


技术特征:

1.一种原子访存方法,其特征在于,所述方法包括:

获取执行原子指令所需的源操作数个数;

根据所述源操作数个数,获取片外源操作数和片上源操作数;

获取所述片外源操作数对应的片外地址;

根据所述片外地址,读取访存数据;

在第一时间周期内将所述访存数据存储至所述片上源操作数对应的片上地址;

在第二时间周期内将所述片上地址中的数据存储至所述片外地址。

2.根据权利要求1所述的方法,其特征在于,所述获取执行原子指令所需的源操作数个数的步骤之前,还包括:

获取计算指令;

通过指令解析单元对所述计算指令的类别进行解析,得到所述原子指令。

3.根据权利要求1所述的方法,其特征在于,所述获取执行原子指令所需的源操作数个数,包括:

对所述原子指令进行解析,得到多个原子运算指令;

根据所述多个原子运算指令,得到执行所述原子指令所需的源操作数个数。

4.根据权利要求1所述的方法,其特征在于,所述根据所述源操作数个数,获取片外源操作数和片上源操作数,包括:根据所述源操作数个数,获取片外源操作数和多个片上源操作数。

5.根据权利要求1所述的方法,其特征在于,所述根据所述片外地址,读取访存数据,包括:

判断是否享有总线控制权;

若享有总线控制权,则通过直接内存访问单元读取所述访存数据。

6.根据权利要求1所述的方法,其特征在于,所述根据所述片外地址,读取访存数据,还包括:

判断所述片外地址是否被占用;

判断是否接收到总线返回的访存成功的响应信息;

若所述片外地址未被占用且接收到所述总线返回的访存成功的响应信息,则通过直接内存访问单元读取所述访存数据。

7.根据权利要求1所述的方法,其特征在于,所述方法还包括:

将所述片上源操作数中的数据发送至运算单元执行运算,并获取运算结果;

将所述运算结果存储至存储单元;

将所述存储单元中的数据存储至所述片外地址。

8.根据权利要求7所述的方法,其特征在于,所述将所述存储单元中的数据存储至所述片外地址,包括:

将所述存储单元中的运算结果以及所述片上源操作数中的数据,存储至所述片外地址。

9.根据权利要求7所述的方法,其特征在于,所述将所述存储单元中的数据存储至所述片外地址,包括:

通过转发单元将所述存储单元中的数据发送至数据i/o单元;

通过所述数据i/o单元将所述存储单元中的数据发送至直接内存访问单元;

通过所述直接内存访问单元将所述存储单元中的数据存储至所述访存地址。

10.一种原子访存方法,其特征在于,所述方法包括:

获取执行原子指令所需的源操作数个数;

根据所述源操作数个数,获取片外源操作数和片上源操作数;

获取所述片外源操作数对应的片外地址;

根据所述片外地址,读取所述片外地址中存储的访存数据中的一段访存数据段;

在第一时间周期内将所述访存数据段存储至所述片上地址;

在第二时间周期内将所述片上地址中的所述访存数据段存储至所述片外地址;

再次读取所述片外地址中存储的访存数据中的另一段访存数据段;

在第一时间周期内将所述另一段访存数据段存储至所述片上地址;

在第二时间周期内将所述片上地址中的所述另一段访存数据段存储至所述片外地址,直到读取完所述片外地址中存储的访存数据。

11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-10中任一项所述方法的步骤。

12.一种原子访存装置,其特征在于,所述装置包括:

源操作数个数获取模块,用于获取执行原子指令所需的源操作数个数;

源操作数获取模块,用于根据所述源操作数个数,获取片外源操作数和片上源操作数;

片外地址获取模块,用于获取片外源操作数对应的片外地址;

访存数据读取模块,用于根据所述片外地址,读取所述访存数据;

第一存储模块,用于在第一时间周期内将所述访存数据存储至所述片上源操作数对应的片上地址;

第二存储模块,用于在第二时间周期内将所述片上地址中的数据存储至所述片外地址。

13.一种原子访存系统,其特征在于,所述系统包括:存储单元、转发单元、数据i/o单元、处理单元以及存储在所述存储单元上并可在所述处理单元上运行的计算机程序,所述转发单元连接于所述存储单元与所述数据i/o单元之间;

所述存储单元,用于存储多个源操作数中的输入数据以及所述输入数据中的标量数据;

所述转发单元,用于将所述数据i/o单元中的数据发送至所述存储单元;

所述处理单元,用于执行拆分算法,且所述处理单元执行所述计算机程序时实现权利要求1-10中任一项所述方法的步骤。

14.一种原子访存系统,其特征在于,所述系统包括:存储单元、转发单元、数据i/o单元、第一处理单元、第二处理单元以及存储在所述存储单元上并可在所述第一处理单元和所述第二处理单元上运行的计算机程序,所述第二处理单元包括多核处理单元,所述转发单元连接于所述存储单元与所述数据i/o单元之间;

所述存储单元,用于存储多个源操作数中的输入数据以及所述输入数据中的标量数据;

所述转发单元,用于将所述数据i/o单元中的数据发送至所述存储单元;

所述第一处理单元,用于执行拆分算法;

所述第一处理单元和所述第二处理单元执行所述计算机程序时实现权利要求1-10中任一项所述方法的步骤。

技术总结
本申请涉及一种原子访存方法、存储介质、计算机设备、装置和系统,包括:获取执行原子指令所需的源操作数个数;根据所述源操作数个数,获取片外源操作数和片上源操作数;获取所述片外源操作数对应的片外地址;根据所述片外地址,读取访存数据;在第一时间周期内将所述访存数据存储至所述片上源操作数对应的片上地址;在第二时间周期内将所述片上地址中的数据存储至所述片外地址。能够实现对片外地址的读写覆盖,同时满足多个操作数的原子访存操作。

技术研发人员:不公告发明人
受保护的技术使用者:上海寒武纪信息科技有限公司
技术研发日:2018.11.30
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-28868.html

最新回复(0)