Mi trabajo se centra principalmente en informática 'científica' de alto rendimiento. He estado haciendo eso durante ~ 15 años, pero solo recientemente me di cuenta de que mi software desperdicia tiempo de computación. En palabras cortas: mis formas de escribir código C++ eficiente ya no funcionan.Computacionalmente eficiente C++ - lectura general
De vez en cuando veo un código, escrito por un niño, que básicamente hace los mismos cálculos que el mío (el mismo algoritmo, enfoque similar), pero - mágicamente! - realiza mucho más rápido. ¡En la mayoría de los casos ni siquiera puedo rastrear los orígenes de la diferencia!
Mi pregunta es: ¿cómo puedo aprender el arte de la optimización del código moderno de C++? Quizás algo sobre SSE, problemas de alineación de caché/memoria? ¡Cualquier sugerencia de libro, PDF, artículo, ejercicio o sitio web es bienvenida!
PS. Soy muy consciente de trucos que son o bien:
- demasiado generales (por ejemplo, 'Uso de perfiles', 'Usar buenos algoritmos', 'ir multiproceso')
- Trivial (por ejemplo, 'Evitar las funciones virtuales', ' hacer ++ i en lugar de i ++ ' 'Habilitar -O3')
- cuestionable (por ejemplo, 'la memoria su reutilización con reinterpret_cast <>', 'en forma de tabla seno y el coseno', 'Escribir ensamblado en línea')
- ridículo (por ejemplo' Hacer metaprogramación de plantillas ')
Estos son no lo que estoy preguntando.
Un buen libro IMO: http://www.intel.com/intelpress/sum_swcb2.htm – Tudor
Por lo que he visto hasta ahora, diría que evite la asignación de memoria dinámica cuando sea posible y empaquete sus datos de forma inteligente en lugar de que al azar. En general, la memoria de la aplicación es el cuello de botella (bueno, aparte de los IO de disco/red ...). Además, en situaciones MT, compartir falsamente es un asesino ahora que tenemos verdaderos entornos multi-core/multiprocesador; un poco más difícil de diagnosticar también. Sin embargo, no tengo idea de cómo esto se aplica a la informática científica. –
* "de vez en cuando ... una pieza de código, ... básicamente hace los mismos cálculos que la mía ... pero - ¡por arte de magia! - se comporta mucho más rápido". * - Publica tus pocos ejemplos que tengas (posiblemente en diferentes pregunta). Estoy seguro de que la gente aquí podrá descubrir cómo se produce la diferencia. –