O que é mais rápido, executando um programa a partir da ROM ou RAM?

8

A maioria de nós que é do ramo da eletrônica sabe que a SRAM é mais rápida que a DRAM. Mas quando se trata de comparar RAM com ROM, não tenho certeza.

Minha pergunta está relacionada ao microcontrolador: "Se um código estiver sendo executado diretamente da RAM / ROM, cujo desempenho será melhor? 1) execução da RAM ou 2) execução da ROM ou 3) ambos serão iguais"

Considerando também o fato de que a ROM foi projetada para ter velocidades de leitura mais altas. enquanto na RAM, há uma troca da velocidade de leitura por ter recursos de gravação.

Prince Rambade
fonte
10
Leia a folha de dados (completamente) é a melhor maneira. Às vezes, é mais rápido executar um programa a partir da RAM do que a memória flash. Alguns micros não conseguem executar programas da RAM e outros podem executar na mesma velocidade.
Spehro Pefhany
Ainda não posso adicionar um comentário, apenas tentando ser útil. Depende se a ROM é de fato mais rápida que a RAM que você está usando. Eles têm velocidades iguais?
OzzieSpin
Muitas partes atuais do ARM Cortex-M são excelentes exemplos daquelas que podem ser executadas a partir da SRAM, mas são mais lentas quando o caminho de instrução dedicado ao flash não pode ser usado. Por outro lado, o acesso aos dados no flash pode ser mais lento que na RAM
Chris Stratton
Porém, com os chips ARM7 um pouco mais antigos (minha experiência foi com LPC2106 e LPC2148), a extração da RAM geralmente é mais rápida que a do FLASH. O que, junto com a resposta de Chris, prova que a única coisa que podemos dizer é "depende".
Wouter van Ooijen
Se você já possui o hardware, a maneira mais fácil é simplesmente executar os dois cenários e comparar. Caso contrário, as planilhas de dados são sua melhor aposta.
Luaan 02/12/2015

Respostas:

16

A folha de dados deve informar quanto tempo leva cada instrução e que diferenças existem, se houver, entre a execução da RAM ou da ROM.

Para microcontroladores que oferecem a opção de executar a partir da RAM, isso é provavelmente mais rápido, provavelmente o ponto principal do uso de espaço adicional na RAM para executar o código. Também pode haver alguns problemas de sobreposição de busca. Em alguns casos, pode ser mais rápido executar a partir da ROM porque é uma memória separada e o acesso à RAM pode estar ocorrendo simultaneamente.

Novamente, a única maneira de saber para qualquer micro específico é LER A FOLHA DE DADOS .

Olin Lathrop
fonte
É ainda mais rápido executar a partir do registro.
Joshua
@ Joshuaua Você tem exemplos do que você pode fazer com um programa executado a partir de registradores? Parece perversamente inteligente, mas limitado a um tamanho de programa bastante pequeno. Já ouvi falar de demonstrações gráficas de 64kB, mas uma demonstração de 16 registros? =)
Cort Ammon
3
@ CortAmmon: Eu tenho um em minha mesa com 512 registros, 400 dos quais contêm código de programa. A RAM é 3 vezes mais lenta e a ROM é tão lenta que é copiada para a RAM na inicialização (o que leva 100s de milissegundos). Eu tenho um inicializador / leitor de cartão SD que cabe em 300 registros, sem suporte de hardware além dos pinos GPIO. O escritor leva mais de 100 registros para que a coisa toda não caiba no registro (isso não deixaria o suficiente para fazer algo interessante), mas eu não preciso mais do inicializador, então substitua-o.
Joshua
9

Depende inteiramente da arquitetura da memória e da CPU. Como regra geral, a SRAM é mais rápida que o flash, principalmente em MCUs de alta velocidade (> 100 MHz). As células de bits SRAM produzem uma saída (mais ou menos) no nível lógico, enquanto a memória flash precisa passar por um processo de detecção de corrente mais lento.

O quanto mais rápido (se houver) novamente depende da arquitetura - o tamanho da palavra das memórias, o número de estados de espera em cada um, a presença de armazenamento em cache, o tamanho das instruções da CPU etc. Se você estiver executando em um com freqüência baixa o suficiente, você pode ter zero estados de espera no flash e na RAM, para que possam rodar na mesma velocidade.

O código também é importante. Se o seu código for estritamente linear (sem ramificação), o flash poderá pré-buscar instruções com rapidez suficiente para manter a CPU saturada mesmo em frequências mais altas. Como disse Olin, uma CPU da arquitetura de Harvard com caminhos separados de leitura de programa e dados pode ter um desempenho diferente quando o código e os dados estiverem em memórias diferentes.

As ROMs de metal (e outras memórias não voláteis, como a FRAM) têm características próprias e podem ou não ser tão rápidas quanto a SRAM. A capacidade de escrever não faz necessariamente diferença; trata-se mais das características da saída da célula de bit e dos circuitos de detecção.

A folha de dados fornecerá uma idéia aproximada da diferença de velocidade, mas a única maneira de saber com certeza é o perfil do seu código.

Adam Haun
fonte
1

"Executar um programa" requer uma CPU com um relógio síncrono. A memória lenta pode ser acomodada executando o sistema inteiro em um relógio lento o suficiente ou inserindowait states (ciclos extras de relógio do-nothing entre as fases de busca e decodificação), ativos apenas para determinados intervalos de endereços (veja o antigo 8085, por exemplo). A busca de instruções da CPU não sabe nem se importa exatamente quando os dados são definidos em seu valor final, desde que não sejam alterados durante o intervalo de configuração / espera.

Um microcontrolador geralmente tem toda a sua memória no chip; portanto, a menos que seja declarado o contrário, eu assumiria que o sistema de memória está em estado de espera zero. (mas leia a folha de dados para confirmar). Microcontroladores típicos devem ser soluções mais simples, com chip único, em comparação com um desktop, portanto, os estados de espera são improváveis ​​em um microcontrolador. Portanto, é improvável que um microcontrolador tenha velocidades de memória no chip incompatíveis.

Uma memória mais rápida geralmente custa um prêmio (tensão mais alta, capacitância mais baixa, mais demanda). Um 80xx86 possui uma SRAM rápida no cache L2 e uma SRAM ainda mais rápida no cache L1, e muitos chips DRAM mais lentos anexados a um controlador de memória. Esse tipo de sistema é muito mais complicado que um microcontrolador e está além do escopo da questão. (Mas de grande interesse para um engenheiro de computação!)

MarkU
fonte
1
Na verdade, um design perfeitamente compatível não é possível sem restrições. Um processador segrega instruções e dados de memória, subutiliza a velocidade da memória em instruções que não são dados de memória, sofre estados de espera ou usa memória de várias portas.
Chris Stratton
2
Os estados de espera são bastante comuns em microcontroladores de alto desempenho. O flash está lento.
Adam Haun
@ AdamHaun: Por outro lado, muitas matrizes de flash internas podem ler muitas palavras ao mesmo tempo; se o código saltar para algum local arbitrário no flash, pode levar alguns ciclos para buscar a primeira instrução, mas uma vez buscada, as próximas instruções poderão estar disponíveis sem mais demoras. Em muitos casos, o acesso a algo próximo ao final do buffer preparará o sistema para carregar o próximo conjunto de palavras.
Supercat