Pular para o conteúdo

Prometer desempenho

A média esconde a cauda, o teste t supõe o que não vale, e a primeira medida nunca pode reprovar.

Uma biblioteca que promete “3% mais rápida” precisa de uma medida que sustente a frase. Quase toda medida ingênua não sustenta.

O teste que mais importa#

ErroPor quêO que fazer
comparar médiasa média esconde a cauda, que é o que o usuário sentepercentis — P50, P95, P99
teste ttempo não é normal: cauda longa, piso duro, picos de escalonamentoMann-Whitney, com correção de empates
medir A inteiro, depois Buma queda de clock no meio vira “B é mais lenta”intercalar as medições
o valor de p sozinhoalfa de 0,05 significa 1 em 20 falsos positivosexigir também o efeito, com piso
limite absoluto em msmede a máquina, não o códigocobrar um fator

A razão não basta, se o trabalho for pequeno#

Um teste de paralelismo comparou razão — o padrão correto — e falhou com 1,47: o paralelo levou 0,44 s contra 0,30 s da série. O paralelismo estava certo; o que dominou foi o custo de criar cinco threads, que no Windows passa de 60 ms de trabalho.

dataforge
// Subir a espera de 0,06 s para 0,25 s resolveu: a serie vira
// ~1,25 s e o tempo de partida deixa de aparecer na conta.
//
// A regra: de o numerador maior, em vez de afrouxar o limite.
// Quatro tarefas em vez de duas; blocos de 300 mil em vez de 150.

adopt Arcane.Bench as B

acao := lambda teto: sum([n * n cycle n in range(1, teto)])
m := B.medir(acao, 20000, 5)
assert m["ms"] bigger_eq 0.0
out $"{m['repeticoes']} repeticoes, {m['ms']} ms"

O ponto de calibração#

Quando nem o fator basta, meça um algoritmo conhecidamente linear no mesmo instante. Se ele não der ~2 ao dobrar o n, a máquina não está medindo — e o teste diz isso e pula.

Regra do CIPorque
a primeira medida nunca reprovaum CI que nasce vermelho por desenho é desligado no mesmo dia
a tolerância é obrigatóriasem ela, todo CI fica vermelho por ruído de máquina — o que dá no mesmo

Continue em Arcane.Perfil e Percentis, e a cauda.