FR 3117626 A1 20220617 FR 2013373 A 20201216 Selon un aspect, un procédé est proposé pour définir des placements, dans une mémoire volatile, de mémoires tampons de travail temporaires utilisées pendant une exécution d’un réseau de neurones artificiels, le procédé comprenant les étapes suivantes : - déterminer (20) un ordre d’exécution des couches du réseau de neurones, - définir (21) des placements, dans une zone de mémoire de tas de la mémoire volatile, de mémoires tampons de résultats intermédiaires générées par chaque couche, selon l’ordre d’exécution des couches, - déterminer (22) au moins une région libre de la zone de mémoire de tas pendant l’exécution des couches, - définir (27) des placements de mémoires tampons de travail temporaires dans ladite au moins une région libre de la zone de mémoire de tas selon l’ordre d’exécution des couches. Figure pour l’abrégé : Fig 2 Procédé d’allocation de mémoire pendant l’exécution d’un réseau de neurones Des modes de réalisation de la présente invention concernent les réseaux de neurones artificiels, et plus particulièrement l’allocation de mémoire pendant la mise en correspondance de ces réseaux de neurones. Les réseaux de neurones artificiels comprennent généralement une succession de couches de neurones. Les réseaux de neurones artificiels prennent un ensemble de données en entrée de la première couche et délivrent un résultat final en sortie de la dernière couche. Chaque couche située entre la première couche et la dernière couche génère à sa sortie un bloc de données de résultat intermédiaire, aussi appelées données de tenseur. Les autres couches prennent ces données de résultat intermédiaire en entrée et génèrent à partir de celles-ci leurs propres données de résultat intermédiaire. Les réseaux de neurones artificiels peuvent être mis en œuvre par des circuits intégrés tels que des microcontrôleurs. Pendant l’exécution du réseau de neurones, chaque résultat intermédiaire est stocké temporairement dans une région de mémoire, appelée région de mémoire globale, d’une mémoire du circuit intégré. Toutefois, les circuits intégrés ont des mémoires de taille limitée. Il est donc important de limiter la taille requise pour le stockage des résultats intermédiaires générés par les couches du réseau de neurones. Des procédés sont utilisés pour définir le placement de mémoires tampons de résultats intermédiaires dans la mémoire pendant l’exécution du réseau de neurones afin de limiter la taille de mémoire utilisée pour stocker les résultats intermédiaires. Par exemple, la demande de brevet européen publiée sous le numéro EP 3 663 987 ou la demande de brevet français déposée sous le numéro 20 04337 divulguent un tel procédé. Par ailleurs, l’exécution d’une couche peut nécessiter le stockage temporaire de données de travail (en anglais « scratch data ») dans la mémoire. Les données de travail sont des données intra-couche temporaires utilisées uniquement par une couche donnée et qui n’ont besoin d’être allouées que pendant l’exécution de cette couche donnée. Par exemple, les données de travail peuvent être une copie de poids, des résultats intermédiaires temporaires liés à une couche ou des tableaux de conversion. Les données de travail peuvent aussi être des données intra-couche destinées à des tâches à forte charge de calcul, comme le déroulement de boucle. Cependant, le stockage temporaire de ces données de travail n’est généralement pas optimisé. En particulier, pour minimiser le temps d’interférence du réseau de neurones, le stockage temporaire de données de travail provoque généralement des pénalités de mémoire vive ou de mémoire flash. Il existe par conséquent un besoin pour un procédé permettant d’allouer et de placer de manière efficace les données de travail. Selon un aspect, un procédé est proposé pour définir des placements, dans une mémoire volatile, de mémoires tampons de travail temporaires (en anglais « temporary scratch buffers ») utilisées pendant une exécution d’un réseau de neurones artificiels, le procédé comprenant les étapes suivantes : - déterminer un ordre d’exécution des couches du réseau de neurones, - définir des placements, dans une zone de mémoire de tas (en anglais « heap memory zone ») de la mémoire volatile, de mémoires tampons de résultats intermédiaires générées par chaque couche, selon l’ordre d’exécution des couches, - déterminer au moins une région libre de la zone de mémoire de tas pendant l’exécution des couches, - définir des placements de mémoires tampons de travail temporaires dans ladite au moins une région libre de la zone de mémoire de tas selon l’ordre d’exécution des couches. Les placements de mémoires tampons de résultats intermédiaires, selon l’ordre d’exécution des couches du réseau de neurones, déterminent les limites de la zone de mémoire de tas nécessaire pour allouer ces mémoires tampons de résultats intermédiaires. Les mémoires tampons de résultats intermédiaires sont allouées dans la zone de mémoire de tas aussi longtemps que nécessaire pour l’exécution d’une couche. Des régions libres apparaissent dans la zone de mémoire de tas lorsque les mémoires tampons de résultats intermédiaires utilisées pour l’exécution d’une couche ont une taille cumulée plus petite que la taille de la zone de mémoire de tas. Un tel procédé permet à la région libre disponible de la zone de mémoire de tas utilisée pour allouer des mémoires tampons de résultats intermédiaires, d’être aussi utilisée pour allouer les mémoires tampons de travail. Les mémoires tampons de travail peuvent être utilisées pour les optimisations de niveaux intra-couche. Par exemple, les mémoires tampons de travail sont utilisées pour déplacer les poids de la couche d’une mémoire flash à une mémoire vive. Les mémoires tampons de travail peuvent aussi être utilisées pour le déroulement de boucle pour les tâches à forte charge de calcul. En utilisant les régions libres de la zone de mémoire de tas pour allouer des mémoires tampons de travail, il est possible d’optimiser le temps d’interférence sans augmenter la taille de la mémoire vive ou de la mémoire flash. Le procédé permet aussi une réduction de la consommation d’énergie pour l’exécution du réseau de neurones. La détermination de l’ordre d’exécution des couches du réseau de neurones peut être réalisée par un algorithme de recherche en profondeur d’abord, par exemple en utilisant des graphes acycliques dirigés. Les procédés divulgués par la demande de brevet européen publiée sous le numéro EP 3 663 987 ou la demande de brevet français déposée sous le numéro 20 04337 peuvent être utilisés pour définir les placements de mémoires tampons de résultats intermédiaires dans la zone de mémoire de tas. Selon une mise en œuvre particulièrement avantageuse, les procédés comprennent pour chaque couche : - la mise en ordre de mémoires tampons de travail temporaires associées à la couche, de la mémoire tampon la plus grosse à la plus petite, les mémoires tampons de travail de taille variable étant mises en file d’attente après la plus petite mémoire tampon, - la définition de placements des mémoires tampons de travail temporaires en suivant leur ordre. Selon une mise en œuvre particulièrement avantageuse, le placement défini d’une mémoire tampon de travail est un placement de la mémoire tampon de travail en haut de ladite au moins une région libre. Selon une mise en œuvre particulièrement avantageuse, le placement défini d’une mémoire tampon de travail est un placement de la mémoire tampon de travail en bas de ladite au moins une région libre. Selon une mise en œuvre particulièrement avantageuse, le placement défini d’une mémoire tampon de travail est un placement de la mémoire tampon de travail sur une autre mémoire tampon de travail. Avantageusement, le procédé comprend, pour le placement d’une mémoire tampon de travail : - la modification du haut de la zone de mémoire de tas afin d’obtenir une région libre en haut de la zone de mémoire de tas ayant la taille de la mémoire tampon de travail, - la définition d’un placement de la mémoire tampon de travail dans la région libre en haut de la zone de mémoire de tas. Selon une mise en œuvre particulièrement avantageuse, le procédé comprend, pour le placement d’une mémoire tampon de travail : - la modification du bas de la zone de mémoire de tas afin d’obtenir une région libre dans le bas de la zone de mémoire de tas ayant la taille de la mémoire tampon de travail, - la mise en place de la mémoire tampon de travail dans la région libre dans le bas de la zone de mémoire de tas. Selon une mise en œuvre particulièrement avantageuse, les placements pour les mémoires tampons de travail de taille variable sont définis dans au moins une région libre restante de la zone de mémoire de tas après avoir défini les placements des mémoires tampons de travail ayant des tailles fixes. Avantageusement, lorsqu’il y a plusieurs régions libres restantes disponibles pour le placement d’une mémoire tampon de travail de taille variable, on choisit la plus grande région libre parmi ces régions libres restantes pour placer cette mémoire tampon de travail. De préférence, le procédé comprend : - le stockage des régions libres pour une couche dans une liste, - l’actualisation de la liste après chaque définition de placement d’une mémoire tampon de travail. Selon un autre aspect, un produit de programme informatique est proposé, comprenant des instructions qui, quand le programme est exécuté par un ordinateur, font exécuter par l’ordinateur le procédé susmentionné. Selon un autre aspect, un circuit intégré est proposé, comprenant : - une mémoire non volatile configurée pour stocker un réseau de neurones, - une mémoire volatile, - une unité de traitement configurée pour : º déterminer un ordre d’exécution des couches du réseau de neurones, º définir des placements de mémoires tampons de résultats intermédiaires générés par chaque couche dans une zone de mémoire de tas de la mémoire volatile selon l’ordre d’exécution des couches, º déterminer au moins une région libre de la zone de mémoire de tas pendant une exécution des couches, º définir des placements de mémoires tampons de travail temporaires dans ladite au moins une région libre de la zone de mémoire de tas selon l’ordre d’exécution des couches. Selon un mode de réalisation particulièrement avantageux, l’unité de traitement est aussi configurée pour, pour chaque couche : - ordonner des mémoires tampons temporaires associées à la couche, des plus grosses aux plus petites mémoires tampons, les mémoires tampons de travail de taille variable étant mises en file d’attente après la plus petite mémoire tampon, - définir les placements de mémoires tampons de travail temporaires en suivant leur ordre. Selon un mode de réalisation particulièrement avantageux, l’unité de traitement est configurée pour définir un placement d’une mémoire tampon de travail en haut de ladite au moins une région libre. Selon un mode de réalisation particulièrement avantageux, l’unité de traitement est configurée pour définir un placement d’une mémoire tampon de travail en bas de ladite au moins une région libre. Selon un mode de réalisation particulièrement avantageux, l’unité de traitement est configurée pour définir un placement d’une mémoire tampon de travail sur une autre mémoire tampon de travail. Avantageusement, l’unité de traitement est configurée pour, pour le placement d’une mémoire tampon de travail : - modifier le haut de la zone de mémoire de tas afin d’obtenir une région libre en haut de la zone de mémoire de tas ayant la taille de la mémoire tampon de travail, - définir un placement de la mémoire tampon de travail dans la région libre en haut de la zone de mémoire de tas. Selon un mode de réalisation particulièrement avantageux, l’unité de traitement est configurée pour, pour le placement d’une mémoire tampon de travail : - modifier le bas de la zone de mémoire de tas afin d’obtenir une région libre dans le bas de la zone de mémoire de tas ayant la taille de la mémoire tampon de travail, - placer la mémoire tampon de travail dans la région libre dans le bas de la zone de mémoire de tas. De préférence, l’unité de traitement est configurée pour définir un placement pour des mémoires tampons de travail de taille variable dans au moins une région libre restante de la zone de mémoire de tas, après avoir défini les placements des mémoires tampons de travail ayant une taille fixe. Avantageusement, quand il y a plusieurs régions libres restantes disponibles pour le placement d’une mémoire tampon de travail de taille variable, l’unité de traitement est configurée pour choisir la plus grande région libre de ces régions libres restantes pour placer cette mémoire tampon de travail. Selon un mode de réalisation particulièrement avantageux, l’unité de traitement est configurée pour : - stocker les régions libres pour une couche donnée dans une liste, - actualiser la liste après chaque définition de placement d’une mémoire tampon de travail. D’autres avantages et caractéristiques de l’invention apparaîtront à la lecture de la description détaillée de modes de réalisation et de mises en œuvre, en aucun cas limitatifs, et à l’étude des dessins annexés dans lesquels : et illustrent de façon schématique divers modes de réalisation et mises en œuvre de l’invention. La montre un circuit intégré CI. Ce circuit intégré CI peut être par exemple un microcontrôleur, un générateur de code ou tout autre objet susceptible de contenir une architecture matérielle ou logicielle embarquée. Le circuit intégré CI est configuré pour mettre en œuvre un réseau de neurones. Le réseau de neurones comprend une succession de couches. Le circuit intégré CI comprend une mémoire non volatile MNV configurée pour stocker les divers paramètres qui définissent l’architecture d’un réseau de neurones, comme la configuration de ses couches et ses poids et paramètres. Le circuit intégré CI comprend aussi une mémoire volatile MV, par exemple une mémoire vive ou RAM (« mémoire à accès aléatoire »). La mémoire volatile MV est configurée pour stocker un code d’exécution du réseau de neurones ainsi qu’un programme pour exécuter le réseau de neurones. La mémoire volatile MV comprend aussi une zone, appelée zone de mémoire de tas, qui peut être allouée de manière dynamique pour le stockage de données utilisées pendant l’exécution du réseau de neurones. Comme on le verra plus loin, ces données peuvent être des résultats intermédiaires générés par des couches ou des données de mémoires tampons de travail utilisées pour l’exécution d’une couche donnée. La zone de mémoire de tas peut présenter une partie de mémoire rapide et une partie de mémoire lente. Les accès à la partie de mémoire rapide sont exécutés plus rapidement que les accès à la partie de mémoire lente. Le circuit intégré CI comprend aussi une unité de traitement UT. L’unité de traitement UT comprend par exemple un microprocesseur. L’unité de traitement UT est couplée à la mémoire volatile MV. L’unité de traitement est configurée pour allouer la zone de mémoire de tas de la mémoire volatile MV pour stocker des données pendant l’exécution du réseau de neurones. Afin d’optimiser l’allocation de mémoire pendant l’exécution de ces réseaux de neurones, un procédé pour définir des placements pour les mémoires tampons dans la mémoire volatile est mis en œuvre avant l’exécution du réseau. L’unité de traitement UT est configurée pour mettre en œuvre un tel procédé. En particulier, l’unité de traitement UT peut exécuter un programme informatique comprenant des instructions qui, quand le programme est exécuté par l’unité de traitement, fait exécuter le procédé par l’unité de traitement. Le procédé est montré sur la . Le procédé comprend une étape 20 dans laquelle l’unité de traitement UT détermine un ordre d’exécution des couches du réseau de neurones. Ceci permet d’obtenir un plan d’exécution des couches du réseau de neurones. Plus particulièrement, la détermination de l’ordre d’exécution des couches du réseau de neurones peut être réalisée par un algorithme de recherche en profondeur d’abord, par exemple en utilisant des graphes acycliques dirigés, bien connus des personnes du métier. Ensuite, le procédé comprend une étape 21 dans laquelle, selon l’ordre d’exécution des couches, l’unité de traitement UT définit les placements en mémoire de mémoires tampons de résultats intermédiaires, également appelées mémoires tampons de tenseurs. En particulier, on utilise des mémoires tampons de résultats intermédiaires pour stocker des résultats intermédiaires, également appelés données de tenseurs. Les résultats intermédiaires sont des données qui sont calculées pour chaque couche, sauf la dernière couche, à partir de données reçues à l’entrée de la couche. Les résultats intermédiaires calculés par une couche sont délivrés sur la sortie de cette couche et sont utilisés par d’autres couches exécutées par la suite. Les résultats intermédiaires ont besoin d’être stockés en mémoire jusqu’à ce que les couches qui les utilisent soient exécutées. La définition de placements de mémoires tampons de résultats intermédiaires permet d’optimiser la taille de la zone de mémoire de tas de la mémoire volatile, nécessaire pour stocker les résultats intermédiaires. En particulier, les procédés divulgués par la demande de brevet européen publiée sous le numéro EP 3 663 987 ou la demande de brevet français déposée sous le numéro 20 04337 peuvent être utilisés pour définir les placements de mémoires tampons de résultats intermédiaires dans la zone de mémoire de tas. La montre des placements de mémoires tampons de résultats intermédiaires dans le temps pour chaque couche. La montre sur l’axe des y (ordonnée) le placement de mémoires tampons de résultats intermédiaires dans la zone de mémoire de tas HMZ et sur l’axe des x (abscisse) le temps d’exécution en tant que résultat du traitement des couches 1 à N. Par exemple, les mémoires tampons de résultats intermédiaires TB1, TB2, TB3 sont placées dans la zone de mémoire de tas pendant les temps d’exécution de certaines couches. La taille de la zone de mémoire de tas HMZ est définie par les placements choisis pour les mémoires tampons de résultats intermédiaires. Par exemple, sur la , la taille sz de la zone de mémoire de tas est égale à sz = topz-botz, où topz est l’adresse haute de la zone de mémoire de tas et botz est l’adresse basse de la zone de mémoire de tas. Comme on peut le voir, la taille entière de la zone de mémoire de tas n’est pas complètement allouée pendant l’exécution de la plupart des couches. Certaines régions de la zone de mémoire de tas sont libres pendant l’exécution de la plupart des couches. Par exemple, sur la , les régions FA1, FA2, FA3 sont libres. Le procédé exploite ces régions libres de la zone de mémoire de tas pour allouer des mémoires tampons de travail temporaires. Le procédé permet en particulier la définition de placements de mémoires tampons de travail temporaires dans la zone de mémoire de tas. Les mémoires tampons de travail peuvent être utilisées pour stocker des données de travail en vue d’optimiser les niveaux de couches. Par exemple, les mémoires tampons de travail sont utilisées pour déplacer les poids de la couche d’une mémoire flash vers une mémoire RAM. Les mémoires tampons de travail peuvent aussi être utilisées pour le déroulement de boucle pour les tâches à forte charge de calcul. Les données de travail sont définies pour l’exécution d’une couche donnée du réseau de neurones. Ainsi, chaque mémoire tampon de travail est associée à une couche donnée du réseau de neurones. Les mémoires tampons de travail peuvent avoir une taille fixe ou une taille variable. Une mémoire tampon de travail variable est une mémoire tampon de travail ayant une taille inconnue avant l’exécution du réseau de neurones. Une mémoire tampon de travail de taille variable peut ou non nécessiter une taille minimum. En particulier, le procédé comprend une étape 22 dans laquelle l’unité de traitement UT détermine les régions libres de la zone de mémoire de tas sur la durée d’exécution des couches. Plus particulièrement, des régions libres de la zone de mémoire de tas sont déterminées pour le temps d’exécution de chaque couche. Par exemple, dans la , pour passer à l’exécution de la 10e couche, l’unité de traitement UT a besoin des données stockées dans les mémoires tampons de résultats intermédiaires TB2 et TB3. Ces mémoires tampons de résultats intermédiaires n’occupent qu’une région donnée dans la zone de mémoire de tas. Ainsi, les régions FA1 et FA2 sont libres au moment de l’exécution de la 10e couche. Les régions libres déterminées sont stockées dans une liste. Le procédé comprend ensuite un processus pour définir des placements de mémoires tampons de travail temporaires dans les régions libres de la zone de mémoire de tas selon l’ordre d’exécution des couches. Les placements de mémoires tampons de travail temporaires sont réalisés un par un selon le plan d’exécution des couches. En particulier, à l’étape 23, les mémoires tampons de travail temporaires à placer sont stockées dans une file d’attente selon le plan d’exécution. De préférence, les mémoires tampons de travail temporaires associées à la même couche sont stockées dans la file d’attente de la plus grande à la plus petite, les mémoires tampons de travail de taille variable étant mises en file d’attente après la plus petite mémoire tampon de travail. Comme décrit ci-dessous, après la définition du placement d’une mémoire tampon, cette mémoire tampon est supprimée de la file d’attente. Le processus pour définir les placements de mémoires tampons de travail comprend une étape 24 dans laquelle l’unité de traitement UT vérifie si la file d’attente est ou non vide. Si la file d’attente n’est pas vide, cela signifie qu’il y a encore au moins une mémoire tampon de travail à placer. Dans ce cas, l’étape suivante est l’étape 25. Si la file d’attente est vide, cela signifie qu’il n’y a pas de mémoire tampon à placer. Dans ce cas, le procédé se termine à l’étape 28. Quand la file d’attente n’est pas vide, à l’étape 25 l’unité de traitement UT récupère la première mémoire tampon de travail de la file d’attente pour la placer dans la zone de mémoire de tas. En particulier, à l’étape 26, l’unité de traitement UT contrôle les régions libres de la zone de mémoire de tas disponible au moment de l’exécution de la couche associée à la mémoire tampon de travail récupérée à l’étape 25. Ce contrôle est effectué à partir de la liste de régions libres disponibles au moment de l’exécution de la couche. Ensuite, à l’étape 27, l’unité de traitement UT définit un placement de la mémoire tampon de travail en fonction de ses contraintes et de ses déplacements disponibles. Un processus pour définir le placement d’une mémoire tampon de travail dans la zone de mémoire de tas est montré sur la . Plus particulièrement, à l’étape 40, l’unité de traitement UT vérifie si une optimisation de latence est nécessaire pour la mémoire tampon de travail. Si une optimisation de latence est nécessaire, l’unité de traitement UT choisit à l’étape 41 la partie de mémoire rapide de la zone de mémoire de tas comme partie de la zone de mémoire de tas dans laquelle la mémoire tampon de travail va être placée. Ensuite, l’unité de traitement UT extrait les régions libres de la partie de mémoire rapide de la liste de régions libres selon le temps d’exécution de la couche associée à la mémoire tampon de travail. Si une optimisation de latence n’est pas nécessaire, l’unité de traitement UT choisit à l’étape 42 la partie de mémoire lente de la zone de mémoire de tas comme partie de la zone de mémoire de tas dans laquelle la mémoire tampon de travail va être placée. Ensuite, l’unité de traitement UT extrait les régions libres de la partie de mémoire lente de la liste de régions libres selon le temps d’exécution de la couche associée à la mémoire tampon de travail. Ensuite, à l’étape 43, l’unité de traitement UT évalue s’il est possible de placer la mémoire tampon de travail dans les régions libres extraites de la liste. En particulier, l’unité de traitement UT compare la taille de la mémoire tampon de travail avec la taille de chaque région libre extraite de la liste. Quand une région libre extraite a une taille supérieure ou égale à la taille de la mémoire tampon de travail, cette région libre extraite est adaptée pour recevoir la mémoire tampon de travail. S’il existe au moins une région libre adaptée pour recevoir la mémoire tampon de travail, l’unité de traitement UT passe directement à l’étape 44 dans laquelle l’unité de traitement UT définit un placement de la mémoire tampon de travail. S’il n’existe pas de région libre adaptée pour recevoir la mémoire tampon de travail, à l’étape 44, l’unité de traitement UT augmente la taille de la partie de la zone de mémoire de tas dans laquelle la mémoire tampon de travail doit être placée. En particulier, l’unité de traitement UT peut augmenter le haut ou le bas de la zone de mémoire de tas afin d’obtenir une région libre dans la partie supérieure ou inférieure de la zone de mémoire de tas ayant une taille adaptée pour recevoir la mémoire tampon de travail. Plus particulièrement, quand il n’y a pas de région libre en haut, respectivement en bas, de la taille mémoire globale, l’unité de traitement UT modifie l’adresse haute, respectivement l’adresse basse, de la zone de mémoire de tas afin d’obtenir une région libre ayant une taille égale à la taille de la mémoire tampon de travail. Toutefois, lorsqu’il y a une région libre en haut, respectivement en bas, de la zone de mémoire de tas, l’unité de traitement UT modifie l’adresse haute, respectivement l’adresse basse, afin d’augmenter la taille de la région libre de la différence entre la taille de la mémoire tampon de travail et la taille initiale de la région libre. L’unité de traitement UT passe ensuite à l’étape 45. À l’étape 45, l’unité de traitement UT définit un placement de la mémoire tampon de travail. De préférence, si la mémoire tampon de travail a une taille fixe, l’unité de traitement UT peut choisir la plus petite région libre extraite de la liste, avec une taille adaptée pour recevoir la mémoire tampon de travail, pour placer la mémoire tampon de travail. Ensuite, l’unité de traitement UT peut placer la mémoire tampon de travail ayant une taille fixe selon différents placements possibles. Un premier placement pour une mémoire tampon de travail de taille fixe consiste à placer, pour minimiser la taille de tas finale et lorsqu’une mise en œuvre de couche spécifique l’exige, la mémoire tampon de travail de telle manière qu’elle soit recouverte par une autre mémoire tampon de travail pour l’exécution de la couche. En particulier, la mémoire tampon de travail peut être placée sur une mémoire tampon de travail déjà placée ayant une taille supérieure ou égale à celle de la mémoire tampon de travail à placer. La mémoire tampon de travail peut aussi être placée sur une mémoire tampon de travail déjà placée ayant une taille inférieure à celle de la mémoire tampon de travail à placer quand il y a une région libre adjacente à la mémoire tampon de travail déjà placée, la région libre ayant une taille supérieure ou égale à la différence entre la mémoire tampon de travail à placer et la mémoire tampon de travail déjà placée. De préférence, cette région libre est une région libre adjacente à la partie inférieure de la mémoire tampon de travail déjà placée. Un deuxième placement pour une mémoire tampon de travail de taille fixe consiste à placer la mémoire tampon de travail en haut de la plus petite région libre ayant une taille adaptée pour recevoir la mémoire tampon de travail. Un troisième placement pour une mémoire tampon de travail de taille fixe consiste à placer la mémoire tampon de travail en bas de la plus petite région libre ayant une taille adaptée pour recevoir la mémoire tampon de travail. Par ailleurs, lorsque tous les placements possibles de mémoires tampons de travail de taille fixe associées à une même couche sont définis, l’unité de traitement continue avec la définition des placements de mémoires tampons de travail de taille variable associées à la même couche. Pour placer une mémoire tampon de travail de taille variable, l’unité de traitement UT choisit le plus grand ensemble de régions libres qui reste dans la liste pour placer la mémoire tampon de travail. En particulier, les régions libres restantes sont triées par taille décroissante. Si le nombre de mémoires tampons de travail de taille variable à placer est inférieur ou égal au nombre de régions libres restantes, chaque mémoire tampon de travail peut être placée dans une région libre restante donnée triée par ordre de taille décroissant. Dans ce cas, la taille définie de la mémoire tampon de travail est égale à la taille de la région libre restante dans laquelle on place la mémoire tampon de travail. Cependant, si le nombre de mémoires tampons de travail de taille variable à placer est supérieur au nombre de régions libres restantes, l’unité de traitement calcule une moyenne du nombre de mémoires tampons de travail à placer dans une région libre restante. Ainsi, une mémoire tampon de travail de taille variable peut être placée dans une région libre restante avec au moins une autre mémoire tampon de travail de taille variable. En particulier, la taille définie de la mémoire tampon de travail à placer est égale à la taille de la région libre restante dans laquelle la mémoire tampon de travail est placée divisée par le nombre de mémoires tampons de travail à placer dans cette région libre restante. De plus, dans le cas où une mémoire tampon de travail de taille variable a besoin d’une taille minimum supérieure à la taille de chaque région libre restante, il est possible, à l’étape 44, d’augmenter le haut ou le bas de la zone de mémoire de tas pour obtenir une région libre en haut ou en bas de la zone de mémoire de tas ayant une taille égale à la taille minimum nécessaire pour cette mémoire tampon de travail. La mémoire tampon de travail est ensuite placée dans cette région libre. Après le placement de la mémoire tampon de travail, la liste des régions libres est actualisée, et la mémoire tampon de travail est supprimée de la file d’attente. Ensuite, on répète le processus à partir de l’étape 24 pour placer la mémoire tampon de travail suivante dans la file d’attente, jusqu’à ce que la file d’attente soit vide. Lorsque la file est vide, il n’y a plus de mémoire tampon de travail à placer. Le procédé s’arrête à l’étape 28. Néanmoins, le processus pour définir le placement de mémoires tampons de travail peut être répété afin d’essayer des placements différents pour chaque mémoire tampon de travail. Ceci permet de trouver des placements optimisés pour les mémoires tampons de travail. En particulier, les placements peuvent être optimisés selon un critère donné. Par exemple, le critère peut être d’éviter l’augmentation de la zone de mémoire de tas définie par les placements des mémoires tampons de résultats intermédiaires. Un autre critère peut être de conserver la solution de placement qui permet d’obtenir la taille minimale de zone de mémoire de tas. En variante, un autre critère peut être de conserver la solution de placement qui permet d’obtenir la zone de mémoire la moins fragmentée. Un autre critère pourrait être de conserver la solution de placement qui permet de maximiser les placements des mémoires tampons de travail dans la partie de mémoire rapide de la zone de mémoire de tas pour accélérer l’exécution du réseau de neurones. Un exemple de solution finale pour le placement de mémoires tampons de résultats intermédiaires et de mémoire tampon de travail est montré sur la . Les placements de mémoires tampons de résultats intermédiaires sont les mêmes que sur la (voir par exemple les mémoires tampons TB1, TB2 et TB3). Ainsi, les placements des mémoires tampons de résultats intermédiaires définissent une zone de mémoire de tas entre les adresses botz et topz. Comme on peut le voir, certaines mémoires tampons de travail sont placées en haut ou en bas de certaines régions libres. Par exemple, une mémoire tampon de travail SB1 est placée en haut d’une région libre. Une mémoire tampon de travail SB2 est placée en bas d’une région libre. D’autres mémoires tampons de travail sont placées sur des mémoires tampons de travail déjà placées. Par exemple, une mémoire tampon de travail SB3 est placée sur une mémoire tampon de travail déjà placée en haut d’une région libre. Une autre mémoire tampon de travail SB4 est placée sur la mémoire tampon de travail SB3. Pour placer des mémoires tampons de travail quand il n’y a pas de région libre disponible, on augmente le haut ou le bas de la zone de mémoire de tas. Par exemple, pour placer la mémoire tampon de travail SB5, l’adresse du haut de la zone de mémoire de tas est augmentée à l’adresse i_topz , afin d’obtenir une région libre de la taille de la mémoire tampon de travail SB5 en haut de la zone de mémoire de tas. Ensuite la mémoire tampon de travail SB5 est placée dans cette région libre. Par ailleurs, pour placer la mémoire tampon de travail SB6, l’adresse du bas de la zone de mémoire de tas est modifiée à l’adresse f_botz , afin d’obtenir une région libre de la taille de la mémoire tampon de travail SB6 en bas de la zone de mémoire de tas. Ensuite la mémoire tampon de travail SB6 est placée dans cette région libre. Pour placer la mémoire tampon de travail SB7, le haut de la zone de mémoire de tas est augmenté à l’adresse f_topz parce que la taille de la région libre en haut de la zone de mémoire de tas définie avant le placement de la mémoire tampon de travail SB6 est plus petite que la mémoire tampon de travail SB7. En particulier, le haut de la zone de mémoire de tas est augmenté de la différence entre la taille de la mémoire tampon de travail SB7 et la taille de la région libre en haut de la zone de mémoire de tas définie avant le placement de la mémoire tampon de travail SB7. À la fin, la zone de mémoire de tas finale FHMZ est définie entre l’adresse f_topz et l’adresse f_botz . Après avoir défini les placements des mémoires tampons de résultats intermédiaires et de la mémoire tampon de travail, l’unité de traitement UT peut exécuter le réseau de neurones. Quand l’unité de traitement UT exécute les réseaux de neurones, la mémoire est allouée selon les placements définis des mémoires tampons de résultats intermédiaires et selon les placements définis des mémoires tampons de travail. Le procédé susmentionné permet d’exploiter la région libre disponible de la zone de mémoire de tas utilisée pour allouer des mémoires tampons de résultats intermédiaires pour allouer à leur tour les mémoires tampons de travail. En utilisant les régions libres de la zone de mémoire de tas pour allouer les mémoires tampons de travail, il est possible d’optimiser le temps d’interférence presque sans modifier la taille de la RAM ou de la mémoire flash. Le procédé permet aussi une réduction de la consommation d’énergie pour l’exécution du réseau de neurones. Procédé pour définir des placements, dans une mémoire volatile, de mémoires tampons de travail temporaires utilisées pendant une exécution d’un réseau de neurones artificiels, le procédé comprenant les étapes suivantes : - déterminer (20) un ordre d’exécution des couches du réseau de neurones, - définir (21) des placements, dans une zone de mémoire de tas de la mémoire volatile, de mémoires tampons de résultats intermédiaires générées par chaque couche, selon l’ordre d’exécution des couches, - déterminer (22) au moins une région libre de la zone de mémoire de tas pendant l’exécution des couches, - définir (27) des placements de mémoires tampons de travail temporaires dans ladite au moins une région libre de la zone de mémoire de tas selon l’ordre d’exécution des couches. Procédé selon la revendication 1, comprenant pour chaque couche : - la mise en ordre de mémoires tampons de travail temporaires associées à la couche, de la mémoire tampon la plus grosse à la plus petite, les mémoires tampons de travail de taille variable étant mises en file d’attente après la plus petite mémoire tampon, - la définition de placements des mémoires tampons de travail temporaires en suivant leur ordre. Procédé selon la revendication 1 ou 2, dans lequel le placement défini d’une mémoire tampon de travail est un placement de la mémoire tampon de travail en haut de ladite au moins une région libre. Procédé selon l’une des revendications 1 à 3, dans lequel le placement défini d’une mémoire tampon de travail est un placement de la mémoire tampon de travail en bas de ladite au moins une région libre. Procédé selon l’une des revendications 1 à 4, dans lequel le placement défini d’une mémoire tampon de travail est un placement de la mémoire tampon de travail sur une autre mémoire tampon de travail. Procédé selon l’une des revendications 1 à 5, comprenant, pour le placement d’une mémoire tampon de travail : - la modification du haut de la zone de mémoire de tas afin d’obtenir une région libre en haut de la zone de mémoire de tas ayant la taille de la mémoire tampon de travail, - la définition d’un placement de la mémoire tampon de travail dans la région libre en haut de la zone de mémoire de tas. Procédé selon l’une des revendications 1 à 6, comprenant, pour le placement d’une mémoire tampon de travail : - la modification du bas de la zone de mémoire de tas afin d’obtenir une région libre dans le bas de la zone de mémoire de tas ayant la taille de la mémoire tampon de travail, - la mise en place de la mémoire tampon de travail dans la région libre dans le bas de la zone de mémoire de tas. Procédé selon l’une des revendications 1 à 7, dans lequel les placements pour les mémoires tampons de travail de taille variable sont définis dans au moins une région libre restante de la zone de mémoire de tas après avoir défini les placements des mémoires tampons de travail ayant des tailles fixes. Procédé selon l’une des revendications 1 à 8, comprenant : - le stockage des régions libres pour une couche dans une liste, - l’actualisation de la liste après chaque définition de placement d’une mémoire tampon de travail. Produit de programme informatique comprenant des instructions qui, quand le programme est exécuté par un ordinateur, font exécuter par l’ordinateur un procédé selon l’une des revendications 1 à 9. Circuit intégré comprenant : - une mémoire non volatile (MNV) configurée pour stocker un réseau de neurones, - une mémoire volatile (MV), - une unité de traitement (UT) configurée pour : º déterminer un ordre d’exécution des couches du réseau de neurones, º définir des placements de mémoires tampons de résultats intermédiaires générés par chaque couche dans une zone de mémoire de tas de la mémoire volatile selon l’ordre d’exécution des couches, º déterminer au moins une région libre de la zone de mémoire de tas pendant une exécution des couches, º définir des placements de mémoires tampons de travail temporaires dans ladite au moins une région libre de la zone de mémoire de tas selon l’ordre d’exécution des couches. Circuit intégré selon la revendication 11, dans lequel l’unité de traitement (UT) est aussi configurée pour, pour chaque couche : - ordonner des mémoires tampons temporaires associées à la couche, des plus grosses aux plus petites mémoires tampons, les mémoires tampons de travail de taille variable étant mises en file d’attente après la plus petite mémoire tampon, - définir les placements de mémoires tampons de travail temporaires en suivant leur ordre. Circuit intégré selon la revendication 11 ou 12, dans lequel l’unité de traitement (UT) est configurée pour définir un placement d’une mémoire tampon de travail en haut de ladite au moins une région libre. Circuit intégré selon l’une des revendications 11 à 13, dans lequel l’unité de traitement (UT) est configurée pour définir un placement d’une mémoire tampon de travail en bas de ladite au moins une région libre. Circuit intégré selon l’une des revendications 11 à 14, dans lequel l’unité de traitement (UT) est configurée pour définir un placement d’une mémoire tampon de travail sur une autre mémoire tampon de travail. Circuit intégré selon l’une des revendications 11 à 15, dans lequel l’unité de traitement (UT) est configurée pour, pour le placement d’une mémoire tampon de travail : - modifier le haut de la zone de mémoire de tas afin d’obtenir une région libre en haut de la zone de mémoire de tas ayant la taille de la mémoire tampon de travail, - définir un placement de la mémoire tampon de travail dans la région libre en haut de la zone de mémoire de tas. Circuit intégré selon l’une des revendications 11 à 16, dans lequel l’unité de traitement (UT) est configurée pour, pour le placement d’une mémoire tampon de travail : - modifier le bas de la zone de mémoire de tas afin d’obtenir une région libre en bas de la zone de mémoire de tas ayant la taille de la mémoire tampon de travail, - placer la mémoire tampon de travail dans la région libre dans le bas de la zone de mémoire de tas. Circuit intégré selon l’une des revendications 11 à 17, dans lequel l’unité de traitement (UT) est configurée pour définir un placement pour des mémoires tampons de travail de taille variable dans au moins une région libre restante de la zone de mémoire de tas, après avoir défini les placements des mémoires tampons de travail ayant une taille fixe. Circuit intégré selon l’une des revendications 11 à 18, dans lequel l’unité de traitement (UT) est configurée pour : - stocker les régions libres pour une couche donnée dans une liste, - actualiser la liste après chaque définition de placement d’une mémoire tampon de travail.