En informática , el diseño orientado a datos es un enfoque de optimización de programas motivado por el uso eficiente de la caché de la CPU , frecuentemente utilizado en el desarrollo de videojuegos . [ 1 ] El enfoque consiste en centrarse en la disposición de los datos, separando y ordenando los campos según su necesidad, y en considerar las transformaciones de los datos. Entre sus defensores se encuentran 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 contrapone a la matriz de estructuras típica de los diseños orientados a objetos.
La definición de diseño orientado a datos como paradigma de programación puede considerarse controvertida, ya que muchos creen que puede usarse junto con otro paradigma, [ 4 ] pero debido al énfasis en la disposición de los datos, también es incompatible con la mayoría de los demás paradigmas. [ 1 ]
Motivos
Estos métodos se popularizaron especialmente a mediados y finales de la década de 2000, durante la séptima generación de consolas de videojuegos , que incluía las consolas PlayStation 3 (PS3) y Xbox 360 basadas en IBM PowerPC . Históricamente, las consolas de videojuegos suelen tener unidades centrales de procesamiento (CPU) relativamente débiles en comparación con las computadoras de escritorio de gama alta. Esta es una decisión de diseño para dedicar más potencia y presupuesto de transistores a las unidades de procesamiento gráfico (GPU). Por ejemplo, las CPU de séptima generación no se fabricaron con procesadores modernos de ejecución fuera de orden , sino que utilizan procesadores en orden con altas velocidades de reloj y profundas tuberías . Además, la mayoría de los sistemas informáticos tienen la memoria principal ubicada a cientos de ciclos de reloj de distancia de los elementos de procesamiento . Asimismo, a medida que las CPU se han vuelto más rápidas junto con un gran aumento en la capacidad de la memoria principal, se produce un consumo masivo de datos que aumenta la probabilidad de fallos de caché en el bus compartido , también conocido como cuello de botella de Von Neumann . En consecuencia, se han utilizado métodos de localidad de referencia para controlar el rendimiento, lo que requiere mejorar los patrones de acceso a la memoria para solucionar el cuello de botella. Algunos de los problemas de software también eran similares a los encontrados en el Itanium , lo que requería desenrollar bucles para la planificación previa.
Contraste con la orientación de objetos
Se afirma que los principios de diseño de la programación orientada a objetos (POO) tradicionales dan como resultado una localidad de datos deficiente, [ 5 ] [ 6 ] más aún si se utiliza el polimorfismo en tiempo de ejecución ( despacho dinámico ) (lo cual es especialmente problemático en algunos procesadores). [ 7 ] [ 1 ] Aunque la POO parece "organizar el código en torno a los datos", en realidad organiza el código fuente en torno a los tipos de datos en lugar de agrupar físicamente campos y matrices individuales en un formato eficiente para el acceso por funciones específicas. Además, a menudo oculta detalles de diseño bajo capas de abstracción , mientras que un programador orientado a datos quiere considerar esto en primer lugar.
Véase también
Referencias
- 1 2 3 Llopis, Noel (4 de diciembre de 2009). "Diseño orientado a datos" . Diseño orientado a datos (o por qué podrías estar disparándote en el pie con la POO) . Recuperado el 17 de abril de 2020 .
- ↑ "CppCon 2014: Mike Acton "Diseño orientado a datos y C++"" . YouTube . 29 de septiembre de 2014.
- ↑ "Conferencia code::dive 2014 - Scott Meyers: Cachés de CPU y por qué te importan" . YouTube . 5 de enero de 2015.
- ↑ Richard Fabian (8 de octubre de 2018). "Diseño orientado a datos" . www.dataorienteddesign.com . Consultado el 20 de diciembre de 2023 .
- ↑ "CONFERENCIA DE DESARROLLADORES DE HPC DE INTEL ® IMPULSE SU PERSPECTIVA MEJORE LA EFICIENCIA DE LA VECTORIZACIÓN UTILIZANDO LA PLANTILLA DE DISEÑO DE DATOS SIMD DE INTEL (INTEL SDLT)" (PDF) .
- ↑ Holger Homann; Francois Laenen (2018). "SoAx: Una estructura genérica de matrices en C++ para el manejo de partículas en códigos HPC". Computer Physics Communications . 224 : 325–332 . arXiv : 1710.03462 . Bibcode : 2018CoPhC.224..325H . doi : 10.1016/j.cpc.2017.11.015 . S2CID 2878169 .
- ↑ "¿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, fallos de caché de instrucciones.
- Optimización de software
- desarrollo de videojuegos
- paradigmas de programación