He visto muchas publicaciones en revistas de física computacional que utilizan diferentes métricas para el desempeño de su código. Especialmente para el código GPGPU, parece que hay una gran variedad de resultados de tiempo que la gente publica. En particular, he visto:
- Comparaciones de (esencialmente) ejecutarse
time
en las versiones de GPU y CPU e informar un promedio - Comparaciones de datos de perfil en cada función de GPU / CPU llamada (por lo tanto, cronometrando el funcionamiento
main
y todas las funciones llamadas desde ella, pero ignorando el tiempo de inicialización del controlador) - Comparaciones de perfiles de datos para varias funciones relevantes, ignorando cosas como transferencias de memoria (a través del bus PCI-E en este caso), E / S en el disco, transformando los datos de un formato a otro, etc.
- Comparaciones de datos de perfil para una sola función (por ejemplo, comparar solo el tiempo para hacer actualizaciones de giro en una CPU vs GPU Quantum Monte Carlo) e ignorar cosas como el tiempo de transferencia de memoria, E / S al disco, configurar el Hamiltoniano / diagonalizarlo etc.
Creo que la primera opción es la más 'honesta' de las cuatro, aunque también puedo ver los méritos de la segunda y la tercera. Es un poco ridículo informar una diferencia de tiempo de ejecución de 5 segundos cuando 4.99 segundos era la diferencia en las implementaciones de E / S entre idiomas o Infiniband vs Gigabit. La última opción me parece un poco "incompleta", ya que a menos que esta función sea el punto de dolor de todo el programa que informa sobre ella, no reflejará el rendimiento que vería alguien que replica mis resultados. ¿Cuál de estos enfoques es más directo? Idealmente, un documento contendría todo esto, pero en el caso de una limitación en las cifras / longitud, ¿cuál es / es más valioso, honesto y relevante para proporcionar?