Existe algum padrão para comparar tempos de execução experimentalmente?

10

Minha situação

Estou escrevendo um artigo apresentando um módulo de software que desenvolvi e quero comparar seu tempo de execução com outros módulos para a mesma tarefa. Estou ciente das desvantagens dos experimentos em tempo de execução , mas suponha que, no meu caso, não há maneira de contornar isso. (Eu posso deduzir algumas propriedades teoricamente, mas isso não é suficiente para tudo.)

Os cenários específicos que quero usar para o benchmarking têm dois parâmetros: a complexidade  do problema e uma semente r aleatória  que determina o problema detalhado. Principalmente, quero mostrar a dependência de  n . Passando por investigações e teorias preliminares, a influência de r no tempo de execução é menor ou desprezível. Uma única tarefa leva no máximo dez minutos para ser concluída.nrnr

Pergunta real

Estou procurando algum procedimento comumente aceito ou publicado para realizar essas experiências ou pelo menos uma lista de armadilhas comuns (idealmente publicadas).

O que eu encontrei até agora

Nada. As pesquisas na Internet exibem todos os tipos de resultados não relacionados, mas talvez eu não esteja usando a terminologia correta. Incluir a palavra-chave minimum, que eu sei ser um bom padrão (veja abaixo), também não ajudou.

Como eu faria isso

  • Execute todos os experimentos na mesma máquina com software potencialmente interferente, como uma GUI desativada, na medida do possível.

  • Sujeite todos os módulos à mesma seleção de cenários, ou seja, os mesmos r .nr

  • Para cada cenário, teste os diferentes módulos diretamente um após o outro em ordem aleatória. Com outras palavras, o loop sobre os diferentes módulos é o mais interno. Isso deve evitar distorções nos diferentes módulos devido a flutuações lentas do desempenho da máquina (por exemplo, devido a mudanças de temperatura). A ordem aleatória deve evitar distorções através de efeitos como armazenamento em cache ou um módulo sempre sendo testado após o mesmo.

  • n

Wrzlprmft
fonte
Pode ajudar a explicar seu raciocínio por que você pensa "não há como contornar isso no meu caso". Mas, é claro, provavelmente como uma pergunta separada e vincular-se a ela, porque essa pergunta está focada o suficiente.
Apiwat Chantawibul 30/10
@ Billiska: Não sei exatamente o que você quer que eu faça. Por que devo explicar meu raciocínio para uma abordagem experimental em uma pergunta separada? Não tenho dúvidas sobre isso.
Wrzlprmft
Eu tenho que discordar de você ter o tempo de execução mínimo de experimentos repetidos. Você parece pensar que só pode haver delineadores para cima. Pode ser possível também ter delineadores para baixo? É mais típico examinar várias estatísticas ao mesmo tempo, por exemplo, média, mediana, máx. Quem sabe eles podem mostrar algo que você não esperava. Afinal, é um experimento empírico.
Apiwat Chantawibul 30/10
2
Isso é muito amplo; livros podem ser escritos sobre o tópico, por exemplo, "Um Guia para Algoritmia Experimental", de McGeoch. Pode-se até dizer que você está perguntando: "Existe algum padrão para se fazer ciência?". Portanto, não tenho certeza de que isso tenha um escopo razoável. Você tem perguntas mais específicas?
Raphael

Respostas:

2

"Um guia para algoritmos experimentais", de CC McGeoch, é uma boa referência para

  • como configurar experimentos em algoritmos,
  • como interpretar e usar resultados e
  • como iterar para resultados mais significativos, se necessário.
Rafael
fonte
2

Além do tempo decorrido para cada execução, relate segundos do modo de usuário e sistema e total de pacotes IP e E / S total de disco, apenas para verificar se alguns números são consistentemente "baixos" e têm impacto insignificante no tempo decorrido.

Em https://wiki.freebsd.org/BenchmarkAdvice PHK e outros, oferecem bons conselhos, incluindo

Use o ministat para ver se seus números são significativos. Considere comprar "Guia de desenho animado para estatísticas"

J_H
fonte