Usuario:JonatAcuña/Data-oriented design
En informática, los datos orientados al diseño, son un enfoque de optimización del programa motivado por uso eficiente de la memoria caché de las unidades de procesamiento central CPU cache, utilizado en el desarrollo de los videojuego.[1] El enfoque es centrarse en el diseño de datos, separando y clasificando campos de acuerdo a cuando son necesarios y pensar acerca de las transformaciones de datos. Los autores incluyen a mike Acton según cuándo están necesitados, y para pensar sobre transformaciones de datos. Proponents Incluye Mike Acton y Scott Meyers.[2][3]
Motivos
[editar]Estos métodos se convirtieron especialmente populares a mediados de la decada del 2000 , durante la séptima generación de consolas de videojuego que incluyen el PlayStation 3 (PS3) y Xbox 360. Históricamente, las consolas de juegos casi siempre tienen unidades de procesamiento centrales (CPUs) relativamente débiles comparadas con las contrapartes de las computadoras de escritorio de primera linea. Esta es una opción de diseño para dedicar mas potencia y presupuesto de transistor a las unidades de procesamientos de gráficos (GPUs). Por ejemplo, las CPUs de séptima generación no se fabrican con procesadores modernos de ejecución fuera de orden, pero usan procesadores de orden con altas velocidades de reloj y tuberías profundas. Adicionalmente la mayoría de los tipos de sistemas informáticos tienen memoria principal ubicada a cientos de ciclos de reloj alejados de los elementos de procesamiento. fuera de los elementos de procesamiento. Además, a medida que la CPU se han vuelto mas 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 errores de caché en el bus compartido, también conocido Von Neumann bottlenecking (cuello de botella). Por consiguiente, la localidad de los métodos de referencia se ha utilizado para controlar el rendimiento, lo que requiere una mejora de los patrones de acceso de la memoria para corregir el cuello de botella. Algunos de los problemas de software también fueron similares a los encontrados enItanium, lo que requiere el desenrollado de bucle para la programación inicial.
Contraste con orientación a objeto
[editar]Esta afirma que los principios de diseño tradicionales de programación orientada a objetos (OOP) dan como resultado una localidad de datos deficiente, más aún si se utiliza el polimorfismo de tiempo de ejecución (envio dinámico) que es (especialmente problemático en algunos procesadores). Aunque OOP parece organizar el código en torno a los datos, de la práctica es bastante diferente. En realidad, la OOP se trata 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 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 ante todo.
Lenguajes de programación
[editar]El lenguaje de programación experimental JAI que está siendo desarrollado por Jonathan Blow tiene soporte explícito para el diseño orientado a datos que evita el paradigma tradicional de OOP. Esto se facilita al poderse mover de manera transparente los campos entre registros sin cambios extensos en el código fuente de las funciones que los usan (o sin un extenso código repetitivo para permitir esto), y al agregar soporte directo para el diseño de datos de estructura de matrices (SoA) diseño de dato.[4]
Ve también
[editar]- AOS Y SOA
- CPU cache
- Dato-programación conducida
- Patrón de acceso de la memoria
- PUNTOS de unidad
- Desarrollo de videojuego
Referencias
[editar]- ↑ «Data-oriented design».
- ↑ «CppCon 2014: Mike Acton "Data-Oriented Design and C++"».
- ↑ «code::dive conference 2014 - Scott Meyers: Cpu Caches and Why You Care».
- ↑ «Data-oriented demo:SOA,composition».Demonstration of data-oriented and SOA features in the JAI language, also explaining the motives.
[[Categoría:Desarrollo de videojuegos]] [[Categoría:Optimización de software]]