DMIPS x MIPS

Outro dia estive conversando com um amigo e falando sobre os benchmarks dos RL78 e RX da Renesas e uma dúvida veio a tona: como uma máquina escalar que executa no máximo uma instrução a cada ciclo de clock pode obter desempenhos de 1,3 ou 1,5 DMIPS/MHz?

Primeiramente, vamos entender o que significa o termo “escalar” e “superescalar”. Bom, uma máquina escalar é uma máquina capaz de executar uma operação ou instrução a cada ciclo de clock. Em tais máquinas a CPU dispõe normalmente de apenas uma unidade de execução, responsável pela decodificação de instruções. Já numa arquitetura superescalar, existem diversas unidades de execução independentes, o que, associado a um sistema de pipeline profundo, permite que se execute mais de uma instrução simultaneamente e no mesmo ciclo de clock.

Então uma máquina que atinge 1,3 ou 1,5 DMIPS é uma máquina superescalar? Claro que não! Acontece que a unidade DMIPS (Dhrystone MIPS) não pode ser traduzida diretamente nem comparada com instruções assembly reais. De fato o DMIPS é derivado de um algoritmo computacional utilizado para avaliar a performance computacional de uma determinada máquina, porém, este algoritmo é afetado por diversos fatores como o compilador e alguns detalhes arquiteturais de determinadas máquinas. Outros fatores que influenciam (e muito) na performance geral da máquina são os tempos de acesso as memórias e ciclos de espera.

Mais ainda, a unidade DMIPS é um índice relativo oriundo da comparação da máquina alvo com uma máquina de referência, que no caso é o (antigo) sistema VAX 11/780. Para obter o índice DMIPS é necessário dividir o score dhrystone pela constante 1757 (que é a performance em dhrystones de um VAX 11/780). Assim, quando dizemos que uma máquina atinge 50 DMIPS, de fato estamos dizendo que ela é 50 vezes mais rápida que um VAX 11/780. E porquê se utiliza como referência o VAX 11/780? Basicamente porque considera-se que ele executava um milhão de instruções por segundo (1MIPS), o que faz com que, no VAX 11/780, 1DMIPS = 1MIPS!

O fato é que 1DMIPS não significa 1 milhão de instruções por segundo, na verdade não há como comparar DMIPS e MIPS em qualquer arquitetura, exceto no VAX 11/780!

A unidade DMIPS/MHz nada mais é do que o resultado da divisão do score DMIPS pelo clock do processador alvo. Assim, se um processador atingiu 50DMIPS rodando a 50MHz a sua performance será de 1DMIPS/MHz.

A título de exemplo, um processador de 32 bits como o intel 386 rodando a 40MHz atinge uma performance de cerca de 17,5 DMIPS, o que resulta em apenas 0,44 DMIPS/MHz! Já um processador Pentium 100MHz atinge uma performance de 169 DMIPS ou 1,69 DMIPS/MHz e um Pentium 4E rodando a 3GHz atinge a performance de 4379 DMIPS ou 1,46DMIPS/MHz (todos os dados obtidos aqui).

Um detalhe interessante é que, segundo a página da Ecros Technology, um Atmel ATmega64 (AVR de 8 bits) rodando a 14,7456MHz atinge uma performance de 4,83DMIPS, resultando em aproximadamente 0,328DMIPS/MHz, um número substancialmente inferior ao score de 1,39DMIPS/MHz divulgado pela Renesas para o seu RL78, no entanto, a diferença de performance observada no nosso benchmarking (MCU benchmarking) mostra uma diferença um pouco menor entre estas duas arquiteturas.

Qual a conclusão a que chegamos? Bom, apesar de o DMIPS ser uma boa unidade de referência, não devemos nos basear puramente na performance em DMIPS para avaliar a performance de uma determinada arquitetura. Além disso, aplicações para microcontroladores possuem normalmente um desenho e comportamento de código bastante diferente das aplicações para máquinas desktop (para as quais o Dhrystone foi desenhado).

Mais detalhes e códigos de teste Dhrystone podem ser obtidos em: http://www.roylongbottom.org.uk/dhrystone%20results.htm

Nesta página há uma versão do algoritmo Dhrystone portada para uso em microcontroladores.

Leave a Reply