一种基于DMA的输入层地址非对齐问题的解决方法与流程
未命名
07-23
阅读:104
评论:0
一种基于dma的输入层地址非对齐问题的解决方法
技术领域
1.本发明涉及神经网络技术领域,特别涉及一种基于dma的输入层地址非对齐问题的解决方法。
背景技术:
2.近年来,随着科技的飞速发展,大数据时代已经到来,神经网络中大量的数据处理技术日益成为重要的应用技术之一。根据现有技术中的dma搬运数据的规则,数据搬运的源地址和目的地址需要64对齐,dma搬运数据量需要64字节对齐,只有这三个条件都满足时,才能确保dma数据的正确性。神经网络中输入层算子采取的按行dma搬运数据,即以输入featuremap每行作为一个dma数据块,将卷积所需的输入featuremap数据搬运到目的存储空间。
3.然而,现有技术中,由于输入层的输入featuremap只有4个通道(bgra),输入层算子采取的按行dma搬运数据,那么,当输入featuremap为8bit时,为确保dma搬运数据输入地址的64对齐,只能支持输入featuremap宽度为16对齐的输入。
4.此外,现有技术中的常用术语如下:
5.1、align64(x):align64(x)=(x+63)/64*64。
6.2、地址对齐:地址对64求模等于0。
7.3、地址非对齐:地址对64求模不等于0。
8.4、dma:全称direct memory access,即直接存储器访问,dma传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。
9.5、bgra:像素格式。
技术实现要素:
10.为了解决上述问题,本技术的目的在于:克服由运用dma搬运数据带来的输入featuremap宽度需16对齐的限制,解决在输入层地址非对齐的情况下,使用dma正确的搬运数据。
11.具体地,本发明提供一种基于dma的输入层地址非对齐问题的解决方法,所述方法在dma地址非64对齐的情况下,仅需将dma每个数据块对应的偏移量yi记录下来,即可根据dma每个数据块的目的地址+偏移量yi的方式来取到每个数据块的真实数据:
12.当偏移量yi大于等于0时,则dma第i块数据的源地址=dma第i-1块数据的源地址+align64(x
i-1
),x
i-1
表示dma第i-1块数据的真实数据量字节数;
13.当偏移量yi小于0时,则dma第i块数据的源地址=dma第i-1块数据的源地址+align64(x
i-1
)-64,相应的也需对偏移量yi进行额外的操作,即yi+=64,以此确保在dma搬运数据结束后可以正确的取到第i块数据的真实数据。
14.所述方法进一步包括:
15.s1,将dma每个数据块对应的偏移量yi记录下来:
16.s1.1,在dma地址非64对齐的情况下,将输入层的输入特征图featuremap真实源地址-64,即将真实源地址向前偏移64字节;
17.把偏移后的地址作为dma第0块数据搬运的源地址,并从该地址开始搬运64+align64(x0)的数据,x0表示dma第0块数据的真实数据量字节数,那么在dma搬运数据结束后,第0块真实数据则位于dma第0块数据的搬运目的地址+偏移量y0=64即搬运目的地址向后偏移y0个字节的位置;
18.s1.2,dma第1块数据则是将第0块数据搬运的源地址向后偏移align64(x0)个字节后得到的地址作为dma该块数据搬运的源地址即dma第1块数据的源地址=dma第0块数据的源地址+align64(x0),x0表示dma第0块数据的真实数据量字节数;
19.同理,在dma搬运数据结束后,第1块真实数据则位于dma第1块数据的搬运目的地址+偏移量y1=y
0-((align64(x0)-x0))即搬运目的地址向后偏移y1个字节的位置;
20.……
21.s1.i,以此类推,在dma搬运数据结束后,第i块真实数据则位于dma第i块数据搬运目的地址+偏移量yi=y
i-1-((align64(x
i-1
)-x
i-1
))即搬运目的地址向后偏移yi个字节的位置,x
i-1
表示dma第i-1块数据的真实数据量字节数;
22.s2,根据dma每个数据块的目的地址+偏移量yi的方式来取到每个数据块的真实数据,进一步包括:
23.在开始dma第i块数据之前,就需要计算出dma第i块数据对应的偏移量yi,根据偏移量yi来计算得到dma第i块数据的源地址;
24.当yi》=0时,则dma第i块数据的源地址=dma第i-1块数据的源地址+align64(x
i-1
),x
i-1
表示dma第i-1块数据的真实数据量字节数;
25.当yi《0时,表示按照yi》=0方式计算得到的dma第i块数据的源地址不能完全包含第i块真实数据,如果直接自此源地址开始dma搬运数据势必会损失第i块数据的部分真实数据,导致错误发生。故当yi《0时,还需再次将计算得到的dma第i块数据的源地址向前偏移64个字节,即当yi《0时,dma第i块数据的源地址=dma第i-1块数据的源地址+align64(x
i-1
)-64,相应的也需对偏移量yi进行额外的操作,即yi+=64,以此确保在dma搬运数据结束后可以正确的取到第i块数据的真实数据。
26.所述align64(x):align64(x)=(x+63)/64*64。
27.由此,本技术的优势在于:通过简单的方法,解决了dma数据块源地址非对齐的问题。
附图说明
28.此处所说明的附图用来提供对本发明的进一步理解,构成本技术的一部分,并不构成对本发明的限定。
29.图1是本技术方法的流程示意图。
具体实施方式
30.为了能够更清楚地理解本发明的技术内容及优点,现结合附图对本发明进行进一
步的详细说明。
31.本发明主要通过dma搬运多余废数据来弥补dma源地址非对齐的缺陷。
32.在dma地址非64对齐的情况下,将输入层的输入featuremap真实源地址-64,即将真实源地址向前偏移64字节。
33.把偏移后的地址作为dma第0块数据搬运的源地址,并从该地址开始搬运64+align64(x0)的数据,x0表示dma第0块数据的真实数据量字节数,那么在dma搬运数据结束后,第0块真实数据则位于dma第0块数据的搬运目的地址+偏移量y0=64即搬运目的地址向后偏移y0个字节的位置。
34.至于dma第1块数据则是将第0块数据搬运的源地址向后偏移align64(x0)个字节后得到的地址作为dma该块数据搬运的源地址,x0表示dma第0块数据的真实数据量字节数。同理,在dma搬运数据结束后,第1块真实数据则位于dma第1块数据的搬运目的地址+偏移量y1=y
0-((align64(x0)-x0))即搬运目的地址向后偏移y1个字节的位置。
35.以此类推,在dma搬运数据结束后,第i块真实数据则位于dma第i块数据搬运目的地址+偏移量yi=y
i-1-((align64(x
i-1
)-x
i-1
))即搬运目的地址向后偏移yi个字节的位置,x
i-1
表示dma第i-1块数据的真实数据量字节数。
36.在开始dma第i块数据之前,就需要计算出dma第i块数据对应的偏移量yi,根据偏移量yi来计算得到dma第i块数据的源地址。
37.当yi》=0时,则dma第i块数据的源地址=dma第i-1块数据的源地址+align64(x
i-1
),x
i-1
表示dma第i-1块数据的真实数据量字节数。
38.当yi《0时,表示按照yi》=0方式计算得到的dma第i块数据的源地址不能完全包含第i块真实数据,如果直接自此源地址开始dma搬运数据势必会损失第i块数据的部分真实数据,导致错误发生。
39.故当yi《0时,还需再次将计算得到的dma第i块数据的源地址向前偏移64个字节。即当yi《0时,dma第i块数据的源地址=dma第i-1块数据的源地址+align64(x
i-1
)-64,相应的也需对偏移量yi进行额外的操作,即yi+=64,以此确保在dma搬运数据结束后可以正确的取到第i块数据的真实数据。
40.综上,仅需将dma每个数据块对应的偏移量yi记录下来,即可根据dma每个数据块的目的地址+偏移量yi的方式来取到每个数据块的真实数据。
41.通过上述方法可以解决dma数据块源地址非对齐的问题。
42.综上所述,如图1所示,本技术的方法是一种基于dma的输入层地址非对齐问题的解决方法,所述方法在dma地址非64对齐的情况下,s1,仅需将dma每个数据块对应的偏移量yi记录下来,
43.s2,根据dma每个数据块的目的地址+偏移量yi的方式来取到每个数据块的真实数据:
44.当偏移量yi大于等于0时,则dma第i块数据的源地址=dma第i-1块数据的源地址+align64(x
i-1
),x
i-1
表示dma第i-1块数据的真实数据量字节数;
45.当偏移量yi小于0时,则dma第i块数据的源地址=dma第i-1块数据的源地址+align64(x
i-1
)-64,相应的也需对偏移量yi进行额外的操作,即yi+=64,以此确保在dma搬运数据结束后可以正确的取到第i块数据的真实数据。
46.以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
技术特征:
1.一种基于dma的输入层地址非对齐问题的解决方法,其特征在于,所述方法在dma地址非64对齐的情况下,仅需将dma每个数据块对应的偏移量y
i
记录下来,即能够根据dma每个数据块的目的地址+偏移量y
i
的方式来取到每个数据块的真实数据:当偏移量y
i
大于等于0时,则dma第i块数据的源地址=dma第i-1块数据的源地址+align64(x
i-1
),x
i-1
表示dma第i-1块数据的真实数据量字节数;当偏移量y
i
小于0时,则dma第i块数据的源地址=dma第i-1块数据的源地址+align64(x
i-1
)-64,相应的也需对偏移量y
i
进行额外的操作,即y
i
+=64,以此确保在dma搬运数据结束后可以正确的取到第i块数据的真实数据。2.根据权利要求1所述的一种基于dma的输入层地址非对齐问题的解决方法,其特征在于,所述方法进一步包括:s1,将dma每个数据块对应的偏移量y
i
记录下来:s1.1,在dma地址非64对齐的情况下,将输入层的输入特征图featuremap真实源地址-64,即将真实源地址向前偏移64字节;把偏移后的地址作为dma第0块数据搬运的源地址,并从该地址开始搬运64+align64(x0)的数据,x0表示dma第0块数据的真实数据量字节数,那么在dma搬运数据结束后,第0块真实数据则位于dma第0块数据的搬运目的地址+偏移量y0=64即搬运目的地址向后偏移y0个字节的位置;s1.2,dma第1块数据则是将第0块数据搬运的源地址向后偏移align64(x0)个字节后得到的地址作为dma该块数据搬运的源地址,即dma第1块数据的源地址=dma第0块数据的源地址+align64(x0),x0表示dma第0块数据的真实数据量字节数;同理,在dma搬运数据结束后,第1块真实数据则位于dma第1块数据的搬运目的地址+偏移量y1=y
0-((align64(x0)-x0))即搬运目的地址向后偏移y1个字节的位置;
……
s1.i,以此类推,在dma搬运数据结束后,第i块真实数据则位于dma第i块数据搬运目的地址+偏移量y
i
=y
i-1-((align64(x
i-1
)-x
i-1
))即搬运目的地址向后偏移y
i
个字节的位置,x
i-1
表示dma第i-1块数据的真实数据量字节数;s2,根据dma每个数据块的目的地址+偏移量y
i
的方式来取到每个数据块的真实数据,进一步包括:在开始dma第i块数据之前,就需要计算出dma第i块数据对应的偏移量y
i
,根据偏移量y
i
来计算得到dma第i块数据的源地址;当y
i
>=0时,则dma第i块数据的源地址=dma第i-1块数据的源地址+align64(x
i-1
),x
i-1
表示dma第i-1块数据的真实数据量字节数;当y
i
<0时,还需再次将计算得到的dma第i块数据的源地址向前偏移64个字节,即当y
i
<0时,dma第i块数据的源地址=dma第i-1块数据的源地址+align64(x
i-1
)-64,相应的也需对偏移量y
i
进行额外的操作,即y
i
+=64,以此确保在dma搬运数据结束后可以正确的取到第i块数据的真实数据。3.根据权利要求2所述的一种基于dma的输入层地址非对齐问题的解决方法,其特征在于,当y
i
<0时,表示按照y
i
>=0方式计算得到的dma第i块数据的源地址不能完全包含第i块
真实数据,如果直接自此源地址开始dma搬运数据势必会损失第i块数据的部分真实数据,导致错误发生。4.根据权利要求1所述的一种基于dma的输入层地址非对齐问题的解决方法,其特征在于,所述align64(x):align64(x)=(x+63)/64*64。
技术总结
本发明提供一种基于DMA的输入层地址非对齐问题的解决方法,所述方法在DMA地址非64对齐的情况下,仅需将DMA每个数据块对应的偏移量Y
技术研发人员:李岩
受保护的技术使用者:合肥君正科技有限公司
技术研发日:2022.01.10
技术公布日:2023/7/21
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
