CN108829610A - 一种神经网络前向计算过程中的内存管理方法及设备 - Google Patents
一种神经网络前向计算过程中的内存管理方法及设备 Download PDFInfo
- Publication number
- CN108829610A CN108829610A CN201810284962.2A CN201810284962A CN108829610A CN 108829610 A CN108829610 A CN 108829610A CN 201810284962 A CN201810284962 A CN 201810284962A CN 108829610 A CN108829610 A CN 108829610A
- Authority
- CN
- China
- Prior art keywords
- layer
- memory block
- memory
- output
- label
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Health & Medical Sciences (AREA)
- Data Mining & Analysis (AREA)
- Life Sciences & Earth Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Memory System (AREA)
Abstract
本发明公开了一种神经网络前向计算过程中的内存管理方法及设备,包括获取层的层输出;分别针对每一个层输出执行以下操作,以实现对每一个层输出的内存分配:若查找到内存池中计数标记为第一标记的第一内存块,则将所述第一内存块分配给当前层输出,并将所述第一内存块的第一标记更改为第二标记,其中,所述计数标记用于表示其对应的内存块的使用状态,所述第一标记表示内存块处于可复用状态,所述第二标记表示内存块处于不可复用状态;获取所述层的层输入,分别确定每一个层输入的前层输出,以及更改所述前层输出的内存块的计数标记,以便所述前层输出的内存块进行复用,其中,所述前层输出表示传递数据给层输入的层的层输出。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种神经网络前向计算过程中的内存管理方法及设备。
背景技术
内存是设备端的重要组成部件,然而设备端的内存资源是十分有限的,在深度学习算法中,内存的消耗会随着神经网络规模扩大而不断增加,神经网络内部划分成若干层,在神经网络的前向计算过程中,神经网络从输入层开始获取数据,依序逐层进行计算,其具体表现为从前一层输出内存中获取数据,进行本层运算,并将计算结果保存在本层输出内存中,同时将本层计算结果传递给后一层。
现有的神经网络前向计算过程的内存管理方式中,内部划分了多少层,就会分配多少块内存,划分的网络层越多,分配的内存块就会越多,占用的内存也就会越多,这势必会挤占其它业务的内存使用,影响其他业务的进行,进而降低了整个系统内存的使用效率。
所以,现有的内存管理方式,存在内存的使用效率低的技术问题。
发明内容
本发明实施例提供一种神经网络前向计算过程中的内存管理方法及设备,用于实现提高内存的使用效率的目的。
第一方面,提供了一种神经网络前向计算过程中的内存管理方法,包括:
获取层的层输出,其中,所述层表示计算单元;
分别针对每一个层输出执行以下操作,以实现对每一个层输出的内存分配:若查找到内存池中计数标记为第一标记的第一内存块,则将所述第一内存块分配给当前层输出,并将所述第一内存块的第一标记更改为第二标记,其中,所述计数标记用于表示其对应的内存块的使用状态,所述第一标记表示内存块处于可复用状态,所述第二标记表示内存块处于不可复用状态;
获取所述层的层输入,分别确定每一个层输入的前层输出,以及更改所述前层输出的内存块的计数标记,以便所述前层输出的内存块进行复用,其中,所述前层输出表示传递数据给层输入的层的层输出。
采用本发明实施例提供的上述内存管理方法,在对层中的每一个层输出的内存分配过程中,可以先去查询内存池中是否有可复用的内存块,若有,就将查询到的可复用的内存块分配给当前的层输入,对层中的每一个层输入,会去确定每一个层输入的前层输出,进而更改该前层输出的内存块的计数标记,以便前层输出的内存块进行复用,所以,实现了内存块的复用,减少了神经网络前向计算过程中内存块的分配个数,进而提高了内存使用效率。
可选的,若未查找到内存池中计数标记为所述第一标记的内存块时,则为所述当前层输出新建第二内存块,并将所述第二内存块的计数标记设置为所述第二标记。
上述可选的方式描述了在未查询到内存池有可复用的内存块时,为层的层输出新建内存块,并对新建内存块的进行计数标,以便新建的内存块在后续进行复用。所以,进一步完善了内存块的复用的方案。
可选的,所述将所述第一内存块的第一标记更改为第二标记,具体包括:
获取引用所述当前层输出的层输入的数量;
将所述第一标记更改为与所述数量相同的第二标记。
可选的,所述若查找到内存池中计数标记为第一标记的第一内存块,则将所述第一内存块分配给当前层输出,包括:
若查找到内存池中计数标记为第一标记、且内存大小大于或等于当前层输出的大小的第一内存块,则将第一内存块分配给所述当前层输出;
否则,将查找到的内存池中计数标记为第一标记、且内存大小小于当前层输出的大小的内存块作为备选内存块,确定所述备选内存块中内存大小最大的第一内存块,按照所述当前层输出的大小调整第一内存块的内存大小,并将调整后的第一内存块分配给所述当前层输出。
可选的,所述更改每一个层输入的前层输出的内存块的计数标记,具体包括:
获取所述每一个层输入的前层输出的内存块的目标计数标记;
将所述目标计数标记的计数值减去一个计数单位。
第二方面,提供了一种内存管理设备,包括:
第一获取单元,用于获取层的层输出,其中,所述层表示计算单元;
分配单元,用于分别针对每一个层输出执行以下操作,以实现对每一个层输出的内存分配:若查找到内存池中计数标记为第一标记的第一内存块,则将所述第一内存块分配给当前层输出,并将所述第一内存块的第一标记更改为第二标记,其中,所述计数标记用于表示其对应的内存块的使用状态,所述第一标记表示内存块处于可复用状态,所述第二标记表示内存块处于不可复用状态;
第二获取单元,用于获取所述层的层输入,分别确定每一个层输入的前层输出,以及更改所述前层输出的内存块的计数标记,以便所述前层输出的内存块进行复用,其中,所述前层输出表示传递数据给层输入的层的层输出。
可选的,所述分配单元还用于:
若未查找到内存池中计数标记为所述第一标记的内存块时,则为所述当前层输出新建第二内存块,并将所述第二内存块的计数标记设置为所述第二标记。
可选的,所述分配单元还用于:
获取引用所述当前层输出的层输入的数量;
将所述第一标记更改为与所述数量相同的第二标记。
可选的,所述分配单元还用于:
若查找到内存池中计数标记为第一标记、且内存大小大于或等于当前层输出的大小的第一内存块,则将第一内存块分配给所述当前层输出;
否则,将查找到的内存池中计数标记为第一标记、且内存大小小于当前层输出的大小的内存块作为备选内存块,确定所述备选内存块中内存大小最大的第一内存块,按照所述当前层输出的大小调整第一内存块的内存大小,并将调整后的第一内存块分配给所述当前层输出。
可选的,所述第二获取单元还用于:
获取所述每一个层输入的前层输出的内存块的目标计数标记;
将所述目标计数标记的计数值减去一个计数单位。
第三方面,提供了一种设备,包括:
至少一个处理器,以及
与所述至少一个处理器连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,执行如上述第一方面所述的方法。
第四方面,提供了一种计算机可读存储介质:
所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如上述第一方面所述的方法。
在本发明实施例中,由于采用了获取神经网络前向计算过程中层的层输出,别针对每个层的每一个层输出执行以下操作,以实现对每一个层输出的内存分配:若查找到内存池中计数标记为第一标记的第一内存块,则将所述第一内存块分配给当前层输出,并将所述第一内存块的第一标记更改为第二标记,其中,所述计数标记用于表示其对应的内存块的使用状态,所述第一标记表示内存块处于可复用状态,所述第二标记表示内存块处于不可复用状态,然后对每个层的层输入执行以下操作,以实现对前层输出的内存块的计数标记的更改:分别确定每一个层输入的前层输出,以及更改所述前层输出的内存块的计数标记的技术方案。所以,有效的解决了现有技术中,内存使用效率低的技术问题,实现了内存块的复用,在不影响计算效率的情况下,减少了神经网络前向计算过程中内存块的分配个数,进而提高了内存使用效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例。
图1为现有技术中神经网络前向计算过程中的内存管理模型的结构示意图;
图2为本发明实施例提供的一种神经网络前向计算过程中的内存管理方法的流程图;
图3为本发明实施例提供的一种神经网络前向计算过程中的内存管理方法的另一种流程图;
图4为本发明实施例中内存分配的流程图;
图5为本发明实施例提供具体一个内存输入输出管理的结构示意图;
图6为本发明实施例提供的一种内存管理设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明技术方案的一部分实施例,而不是全部的实施例。基于本申请文件中记载的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明技术方案保护的范围。
内存是设备端的重要组成部件,设备端的所有程序的运行都需要在内存中进行,然而,设备端的内存资源是十分有限的,在深度学习算法中,内存的消耗会随着神经网络规模扩大而不断增加。
在神经网络的前向计算过程中,其内部划分成若干层,并从输入层开始获取数据,依序逐层进行计算,也即如图1所示从前一层输出内存中获取数据,进行本层运算,并将本层的计算结果保存在本层输出内存中,同时将本层的计算结果传递给后一层。
现有的神经网络前向计算过程中的内存管理方式就如图1所示,为每一层的计算结果分配一个内存,可见,现有的内存管理方式中,神经网络的前向计算内部划分的层越多,分配的内存就会越多,这势必会挤占其它业务的内存使用,影响其他业务的进行,然而在多数情况下,每一层的计算结果传递给后一层后,便不再被使用,但其依然占用着内存,从而极大地降低了内存的使用效率,浪费了设备端宝贵的内存资源,所以,现有的内存管理方式,存在内存的使用效率低的技术问题。
为此,本发明实施例提供一种神经网络前向计算过程中的内存管理方法及设备,用于解决上述技术问题。
请参考图2,为本发明实施例提供的一种神经网络前向计算过程中的内存管理方法,所述方法包括:
步骤S101:获取层的层输出,其中,所述层表示计算单元。
在实际应用中,神经网络前向计算内部会划分成多个层,在神经网络的初始化阶段,可以先对神经网络的网络模型进行解析,进而获取到内部划分的层的数量,以及每一层的输入内存大小和输出内存大小,然后依次序对每一层按照本发明实施例中提供的方法进行处理。
具体的,如图3所示,先取神经网络前向计算过程(以下简称前向计算过程)中划分的第一层,并获取第一层的层输出个数,这里的层输出是指层的计算结果,通常,前向计算过程中的第一层又称为输入层,输入层的层输出可以为一个,也可以为多个。
步骤S102:分别针对每一个层输出执行以下操作,以实现对每一个层输出的内存分配:若查找到内存池中计数标记为第一标记的第一内存块,则将所述第一内存块分配给当前层输出,并将所述第一内存块的第一标记更改为第二标记,其中,所述计数标记用于表示其对应的内存块的使用状态,所述第一标记表示内存块处于可复用状态,所述第二标记表示内存块处于不可复用状态;
获取到第一层的层输出之后,对第一层的每一个层输出都执行上述步骤S102,具体的,在第一层包括多个层输出时,先获取第一层的第一个层输出,然后为该第一层的第一个层输出申请内存也即分配内存,分配内存的过程请参考图4,首先,查看内存池中是否有内存块Blob,若内存池中有内存块,那么,就可以取内存池中的第一个内存块,查看第一个内存块的计数标记。
在本发明实施例中,用数值“0”表示内存块处于可复用状态,用大于“0”的整数表示内存块处于不可复用状态,当然,在实际应用中,还可以用其他的标记来表示内存块的可复用状态和不可以复用状态。
优选的,若查找到内存池中计数标记为第一标记、且内存大小大于或等于当前层输出的大小的第一内存块,则将第一内存块分配给所述当前层输出。
否则,将查找到的内存池中计数标记为第一标记、且内存大小小于当前层输出的大小的内存块作为备选内存块,确定所述备选内存块中内存大小最大的第一内存块,按照所述当前层输出的大小调整第一内存块的内存大小,并将调整后的第一内存块分配给所述当前层输出。
在本发明实施例中,若查找到的第一个内存块的计数标记为“0”,表示第一内存块处于可复用状态,这时还可以查看第一内存块的内存大小是否满足第一层的第一个层输出的大小。
若第一内存块的内存大小大于或等于第一层的第一个层输出的大小,就将第一内存块分配给第一层的第一个层输出。
优选的,所述将所述第一内存块的第一标记更改为第二标记,具体包括:
步骤A:获取引用所述当前层输出的层输入的数量。
步骤B:将所述第一标记更改为与所述数量相同的第二标记。
在将第一内存块分配给第一层的第一个层输出之后,需要将第一内存块的计数标记从可复用状态更改为不可复用状态,在本发明实施例中,可以根据引用第一层的第一个层输出的后续层的层输入的数量来更改第一内存块的计数标记的值,例如,当第一层的第一个层输出仅被第二层的一个层输入引用时,也即第一层的第一个层输出作为第二层的一个层输入时,就可以将第一内存块的计数标记“0”更改为“1”,表示第一内存块从可复用状态的“0”变为表示不可复用状态的大于“0”的整数;当第一层的第一个层输出同时被第二层的一个层输入引用以及第三层的一个层输入引用时,也即第一层的第一个层输出同时作为第二层的一个层输入以及第三层的一个层输入时,可以将第一内存块的计数标记“0”更改为“2”,表示第一内存块的计数标记从可复用状态的“0”变为不可复用状态的大于“0”的整数等等,在此就不一一列举了。
若查找到的第一内存块的计数标记为“0”,第一内存块的内存大小小于第一层的第一个层输出的大小,就可以将第一内存块放入到备选池中作为备选内存,然后,再去查看内存池中是否还有内存块也即图4中查看第一内存块是否为内存池中的最后一个内存块。
若第一内存块是内存池中的最后一个内存块,则可以调整第一内存块的内存大小,以使得调整后的第一内存块的内存大小满足第一层的第一个层输出的大小。
若第一内存块不是内存池中的最后一个内存块,可以取内存池中的下一个内存块。例如,内存池中还包括第二内存块以及第三内存块,在获取内存池中第二内存块之后,若第二内存块的计数标记也为“0”,第二内存块的内存大小也小于第一层的第一个层输出,则将第二内存块也作为备选内存放入到备选池中。再取第三内存块,若第三内存块的内存大小也小于第一层的第一个层输出,则将第三内存块也作为备选内存放入到备选池中。
选出备选池中内存大小最大的内存块,也即内存大小最接近第一层的第一个层输出的内存块,这里假设第三内存块的内存大小是备选池中内存最大的,则按照第一层的第一个层输出的大小调整第三内存块的内存大小,然后将内存大小调整后的第三内存块分配给第一层的第一个层输出。
若获取第二内存块的计数标记也为“0”,第二内存块的内存大小大于或等于第一层的第一个层输出,则将第二内存块分配给第一层的第一个层输出,并根据引用第一层的第一个层输出的层的数量来更改第二内存块的计数标记的值,此时就不需要查询内存池中的第三内存块了,在此,就不重复叙述了。
优选的,若未查找到内存池中计数标记为所述第一标记的内存块时,则为所述当前层输出新建第二内存块,并将所述第二内存块的计数标记设置为所述第二标记。
本发明实施例中所述的未查找到内存池中计数标记为所述第一标记的内存块至少包括两种情况,第一种情况:内存池中没有内存块,那么就不会找到计数标记为所述第一标记的内存块;第二种情况:内存池中有内存块,但内存池中的内存块的计数标记都不是“0”,也即内存池中的内存块的计数标记都表示内存块处于不可复用状态。这时,就可以根据第一层的第一个层输出的大小,为第一层的第一个层输出新建一个内存块,并根据引用第一层的第一个层输出的层的数量来设置新建内存块的计数标记的值,在此,就不重复叙述。
在完成对第一层的第一个层输出的内存分配之后,就取第一层的第二个层输出,并按照如上所述的方式为第一层的第二个层输出的分配内存,直到完成对第一层的所有层输出的内存分配,在此就不重复叙述了。
步骤S103:获取所述层的层输入,分别确定每一个层输入的前层输出,以及更改所述前层输出的内存块的计数标记,以便所述前层输出的内存块进行复用,其中,所述前层输出表示传递数据给层输入的层的层输出。
为第一层的所有层输出分配内存之后,就可以获取第一层的层输入,在实际应用中,每一层的层输入可以为一个,也可以为多个,通常,前向计算中的第一层为输入层,输出层没有层输入,其他中间层的层输入可以为一个,也可以为多个,每一层的层输入的内存为其引用的层输出的内存。
例如,在获取的第一层就为前向计算过程中的输出层时,由于输出层没有层输入,那么,就可以跳过步骤S103,然后,取第二层,并根据上述步骤S101和步骤S102为第二层中的每一个层输出分配内存后,就可以获取第二层的层输入,例如,当第二层包括一个层输入,第二层的层输入为第一层的第一个层输出时,那么,在获取到第二层的层输入之后,就可以先确定第二层的层输入的前层输出。
由于第二层的层输入为第一层的第一个层输出,第二层的层输入的前层输出就为第一层的第一个层输出,然后更改第一层的第一个层输出对应的内存块的计数标记。
优选的,所述更改每一个层输入的前层输出的内存块的计数标记,具体包括:
获取所述每一个层输入的前层输出的内存块的目标计数标记;
将所述目标计数标记的计数值减去一个计数单位。
例如,第一层的第一个层输出的内存块的计数标记为“1”,那么,就可以获取该第一层的第一个层输出的内存块的计数标记“1”,并在该计数标记的计数值“1”上减去一个计数单位,进而将第一层的第一个层输出的内存块的计数标记从“1”变为“0”,也即第一层的第一个层输出的内存块从不可复用状态转变为可复用状态,进而实现第一层的第一个层输出的内存块的复用。
在完成对第二层的层输出的内存分配以及完成根据第二层的层输入更改前层输出的内存块的计数标记之后,就可以依次对第三层的输入输出进行同样的操作,直到最后一层。
若第二层包括多个层输入,在对第二层的第一个层输入按照上述层输入的处理过程进行处理后,依次取第二层的第二个层输入进行上述的层输入处理,直到第二层的最后一个层输入,进而完成第二层的所有层输入中每一个层输入对应的前层输出的内存块的计数标记的更改。
在本发明实施例中,首先获取前向计算过程中层的层输出,别针对每个层的每一个层输出执行以下操作,以实现对每一个层输出的内存分配:若查找到内存池中计数标记为第一标记的第一内存块,则将所述第一内存块分配给当前层输出,并将所述第一内存块的第一标记更改为第二标记,其中,所述计数标记用于表示其对应的内存块的使用状态,所述第一标记表示内存块处于可复用状态,所述第二标记表示内存块处于不可复用状态,然后对每个层的层输入执行以下操作,以实现对前层输出的内存块的计数标记的更改:分别确定每一个层输入的前层输出,以及更改所述前层输出的内存块的计数标记。所以,有效的解决了现有技术中,内存使用效率低的技术问题,实现了内存块的复用,在不影响计算效率的情况下,减少了前向计算过程中内存块的分配个数,进而提高了内存使用效率。
由于本发明实施例中的内存占用少,所以相应的产品在成本、性价比及功耗等方面更有竞争力,由于提高了内存使用效率,在同样的算法及应用业务场景下,可以选用更小设备内存的系统方案。
此外,本发明实施例中的方法网络支持能力更强,扩展性更好。在支持复杂深度学习算法支持方面,更具优势,避免算法陷入因为设备内存瓶颈而无法运行的处境。
为了更好的理解本发明实施例中的方法,下面通过具体的实施例对本发明实施例中的方法进行进一步的说明。
请参考图5,为前向计算过程划分为7个层的情况,这7个层包括输入层以及层1至层6,首先取7个层中的第一层也即输入层,获取输入层的层输出个数,图5中的输入层的层输出为一个,也即输入层下方的箭头表示输入层的一个层输出,那么,在获得输入层的这个层输出之后,先查看内存池中是否有内存块Blob。
通常在网络初始化阶段,没有层来申请内存,内存池中的内存块的个数为0,也即内存池中没有内存块,那么,就可以根据输入层的层输出的大小新建一个内存块,新建的内存块为图5中Blob 1,将新建的内存快Blob 1分配给输出层的层输出,并将Blob 1的计数标记设置为“1”,因为当前已将Blob 1分配给输出层的层输出了,所以将Blob 1的计数标记设置为“1”表示当前处于不可复用状态。
在完成对输出层的层输入的内存分配后,内存池中的内存块的标记如图5所示的第一行:“1————”,其中“——”表示在内存池中目前还不存在对应的内存块,“1————”就表示Blob 1的计数标记为“1”,Blob 2和Blob 3目前还不存在。
由于输入层没有层输入,所以可依次取第二层也即图5所示的层1,层1包括一个层输出,也即图5中层1下方的黑色箭头,首先查询内存池中当前是否有计数标记为“0”的内存块,由于此时内存池中只有Blob 1,且Blob 1的计数标记为“1”,说明内存池中当前没有可复用的内存块,这时,可根据层1的层输出的大小新建一个内存块Blob 2,并将Blob 2的计数标记设置为“1”,表示当前已将Blob 2分配给层1的层输出了,所以将Blob 2的计数标记设置为“1”表示当前Blob 2处于不可复用状态。
获取层1的层输入,在图5中层1包括一个层输入,也即图5中紧挨层1上方的箭头为层1的层输入,那么,就能够确定出层1的层输入的前层输出为输入层的层输出,然后更改层1的层输入的前层输出的内存块的计数标记,也即将输入层的层输出的内存块Blob 1的计数标记减去一个计数单位1,Blob 1的计数标记就更改为“0”,表示Blob 1从不可以复用状态变为可复用状态。
完成对层1的输入输出的内存管理后,内存池中的内存块的标记就为图5中的第二行:“0 1——”,也即Blob 1计数标记为“0”,Blob 2计数标记为“1”,Blob 3目前不存在。
依次取第三层,也即图5中的层2,层2包括两个层输出,先获取层2的第一个层输出(也即图5中紧挨层2下方的标识有A的箭头),查找内存池中的是否有可复用的内存块也即计数标记为“0”的内存块,由于Blob 1当前的计数标记为“0”,那么,就能够查询到Blob 1当前为可复用状态。
查看Blob 1的内存大小是否满足层2的第一个层输出的大小,若满足也即Blob 1的内存大小大于或等于层2的第一个层输出的大小,则将Blob 1分配给层2的第一个层输出,若不满足也即Blob 1的内存大小小于层2的第一个层输出的大小,就将Blob 1作为备选池中的备选内存块,并继续查找内存池中的其他内存块。
这里假设Blob 1的内存大小大于层2的第一个层输出的大小,那么,就可以将Blob1分配给层2的第一个层输出,并根据引用层2的第一个层输出作为层输入的层的数量来设置Blob 1计数标记,由于层2的第一个层输出仅被接下来的层3引用,所以,可以在Blob 1计数标记的值“0”上加1,也即变为“1”,表示Blob 1从可复用状态又转变为不可复用状态。
取层2的第二个层输出(也即图5中紧挨层2下方的标识有B的箭头),查询当前内存池中内存块可知,当前,内存池中包括Blob 1和Blob 2,且Blob 1和Blob 2的计数标记均为1,说明内存池中当前没有可复用的内存块,这时可以根据层2的第二个层输出的大小为层2的第二个层输出新建一个内存块Blob 3,根据引用层2的第二个层输出的层的个数设置Blob 3的计数标记,由于引用层2的第二个层输出的层包括层4和层5,所以就可以将Blob 3的计数标记设置为“2”,表示Blob 3当前处于不可复用状态。
获取层2的层输入,图5中层2包括一个层输入,确定出层2的层输入的前层输出为层1的层输出,找到层1的层输出对应的内存块Blob 2,更改Blob 2的计数标记,也即将Blob2的计数标记的值减1,Blob 2的计数标记就从“1”变为“0”,表示Blob 2从不可复用状态转变为可复用状态。
完成对层2的输入输出的内存管理后,内存池中的内存块的标记就为图5中的第三行:“1 0 2”,也即Blob 1计数标记为“1”,Blob 2计数标记为“0”,Blob 3计数标记为“2”。
依次取第四层,也即图5中的层3,层3包括一个层输出,查找内存池中的是否有可复用的内存块也即计数标记为“0”的内存块,由于Blob 2当前的计数标记为“0”,那么,就能够查询到Blob 2当前为可复用状态。
查看Blob 2的内存大小是否满足层3的层输出的大小,这里假设Blob 2的内存大小等于层3的层输出的大小,那么,就可以将Blob 2分配给层3的层输出,并根据引用层3的层输出作为层输入的层的数量来设置Blob 3计数标记,由于层3的层输出仅被接下来的层4引用,所以,可以在Blob 2计数标记的值“0”上加1,也即变为“1”,表示Blob 2从可复用状态又变为不可复用状态。
获取层3的层输入,图5中层3的包括一个层输入,也即层3的层输入的前层输出为层2的第一个层输出,找到层2的第一个层输出对应的内存块Blob 1,更改Blob 1的计数标记,也即将Blob 1的计数标记的值减1,Blob1的计数标记就从“1”变为“0”,表示Blob 1从不可复用状态转变为可复用状态。
完成对层2的输入输出的内存管理后,内存池中的内存块的标记就为图5中的第四行:“01 2”,也即Blob 1计数标记为“0”,Blob 2计数标记为“1”,Blob 3计数标记为“2”。
依次取第五层,也即图5中的层4,层4包括一个层输出,查找内存池中的是否有可复用的内存块也即计数标记为“0”的内存块,由于Blob 1当前的计数标记为“0”,那么,就能够查询到Blob 1当前为可复用状态。
查看Blob 1的内存大小是否满足层4的层输出的大小,这里假设Blob 1的内存大小小于层4的层输出的大小,那么就将Blob 1作为备选池中的备选内存块,然后继续查询内存池中的内存块,由于内存池中的Blob 2的计数标记为“1”,Blob 3的计数标记为“2”,表示Blob 2和Blob 3均不可复用,所以,就可以将备选内存块Blob 1的内存大小调整的到与层4的层输出的大小相同,然后将内存大小调整后的Blob 1分配给层4的层输出,并将Blob 1当前的计数标记加上一个计数单位,也即由“0”变为“1”,Blob 1从可复用状态变为不可复用状态。
获取层4的层输入,图5中的层4包括两个层输入,可以先获取层4的第一个层输入(也即紧挨层4上方的标识有A的箭头),层4的第一个层输入的前层输出为层3的层输出,层3的层输出对应的内存块Blob 2的计数标记为“1”,就将内存块Blob 2的计数标记的值减去一个计数单位,Blob 2的计数标记的值就从“1”变为“0”,表示Blob 2从不可复用状态转变为可复用状态。
获取层4的第二个层输入(也即紧挨层4上方的标识有B的箭头),层4的第二个层输入的前层输出为层2的第二个层输出,层2的第二个层输出的内存块Blob 3的计数标记为2,就将Blob 3的计数标记的值减去一个计数单位,Blob 3的计数标记的值就从“2”变为“1”,表示Blob 3处于不可复用状态。
完成对层4的输入输出的内存管理后,内存池中的内存块的标记就为图5中的第四行:“1 0 1”,也即Blob 1计数标记为“1”,Blob 2计数标记为“0”,Blob 3计数标记为“1”。
依次取第六层,也即图5中的层5,层5包括一个层输出,查找内存池中的是否有可复用的内存块也即计数标记为“0”的内存块,由于Blob 2当前的计数标记为“0”,那么,就能够查询到Blob 2当前为可复用状态。
查看Blob 2的内存大小是否满足层5的层输出的大小,这里假设Blob 2的内存大小大于层5的层输出的大小,那么就将Blob2分配给层5的层输出,并将Blob 2当前的计数标记加上一个计数单位,也即由“0”变为“1”,Blob 2从可复用状态变为不可复用状态。
获取层5的层输入,图5中的层5包括两个层输入,可以先获取层5的第一个层输入(也即紧挨层4上方的标识有A的箭头),层5的第一个层输入的前层输出为层4的层输出,层4的层输出的内存块Blob 1的计数标记为“1”,将内存块Blob 1的计数标记的值减去一个计数单位,Blob 1的计数标记的值就从“1”变为“0”,表示Blob 1从不可复用状态转变为可复用状态。
获取层5的第二个层输入(也即紧挨层4上方的标识有B的箭头),层5的第二个层输入的前层输出为层2的第二个层输出,层2的第二个层输出的内存块Blob 3的计数标记当前为“1”,将内存块Blob 3的计数标记的值减去一个计数单位,Blob 3的计数标记的值就从“1”变为“0”,表示Blob 3从不可复用状态变为可复用状态。
完成对层4的输入输出的内存管理后,内存池中的内存块的标记就为图5中的第四行:“01 0”,也即Blob 1计数标记为“0”,Blob 2计数标记为“1”,Blob 3计数标记为“0”。
依次取第七层,也即图5中的层6,层6包括一个层输出,查找内存池中的是否有可复用的内存块也即计数标记为“0”的内存块,由于内存池中的Blob 1和Blob 3的计数标记均为“0”,在具体实践中,可以依次查找内存池中的是否有可复用的内存块也即计数标记为“0”的内存块,也即会首先查询到计数标记为“0”的Blob 1。
在查询到计数标记为“0”的Blob 1之后,查询Blob 1的内存大小是否大于或等于层6的层输出,若否,就将Blob 1放入备选池作为备选内存块,并继续查询内存池中的是否有可复用的内存块也即计数标记为“0”的内存块,这时就会查询到Blob 3的计数标记为“0”,然后,查询Blob 3的内存大小是否大于或等于层6的层输出,若Blob 3的内存大小大于或等于层6的层输出,就将Blob 3分配给层6的层输出,并将Blob 3的计数标记从“0”更改为“1”;若Blob 3的内存大小小于层6的层输出,就将Blob 3放入备选池作为备选内存块,然后从Blob 1和Blob 3中选出内存最大的内存块分配给层6的层输出,例如,Blob 1的内存大小大于Blob 3,就将Blob 1分配给层6的层输出,并将Blob 1的计数标记从“0”更改为“1”。
若在查询到Blob 1的计数标记为“0”之后,查询Blob 1的内存大小大于或等于层6的层输出,则直接将Blob 1分配给层6的层输出,并将Blob 1的计数标记从“0”更改为“1”,这时就不需要继续查询内存池中是否有满足层6的层输出的其他内存块。
在本发明实施例中,具体以查询到Blob 1的计数标记为“0”,且查询到Blob 1的内存大小大于层6的层输出,则直接将Blob 1分配给层6的层输出,并将Blob 1的计数标记从“0”更改为“1”为例。
获取层6的层输入,图5中层6的层输入包括一个,层6的层输入的前层输出为层5的层输出,层5的层输出的内存块为Blob 2,将Blob 2的当前计数标记的值减去一个计数单位,也即Blob 2的当前计数标记从“1”变为“0”。
完成对层6的输入输出的内存管理后,内存池中的内存块的标记就为图5中的第四行:“1 0 0”,也即Blob 1计数标记为“1”,Blob 2计数标记为“0”,Blob 3计数标记为“0”。
到此,就完成了对包括输入层在内的前向计算过程中划分的7个层的输入输出内存管理,可见,上述7个层的输入输出内存管理中,通过本发明实施例中的内存管理方法,只需要为这7层划分3个内存块即可,而不像现有技术中那样,需要为这7层划分至少7个内存块,所以,通过本发明实施例中的内存管理方法,可以极大的减少前向计算过程中内存的划分,进而极大的减少内存的占用,提高内存的使用效率。
基于同一发明构思,本发明实施例中提供了一种内存管理设备,该设备的内存管理方法的具体实施可参见上述方法实施例部分的描述,重复之处不再赘述,请参考图6,该设备包括:
第一获取单元20,用于获取层的层输出,其中,所述层表示计算单元;
分配单元21,用于分别针对每一个层输出执行以下操作,以实现对每一个层输出的内存分配:若查找到内存池中计数标记为第一标记的第一内存块,则将所述第一内存块分配给当前层输出,并将所述第一内存块的第一标记更改为第二标记,其中,所述计数标记用于表示其对应的内存块的使用状态,所述第一标记表示内存块处于可复用状态,所述第二标记表示内存块处于不可复用状态;
第二获取单元22,用于获取所述层的层输入,分别确定每一个层输入的前层输出,以及更改所述前层输出的内存块的计数标记,以便所述前层输出的内存块进行复用,其中,所述前层输出表示传递数据给层输入的层的层输出。
可选的,所述分配单元还用于:
若未查找到内存池中计数标记为所述第一标记的内存块时,则为所述当前层输出新建第二内存块,并将所述第二内存块的计数标记设置为所述第二标记。
可选的,所述分配单元还用于:
获取引用所述当前层输出的层输入的数量;
将所述第一标记更改为与所述数量相同的第二标记。
可选的,所述分配单元还用于:
若查找到内存池中计数标记为第一标记、且内存大小大于或等于当前层输出的大小的第一内存块,则将第一内存块分配给所述当前层输出;
否则,将查找到的内存池中计数标记为第一标记、且内存大小小于当前层输出的大小的内存块作为备选内存块,确定所述备选内存块中内存大小最大的第一内存块,按照所述当前层输出的大小调整第一内存块的内存大小,并将调整后的第一内存块分配给所述当前层输出。
可选的,所述第二获取单元还用于:
获取所述每一个层输入的前层输出的内存块的目标计数标记;
将所述目标计数标记的计数值减去一个计数单位。
基于同一发明构思,本发明实施例中提供了一种设备,包括:
至少一个处理器,以及
与所述至少一个处理器连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,执行如上所述的一种神经网络前向计算过程中的内存管理方法。
基于同一发明构思,本发明实施例中提供了一种计算机可读存储介质:
所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如上所述的一种神经网络前向计算过程中的内存管理方法。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (12)
1.一种神经网络前向计算过程中的内存管理方法,其特征在于,包括:
获取层的层输出,其中,所述层表示计算单元;
分别针对每一个层输出执行以下操作,以实现对每一个层输出的内存分配:若查找到内存池中计数标记为第一标记的第一内存块,则将所述第一内存块分配给当前层输出,并将所述第一内存块的第一标记更改为第二标记,其中,所述计数标记用于表示其对应的内存块的使用状态,所述第一标记表示内存块处于可复用状态,所述第二标记表示内存块处于不可复用状态;
获取所述层的层输入,分别确定每一个层输入的前层输出,以及更改所述前层输出的内存块的计数标记,以便所述前层输出的内存块进行复用,其中,所述前层输出表示传递数据给层输入的层的层输出。
2.如权利要求1所述的方法,其特征在于,若未查找到内存池中计数标记为所述第一标记的内存块时,则为所述当前层输出新建第二内存块,并将所述第二内存块的计数标记设置为所述第二标记。
3.如权利要求1所述的方法,其特征在于,所述将所述第一内存块的第一标记更改为第二标记,具体包括:
获取引用所述当前层输出的层输入的数量;
将所述第一标记更改为与所述数量相同的第二标记。
4.如权利要求1-3中任一项所述的方法,其特征在于,所述若查找到内存池中计数标记为第一标记的第一内存块,则将所述第一内存块分配给当前层输出,包括:
若查找到内存池中计数标记为第一标记、且内存大小大于或等于当前层输出的大小的第一内存块,则将第一内存块分配给所述当前层输出;
否则,将查找到的内存池中计数标记为第一标记、且内存大小小于当前层输出的大小的内存块作为备选内存块,确定所述备选内存块中内存大小最大的第一内存块,按照所述当前层输出的大小调整第一内存块的内存大小,并将调整后的第一内存块分配给所述当前层输出。
5.如权利要求1-3中任一项所述的方法,其特征在于,所述更改每一个层输入的前层输出的内存块的计数标记,具体包括:
获取所述每一个层输入的前层输出的内存块的目标计数标记;
将所述目标计数标记的计数值减去一个计数单位。
6.一种内存管理设备,其特征在于,包括:
第一获取单元,用于获取层的层输出,其中,所述层表示计算单元;
分配单元,用于分别针对每一个层输出执行以下操作,以实现对每一个层输出的内存分配:若查找到内存池中计数标记为第一标记的第一内存块,则将所述第一内存块分配给当前层输出,并将所述第一内存块的第一标记更改为第二标记,其中,所述计数标记用于表示其对应的内存块的使用状态,所述第一标记表示内存块处于可复用状态,所述第二标记表示内存块处于不可复用状态;
第二获取单元,用于获取所述层的层输入,分别确定每一个层输入的前层输出,以及更改所述前层输出的内存块的计数标记,以便所述前层输出的内存块进行复用,其中,所述前层输出表示传递数据给层输入的层的层输出。
7.如权利要求6所述的设备,其特征在于,所述分配单元还用于:
若未查找到内存池中计数标记为所述第一标记的内存块时,则为所述当前层输出新建第二内存块,并将所述第二内存块的计数标记设置为所述第二标记。
8.如权利要求6所述的设备,其特征在于,所述分配单元还用于:
获取引用所述当前层输出的层输入的数量;
将所述第一标记更改为与所述数量相同的第二标记。
9.如权利要求6-8中任一项所述的设备,其特征在于,所述分配单元还用于:
若查找到内存池中计数标记为第一标记、且内存大小大于或等于当前层输出的大小的第一内存块,则将第一内存块分配给所述当前层输出;
否则,将查找到的内存池中计数标记为第一标记、且内存大小小于当前层输出的大小的内存块作为备选内存块,确定所述备选内存块中内存大小最大的第一内存块,按照所述当前层输出的大小调整第一内存块的内存大小,并将调整后的第一内存块分配给所述当前层输出。
10.如权利要求6-8中任一项所述的设备,其特征在于,所述第二获取单元还用于:
获取所述每一个层输入的前层输出的内存块的目标计数标记;
将所述目标计数标记的计数值减去一个计数单位。
11.一种设备,其特征在于,包括:
至少一个处理器,以及
与所述至少一个处理器连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,执行如权利要求1-5任一项所述的方法。
12.一种计算机可读存储介质,其特征在于:
所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如权利要求1-5中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810284962.2A CN108829610B (zh) | 2018-04-02 | 2018-04-02 | 一种神经网络前向计算过程中的内存管理方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810284962.2A CN108829610B (zh) | 2018-04-02 | 2018-04-02 | 一种神经网络前向计算过程中的内存管理方法及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108829610A true CN108829610A (zh) | 2018-11-16 |
CN108829610B CN108829610B (zh) | 2020-08-04 |
Family
ID=64155125
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810284962.2A Active CN108829610B (zh) | 2018-04-02 | 2018-04-02 | 一种神经网络前向计算过程中的内存管理方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108829610B (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109815162A (zh) * | 2019-01-28 | 2019-05-28 | Oppo广东移动通信有限公司 | 内存管理方法、装置、移动终端及存储介质 |
CN110490313A (zh) * | 2019-08-14 | 2019-11-22 | 北京中科寒武纪科技有限公司 | 一种内存复用方法及其相关产品 |
TWI694413B (zh) * | 2018-12-12 | 2020-05-21 | 奇景光電股份有限公司 | 影像處理電路 |
US10867399B2 (en) | 2018-12-02 | 2020-12-15 | Himax Technologies Limited | Image processing circuit for convolutional neural network |
CN112099943A (zh) * | 2020-08-13 | 2020-12-18 | 深圳云天励飞技术股份有限公司 | 内存分配方法及相关设备 |
CN112256440A (zh) * | 2020-12-23 | 2021-01-22 | 上海齐感电子信息科技有限公司 | 神经网络推理的内存管理方法及装置 |
CN112256441A (zh) * | 2020-12-23 | 2021-01-22 | 上海齐感电子信息科技有限公司 | 神经网络推理的内存分配方法及装置 |
CN112766467A (zh) * | 2021-04-06 | 2021-05-07 | 深圳市一心视觉科技有限公司 | 基于卷积神经网络模型的图像识别方法 |
CN112783640A (zh) * | 2019-11-11 | 2021-05-11 | 上海肇观电子科技有限公司 | 预先分配内存的方法与设备、电路、电子设备及介质 |
CN112965663A (zh) * | 2021-03-05 | 2021-06-15 | 上海寒武纪信息科技有限公司 | 对数据块的存储空间进行复用的方法和相关产品 |
CN113127181A (zh) * | 2019-12-30 | 2021-07-16 | 杭州海康威视数字技术股份有限公司 | 内存管理方法、装置及存储介质 |
WO2021253875A1 (zh) * | 2020-06-18 | 2021-12-23 | 上海商汤智能科技有限公司 | 内存管理方法和相关产品 |
WO2022068663A1 (zh) * | 2020-09-29 | 2022-04-07 | 华为技术有限公司 | 内存分配方法、相关设备及计算机可读存储介质 |
WO2023092320A1 (en) * | 2021-11-24 | 2023-06-01 | Intel Corporation | In-memory protection for neural networks |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6823322B2 (en) * | 2001-02-14 | 2004-11-23 | Denso Corporation | Piecewise nonlinear mapper for digitals |
CN101122883A (zh) * | 2006-08-09 | 2008-02-13 | 中兴通讯股份有限公司 | 一种避免内存碎片化的内存分配方法 |
CN106484362B (zh) * | 2015-10-08 | 2020-06-12 | 上海兆芯集成电路有限公司 | 利用使用者指定二维定点算术运算的装置 |
US10546211B2 (en) * | 2016-07-01 | 2020-01-28 | Google Llc | Convolutional neural network on programmable two dimensional image processor |
US10621486B2 (en) * | 2016-08-12 | 2020-04-14 | Beijing Deephi Intelligent Technology Co., Ltd. | Method for optimizing an artificial neural network (ANN) |
CN107679620B (zh) * | 2017-04-19 | 2020-05-26 | 赛灵思公司 | 人工神经网络处理装置 |
CN107679621B (zh) * | 2017-04-19 | 2020-12-08 | 赛灵思公司 | 人工神经网络处理装置 |
CN107153873B (zh) * | 2017-05-08 | 2018-06-01 | 中国科学院计算技术研究所 | 一种二值卷积神经网络处理器及其使用方法 |
CN107451653A (zh) * | 2017-07-05 | 2017-12-08 | 深圳市自行科技有限公司 | 深度神经网络的计算方法、装置及可读存储介质 |
-
2018
- 2018-04-02 CN CN201810284962.2A patent/CN108829610B/zh active Active
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10867399B2 (en) | 2018-12-02 | 2020-12-15 | Himax Technologies Limited | Image processing circuit for convolutional neural network |
TWI694413B (zh) * | 2018-12-12 | 2020-05-21 | 奇景光電股份有限公司 | 影像處理電路 |
CN109815162A (zh) * | 2019-01-28 | 2019-05-28 | Oppo广东移动通信有限公司 | 内存管理方法、装置、移动终端及存储介质 |
CN110490313A (zh) * | 2019-08-14 | 2019-11-22 | 北京中科寒武纪科技有限公司 | 一种内存复用方法及其相关产品 |
WO2021093507A1 (zh) * | 2019-11-11 | 2021-05-20 | 上海肇观电子科技有限公司 | 预先分配内存的方法与设备、电路、电子设备及介质 |
CN112783640B (zh) * | 2019-11-11 | 2023-04-04 | 上海肇观电子科技有限公司 | 预先分配内存的方法与设备、电路、电子设备及介质 |
JP6993739B2 (ja) | 2019-11-11 | 2022-01-14 | ネクストヴイピーユー(シャンハイ)カンパニー リミテッド | 予めメモリを割り当てる方法及び装置、電子回路、電子機器並びに記憶媒体 |
CN112783640A (zh) * | 2019-11-11 | 2021-05-11 | 上海肇观电子科技有限公司 | 预先分配内存的方法与设备、电路、电子设备及介质 |
EP3819772A1 (en) * | 2019-11-11 | 2021-05-12 | Nextvpu (Shanghai) Co., Ltd. | Method for pre-allocating memory, the electronic device, and the computer product |
JP2021077378A (ja) * | 2019-11-11 | 2021-05-20 | ネクストヴイピーユー(シャンハイ)カンパニー リミテッドNextvpu(Shanghai)Co.,Ltd. | 予めメモリを割り当てる方法及び装置、電子回路、電子機器並びに記憶媒体 |
CN113127181B (zh) * | 2019-12-30 | 2024-02-20 | 杭州海康威视数字技术股份有限公司 | 内存管理方法、装置及存储介质 |
CN113127181A (zh) * | 2019-12-30 | 2021-07-16 | 杭州海康威视数字技术股份有限公司 | 内存管理方法、装置及存储介质 |
WO2021253875A1 (zh) * | 2020-06-18 | 2021-12-23 | 上海商汤智能科技有限公司 | 内存管理方法和相关产品 |
CN112099943A (zh) * | 2020-08-13 | 2020-12-18 | 深圳云天励飞技术股份有限公司 | 内存分配方法及相关设备 |
CN112099943B (zh) * | 2020-08-13 | 2024-05-03 | 深圳云天励飞技术股份有限公司 | 内存分配方法及相关设备 |
WO2022068663A1 (zh) * | 2020-09-29 | 2022-04-07 | 华为技术有限公司 | 内存分配方法、相关设备及计算机可读存储介质 |
CN112256440B (zh) * | 2020-12-23 | 2021-03-09 | 上海齐感电子信息科技有限公司 | 神经网络推理的内存管理方法及装置 |
CN112256441A (zh) * | 2020-12-23 | 2021-01-22 | 上海齐感电子信息科技有限公司 | 神经网络推理的内存分配方法及装置 |
CN112256440A (zh) * | 2020-12-23 | 2021-01-22 | 上海齐感电子信息科技有限公司 | 神经网络推理的内存管理方法及装置 |
CN112965663A (zh) * | 2021-03-05 | 2021-06-15 | 上海寒武纪信息科技有限公司 | 对数据块的存储空间进行复用的方法和相关产品 |
CN112766467A (zh) * | 2021-04-06 | 2021-05-07 | 深圳市一心视觉科技有限公司 | 基于卷积神经网络模型的图像识别方法 |
WO2023092320A1 (en) * | 2021-11-24 | 2023-06-01 | Intel Corporation | In-memory protection for neural networks |
Also Published As
Publication number | Publication date |
---|---|
CN108829610B (zh) | 2020-08-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108829610A (zh) | 一种神经网络前向计算过程中的内存管理方法及设备 | |
CN107301504B (zh) | 基于混合蛙跳—路径重连的生产运输协同调度方法和系统 | |
CN107168267A (zh) | 基于改进粒子群与启发式策略的生产排产方法及系统 | |
CN106802553A (zh) | 一种基于强化学习的铁路机车运行操控系统混合任务调度方法 | |
CN112801448B (zh) | 物料需求分配方法、装置、系统及存储介质 | |
CN108494861A (zh) | 用于服务资源调配的方法、装置及电子设备 | |
CN108241534A (zh) | 一种任务处理、分配、管理、计算的方法以及装置 | |
CN105974891B (zh) | 一种基于动态看板的模具生产过程自适应控制方法 | |
CN106502918B (zh) | 一种内存调度方法及装置 | |
WO2017050348A1 (de) | Freigabe eines verarbeitungsschrittes für ein verarbeitungsobjekt | |
CN109784656A (zh) | 一种离散制造协同生产计划排程方法 | |
CN106934577A (zh) | 货物布局方法和装置 | |
CN108270805A (zh) | 用于数据处理的资源分配方法及装置 | |
CN113269424B (zh) | 机器人集群任务分配方法、系统、设备及存储介质 | |
CN106991010A (zh) | 一种用于流媒体服务器的内存集中动态分配方法 | |
CN108428114A (zh) | 项目的信息处理方法及装置、存储介质、电子装置 | |
CN109324901B (zh) | 基于区块链的深度学习分布式计算方法、系统和节点 | |
CN110334993A (zh) | 一种对播种货位进行管控的方法、装置及计算机设备 | |
DE69826126T2 (de) | Verfahren und vorrichtung zur berechnung einer erforderlichen werkstoffmenge | |
WO2021190921A1 (de) | Computerimplementiertes verfahren für eine produktionsplanung und/oder -steuerung eines produktionssystems und produktionsplanung und/oder-steuerungssystem zur produktionsoptimierung | |
CN107437138B (zh) | 基于改进引力搜索算法的生产运输协同调度方法及系统 | |
CN104915250B (zh) | 一种实现作业内的MapReduce数据本地化的方法 | |
CN105262702B (zh) | 基于最小时延抖动的tdma通信网络时隙均匀分配方法 | |
CN104933110A (zh) | 一种基于MapReduce的数据预取方法 | |
CN109783189A (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 |