Annuaire d'articles
- Préface
- 1. Ponter le DMA
- À propos de Pipeline de convolution
- À propos de DMA de convolution
- 四、Tampon de convolution
- 五、Contrôleur de séquence de convolution
- 六、Convolution MAC
- 七、Accumulateur de convolution
- 8. MCIF
- 9. SRAMIF
- Résumer
Préface
Cette série de contenus s'efforce de clarifier la conception matérielle et l'analyse de l'architecture de nvdla. Veuillez signaler toute analyse incorrecte.
Un article sur les signaux et les registres a déjà été analysé. Les signaux matériels NVDLA et la conception de l'architecture ont été compilés
Bienvenue pour continuer à prêter attention à mon interprétation du code du mode noyau. Les liens sont les suivants :
Série d'articles 1 :Compilation du code du pilote en mode noyau NVDLA< /span>Disposition du code du pilote en mode noyau NVDLA 4 Article de la série 5 : < /span>Noyau NVDLA mode pilote code tri six Article de la série 6 :Code du pilote du mode noyau NVDLA trié par cinq Article de la série 4 : Disposition du code du pilote en mode noyau NVDLA 3 Série d'articles 3 : Disposition du code du pilote en mode noyau NVDLA 2
Série d'articles 2 :
Parmi eux, la série d'articles 3 contient un grand nombre d'introductions à l'architecture relationnelle.
Nous avons supprimé le diagramme d'architecture dans l'article 3 de la série :Arrangement trois du code du pilote en mode noyau NVDLA :
note
: La valeur d'activation, la fonctionnalité, la valeur de la fonctionnalité, l'entrée et ACT dans cet article pointent tous vers le même contenu sans distinction.
1. Ponter le DMA
Pour exploiter 片上SRAM
, NVDLA
doit se déplacer entre les données 外部DRAM
et SRAM
, etBridge DMA(BDMA)
répond pleinement à cette exigence. En fait, il existe deux chemins indépendants : 1. Copier les données de 外部DRAM
vers 内部SRAM
; 2. Copier les données de 内部SRAM
vers < /span> vers a> est de 4. et la largeur maximale . La largeur des données des deux interfaces est connecté. Ces deux interfaces et l'autre , l'un connecté Il y a deux . , ou de vers Vous pouvez également déplacer des données de 外部DRAM
. Notez que les deux sens ne peuvent pas fonctionner en même temps. BDMA
外部DRAM
外部DRAM
内部SRAM
内部SRAM
BDMA
DMA接口
外部DRAM
内部SRAM
都支持读写请求
512 bit
burst长度
À proposBDMA
comment lire cube
(comprendre cube
comme valeurs d'activation de plusieurs canaux, longueur et largeur Ou poids), le site officiel le décrit comme ceci :
In order to move all data in a cube, BDMA support line repeat which can fetch
multiple lines with address jumps between lines, reflect a surface. And also, BDMA
will support one more layer of repeat, that fetch of multiple lines can be repeated,
which reflect multiple surfaces, reflect a cube.
a deux modes :
1. BDMA
prend en charge line repeat
, ce qu'on appelle line repeat
Il permet de supprimer plusieurs lignes en même temps, ce qui peut être reflété parsurface
, et il y a des sauts d'adresse entre les lignes. La situation spécifique d'un décalage d'adresse dépend de BDMA
l'introduction ou du code source associé ;
2. BDMA
Supporté< a i=9>, permettant de récupérer plusieurs lignes à plusieurs reprises, peut être reflété. Ici , et sont des valeurs d'activation et des matrices de poids très typiques. , , éléments. La conception architecturale de est la suivante : L'architecture de ici est la suivante suit : a> et < L'interface entre /span> auront besoin des deux < /span> a>. , et les autres dans l'image ci-dessus auront besoin de et . ou , prendra en charge sous-modules n'auront que des exigences de lecture, donc , mais certains le fera . pour se connecter à et converti en requêtes de est utilisé pour one more layer of repear
cube
line
surface
cube
1D
2D
3D
BDMA
MCIF
MCIF
仲裁
内部子模块
AXI协议
外部DRAM
MCIF
同时支持读和写通道
NVDLA
子模块
MCIF
读
写
两者兼有
CDMA0
CDMA1
只读
5类子模块
读和写
L'architecture de SRAMIF
ici est la suivante :
SRAMIF
le module est utilisé pour connecter 内部子模块
à 片上SRAM
. Similaire à MCIF
, mais 总线延迟
devrait être inférieur. SRAMIF
auront les deux 支持读和写通道
, mais certains NVDLA
sous-modules n'auront que 读要求
, donc L'interface entre a> ou nécessitera uniquement le canal de lecture, tandis que les autres sous-modules de catégorie 5 nécessiteront à la fois la lecture et l'écriture. . , prendra en charge DMA Engine
et SRAMIF
读
写
两者兼有
CMDA0~1
À propos de Pipeline de convolution
Voici le résumé du site officielConvolution Pipeline
:
The Convolution Pipeline has five stages, which are: Convolution DMA, Convolution
Buffer, Convolution Sequence Controller, Convolution MAC and Convolution
Accumulator. They are also called CDMA, CBUF, CSC, CMAC and CACC respectively. Each
stage has its own CSB slave port to receive configuration data from the controlling
CPU. A single synchronization mechanism is used by all stages.
Convolution Pipeline(卷积流水线)
se compose de cinq niveaux, à savoir Convolution DMA(CDMA)
, Convolution Buffer(CBUF)
, Convolution Sequence Controller(CSC)
, Convolution MAC(CMAC)
etConvolution Accumulator(CACC)
. Les abréviations des concepts ci-dessus apparaîtront fréquemment dans leconv.c
code du pilote en mode noyau. Le schéma d'architecture de conception du pipeline est le suivant :
Reportez-vous à l'introductionici :
CDMA(Convolution DMA):DMA部件,用于从外部存储器中读取待卷积数据(包括图片、特征值、权重)
CBUF(Convolution Buffer):数据缓存
CSC(Convolution Sequence Controller):将待卷积的数据进行整形,以便更高效地利用CMAC
CMAC(Convolution MAC):卷积乘加阵列,由大量的乘加部件组成,数量可以配置(8~4096)
CACC(Convolution Accumulation):卷积累加器,利用CMAC进行卷积运算时,会产生很多中间结果,这些中间结果在累加器中持续累加,得到完整的卷积结果后再送出,以此可以减少对外部存储部件的需求。
NVDLA
Il existe trois modes de calcul de convolution :
1、Direct convolution for feature data, or DC mode
2、Convolution of image input, or image input mode
3、Winograd convolution, or Winograd mode
Pour plus de détails, veuillez consulter :Arrangement trois du code du pilote en mode noyau NVDLA
卷积流水线
Y compris pourint16
oustockage. et , fournissant de MAC. De plus, il existe peut également être configurée en tant que tableau pour les pièces et le stockage. La ressource et fp16
1024个MAC
32 逐元素累加器阵列
MAC
2048个INT8格式
CBUF
512KB
SRAM
输入权重
激活
2.1 Convolution directe
Premier examen de la convolution, y compris la convolution dilatée, le remplissage et d'autres éléments. Prenez la photo sur le site officiel, comme suit :
Cela peut être difficile à comprendre S'
et R'
, il est recommandé de lire Ici Concernant le diagramme schématique de la convolution dilatée, il est facile de comprendre pourquoi la largeur ou la hauteur après la convolution dilatée est compressée.
Entrez ensuite Direct Convolution
, The key idea of direct convolution is to split the multiplication operations from each convolution kernel into groups such that each group contains 64 multiplications.
, donc le cœur de 直接卷积
est de convertir la multiplication l'opération se décompose en groups
, chaque groups
contient 64 multiplications.
La description détaillée est :
1、Distribute all MACs hardware into 16 sub units. One sub unit is called MAC Cell, and has hardware for 64 int16/fp16 MACs, or for 128 int8 MACs.
# 将所有的MACs硬件部分分解为16个子单元,每个子单元是MAC Cell且含有64个INT16/FP16的MACs或者128个INT8的MACs。
2、The assembly of MAC Cells is called MAC Cell Array.
# MAC Cells的聚合被称为MAC Cell Array
3、Divide all input data cubes into 1x1x64 element small cubes for int16, fp16 and int8.
# 将所有的input data cube分解为若干个1x1x64的element small cubes,数据格式是INT16/FP16/INT8
4、Divide all weight data cubes into 1x1x64 element small cubes for int16, fp16 and int8.
# 将所有的weight data cube分解为若干个1x1x64的element small cubes,数据格式是INT16/FP16/INT8
5、Multiply one small input data cube by one small weight data cube, and add products together. These multiplications and additions are performed within one MAC cell.
# 将input data cude和weight data cube相乘,并且和进行相加。上述乘法和加法操作都是在一个MAC Cell中实现的。
6、Combine these compute operations into 4 operation levels, which are atomic operation, stripe operation, block operation and channel operation.
# 将上述计算操作融合到4个操作层次中,包括atomic operation、stripe operation、block operation和channel operation。
Trions quelques concepts :
1、MAC Cell:所有的MACs硬件部分分解得到的子单元,总共有16个。每个MAC Cell含有64个INT16/FP16
的MACs或者128个INT8的MACs。在一个MAC Cell中实现input data cude和weight data cube相乘,并
且和进行相加。我们不妨译为`MAC单元`
2、MAC Cell Array:MAC Cell的聚合体。我们不妨以为`MAC单元阵列`
3、1x1x64 element small cubes:来源是input data cubes和weight data cubes。
Ensuite, il se concentrera sur quatre niveaux de fonctionnement.
2.1.1 Fonctionnement atomique
Le site officiel de explique Atomic Operation
comme suit : Atomic Operation
est l'étape de base de Direct Convolution
. Dans un Atomic Operation
, chaque MAC单元
met en cache un d'un seul weight kernel
. Par conséquent, cache ou pièces . L'un des est partagé par tous . Effectuez les calculs mentionnés dans la règle 5 ci-dessus. La sortie de chaque est appelée . Cette opération prend 1 cycle, donc chaque cycle produit . est envoyé à pour un calcul ultérieur. Notez que le regroupement des noyaux de convolution est divisé en fonction du nombre de canaux par. Ainsi, le site officiel donne l'image suivante : L'image de montre qu'il y a 16 noyaux de convolution placés à 16 On , l'entrée est partagée par ces 16 . Étant donné que le format de données utilisé est , le nombre d'octets occupés est , puis la multiplication et l'accumulation sont terminées dans chaque , 16 et enfin 16 ont été transmis. 1x1x64
weight data cube
16
MAC单元
16
int16/fp16
weight kernel
32
int8
weight kernel
feature data
1x1x64
cube
MAC单元
MAC单元
MAC单元
部分和
16个部分和
部分和
CACC(Convolution Accumulation)卷积累加器
64
K0、K1到K14、K15
1x1x64
MAC Cell
Input data cube
MAC Cell
INT16
64*16/8=128Byte
MAC Cell
MAC Cell
部分和
2.1.2 Opération de bande
Stripe Operation
est en fait un groupe de plusieurs convolutionsAtomic Operation
. Lors d'une opération Stripe Operation
, les dans MAC Cell Array
restent inchangés. Glissez. Il y a une limite à la longueur de . La limite inférieure est due à la nécessité d'obtenir le poids requis pour le prochain . En raison de la limite de taille du tampon dans , la limite supérieure de la longueur de est . Dans certains cas extrêmes, la longueur prise en charge peut être inférieure à la limite inférieure. Le site officiel propose le schéma suivant : Il est facile de comprendre qu'après avoir rempli 16 , saisissez un par un Les diapositives de < /span> puisse résumer temporairement la priorité de calcul : sous forme de lignes, de manière à ce que 权重数据
输入数据
Input Data Cube
Stripe Operation
16
Stripe Operation
内部带宽
CACC(Convolution Accumulation)卷积累加器
Stripe Operation
32
MAC Cell
MAC Cell Array
Input data cube
2.1.2
1、权重:优先选择单个Kernel的Channel,为了实现并行,使用多个Kernel。
multi-Channel-in-Kernel with multi-Kernel and HW mapped fixed
2、激活值或者特征图数据:优先Channel,随后计算结束后,按照image内左右-上下滑动选择。
multi-Channel-in-Image with one-Image and HW mapped flushed
2.1.3 Fonctionnement des blocs
Pendant l'opérationBlock Operation
, chaqueFilter
du poids utiliseRxSx64
des éléments, ainsi que la taille appropriée < /span> a>. , ce qui est différent de celle mentionnée précédemment La boîte bleue montrant la convolution dans l'image restaure en fait un ensemble de noyaux de convolution multicanaux. Les boîtes montrant les valeurs d'activation dans l'image forment chacune une petite boîte de valeur d'activation qui peut être convolué. Par conséquent, les valeurs dans plusieurs petites cases de valeurs d'activation après convolution peuvent être accumulées. Selon le site officiel, la valeur accumulée obtenue de cette manière est appelée Alors, quel bloc faut-il accumuler ? . Pour l’instant, la traversée est terminée. Pour la direction verticale, le principe est similaire et ne sera pas répété. , l'objet convolué dans la valeur d'entrée ou d'activation est ; Pour l'élément dans le poids L'élément avec le numéro de série dans le poids, l'objet à convoluer dans la valeur d'entrée ou d'activation est ; Pour l'élément avec le numéro de série dans le poids, l'objet à convoluer dans la saisie ou l'activation la valeur est D'après cette figure, on comprend bien : pour l'élément avec le numéro de série Input data cube
.
1
0~3、6~9、12~15、18~21
2
1~4、7~10、13~16、19~22
3
2~5、8~11、14~17、20~23
Accumulative Sum
Partial Sum
2.1.4 Fonctionnement des canaux
Channel Operation
est une opération plus avancée, comme le montre la figure :
Ensuite, l'opération d'accumulation terminée doit être dans la même colonne, comme suit :
2.1.5 Résumé des opérations à 4 couches
Le fonctionnement à quatre niveaux peut être résumé comme suit :
2.1.6 Séquence de sortie
Les séquences mentionnées dans chaque opération sont principalement utilisées pour 输入特征数据
et 权重数据
. L'ordre de 输出数据
est C'(K') -> W -> H -> C(K). Cet ordre est en fait celui que j'ai dessiné ci-dessus. 2.1.5
Figure. Ici, C' ou K' fait référence à la taille du groupe du noyau, qui est de 16 pour int16/fp16 et de 32 pour int8.
2.2 Convolution de Winograd
Winograd Convolution
Utilisé pour réduire Direct Convolution
les méthodes im2col
et GEMM
couramment utilisées乘法
fois, le NVDLA
site officiel ne prend en charge que 3x3
la taille du noyau de convolutionWinograd Convolution
. Le site officiel donne la description de l'algorithme de Winograd Convolution
:
Mais c'est trop abstrait ici. Un blogueur a écrit cet article L'explication ci-dessous a>, qui correspond à une description sur le site officiel : requises par la convolution glissante d'origine. On obtient donc la valeur , au lieu des de , vous pouvez donc éviter un tas de multiplications et toujours utiliser l'addition et la soustraction pour l'exprimer. Ensuite, le nombre total de multiplications correspond en fait aux opérations et
L'essentiel réside dans le fait qu'il existe de nombreux est très bonne. Parce que si vous multipliez directement plusieurs matrices, vous constaterez que le nombre de multiplications est bien supérieur à la multiplication originale de deux matrices. Alors quel est le problème ? En fait, la réponse est très intuitive : j'ai posté une photo sous l'article : 0
1
逐点乘法
16次乘法
4*9=36次乘法
36/16=2.25
Only 16 multiplications are required to calculate 4 results for a 3x3 kernel, while
in direct convolution mode 36 multiplications are required. Winograd is therefore
2.25 times the performance of Direct Convolution.
J'aimerais publier certaines des fonctionnalités deWinograd Convolution
:
1、卷积的stride等于2时加速收益不高
2、深度可分离卷积用Winograd不划算
3、Winograd卷积由于一些系数是是除不尽的, 所以有一定的精度损失
4、tile块越大, 加速效果越好
Le site officiel indique qu'avantNVDLA Engine
d'être exécuté, la partie logicielle doit implémenter la conversion de la matrice de poids. De plus, contrairement à Direct Convolution
, Winograd Convolution
divise le noyau de convolution et la valeur d'activation en 4x4x4
cube
. Parlons ensuite de la manière dontNVDLA
est implémenté ? Postons d'abord une photo originale :
À titre de comparaison, supprimons la formule :
计算步骤:
1、软件先计算权重的转换:C'dC;
2、硬件完成激活值的转换:GgG',我们将这一步和上一步在MAC Cell Array中进行逐点相乘;——这一步被
称为PRA。
3、硬件完成后2得到了4x4x4的tensor,其中维度表示是(W, H, C)。Phase 1完成的步骤是C方向的累
加,从而得到4x4的matrix。
4、硬件完成3得到了4x4的matrix,我们记为R。随后需要回到MAC Cell Array中进行矩阵乘,完成A'*R
得到2x4的matrix,我们记为S。
5、硬件完成4得到了2x4的S matrix,随后需要回到MAC Cell Array中进行矩阵乘,完成S*A得到2x2的最
终结果。
和Direct Convolution
类similaire、Winograd Convolution
Également légèrement différentOperation
、Comme ci-dessous :
2.3 De-Convolution
Je couvre rarement cette partie de la déconvolution, je ne m'étendrai donc pas là-dessus. Ceux qui sont intéressés peuvent lireles informations détaillées sur le site officiel.
2.4 Convolution avec mode de saisie d'image
NVDLA
prend uniquement en charge sous Direct Convolution
. Vous pouvez choisir de stocker une partie ou la totalité de en fonction de la capacité de stockage. . Une mention spéciale doit être faite au mappage des données dans le tampon de convolution. Tous les éléments du remplissage gauche et droit et des lignes de pixels d'entrée résident de manière compacte dans . Voir l'image ci-dessous, si la taille du canal est de 4, l'ordre de mappage des éléments est R(Y)->G(U)->B(V)->A(X). Si la taille du canal est 3, l'ordre est R(Y)->G(U)->B(V). Bien entendu, les modes et sont également mentionnés, ce qu'on appelle le mode . La différence entre les deux est : a>Image Input Mode
image surface
CBUF entry
Direct Convolution for Feature Data
DC
Post-extension 2,5 canaux
Comme mentionné précédemmentNVDLA
il y en a 16MAC Cell
, et chacunMAC Cell
en a 64MAC
. La raison pour laquelle Channel Post-Extension
est proposée est 在卷积通道中,一个Atomic Operation需要64个通道方向上的元素(不包括Winograd模式)。如果Input Data Cube的通道大小小于64,则MAC在每个周期中不是100%被利用
, donc afin d'améliorer MAC
l'utilisation, une solution d'ajustement du nombre de canaux matériels est utilisé. Quel est le plan de mise en œuvre spécifique ? Pour donner un exemple très simple et facile à comprendre, si le canal actuel du noyau de convolution n'a que 32个
, copiez le même canal du noyau de convolution 32个
et placez-le dans a>. peut être pris comme adjacents. Le coefficient concernant 64
MAC, alors la matrice de valeur d'activation entrante peut utiliser deux Stripe
Post-Extension
2或者4
2.6 Multi-lots
NVDLA
La raison pour laquelle est introduitMulti-Batch Mode
est que le poids de la couche FC
n'est utilisé qu'une seule fois pour chaque nœud de sortie, mais le nœud de sortie suivant est remplacé . Le poids de 16个周期
est requis, donc si une seule image est actuellement traitée, le résultat est que le taux d'utilisation apparaît au FC
couche. Pour les problèmes élevés, le calcul théorique est. Mais si plusieurs images sont traitées en même temps, alors lorsqu'il y a suffisamment d'images, s'il y a 16 images à traiter, même si le poids le plus lent est transmis, le masquage du poids transmis peut être complété et le lot précédent peut être réutilisé en même temps< a i=7>Les données de poids de la couche. MAC Cell Array
1/16=6.25%
FC
2.7 Dilatation
NVDLA
prend en charge la convolution dilatée des noyaux de convolution R
et S
, NVDLA
ne prend en charge que la convolution dilatée a> Direct Convolution
, Winograd Convolution
et Image Input Mode
ne sont pas pris en charge. Bien que la convolution dilatée permette au noyau de convolution d'étendre le champ récepteur, cette expansion du champ récepteur ne provient que de l'image mono-image actuelle, ce qui n'est pas aussi bon que l'effet global du mécanisme d'attention dans les directions spatiale et canal. De plus, la convolution dilatée, comme une convolution déformable similaire, nécessite un stockage supplémentaire en termes de coût et de capacité de stockage, ce qui n'est pas respectueux du matériel. Par conséquent, les solutions actuelles de détection de cibles traditionnelles n’impliquent presque pas de convolution dilatée.
2.8 Considération de puissance
NVDLA
Prend en charge le déclenchement d'horloge au niveau du pipeline de convolution.
Convolution pipeline supports clock gating for each major pipeline stage. If the
pipeline stage is idle and no valid HW-layer is available, the data path of pipeline
stage will be clock gated.
À propos de DMA de convolution
3.1 Globalement
Revenez à l'ancienne image classique et regardez où se trouve CDMA
.
CDMA
est utilisé pour lire les données à convolution (y compris les images, les valeurs de caractéristiques et les poids) à partir de la mémoire externe. Il obtient les données pour l'opération de convolution à partir de SRAM/DRAM et l'exécute conformément à < /span> a>:ici peuvent être trouvées et Les descriptions de . . Les formats d'entrée pris en charge sont : Convolution Engine
La séquence de calcul requise est stockée dansCBUF
Pixel data、Feature data、Uncompressed/compressed weight、WMB和WGS
WMB
WGS
Sparse algorithm uses one-bit tag to indicate a weight element
is zero or not. Bit tags of one kernel group compose a weight
mask bit group, or WMB. WMBs reside in a dedicate memory
surface. Since 0 values are marked by bit tags (assign 0 to
corresponding bit), they can be removed from original weight
memory surface. A third memory surface recodes remaining byte
number of each kernel group (WGS).
Explication L'explication est que si la parcimonie du poids est utilisée, l'algorithme clairsemé utilisera une marque de 1 bit pour indiquer si l'élément de poids est nul. Il est alors évident que deux choses doivent être stockées. La première concerne toutes les balises, c'est-à-dire tag
. Le stockage dédié qui stocke tag
est appelé < /span>< a i=3> ; la deuxième partie est la valeur spécifique, qui est donnée à un stockage tiers, et ce stockage est appelé . D'accord, revenons à la conversation . Deux canaux de lecture sont connectés de l'interface à . Il s'agit de et . Pour obtenir le format d'entrée répertorié ci-dessus, le canal sera configuré pour ce format. Le tableau suivant enregistre le format des données d'entrée du mappage des canaux de lecture. Bien sûr, ne prend en charge que les requêtes de lecture, et le stockage qui prend en charge l'accès est Aligner. Jetez un œil au schéma d'architecture : se compose de 3 sous-modules, utilisés pour obtenir des données de pixels ou des données de caractéristiques : , et < /span>. . . Les procédures de ces sous-modules sont similaires, mais diffèrent dans la façon dont ils trient les donnéesWMB
WGS
CDMA
CDMA
AXI
权重读通道
数据读通道
CDMA
CDMA
64byte
CDMA
CDMA_DC
CDMA_WG
CDMA_IMG
CBUF RAM
在任何时候,只有一个子模块被激活来获取像素/特征数据
3.2 Principe de CDMA_DC/CDMA_WG/CDMA_IMG
PrenonsCDMA_DC
comme exemple, le processus est le suivant :
1、检查Convolution Buffer(CBUF)的状态是否有足够的可用空间
2、生成读事务
3、在Shared Buffer中缓存特征数据
4、将feature cube按照正确顺序进行重排
5、生成CBUF写入地址
6、将特征数据写入CBUF
7、更新CDMA_STATUS子模块中的状态
Regardez ensuite le nom des deux modules CMDA_WG
et CDMA_IMG
. Il est facile de constater que ces deux DMA
sont utilisés respectivement. Il existe deux modes de convolution : Winograd Convolution
et Direct Convolution for Image Input Mode
. Les différences entre CDMA_WG
, CDMA_IMG
, CDMA_DC
et CDMA_WT
sont les suivantes :
1、CDMA_WG与CDMA_DC具有非常相似的结构和功能。然而,CBUF中得到的特征数据组织方式是不同
的。因此CDMA_WG有一个特殊的获取序列。
2、CDMA_IMG从外部存储器获取像素数据。它根据数据格式生成地址,对像素元素重排,并将它们写入
CBUF。
3、仅CDMA_DC支持multi-batch处理模式。最大batch大小可达32。
4、CDMA_WT与其他DMA相比,可以同时支持三个读取流。如果输入权重格式未压缩,则仅获取权重数据。如
果输入的权重格式是压缩的,则权重、WMB和WGS都会被获取。关于输入先后的竞争问题:如果输入权重数据
被压缩,则启用两个仲裁器来确定读取流的顺序。 首先,加权循环仲裁器批准来自权重流或WMB流的请求。
然后获胜者通过静态优先级仲裁与 WGS 请求流竞争。 WGS 始终具有优先权。最终获胜请求发送到权重通
道进行数据获取。
5、那么怎么知道当前数据生命周期结束?CDMA维护CBUF中权重缓冲区和输入数据缓冲区的状态。CDMA和CSC中有两份状态副本。通过两个模块交换信息,从而决定何时获取新的特征/像素/权重数据。
3.3 Considération de puissance
DMA
utilise 时钟门控
, il peut donc être utilisé en état de repos, mais le sous-module sous DMA
n'horloge pas le gate n'est pas autorisé. regfile
四、Tampon de convolution
Sans plus tarder, regardons d’abord l’emplacement ?
4.1 Globalement
CBUF
contient de512KB
au total. met en cache depuis et par . Il y a et . Contient 16 unités de stockage de 32 Ko. Chaque unité de mémoire se compose de 2 SRAM à double port. L'architecture est présentée ci-dessous : Si les poids sont compressés, est affecté à , tandis que les 2 autres tampons peuvent être utilisés ; Si le poids n'est pas compressé, ne sera attribué à aucune unité de stockage. Dans ce cas, et peuvent utiliser pleinement les 16 unités de stockage. Si le nombre total d'unités de stockage requises est inférieur à, les unités de stockage restantes ne sont pas utilisées. SRAM
SRAM
CDMA
输入像素数据、输入特征数据、权重数据和WMB数据
CSC模块读取
CBUF
2个写端口
3个读端口
CBUF
512-bit wide、256 entry
bank15
WMB缓冲区
bank0~bank14
WMB缓冲区
数据缓冲区
权重缓冲区
16
Alors comment mettre à jour ? En fait, il adopte une stratégie de couverture en anneau. Chaque tampon agit comme un tampon circulaire. Les nouvelles données d'entrée/poids/WMB ont des adresses d'entrée incrémentielles. Si l'adresse atteint la valeur maximale, elle revient à zéro et recommence à augmenter.
4.2 Considération de puissance
Le tampon de convolution applique un déclenchement d'horloge aux registres du chemin de données en dehors de la SRAM. Lorsque le chemin de données du tampon de convolution est inactif et qu'aucune couche matérielle n'est disponible pour les registres programmables, son horloge est contrôlée par le SLCG.
五、Contrôleur de séquence de convolution
Regardons d'abord l'emplacement :
5.1 Globalement
CSC
est responsable du chargement des données d'entités d'entrée, des données de pixels et des données de poids depuis CBUF
et de leur envoi à CMAC
. CSC
Comprend 3 sous-modules : CSC_SG, CSC_WL et CSC_DL.
La structure spécifique est la suivante :
1、CSC_SG:convolution sequence generator,卷积序列生成器。该模块生成序列来控制卷积运算。
2、CSC_WL:convolution weight loader,卷积权重加载器。它从CSC_CG接收数据包,从CBUF加载权重
并进行必要的解压缩并将其发送到CMAC。它维护权重缓冲区状态并与CDMA_WT通信以保持状态最新。
3、CSC_DL:convolution data loader,卷积数据加载器。该模块包含执行特征/像素加载序列的逻辑,
从CSC_SG接收数据包、从CBUF加载特征/像素数据并发送到CMAC。它还维护数据缓冲区状态并与CDMA通信以
保持状态最新。对于Winograd模式,它还执行PRA(预加法)对输入的特征数据进行变换。
5.2 Principe de fonctionnement de CSC_CG
Alors, comment fonctionne CSC_CG ?
1、轮询CBUF中是否有足够的数据和权重
2、生成一对序列包,包括权重加载包和数据加载包。每个包代表一个Stripe Operation。
3、将两个包分别推入两个FIFO。
4、权重计数器、特征/像素计数器均向下计数。
5、当计数器达到零时,检查来自CACC的信号是否有空闲,如果空闲则进入6。
6、如果一切条件准备就绪,则将权重和特征发送给CSC_WL和CSC_DL。
5.3 Considération de puissance
CSC
Le déclenchement d'horloge est utilisé pour les registres dans le chemin de données.
六、Convolution MAC
Regardons d'abord l'emplacement architectural du moduleCMAC
!
6.1 Globalement
CMAC
Le module reçoit les données d'entrée et les poids de CSC
, effectue la multiplication et l'addition et envoie les résultats vers CACC
. Lorsque vous travaillez en mode Winograd, CMAC
effectue POA(后加法)
sur la sortie, reconvertissant le résultat au format d'activation standard. CMAC
Il existe 16
des sous-modules identiques, appelés MAC单元
. ChacunMAC单元
contient64
des multiplicateurs pourint16/fp16
. Il contient également additionneurs pour. Chaque multiplicateur et additionneur peut être divisé en deux unités de calcul. La profondeur du pipeline est de. 16位
72
Winograd POA
int16/fp16
int8
7个周期
CMAC
a conçu un bypass
pour transmettre le statut des indicateurs d'opération 开始
et 结束
. Avis! Il faut 4 cycles pour mettre en œuvre cette opération. Pour l'optimisation de la conception physique, CMAC
est divisé en deux parties : CMAC_A
et CMAC_B
. Chaque partie possède une CSB
interface et regfile
distinctes.
6.2 Considération de puissance
CMAC
Prend en charge le déclenchement d'horloge d'une seule unitéCMAC
.
七、Accumulateur de convolution
Il s'agit de la dernière étape du pipeline de convolution. Jetez un œil à son emplacement :
7.1 Globalement
CACC
est l'étape du pipeline de convolution après CMAC
, qui accumule les sommes partielles de CMAC
et les envoie à SDP
Le le résultat est arrondi avant. De plus, l'existence de CACC
peut atténuer la pression de débit maximale du pipeline de convolution. La largeur en bits de CACC
et SDP
est de 32. CACC
Y comprisAssembly SRAM Group
, Delivery SRAM Group
, tableau d'additionneuradder array
, tableau de troncature< a i =11>, et vérificateur . Le flux de travail de est présenté ci-dessous : truncating array
valid-credit controller
checker
CACC
1、从Assembly SRAM Group中预取累加值。
2、当部分和到达时,将它们与累加和一起发送到加法器数组。如果部分和来自第一个Stripe Operation,则累加和应为0。
3、从加法器阵列的输出端收集新的累加和,并存入Assembly SRAM Group。
4、重复以上步骤1~步骤3,直到完成一个Channel Operation。
5、如果完成Channel Operation,加法器的输出将被舍入。
6、收集上一步的结果并将其存储到Delivery SRAM Group中。
7、从Delivery SRAM Group加载结果并将其发送到SDP。
L'introduction aux deux stockages est la suivante :
La précision de la somme partielle et l'allocation de l'additionneur sont les suivantes :
7.2 Considération de puissance
Comme les modules de niveau pipeline précédents, une horloge fermée est également définie.
8. MCIF
MCIF
La structure de est la suivante :
MCIF
est utilisé pour 仲裁
requêtes de 内部子模块
et converti en < a i=4> auquel se connecter. le fera , mais certains sous-modules n'auront que des exigences de lecture, donc et < L'interface entre /span> auront besoin des deux < /span> a>. , et les autres dans l'image ci-dessus auront besoin de et . ou , prendra en charge AXI协议
外部DRAM
MCIF
同时支持读和写通道
NVDLA
子模块
MCIF
读
写
两者兼有
CDMA0
CDMA1
只读
5类子模块
读和写
9. SRAMIF
L'architecture de SRAMIF
ici est la suivante :
SRAMIF
le module est utilisé pour connecter 内部子模块
à 片上SRAM
. Similaire à MCIF
, mais 总线延迟
devrait être inférieur. SRAMIF
auront les deux 支持读和写通道
, mais certains NVDLA
sous-modules n'auront que 读要求
, donc L'interface entre a> ou nécessitera uniquement le canal de lecture, tandis que les autres sous-modules de catégorie 5 nécessiteront à la fois la lecture et l'écriture. . , prendra en charge DMA Engine
et SRAMIF
读
写
两者兼有
CMDA0~1
Résumer
Cet article se concentre sur une explication approfondie de chaque étape de pipeline du module de convolution.