terça-feira, 29 de abril de 2008

Benchmark

Hoje vou postar um simples projeto que fizemos em aula. Um benckmark para testar o processamento das máquinas.

A idéia do projeto é bem simples, rodar um conjunto operações complexas n vezes e comparar os processadores.

As operações são:
  • logl(37.61)
  • sinl(2.45)
  • cosl(0.26)
  • sqrtl(7.33)
  • 2.57/7.77
  • expl(3.95)

São operações simples, mas a idéia era rodar essas expressões n vezes em aproximadamente 2 minutos. Para isso, fica uma dúvida: Se rodarmos em uma máquina rápida ela levará um tempo para executar esse conjunto de operações, mas se rodarmos em uma máquina lenta ela levará um tempo maior para o processamento. Então, como vamos saber quantas vezes rodar esse conjunto de instruções?

Parece uma questão simples de ser resolvida, colocamos um while e dizemos que enquanto o tempo for menor que 2 minutos executa, se for maior pára. Beleza, mas ficar parando o processamento a todo o momento para ver se já atingimos 2 minutos é um custo alto a se pagar quando medimos processamento porque ele pára o processamento para requisitar o relógio.

Para resolver esse problema usamos o critério de calibração. Esse critério roda um número X de vezes esse conjunto de expressões e calcula quanto tempo ele levou pra isso. Com base no tempo que esse número X de vezes rodou, calculamos então quantas vezes podemos rodá-la novamente para atingirmos um tempo aproximado a 2 minutos.

Bem interessante essa calibração. Imaginem que temos uma máquina lenta e ela roda a calibração em 3 segundos e uma máquina rápida que roda a calibração em 1 segundo. Nosso programa se adapta a esse tempo e roda menos vezes para uma do que para outra, levando sempre em consideração os dois minutos. Se não usássemos a calibração a máquina rápida poderia rodar N vezes um conjunto de instruções em 1 minuto e a máquina lenta rodar em 3 minutos. Usando pouco tempo não faz diferança, mas se pensarmos em horas fica complicado, uma máquina roda em 5 horas a outra em 15.

Esse benchmark eu fiz na linguagem C++ e disponibilizei o código em: http://quinho.googlepages.com/bench_marcos.cpp

O programa compilado está em: http://quinho.googlepages.com/bench_marcos.zip

Se tiverem alguma sujestão ou dúvida é só comentar.

Nenhum comentário: