En informática , el diseño orientado a datos es un enfoque de optimización de programas motivado por el uso eficiente de la memoria caché de la CPU , que se utiliza en el desarrollo de videojuegos . [1] El enfoque consiste en centrarse en el diseño de los datos, separar y ordenar los campos según el momento en que se necesiten y pensar en las transformaciones de los datos. Los proponentes incluyen a Mike Acton, [2] Scott Meyers , [3] y Jonathan Blow .
La matriz paralela (o estructura de matrices ) es el principal ejemplo de diseño orientado a datos. Se contrasta con la variedad de estructuras típicas de los diseños orientados a objetos.
Motivos
Estos métodos se hicieron especialmente populares a mediados y finales de la década de 2000 durante la séptima generación de consolas de videojuegos que incluían las consolas PlayStation 3 (PS3) y Xbox 360 basadas en IBM PowerPC . Históricamente, las consolas de juegos a menudo tienen unidades de procesamiento central (CPU) relativamente débiles en comparación con las computadoras de escritorio de primera línea. Esta es una opción de diseño para dedicar más potencia y presupuesto de transistores a las unidades de procesamiento de gráficos (GPU). Por ejemplo, las CPU de séptima generación no se fabricaron con procesadores de ejecución modernos fuera de orden , sino que utilizan procesadores en orden con altas velocidades de reloj y tuberías profundas . Además, la mayoría de los tipos de sistemas informáticos tienen una memoria principal ubicada a cientos de ciclos de reloj de los elementos de procesamiento . Además, como las CPU se han vuelto más rápidas junto con un gran aumento en la capacidad de la memoria principal, existe un consumo masivo de datos que aumenta la probabilidad de fallas de caché en el bus compartido , también conocido como cuello de botella de Von Neumann . En consecuencia, la localidad de métodos de referencia se ha utilizado para controlar el rendimiento, lo que requiere la mejora de los patrones de acceso a la memoria para corregir los cuellos de botella. Algunos de los problemas de software también eran similares a los encontrados en Itanium , lo que requería desenrollar el bucle para la programación inicial.
Contraste con la orientación del objeto
La afirmación es que los principios de diseño de la programación orientada a objetos (POO) tradicional dan como resultado una localidad de datos deficiente, más aún si se utiliza polimorfismo en tiempo de ejecución ( distribución dinámica ) (que es especialmente problemático en algunos procesadores). [4] [5] Aunque la programación orientada a objetos parece "organizar el código en torno a los datos", la práctica es bastante diferente. La programación orientada a objetos se trata en realidad de organizar el código fuente en torno a tipos de datos en lugar de agrupar físicamente campos y matrices individuales en un formato eficiente para el acceso de funciones específicas. Además, a menudo oculta los detalles del diseño en capas de abstracción , mientras que un programador orientado a datos quiere considerar esto en primer lugar.
Ver también
- Caché de la CPU
- Programación basada en datos
- Sistema de componentes de la entidad
- Patrón de acceso a la memoria
- Unidad DOTS
- Desarrollo de videojuegos
Referencias
- ^ Llopis, Noel (4 de diciembre de 2009). "Diseño orientado a datos" . Diseño orientado a datos (o por qué es posible que se esté disparando en el pie con OOP) . Consultado el 17 de abril de 2020 .
- ^ "CppCon 2014: Mike Acton" Diseño orientado a datos y C ++ " " .
- ^ "code :: dive conference 2014 - Scott Meyers: Cpu Caches y Why You Care" .
- ^ "¿Qué tiene de malo el diseño orientado a objetos? ¿Dónde está el daño?" .describe los problemas con las llamadas a funciones virtuales, por ejemplo, fallas de i-cache
- ^ "Diseño orientado a datos: por qué podría dispararse en el pie con OOP" .