stringtranslate.com

Diseño orientado a datos

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 a menudo 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 cuándo se necesiten y pensar en las transformaciones de los datos. Entre los defensores se incluyen 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 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 resultar polémica, ya que muchos creen que se puede utilizar junto con otro paradigma, [4] pero debido al énfasis en el diseño de datos, también es incompatible con la mayoría de los otros paradigmas. [1]

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 centrales de procesamiento (CPU) relativamente débiles en comparación con las contrapartes de 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 fuera de orden modernos , sino que utilizan procesadores en orden con altas velocidades de reloj y canalizaciones profundas . Además, la mayoría de los tipos de sistemas informáticos tienen memoria principal ubicada a cientos de ciclos de reloj de distancia de los elementos de procesamiento . Además, a medida que 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, se han utilizado métodos de localidad de referencia para controlar el rendimiento, lo que requiere la mejora de los patrones de acceso a la memoria para solucionar el cuello de botella. Algunos de los problemas de software también fueron similares a los encontrados en Itanium , requiriendo desenrollar el bucle para la programación anticipada.

Contraste con la orientación a objetos

La afirmación es que los principios de diseño de programación orientada a objetos (OOP) tradicionales dan como resultado una localidad de datos deficiente, [5] [6] más aún si se utiliza polimorfismo en tiempo de ejecución ( despacho dinámico ) (lo que es especialmente problemático en algunos procesadores). [7] [1] Aunque la OOP parece "organizar el código alrededor de los datos", en realidad organiza el código fuente alrededor de 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. ^ abc Llopis, Noel (4 de diciembre de 2009). «Diseño orientado a datos». Diseño orientado a datos (o por qué podría estar pegándose un tiro en el pie con la programación orientada a datos) . Consultado el 17 de abril de 2020 .
  2. ^ "CppCon 2014: Mike Acton "Diseño orientado a datos y C++"". YouTube .
  3. ^ "Conferencia code::dive 2014 - Scott Meyers: Cachés de CPU y por qué es importante". YouTube .
  4. ^ Richard Fabian (8 de octubre de 2018). «Data-Oriented Design». www.dataorienteddesign.com . Consultado el 20 de diciembre de 2023 .
  5. ^ "CONFERENCIA DE DESARROLLADORES DE HPC DE INTEL ® IMPULSE SU CONOCIMIENTO MEJORE LA EFICIENCIA DE LA VECTORIZACIÓN UTILIZANDO LA PLANTILLA DE DISEÑO DE DATOS INTEL SIMD (INTEL SDLT)" (PDF) .
  6. ^ Holger Homann; Francois Laenen (2018). "SoAx: Una estructura genérica de C++ de matrices para el manejo de partículas en códigos HPC". Computer Physics Communications . 224 : 325–332. arXiv : 1710.03462 . Código Bibliográfico :2018CoPhC.224..325H. doi :10.1016/j.cpc.2017.11.015. S2CID  2878169.
  7. ^ "¿Qué tiene de malo el diseño orientado a objetos? ¿Qué tiene de malo?"Describe los problemas con las llamadas a funciones virtuales, por ejemplo, errores de i-cache.