Eu já vi muitas publicações em periódicos de Física Computacional usarem métricas diferentes para o desempenho de seu código. Especialmente para o código GPGPU, parece haver uma grande variedade de resultados de tempo publicados pelas pessoas. Em particular, eu já vi:
- Comparações de (essencialmente) executando
time
nas versões GPU e CPU e relatando uma média - Comparações de dados de criação de perfil em cada função de GPU / CPU chamada (portanto, cronometrando a execução
main
e todas as funções chamadas a partir dele, mas ignorando o tempo de inicialização do driver) - Comparações de dados de criação de perfil para várias funções relevantes, ignorando coisas como transferências de memória (no barramento PCI-E, neste caso), E / S para o disco, transformando os dados de um formato para outro, etc.
- Comparações de dados de criação de perfil para apenas uma função (por exemplo, comparando apenas o tempo para fazer atualizações de rotação em uma CPU versus GPU Quantum Monte Carlo) e ignorando coisas como tempo de transferência de memória, E / S para disco, configurando o Hamiltoniano / diagonalizando-o etc
Meu sentimento é que a primeira opção é a mais 'honesta' das quatro, embora eu possa ver os méritos da segunda e terceira também. É um pouco ridículo relatar uma diferença de tempo de execução de 5s quando 4,99s eram a diferença nas implementações de E / S entre idiomas ou Infiniband vs Gigabit. A última opção parece um pouco "superficial" para mim, pois, a menos que essa função seja o ponto problemático de todo o programa que relata informações sobre ela, não refletirá o desempenho que alguém que replicaria meus resultados veria. Qual dessas abordagens é mais direta? Idealmente, um artigo conteria tudo isso, mas no caso de uma limitação de figuras / comprimento, qual é / é mais valiosa, honesta e relevante para fornecer?