En una aplicación AI estoy escribiendo en C++,Aplicaciones de AI en C++: ¿Qué tan costosas son las funciones virtuales? ¿Cuáles son las posibles optimizaciones?
- no hay mucho cálculo numérico
- hay gran cantidad de estructuras para las que se necesita el polimorfismo en tiempo de ejecución
- muy a menudo, varias estructuras polimórficas interactúan durante el cálculo
En tal situación, ¿hay alguna técnica de optimización? Aunque no me importaría optimizar la aplicación en este momento, un aspecto de la selección de C++ sobre Java para el proyecto fue habilitar más apalancamiento para optimizar y poder utilizar métodos no orientados a objetos (plantillas, procedimientos, sobrecarga).
En particular, ¿cuáles son las técnicas de optimización relacionadas con las funciones virtuales? Las funciones virtuales se implementan a través de tablas virtuales en la memoria. ¿Hay alguna manera de prearchivar estas tablas virtuales en la memoria caché L2 (el costo de recuperación de la memoria/caché L2 está aumentando)?
Aparte de esto, ¿hay buenas referencias para las técnicas de localización de datos en C++? Estas técnicas reducirían el tiempo de espera para la obtención de datos en la memoria caché L2 necesaria para el cálculo.
Actualización: Ver también los siguientes foros relacionados: Performance Penalty for Interface, Several Levels of Base Classes
Buen ejemplo. ¿Alguien más tiene comezón en el golpe de memoria redundante justo antes de la llamada cuando un mov ecx, eax lo haría? – plinth
En una CPU moderna, los movs podrían ser completamente canalizados. –
Es importante tener en cuenta que, si bien la sobrecarga de instrucciones para llamar a una función virtual es mínima, pueden afectar negativamente el rendimiento de otras maneras. Por un lado, evitan muchas optimizaciones, como la creación de líneas y la predicción de ramas. Por otro, pueden dañar el rendimiento de I-Cache –