Quel est le plus rapide, Exécuter un programme à partir de la ROM ou de la RAM?

8

La plupart d'entre nous qui sommes issus de l'électronique savent que la SRAM est plus rapide que la DRAM. Mais quand il s'agit de comparer la RAM avec la ROM, je ne suis pas sûr.

Ma question est liée au micro-contrôleur: "Si un code s'exécute directement à partir de RAM / ROM, dont les performances seront meilleures ?? 1) exécution à partir de RAM ou 2) exécution à partir de ROM ou 3) les deux fonctionneront de manière égale"

Considérant également le fait que la ROM est conçue pour avoir des vitesses de lecture plus élevées. alors que pour la RAM, il y a un compromis entre la vitesse de lecture et les capacités d'écriture.

Prince Rambade
la source
10
Lire la fiche technique (à fond) est le meilleur moyen. Parfois, il est plus rapide d'exécuter un programme à partir de la RAM que de la mémoire flash. Certains micros ne peuvent pas exécuter de programmes à partir de la RAM et d'autres peuvent s'exécuter à la même vitesse.
Spehro Pefhany
Je ne peux pas encore ajouter de commentaire, j'essaie simplement d'être utile. Cela dépend si la ROM est en fait plus rapide que la RAM que vous utilisez. Sont-ils de vitesses égales?
OzzieSpin
De nombreuses pièces ARM Cortex-M actuelles sont de parfaits exemples de celles qui peuvent s'exécuter à partir de SRAM mais sont plus lentes à le faire car le chemin d'instruction dédié au flash ne peut pas être utilisé. Inversement, l'accès aux données au flash peut être plus lent qu'à la RAM
Chris Stratton
Mais avec des puces ARM7 légèrement plus anciennes (mon expérience était avec LPC2106 et LPC2148), l'excution à partir de la RAM est souvent plus rapide que de FLASH. Ce qui, avec la réponse de Chris, prouve que la seule chose que nous pouvons dire est "ça dépend".
Wouter van Ooijen
Si vous disposez déjà du matériel, le plus simple est d'exécuter simplement les deux scénarios et de comparer. Sinon, les fiches techniques sont votre meilleur pari.
Luaan

Réponses:

16

La fiche technique devrait vous dire combien de temps prend chaque instruction et quelles sont les différences, le cas échéant, entre l'exécution à partir de la RAM ou de la ROM.

Pour les microcontrôleurs qui offrent la possibilité d'exécuter à partir de la RAM, c'est probablement plus rapide , ce qui est probablement le principal point d'utiliser de l'espace RAM supplémentaire pour exécuter le code. Il peut également y avoir des problèmes de chevauchement de récupération. Dans certains cas, il peut être plus rapide à exécuter à partir de la ROM car il s'agit d'une mémoire distincte et l'accès à la RAM peut se faire simultanément.

Encore une fois, la seule façon de savoir pour un micro particulier est de LIRE LA FICHE TECHNIQUE .

