CN106779057B - 基于gpu的计算二值神经网络卷积的方法及装置 - Google Patents
基于gpu的计算二值神经网络卷积的方法及装置 Download PDFInfo
- Publication number
- CN106779057B CN106779057B CN201611001971.3A CN201611001971A CN106779057B CN 106779057 B CN106779057 B CN 106779057B CN 201611001971 A CN201611001971 A CN 201611001971A CN 106779057 B CN106779057 B CN 106779057B
- Authority
- CN
- China
- Prior art keywords
- thread block
- calculation
- thread
- gpu
- determining
- 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
- 238000000034 method Methods 0.000 title claims abstract description 46
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 39
- 238000004364 calculation method Methods 0.000 claims abstract description 114
- 230000000903 blocking effect Effects 0.000 claims abstract description 46
- 230000008569 process Effects 0.000 claims abstract description 15
- 230000006870 function Effects 0.000 claims description 10
- 230000006399 behavior Effects 0.000 claims description 5
- 238000012545 processing Methods 0.000 abstract description 9
- 238000013461 design Methods 0.000 abstract description 4
- 238000003672 processing method Methods 0.000 abstract 1
- 238000010586 diagram Methods 0.000 description 8
- 238000013135 deep learning Methods 0.000 description 6
- 238000004590 computer program Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 238000013527 convolutional neural network Methods 0.000 description 3
- 238000000638 solvent extraction Methods 0.000 description 3
- 238000013500 data storage Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013136 deep learning model Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
Images
Classifications
-
- 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
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string instructions
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30029—Logical and Boolean instructions, e.g. XOR, NOT
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Neurology (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Image Processing (AREA)
Abstract
本发明实施例提供了一种基于GPU的计算二值神经网络卷积的处理方法,包括:获取根据二值神经网络执行卷积操作的计算请求;根据所述计算请求,开启GPU上的至少一个线程块,其中,每个线程块包括多个线程;基于两级分块策略,确定所述至少一个线程块中每个线程块的计算区域范围,并确定每个线程块所包括的线程的计算区域范围;所述至少一个线程块中的每个线程块内的各个线程执行计算过程,得到计算结果;根据每个线程块内的各个线程得到的所述计算结果,确定相应的线程块的输出结果。本发明设计了基于GPU线程块的两级分块策略,充分利用了GPU的访存特性,从而能够在GPU设备上实现二值神经网络卷积计算,并且计算速度得到了提升,内存消耗得到了减少。
Description
技术领域
本发明涉及计算机视觉领域,更具体地涉及一种基于GPU的计算二值神经网络卷积的方法及装置。
背景技术
深度学习(Deep Learning)的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。在计算机视觉及相关领域,新兴的深度学习方法相比过去传统方法有了长足的进步。
卷积神经网络(Convolutional neural networks,简称CNNs)是一种深度的监督学习下的机器学习模型,是深度学习的核心操作,它将卷积核(Kernel)与原图像输入进行卷积操作得到输出。一般而言,卷积操作是一个深度学习模型中计算量最大、也是内存开销最多的部分,例如目前的CNN中卷积操作会占用70%以上的计算时间,因此优化卷积操作是很有必要的。为解决卷积计算量大、内存开销多的问题,二值神经网络(Binary NeuralNetwork,简称BNN)能够将卷积中32比特(bit)浮点数存储改为1bit二值存储,并将浮点计算替换成整数位运算,例如将浮点数乘法映射为按位的同或(XNOR)操作。然而,二值神经网络如何在图形处理单元(Graphics Processing Unit,简称GPU)设备上实现卷积的计算是急需解决的技术瓶颈。
发明内容
考虑到上述问题而提出了本发明。本发明提供了一种基于GPU的计算二值神经网络卷积的方法,使得二值神经网络卷积的计算能够在GPU上实现,且能够实现计算速度的提升。
根据本发明一方面,提供了一种基于GPU的计算二值神经网络卷积的方法,包括:
获取根据二值神经网络执行卷积操作的计算请求;
根据所述计算请求,开启GPU上的至少一个线程块,其中,每个线程块包括多个线程;
基于两级分块策略,确定所述至少一个线程块中每个线程块的计算区域范围,并确定每个线程块所包括的线程的计算区域范围;
所述至少一个线程块中的每个线程块内的各个线程执行计算过程,得到计算结果;
根据每个线程块内的各个线程得到的所述计算结果,确定相应的线程块的输出结果。
示例性地,被执行卷积操作的输入数据的物理数据布局为:所述输入数据在通道数维度分为多组,每组包括连续的b位,同一组中的位在物理存储空间上是连续的,相邻的组在所述物理存储空间上是不相邻的;其中b与所述GPU的显存位宽一致。
示例性地,所述计算过程包括:使用异或操作模拟XNOR操作的行为对所述输入数据进行计算,并使用popcount指令计算异或操作得到的结果中为1的位的数量,作为所述计算结果。
示例性地,所述根据每个线程块内的各个线程得到的所述计算结果,确定相应的线程块的输出结果包括:
利用投票函数对每个线程块内的各个线程得到的所述计算结果进行统计,如果所述计算结果中为1的位的数量大于为0的位的数量,则确定所述线程对应的判定结果为正,否则所述线程对应的判定结果为负;
将各个线程的所述判定结果整合成一个整数,得到相应的线程块的输出结果。
示例性地,所述两级分块策略包括:高层分块策略和低层分块策略,
所述基于两级分块策略,确定所述至少一个线程块中每个线程块的计算区域范围,并确定每个线程块所包括的线程的计算区域范围,包括:
基于所述高层分块策略,确定所述每个线程块的计算区域范围,并进一步根据所述低层分块策略,确定所述每个线程块所包括的线程的计算区域范围。
示例性地,所述高层分块策略依赖于所述GPU的共享内存的总量限制,所述低层分块策略依赖于所述GPU的寄存器的数量限制以及最大化指令级别的并行。
示例性地,在所述得到计算结果之后,还包括:
将所述输出结果存储在物理存储空间中,其中,所述输出结果的物理数据布局为:所述输出结果在通道数维度分为多组,每组包括连续的b位,同一组中的位在所述物理存储空间上是连续的,相邻的组在所述物理存储空间上是不相邻的;其中b与所述GPU的显存位宽一致。
示例性地,还包括:在所述每个线程块执行计算过程时,将输入数据载入共享内存中。
根据本发明另一方面,提供了一种基于GPU的计算二值神经网络卷积操作的装置,包括:
获取模块,用于获取根据二值神经网络执行卷积操作的计算请求;
开启模块,用于根据所述获取模块获取的所述计算请求,开启GPU上的至少一个线程块,其中,每个线程块包括多个线程;
确定模块,用于基于两级分块策略,确定所述至少一个线程块中每个线程块的计算区域范围,并确定每个线程块所包括的线程的计算区域范围;
计算模块,用于所述至少一个线程块中的每个线程块内的各个线程执行计算过程,得到计算结果;
统计模块,用于根据每个线程块内的各个线程得到的所述计算结果,确定相应的线程块的输出结果。
该装置能够用于实现前述第一方面所述的基于GPU的计算二值神经网络卷积的方法。
根据本发明另一方面,提供了一种计算机芯片,该计算机芯片包括GPU,当该GPU执行代码时,能够实现前述第一方面所述的基于GPU的计算二值神经网络卷积的方法。
本发明实施例中,设计了基于GPU线程块的两级分块策略,充分利用了GPU的访存特性,从而能够在GPU设备上实现二值神经网络的卷积计算,并且计算速度得到了提升,内存消耗得到了减少。
附图说明
通过结合附图对本发明实施例进行更详细的描述,本发明的上述以及其它目的、特征和优势将变得更加明显。附图用来提供对本发明实施例的进一步理解,并且构成说明书的一部分,与本发明实施例一起用于解释本发明,并不构成对本发明的限制。在附图中,相同的参考标号通常代表相同部件或步骤。
图1是包括GPU的电子设备的一个示意性框图;
图2是本发明实施例的基于GPU的计算二值神经网络卷积的方法的一个示意性流程图;
图3是本发明实施例的线程块的输出区域范围的一个示意图;
图4是本发明实施例的一种基于GPU的计算二值神经网络卷积的装置的一个示意性框图;
图5是本发明实施例的一种基于GPU的计算二值神经网络卷积的装置的另一个示意性框图。
具体实施方式
为了使得本发明的目的、技术方案和优点更为明显,下面将参照附图详细描述根据本发明的示例实施例。显然,所描述的实施例仅仅是本发明的一部分实施例,而不是本发明的全部实施例,应理解,本发明不受这里描述的示例实施例的限制。基于本发明中描述的本发明实施例,本领域技术人员在没有付出创造性劳动的情况下所得到的所有其它实施例都应落入本发明的保护范围之内。
随着显卡的发展,GPU越来越强大,而且GPU为显示图像做了优化。在计算上已经超越了通用的中央处理单元(Central Processing Unit,简称CPU)。统一计算设备架构(Compute Unified Device Architecture,简称CUDA)是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题,从而在应用程序中充分利用CPU和GPU各自的优点。
本发明的实施例提出了一种基于GPU的计算二值神经网络卷积的方法,其中,GPU可以包括在电子设备中,如图1所示为包括GPU的电子设备的一个示意性框图。
图1所示的电子设备10包括一个或多个处理器102、一个或多个存储装置104、输入装置106、输出装置108、图像传感器110以及一个或多个非图像传感器114,这些组件通过总线系统112和/或其它形式互连。应当注意,图1所示的电子设备10的组件和结构只是示例性的,而非限制性的,根据需要,所述电子设备也可以具有其他组件和结构。
所述处理器102可以包括CPU 1021和GPU 1022或者具有数据处理能力和/或指令执行能力的其它形式的处理单元,并且可以控制所述电子设备10中的其它组件以执行期望的功能。
所述存储装置104可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器1041和/或非易失性存储器1042。所述易失性存储器1041例如可以包括随机存取存储器(Random Access Memory,简称RAM)和/或高速缓冲存储器(cache)等。所述非易失性存储器1042例如可以包括只读存储器(Read-Only Memory,简称ROM)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器102可以运行所述程序指令,以实现各种期望的功能。在所述计算机可读存储介质中还可以存储各种应用程序和各种数据,例如所述应用程序使用和/或产生的各种数据等。
所述输入装置106可以是用户用来输入指令的装置,并且可以包括键盘、鼠标、麦克风和触摸屏等中的一个或多个。
所述输出装置108可以向外部(例如用户)输出各种信息(例如图像或声音),并且可以包括显示器、扬声器等中的一个或多个。
所述图像传感器110可以拍摄用户期望的图像(例如照片、视频等),并且将所拍摄的图像存储在所述存储装置104中以供其它组件使用。
示例性地,该电子设备10可以被实现为诸如智能手机、平板电脑、门禁系统的图像采集端等。
图2是本发明实施例的基于GPU的计算二值神经网络卷积的方法的一个示意性流程图。图2所示的方法包括:
S101,获取根据二值神经网络执行卷积操作的计算请求。
具体地,可以获取宿主端(host)发起的GPU端的计算请求,也就是说,S101包括从宿主端获取该计算请求。
可选地,该计算请求可以包括:针对输入数据,根据预定的二值神经网络执行卷积操作。
S102,根据所述计算请求开启GPU上的至少一个线程块,其中,每个线程块包括多个线程。
具体地,可以基于S101所获取的计算请求,开启GPU设备上的至少一个(例如一个、两个或其他合适的数量)线程块(Thread Block),并且,每个线程块中又会开启多个线程(thread)。例如,S102中可以根据计算请求开启GPU上的多个线程块,这样,多个线程块之间可以并行地进行处理;并且多个线程可以共享全局变量,共享内存,以合作完成一个任务;从而提高了处理的速率。
S103,基于两级分块策略,确定所述至少一个线程块中每个线程块的计算区域范围,并确定每个线程块所包括的线程的计算区域范围。
可选地,两级分块策略可以包括:高层分块策略和低层分块策略。其中,高层分块策略用于确定线程块的计算区域范围,低层分块策略用于确定线程块所包括的线程的计算区域范围。其中,计算区域范围是指计算涉及的输入数据的范围。
作为一例,所述高层分块策略依赖于所述GPU的共享内存的总量限制,所述低层分块策略依赖于所述GPU的寄存器的数量限制以及最大化指令级别的并行(InstructionLevel Parallelism)。
相应地,S103可以包括:基于所述高层分块策略,确定所述每个线程块的计算区域范围,并进一步根据所述低层分块策略,确定所述每个线程块所包括的线程的计算区域范围。
一般地,GPU的线程块有三维坐标,假设为(a×b×c),那么这三维坐标将分别映射至输出图像的通道数(channel)、输出图像的高度(height)、输出图像的宽度(width)上。其中的a一般为32的倍数,例如,a=32。
本发明实施例进行两级分块设定:高层分块是因为共享内存的总量限制,低层分块是因为寄存器数量限制以及最大化指令级别的并行。
以b=c=4为例,GPU的每个线程将计算(4×4)个输出答案。如图3所示,表示一个线程块计算的输出区域范围。其中每个小方块表示一个输出点,整个16×16的网格表示一个线程块计算的输出区域范围,灰度相同的连续区域表示单个线程计算的结果区域范围。可以看出,图3中的16×16的网格被分割为16个4×4的区域,每个区域分配给一个线程,且单个区域(即单个线程)内部负责计算4×4个结果。
S104,所述至少一个线程块中的每个线程块内的各个线程执行计算过程,得到计算结果。
可选地,在S104中,使用异或操作模拟XNOR操作的行为对输入数据进行计算,并使用popcount指令计算异或操作得到的结果中为1的位的数量,作为所述计算结果。
其中,popcount(population count)指令可以称为POPCNT指令,或者也可以称为sideways sum,该指令可以用于计算一个数的二进制表示有多少位是1。
示例性地,被执行卷积操作的输入数据的物理数据布局可以为:输入数据在通道数维度分为多组,每组包括连续的b位,同一组中的位在物理存储空间上是连续的,相邻的组在物理存储空间上是不相邻的。其中,b与所述GPU的显存位宽一致。
本发明实施例中,在每个线程块执行计算过程时,可以将输入数据载入共享内存中。具体地,每个线程块内部将计算该线程块结果所需的输入数据载入共享内存(SharedMemory)中,以加速被多次访问的数据。将输入数据载入共享内存可以增加内存的使用率,一次加载图片,产生多次的数据,而不需要多次访问图片,从而能够减少额外访问的时间,加快处理速度。
S105,根据每个线程块内的各个线程得到的所述计算结果,确定相应的线程块的输出结果。
可选地,可以利用投票函数将线程块内部的计算结果统计起来,并根据统计结果的正负决定最终结果的正负。具体可以包括:首先,利用投票函数对每个线程块内的各个线程得到的所述计算结果进行统计,如果所述计算结果中为1的位的数量大于为0的位的数量,则确定所述线程对应的判定结果为正,否则所述线程对应的判定结果为负;然后,将各个线程的所述判定结果整合成一个整数,得到相应的线程块的输出结果。也就是说,可以利用投票函数进行跨线程通讯,以得到相应线程块的最终计算结果(输出结果)。当然,还可以采用其他合适的方式进行跨线程通讯从而得到相应线程块的输出结果,此处并不进行限定。
在本实施例中,每个线程块负责计算一部分连续输出结果,输入输出均以无符号整数的形式存储。这里无符号整数的位数以GPU设备的天然寄存器宽度为准,一般为32或64。
另外,本发明实施例中,还可以包括:将输入输出存储在物理存储空间中。其中,物理存储空间中的0表示逻辑上的-1,物理存储空间中的1表示逻辑上的1。
在对输入输出进行存储时,可以采用N(C/b)HWb的存储格式。其中,N表示批处理规模,C(channel)表示通道数,H(height)表示图像高度,W(width)表示图像宽度,b表示存储使用的无符号整数的宽度。N(C/b)HWb的存储格式表示待存储数据在在通道数(C)维度分为多组,每组包括连续的b位,同一组中的位在物理存储空间上是连续的;相邻的组在物理存储空间上是不相邻的。举例来说,待存储数据在通道数维度的第0~b-1位分别映射到物理存储空间的第0~b-1位,待存储数据在通道数维度的第b~2b-1位分别映射到物理存储空间的第2b~3b-1位。可理解,待存储数据在通道数维度的第0~b-1位是位于同一组中的位,它们映射到物理存储空间上连续的第0~b-1位。待存储数据在通道数维度的第b~2b-1位位于同一组中的位,它们映射到物理存储空间上连续的第2b~3b-1位。待存储数据在通道数维度的第0~b-1位和第b~2b-1位是两个相邻的组,是连续的,但是它们映射到物理存储空间上的位置是不相邻的,即物理存储空间的第0~b-1位与物理存储空间的第2b~3b-1位不相邻,是非连续的。
这里的待存储数据可以为输入数据和/或输出数据,输出数据可以为上述的输出结果。以待存储数据为输出结果为例,输出结果的物理数据布局可以为:输出结果在通道数维度分为多组,每组包括连续的b位,同一组中的位在物理存储空间上是连续的,相邻的组在物理存储空间上是不相邻的;其中b与所述GPU的显存位宽一致。
传统非二值神经网络会使用NCHW格式,本发明实施例中,所使用的是N(C/b)HWb的存储格式,其中,由于二值神经网络需要将多值压缩到单个无符号整数中存储,而压缩的维度会发生在C维度,因此难以直接利用NCHW格式。若假设存储使用的无符号整数的宽度为b,则在C维度每隔b位分隔一下,便可以形成N(C/b)HWb的存储格式,因此,本发明实施例使用N(C/b)HWb这一种新的存储格式,更加适用于二值神经网络的卷积计算。
可见,本发明实施例中的数据存储格式能够充分利用GPU的访存特性。
本发明在GPU设备上实现了二值神经网络的卷积计算,由于设计了基于GPU线程块的两级分块策略,充分利用了GPU的访存特性,因而能够提高在GPU设备上实现二值神经网络卷积计算的计算速度,降低了内存消耗。此外,由于设计了数据存储格式以充分利用GPU的访存特性,更加适用于二值神经网络的卷积计算。由于利用了GPU的共享内存(sharedmemory)进行加速,可以进一步提高二值神经网络卷积计算速度。由于利用投票函数进行跨线程通讯,可以更准确的得到最终计算结果。相比传统的非二值神经网络,本发明实施例中的二值神经网络有10到20倍的计算速度提升,内存消耗减少到了1/32。
图4是本发明实施例的一种基于GPU的计算二值神经网络卷积的装置的一个示意性框图。图4所示的装置40包括:获取模块401、开启模块402、确定模块403、计算模块404和统计模块405。
获取模块401,用于获取根据二值神经网络执行卷积操作的计算请求;开启模块402,用于根据所述获取模块401获取的所述计算请求,开启GPU上的至少一个线程块,其中,每个线程块包括多个线程;确定模块403,用于基于两级分块策略,确定所述至少一个线程块中每个线程块的计算区域范围,并确定每个线程块所包括的线程的计算区域范围;计算模块404,用于所述至少一个线程块中的每个线程块内各个线程块执行计算过程,得到计算结果;统计模块405,用于根据每个线程块内的各个线程块得到的所述计算结果,确定相应的线程块的输出结果。
可选地,获取模块401具体用于从宿主端获取该计算请求。
可选地,被执行卷积操作的输入数据的物理数据布局为:所述输入数据在通道数维度分为多组,每组包括连续的b位,同一组中的位在物理存储空间上是连续的,相邻的组在所述物理存储空间上是不相邻的;其中b与所述GPU的显存位宽一致。
可选地,所述统计模块405,具体用于:利用投票函数对每个线程块内的各个线程得到的所述计算结果进行统计,如果所述计算结果中为1的位的数量大于为0的位的数量,则确定所述线程对应的判定结果为正,否则所述线程对应的判定结果为负;将各个线程的所述判定结果整合成一个整数,得到相应的线程块的输出结果。
可选地,所述两级分块策略包括:高层分块策略和低层分块策略。所述高层分块策略依赖于所述GPU的共享内存的总量限制,所述低层分块策略依赖于所述GPU的寄存器的数量限制以及最大化指令级别的并行。相应地,确定模块403,具体用于:基于所述高层分块策略,确定所述每个线程块的计算区域范围,并进一步根据所述低层分块策略,确定所述每个线程块所包括的线程的计算区域范围。
可选地,计算模块404具体用于:使用异或操作模拟XNOR操作的行为对输入数据进行计算,并使用popcount指令计算异或操作得到的结果中为1的位的数量,作为所述计算结果。
另外,如图5所示,该装置40还可以进一步包括存储模块406,用于将输入和输出以无符号整数的形式存储在物理存储空间中,且存储格式为N(C/b)HWb的存储格式。
例如,存储模块406,用于将所述输出结果存储在物理存储空间中,其中,所述输出结果在通道数维度分为多组,每组包括连续的b位,同一组中的位在所述物理存储空间上是连续的,相邻的组在所述物理存储空间上是不相邻的;其中b与所述GPU的显存位宽一致。
此外,如图5所示,该装置40还可以进一步包括共享模块407,用于在所述每个线程块执行计算过程时,将输入数据载入共享内存中。这样,能够加速多次被访问的数据。
可选地,本发明实施例中的装置40可以为GPU或包括GPU的任何可行的装置。进一步地,该装置可以为安装有GPU的服务器或服务器集群。
本发明实施例还提供了一种电子设备,该电子设备包括前述图4或图5所述的装置。
尽管这里已经参考附图描述了示例实施例,应理解上述示例实施例仅仅是示例性的,并且不意图将本发明的范围限制于此。本领域普通技术人员可以在其中进行各种改变和修改,而不偏离本发明的范围和精神。所有这些改变和修改意在被包括在所附权利要求所要求的本发明的范围之内。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个设备,或一些特征可以忽略,或不执行。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本发明并帮助理解各个发明方面中的一个或多个,在对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该本发明的的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如相应的权利要求书所反映的那样,其发明点在于可以用少于某个公开的单个实施例的所有特征的特征来解决相应的技术问题。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域的技术人员可以理解,除了特征之间相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的物品分析设备中的一些模块的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
以上所述,仅为本发明的具体实施方式或对具体实施方式的说明,本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。本发明的保护范围应以权利要求的保护范围为准。
Claims (14)
1.一种基于GPU的计算二值神经网络卷积的方法,其特征在于,包括:
获取根据二值神经网络执行卷积操作的计算请求;
根据所述计算请求,开启GPU上的至少一个线程块,其中,每个线程块包括多个线程;
基于两级分块策略,确定所述至少一个线程块中每个线程块的计算区域范围,并确定每个线程块所包括的线程的计算区域范围;
所述至少一个线程块中的每个线程块内的各个线程执行计算过程,得到计算结果;
根据每个线程块内的各个线程得到的所述计算结果,确定相应的线程块的输出结果;被执行卷积操作的输入数据的物理数据布局为:所述输入数据在通道数维度分为多组,每组包括连续的b位,同一组中的位在物理存储空间上是连续的,相邻的组在所述物理存储空间上是不相邻的;其中b与所述GPU的显存位宽一致。
2.如权利要求1所述的方法,其特征在于,所述计算过程包括:
使用异或操作模拟XNOR操作的行为对所述输入数据进行计算,并使用popcount指令计算异或操作得到的结果中为1的位的数量,作为所述计算结果。
3.如权利要求2所述的方法,其特征在于,所述根据每个线程块内的各个线程得到的所述计算结果,确定相应的线程块的输出结果包括:
利用投票函数对每个线程块内的各个线程得到的所述计算结果进行统计,如果所述计算结果中为1的位的数量大于为0的位的数量,则确定所述线程对应的判定结果为正,否则所述线程对应的判定结果为负;
将各个线程的所述判定结果整合成一个整数,得到相应的线程块的输出结果。
4.如权利要求1至3任一项所述的方法,其特征在于,所述两级分块策略包括:高层分块策略和低层分块策略,
所述基于两级分块策略,确定所述至少一个线程块中每个线程块的计算区域范围,并确定每个线程块所包括的线程的计算区域范围,包括:
基于所述高层分块策略,确定所述每个线程块的计算区域范围,并进一步根据所述低层分块策略,确定所述每个线程块所包括的线程的计算区域范围。
5.如权利要求4所述的方法,其特征在于,所述高层分块策略依赖于所述GPU的共享内存的总量限制,所述低层分块策略依赖于所述GPU的寄存器的数量限制以及最大化指令级别的并行。
6.如权利要求1所述的方法,其特征在于,在所述确定相应的线程块的输出结果之后,还包括:
将所述输出结果存储在物理存储空间中,其中,所述输出结果的物理数据布局为:所述输出结果在通道数维度分为多组,每组包括连续的b位,同一组中的位在所述物理存储空间上是连续的,相邻的组在所述物理存储空间上是不相邻的;其中b与所述GPU的显存位宽一致。
7.如权利要求1所述的方法,其特征在于,还包括:在所述每个线程块执行计算过程时,将输入数据载入共享内存中。
8.一种基于GPU的计算二值神经网络卷积的装置,其特征在于,包括:
获取模块,用于获取根据二值神经网络执行卷积操作的计算请求;
开启模块,用于根据所述获取模块获取的所述计算请求,开启GPU上的至少一个线程块,其中,每个线程块包括多个线程;
确定模块,用于基于两级分块策略,确定所述至少一个线程块中每个线程块的计算区域范围,并确定每个线程块所包括的线程的计算区域范围;
计算模块,用于所述至少一个线程块中的每个线程块内的各个线程执行计算过程,得到计算结果;
统计模块,用于根据每个线程块内的各个线程得到的所述计算结果,确定相应的线程块的输出结果;被执行卷积操作的输入数据的物理数据布局为:所述输入数据在通道数维度分为多组,每组包括连续的b位,同一组中的位在物理存储空间上是连续的,相邻的组在所述物理存储空间上是不相邻的;其中b与所述GPU的显存位宽一致。
9.如权利要求8所述的装置,其特征在于,所述计算模块具体用于:
使用异或操作模拟XNOR操作的行为对所述输入数据进行计算,并使用popcount指令计算异或操作得到的结果中为1的位的数量,作为所述计算结果。
10.如权利要求9所述的装置,其特征在于,所述统计模块具体用于:
利用投票函数对每个线程块内的各个线程得到的所述计算结果进行统计,如果所述计算结果中为1的位的数量大于为0的位的数量,则确定所述线程对应的判定结果为正,否则所述线程对应的判定结果为负;
将各个线程的所述判定结果整合成一个整数,得到相应的线程块的输出结果。
11.如权利要求8至10任一项所述的装置,其特征在于,所述两级分块策略包括:高层分块策略和低层分块策略,
所述确定模块,具体用于:
基于所述高层分块策略,确定所述每个线程块的计算区域范围,并进一步根据所述低层分块策略,确定所述每个线程块所包括的线程的计算区域范围。
12.如权利要求11所述的装置,其特征在于,所述高层分块策略依赖于所述GPU的共享内存的总量限制,所述低层分块策略依赖于所述GPU的寄存器的数量限制以及最大化指令级别的并行。
13.如权利要求8所述的装置,其特征在于,还包括存储模块,用于:
将所述输出结果存储在物理存储空间中,其中,所述输出结果在通道数维度分为多组,每组包括连续的b位,同一组中的位在所述物理存储空间上是连续的,相邻的组在所述物理存储空间上是不相邻的;其中b与所述GPU的显存位宽一致。
14.如权利要求8所述的装置,其特征在于,还包括共享模块,用于:在所述每个线程块执行计算过程时,将输入数据载入共享内存中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611001971.3A CN106779057B (zh) | 2016-11-11 | 2016-11-11 | 基于gpu的计算二值神经网络卷积的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611001971.3A CN106779057B (zh) | 2016-11-11 | 2016-11-11 | 基于gpu的计算二值神经网络卷积的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106779057A CN106779057A (zh) | 2017-05-31 |
CN106779057B true CN106779057B (zh) | 2020-04-17 |
Family
ID=58968065
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611001971.3A Active CN106779057B (zh) | 2016-11-11 | 2016-11-11 | 基于gpu的计算二值神经网络卷积的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106779057B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107145939B (zh) * | 2017-06-21 | 2020-11-24 | 北京图森智途科技有限公司 | 一种低计算能力处理设备的计算机视觉处理方法及装置 |
CN109976809B (zh) * | 2017-12-28 | 2020-08-25 | 中科寒武纪科技股份有限公司 | 调度方法及相关装置 |
CN110321998B (zh) * | 2018-03-31 | 2022-06-14 | 赛灵思公司 | 卷积神经网络实现方法、装置、加速设备、存储介质 |
CN108681773B (zh) * | 2018-05-23 | 2020-01-10 | 腾讯科技(深圳)有限公司 | 数据运算的加速方法、装置、终端及可读存储介质 |
CN111914986A (zh) * | 2019-05-10 | 2020-11-10 | 北京京东尚科信息技术有限公司 | 用于确定二值卷积加速指标的方法及相关设备 |
CN110377342B (zh) * | 2019-06-10 | 2022-08-30 | 平安科技(深圳)有限公司 | 基于卷积神经网络的显存处理方法、装置及存储介质 |
US12039430B2 (en) * | 2019-11-15 | 2024-07-16 | Samsung Electronics Co., Ltd. | Electronic device and method for inference binary and ternary neural networks |
CN111062473B (zh) * | 2019-12-16 | 2023-05-23 | 腾讯科技(深圳)有限公司 | 神经网络模型中的数据计算方法、图像处理方法及装置 |
CN113743598B (zh) * | 2020-05-27 | 2023-08-04 | 杭州海康威视数字技术股份有限公司 | 一种ai芯片的运行方式的确定方法和装置 |
CN112463401A (zh) * | 2020-10-30 | 2021-03-09 | 中国石油天然气集团有限公司 | 一种基于gpu的地震数据相关方法和装置 |
CN112990370B (zh) * | 2021-04-26 | 2021-09-10 | 腾讯科技(深圳)有限公司 | 图像数据的处理方法和装置、存储介质及电子设备 |
CN117132450B (zh) * | 2023-10-24 | 2024-02-20 | 芯动微电子科技(武汉)有限公司 | 一种可实现数据共享的计算装置和图形处理器 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1627251A (zh) * | 2003-12-09 | 2005-06-15 | 微软公司 | 使用图形处理单元加速并优化机器学习技术的处理 |
CN102819820A (zh) * | 2012-08-14 | 2012-12-12 | 长沙景嘉微电子股份有限公司 | 基于分块渲染的gpu中多管线渲染的实现方法 |
CN104077233A (zh) * | 2014-06-18 | 2014-10-01 | 百度在线网络技术(北京)有限公司 | 单通道卷积层及多通道卷积层处理方法和装置 |
CN105869117A (zh) * | 2016-03-28 | 2016-08-17 | 上海交通大学 | 一种针对深度学习超分辨率技术的gpu加速方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9904976B2 (en) * | 2015-01-16 | 2018-02-27 | Nec Corporation | High performance portable convulational neural network library on GP-GPUs |
-
2016
- 2016-11-11 CN CN201611001971.3A patent/CN106779057B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1627251A (zh) * | 2003-12-09 | 2005-06-15 | 微软公司 | 使用图形处理单元加速并优化机器学习技术的处理 |
CN102819820A (zh) * | 2012-08-14 | 2012-12-12 | 长沙景嘉微电子股份有限公司 | 基于分块渲染的gpu中多管线渲染的实现方法 |
CN104077233A (zh) * | 2014-06-18 | 2014-10-01 | 百度在线网络技术(北京)有限公司 | 单通道卷积层及多通道卷积层处理方法和装置 |
CN105869117A (zh) * | 2016-03-28 | 2016-08-17 | 上海交通大学 | 一种针对深度学习超分辨率技术的gpu加速方法 |
Non-Patent Citations (2)
Title |
---|
Binarized Neural Networks: Training Neural Networks withWeights and Activations Constrained to +1 or -1;Matthieu Courbariaux et al.;《Computer Science》;20160317;第1-11页 * |
XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks;Mohammad Rastegari et al.;《European Conference on Computer Vision》;20160917;第525-542页 * |
Also Published As
Publication number | Publication date |
---|---|
CN106779057A (zh) | 2017-05-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106779057B (zh) | 基于gpu的计算二值神经网络卷积的方法及装置 | |
US11631239B2 (en) | Iterative spatio-temporal action detection in video | |
CN108875511B (zh) | 图像生成的方法、装置、系统及计算机存储介质 | |
US12056595B2 (en) | Method and apparatus for processing convolution operation in neural network using sub-multipliers | |
US11836597B2 (en) | Detecting visual artifacts in image sequences using a neural network model | |
Van den Braak et al. | Fast hough transform on GPUs: Exploration of algorithm trade-offs | |
US11983624B2 (en) | Auto generation and tuning tool for convolution kernels | |
US10684824B2 (en) | Stochastic rounding of numerical values | |
CN111274999B (zh) | 数据处理、图像处理方法、装置及电子设备 | |
EP3678037A1 (en) | Neural network generator | |
CN108875519B (zh) | 对象检测方法、装置和系统及存储介质 | |
CN111768458A (zh) | 一种基于卷积神经网络的稀疏图像处理方法 | |
TWI769603B (zh) | 影像處理方法及存儲介質 | |
CN111340790B (zh) | 包围盒的确定方法、装置、计算机设备和存储介质 | |
US11522565B2 (en) | Packed error correction code (ECC) for compressed data protection | |
CN110738317A (zh) | 基于fpga的可变形卷积网络运算方法、装置和系统 | |
CN107402905B (zh) | 基于神经网络的计算方法及装置 | |
US9830731B2 (en) | Methods of a graphics-processing unit for tile-based rendering of a display area and graphics-processing apparatus | |
Wang et al. | A CUDA-enabled parallel algorithm for accelerating retinex | |
CN111429388B (zh) | 一种图像处理方法、装置和终端设备 | |
CN113822975B (zh) | 用于对图像进行有效采样的技术 | |
US11508111B1 (en) | Augmented reality shader programs | |
CN108520532B (zh) | 识别视频中物体运动方向的方法及装置 | |
CN108734712B (zh) | 背景分割的方法、装置及计算机存储介质 | |
Bozkurt et al. | Effective Gaussian blurring process on graphics processing unit with CUDA |
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 | ||
CB02 | Change of applicant information |
Address after: 100190 Beijing, Haidian District Academy of Sciences, South Road, No. 2, block A, No. 313 Applicant after: MEGVII INC. Applicant after: Beijing maigewei Technology Co., Ltd. Address before: 100190 Beijing, Haidian District Academy of Sciences, South Road, No. 2, block A, No. 313 Applicant before: MEGVII INC. Applicant before: Beijing aperture Science and Technology Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |