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?
matlab
todavía se informó elflops
conteo después de cada comando ... Hoy en día tenemos CPUS multinúcleo, GPGPUS, clústeres, nubes, cachés L1 / L2 / L3, ... La eficiencia está determinada por qué tan bien puede mapear un algoritmo a la arquitectura hw / sw dada. Es una tontería tratar de condensar todo en una sola figura, pero, sin embargo, deberíamos poder introducir un pedido y decir, en algunas condiciones determinadas y bien definidas, quién es más rápido.A menudo se da el caso de que solo se puede informar la punta del iceberg de todo el trabajo y los compromisos que se incluyeron en una pieza de software. El rendimiento de los informes es bueno, pero el verdadero problema es cuando el código se hace libremente accesible en Internet, de esta manera, cualquier persona interesada puede evaluar y reproducir los resultados.
Idealmente, si libera el software, también puede poner a disposición las pruebas que generan los datos presentados en un documento.
fuente