Olin Lathrop
la source
Il est encore plus rapide à exécuter à partir du registre.
Joshua
@Joshua Avez-vous des exemples de ce que vous pourriez faire avec un programme exécuté à partir de registres? Il semble méchamment intelligent, mais limité à une taille de programme assez petite. J'ai entendu parler de démos graphiques de 64 Ko, mais une démonstration de 16 registres? =)
Cort Ammon
3
@CortAmmon: J'en ai un assis sur mon bureau avec 512 registres, dont 400 contiennent le code du programme. La RAM est 3 fois plus lente et la ROM est si lente qu'elle est copiée dans la RAM au démarrage (ce qui prend 100s de millisecondes). J'ai un initialiseur / lecteur de carte SD qui tient dans 300 registres, sans support matériel au-delà des broches GPIO. L'écrivain prend une centaine de registres supplémentaires, de sorte que le tout ne rentre pas dans le registre (cela ne laisserait pas assez pour faire quoi que ce soit d'intéressant) mais je n'ai plus besoin de l'initialiseur, alors écrasez.
Joshua
9

Cela dépend entièrement de la mémoire et de l'architecture du processeur. En règle générale, la SRAM est plus rapide que le flash, en particulier sur les MCU à vitesse plus élevée (> 100 MHz). Les cellules binaires SRAM produisent une sortie de niveau logique (plus ou moins), tandis que la mémoire flash doit passer par un processus de détection de courant plus lent.

La rapidité (le cas échéant) dépend à nouveau de l'architecture - la taille des mots des mémoires, le nombre d'états d'attente sur chacun, la présence de la mise en cache, la taille des instructions du processeur, etc. Si vous utilisez un fréquence suffisamment basse, vous pouvez avoir zéro état d'attente sur le flash et la RAM, afin qu'ils puissent fonctionner à la même vitesse.

Le code est également important. Si votre code est strictement linéaire (pas de branchement), le flash pourrait pré-extraire les instructions assez rapidement pour garder le CPU saturé même à des fréquences plus élevées. Comme l'a dit Olin, un processeur d'architecture Harvard avec des chemins de lecture de programme et de données séparés pourrait fonctionner différemment lorsque le code et les données sont dans des mémoires différentes.

Les ROM métalliques (et autres mémoires non volatiles telles que FRAM) ont leurs propres caractéristiques et peuvent ou non être aussi rapides que SRAM. La capacité d'écrire ne fait pas nécessairement de différence; il s'agit davantage des caractéristiques de la sortie des cellules binaires et des circuits de détection.

La fiche technique vous donnera une idée approximative de la différence de vitesse, mais la seule façon de savoir avec certitude est de profiler votre code.

Adam Haun
la source
1

"Exécuter un programme" nécessite une CPU avec une horloge synchrone. La mémoire lente peut être prise en charge soit en exécutant l'ensemble du système à une horloge suffisamment lente, soit en insérant wait states(cycles d'horloge supplémentaires de ne rien faire entre les phases de récupération et de décodage), actifs uniquement pour certaines plages d'adresses (voir l'ancien 8085 par exemple). La récupération des instructions CPU ne sait pas ou ne se soucie pas exactement du moment où les données sont réglées à leur valeur finale, tant qu'elles ne changent pas pendant l'intervalle de configuration / maintien.

Un microcontrôleur a généralement toute sa mémoire sur puce, donc sauf indication contraire, je suppose que le système de mémoire est entièrement à zéro attente. (mais lisez la fiche technique pour confirmer). Les microcontrôleurs typiques sont censés être des solutions monopuce plus simples par rapport à un ordinateur de bureau, donc les états d'attente sont peu probables dans un microcontrôleur. Il est donc peu probable qu'un microcontrôleur ait des vitesses de mémoire sur puce incompatibles.

Une mémoire plus rapide coûte généralement plus cher (tension plus élevée, capacité plus faible, plus de demande). Un 80xx86 a une SRAM rapide dans le cache L2 et une SRAM encore plus rapide dans le cache L1, et beaucoup de puces DRAM plus lentes connectées à un contrôleur de mémoire. Ce type de système est beaucoup plus compliqué qu'un microcontrôleur et dépasse la portée de la question. (Mais d'un grand intérêt pour un ingénieur en informatique!)

MarkU
la source
1
En fait, une conception parfaitement adaptée n'est pas possible sans contraintes. Un processeur sépare les instructions et la mémoire de données, sous-utilise la vitesse de la mémoire dans les instructions ne contenant pas de données de mémoire, subit des états d'attente ou utilise une mémoire à ports multiples.
Chris Stratton
2
Les états d'attente sont assez courants dans les microcontrôleurs plus performants. Le flash est lent.
Adam Haun
@AdamHaun: D'un autre côté, de nombreuses baies flash internes peuvent lire plusieurs mots à la fois; si le code saute à un emplacement arbitraire en flash, la récupération de la première instruction peut prendre quelques cycles, mais une fois qu'elle est récupérée, les instructions suivantes peuvent être disponibles sans plus attendre. Dans de nombreux cas, l'accès à quelque chose près de la fin de la mémoire tampon préparera le système à charger l'ensemble de mots suivant.
supercat