Pergunta

Eu quero ver quanto tempo uma função leva para executar. Qual é a maneira mais fácil de fazer isso em PLT-Scheme? Idealmente, eu gostaria de ser capaz de fazer algo parecido com isto:

> (define (loopy times)
  (if (zero? times)
      0
      (loopy (sub1 times)))) 
> (loopy 5000000)
0                      ;(after about a second)
> (timed (loopy 5000000))
Took: 0.93 seconds
0
> 

Não importa se eu teria que usar alguma outra sintaxe como (timed loopy 5000000) ou (timed '(loopy 5000000)), ou se ele retorna o tempo gasto em uma cons ou algo assim.

Foi útil?

Solução

O nome padrão para cronometrar a execução de expressões na maioria das implementações esquema é "tempo". Aqui está um exemplo de dentro DrRacket.

(define (vezes loopy) (Se (zero? Vezes) 0 (Loopy (vezes Sub1))))

(time (loopy 5000000)) tempo de CPU: 1526 tempo real: 1657 tempo gc: 0 0

Se você usar o tempo para referência implementações diferentes uns contra os outros, lembre-se de usar a raquete na linha de comando ao invés de aferição diretamente em DrRacket (DrRacket inserções código de depuração, a fim de dar melhores mensagens de erro).

Outras dicas

A ele ...

A partir da on-line documentação :

  • (time-apply proc arg-list) invoca o proc procedimento com os argumentos arg-list. Quatro valores são retornados: uma lista contendo o resultado (s) de aplicação de proc, o número de milissegundos de tempo de CPU necessário para obter este resultado, o número de milissegundos `` real '' necessários para o resultado, e o número de milissegundos de tempo de CPU (incluído no primeiro resultado) gasto na coleta de lixo.

Exemplo de utilização:

> (time-apply loopy '(5000000))
(0)
621
887
0
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top