Casa Hongos Implementación de una arquitectura de motor de juego multiproceso. Cuello de botella de la arquitectura de von Neumann

Implementación de una arquitectura de motor de juego multiproceso. Cuello de botella de la arquitectura de von Neumann

Introducción. La tecnología informática se está desarrollando a un ritmo acelerado. Los dispositivos informáticos son cada vez más potentes, pequeños y convenientes, pero recientemente aumentar el rendimiento de los dispositivos se ha convertido en un gran problema. En 1965, Gordon Moore (uno de los fundadores de Intel) llegó a la conclusión de que "la cantidad de transistores colocados en un chip de circuito integrado se duplica cada 24 meses".

Los primeros desarrollos en el campo de la creación de sistemas multiprocesador comenzaron en los años 70. Durante mucho tiempo, el rendimiento de los procesadores familiares de un solo núcleo aumentó aumentando la frecuencia del reloj (hasta el 80% del rendimiento estaba determinado solo por la frecuencia del reloj) con un aumento simultáneo en la cantidad de transistores en un chip. Las leyes fundamentales de la física detuvieron este proceso: los chips comenzaron a sobrecalentarse, el tecnológico comenzó a acercarse al tamaño de los átomos de silicio. Todos estos factores han llevado a:

  • las corrientes de fuga han aumentado, como resultado de lo cual han aumentado la disipación de calor y el consumo de energía.
  • El procesador se ha vuelto mucho "más rápido" que la memoria. El rendimiento se degradó debido a la latencia en el acceso a la RAM y la carga de datos en el caché.
  • existe algo así como un "cuello de botella de von Neumann". Significa la ineficiencia de la arquitectura del procesador al ejecutar un programa.

Los sistemas multiprocesador (como una de las formas de resolver el problema) no se utilizaron mucho, ya que requerían placas base multiprocesador costosas y difíciles de fabricar. En base a esto, la productividad aumentó de otras maneras. El concepto de subprocesos múltiples resultó ser efectivo: el procesamiento simultáneo de varios flujos de comandos.

Hyper-Threading Technology (HTT) o tecnología de superthreading que permite que un procesador ejecute múltiples subprocesos de programa en un solo núcleo. Fue HTT, según muchos expertos, el requisito previo para la creación de procesadores multinúcleo. La ejecución por parte del procesador de varios subprocesos de programa al mismo tiempo se denomina paralelismo a nivel de subprocesos (TLP -thread-level parallelism).

Para desbloquear el potencial de un procesador multinúcleo, el programa ejecutable debe utilizar todos los núcleos informáticos, lo que no siempre se puede lograr. Los viejos programas en serie que podían usar solo un núcleo ya no se ejecutarán más rápido en una nueva generación de procesadores, por lo que los programadores están cada vez más involucrados en el desarrollo de nuevos microprocesadores.

1. Conceptos generales

La arquitectura en un sentido amplio es una descripción de un sistema complejo que consta de muchos elementos.

En el proceso de desarrollo, las estructuras de semiconductores (microcircuitos) evolucionan, por lo tanto, los principios de construcción de procesadores, la cantidad de elementos incluidos en su composición, cómo se organiza su interacción, cambian constantemente. Por lo tanto, las CPU con los mismos principios básicos de estructura suelen denominarse procesadores de la misma arquitectura. Y estos principios en sí mismos se denominan arquitectura de procesador (o microarquitectura).

El microprocesador (o procesador) es el componente principal de una computadora. Procesa información, ejecuta programas y controla otros dispositivos en el sistema. La potencia del procesador determina qué tan rápido se ejecutarán los programas.

El núcleo es la base de cualquier microprocesador. Consiste en millones de transistores ubicados en un chip de silicio. El microprocesador se divide en celdas especiales, que se denominan registros de propósito general (RON). El trabajo del procesador en general consiste en extraer comandos y datos de la memoria en una secuencia determinada y ejecutarlos. Además, para aumentar la velocidad de la PC, el microprocesador está equipado con una memoria caché interna. La caché es la memoria interna del procesador que se utiliza como búfer (para proteger contra interrupciones en la comunicación con la RAM).

Los procesadores Intel utilizados en las PC compatibles con IBM tienen más de mil instrucciones y pertenecen a los procesadores con un conjunto de instrucciones ampliado: procesadores CISC (CISC - Computación de conjunto de instrucciones complejas).

1.1 Computación de alto rendimiento. Paralelismo

El ritmo de desarrollo de la tecnología informática es fácil de seguir: desde ENIAC (la primera computadora digital electrónica de uso general) con un rendimiento de varios miles de operaciones por segundo hasta la supercomputadora Tianhe-2 (1000 billones de operaciones de punto flotante por segundo). Esto significa que la velocidad de la computación ha aumentado un billón de veces en 60 años. La creación de sistemas informáticos de alto rendimiento es una de las tareas científicas y técnicas más difíciles. Si bien la velocidad de cómputo del hardware ha aumentado solo unos pocos millones de veces, la velocidad de cómputo general ha aumentado billones de veces. Este efecto se logra mediante el uso del paralelismo en todas las etapas de la computación. La computación paralela requiere la búsqueda de una distribución racional de la memoria, formas confiables de transferir información y coordinar procesos computacionales.

1.2 Multiprocesamiento simétrico

El multiprocesamiento simétrico (abreviado SMP) o multiprocesamiento simétrico es una arquitectura especial de sistemas multiprocesador en la que varios procesadores tienen acceso a una memoria común. Esta es una arquitectura muy común, muy utilizada en los últimos tiempos.

Cuando se usa SMP, varios procesadores trabajan simultáneamente en una computadora, cada uno en su propia tarea. Un sistema SMP con un sistema operativo de alta calidad distribuye racionalmente las tareas entre los procesadores, asegurando una carga uniforme en cada uno de ellos. Sin embargo, existe un problema con la inversión de memoria, porque incluso los sistemas de un solo procesador requieren un tiempo relativamente largo para esto. Por lo tanto, el acceso a la RAM en SMP ocurre secuencialmente: primero un procesador, luego el segundo.

Debido a las características anteriores, los sistemas SMP se utilizan exclusivamente en el campo científico, industrial, comercial, muy raramente en oficinas de trabajo. Además del alto costo de la implementación del hardware, dichos sistemas requieren un software muy costoso y de alta calidad que proporcione la ejecución de tareas de subprocesos múltiples. Los programas comunes (juegos, editores de texto) no funcionarán de manera efectiva en los sistemas SMP, ya que no brindan este grado de paralelismo. Si adapta cualquier programa para un sistema SMP, se volverá extremadamente ineficiente para trabajar en sistemas de un solo procesador, lo que lleva a la necesidad de crear varias versiones del mismo programa para diferentes sistemas. La excepción es, por ejemplo, el programa ABLETON LIVE (diseñado para crear música y preparar Dj-sets), que tiene soporte para sistemas multiprocesador. Si ejecuta un programa normal en un sistema multiprocesador, aún se ejecutará un poco más rápido que en un solo procesador. Esto se debe a la llamada interrupción de hardware (detener el programa para que el núcleo lo procese), que se ejecuta en otro procesador libre.

Un sistema SMP (como cualquier otro sistema basado en computación paralela) impone mayores requisitos en un parámetro de memoria como el ancho de banda del bus de memoria. Esto a menudo limita la cantidad de procesadores en un sistema (los sistemas SMP modernos funcionan efectivamente con hasta 16 procesadores).

Dado que los procesadores tienen memoria compartida, se hace necesario utilizarla racionalmente y coordinar los datos. En un sistema multiprocesador, resulta que varios cachés funcionan para un recurso de memoria compartido. La coherencia de caché es una propiedad de caché que garantiza la integridad de los datos almacenados en cachés individuales para un recurso compartido. Este concepto es un caso especial del concepto de coherencia de memoria, donde varios núcleos tienen acceso a una memoria común (es omnipresente en los sistemas multinúcleo modernos). Si describimos estos conceptos en términos generales, la imagen será la siguiente: el mismo bloque de datos se puede cargar en diferentes cachés, donde los datos se procesan de manera diferente.

Si no se utilizan notificaciones de cambio de datos, se producirá un error. La coherencia de la caché está diseñada para resolver tales conflictos y mantener la coherencia de los datos en las cachés.

Los sistemas SMP son un subconjunto de la clasificación de sistemas informáticos MIMD (sistema de computación de múltiples instrucciones y múltiples datos) según Flynn (profesor de la Universidad de Stanford, cofundador de Palyn Associates). De acuerdo con esta clasificación, casi todas las variedades de sistemas paralelos se pueden atribuir a MIMD.

La división de los sistemas multiprocesador en tipos se produce sobre la base de la división según el principio del uso de la memoria. Este enfoque hizo posible distinguir los siguientes tipos importantes

sistemas multiprocesador - multiprocesadores (sistemas multiprocesador con memoria compartida compartida) y multicomputadoras (sistemas con memoria separada). Los datos compartidos utilizados en la computación paralela requieren sincronización. La tarea de sincronización de datos es uno de los problemas más importantes, y su solución en el desarrollo de multiprocesador y multinúcleo y, en consecuencia, el software necesario es una prioridad para ingenieros y programadores. Los datos se pueden compartir con la asignación de memoria física. Este enfoque se denomina acceso a memoria no uniforme (NUMA).

Estos sistemas incluyen:

  • Sistemas en los que solo se utiliza la caché del procesador individual para representar datos (arquitectura de memoria de solo caché).
  • Sistemas con coherencia de caché local para diferentes procesadores (NUMA coherente con caché).
  • Sistemas que brindan acceso compartido a la memoria del procesador individual sin implementar NUMA coherente sin caché a nivel de hardware.

La simplificación del problema de crear sistemas multiprocesador se logra mediante el uso de memoria compartida distribuida, pero este método conduce a un aumento significativo en la complejidad de la programación paralela.

1.3 Subprocesos múltiples simultáneos

Con base en todas las desventajas anteriores del multiprocesamiento simétrico, tiene sentido desarrollar y desarrollar otras formas de mejorar el rendimiento. Si analiza el funcionamiento de cada transistor individual en el procesador, puede prestar atención a un hecho muy interesante: al realizar la mayoría de las operaciones computacionales, no están involucrados todos los componentes del procesador (según estudios recientes, aproximadamente el 30% de todos los transistores). Por lo tanto, si el procesador realiza, digamos, una operación aritmética simple, entonces la mayor parte del procesador está inactivo, por lo tanto, puede usarse para otros cálculos. Entonces, si el procesador está realizando actualmente operaciones reales, entonces se puede cargar una operación aritmética de enteros en la parte libre. Para aumentar la carga en el procesador, puede crear una ejecución especulativa (o avanzada) de operaciones, lo que requiere una gran complicación de la lógica del hardware del procesador. Si el programa predefine hilos (secuencias de comandos) que se pueden ejecutar de forma independiente entre sí, esto simplificará significativamente la tarea (este método se implementa fácilmente a nivel de hardware). Esta idea, que pertenece a Dean Tulsen (desarrollada por él en 1955 en la Universidad de Washington), se denomina subprocesos múltiples simultáneos. Más tarde fue desarrollado por Intel bajo el nombre de hyperthreading. Por ejemplo, el sistema operativo Windows percibe un procesador que ejecuta muchos subprocesos como varios procesadores. El uso de esta tecnología nuevamente requiere un nivel adecuado de software. El efecto máximo del uso de la tecnología de subprocesos múltiples es de alrededor del 30 %.

1.4 multinúcleo

La tecnología de subprocesos múltiples es la implementación de múltiples núcleos a nivel de software. Un mayor aumento en el rendimiento, como siempre, requiere cambios en el hardware del procesador. La complicación de sistemas y arquitecturas no siempre es efectiva. Hay una opinión opuesta: “¡todo lo ingenioso es simple!”. De hecho, para aumentar el rendimiento del procesador, no es necesario aumentar su frecuencia de reloj, complicar los componentes lógicos y de hardware, ya que basta con racionalizar y refinar la tecnología existente. Este método es muy rentable: no es necesario resolver el problema de aumentar la disipación de calor del procesador, el desarrollo de nuevos equipos costosos para la producción de microcircuitos. Este enfoque se implementó como parte de la tecnología multinúcleo: la implementación de varios núcleos informáticos en un solo chip. Si toma el procesador original y compara las ganancias de rendimiento de la implementación de múltiples mejoras de rendimiento, está claro que la tecnología multinúcleo es la mejor opción.

Si comparamos las arquitecturas de un multiprocesador simétrico y uno multinúcleo, resultarán casi idénticas. La memoria caché de los núcleos puede ser de varios niveles (local y compartida, y los datos de la RAM se pueden cargar directamente en la memoria caché de segundo nivel). Sobre la base de las ventajas consideradas de la arquitectura multinúcleo de los procesadores, los fabricantes se centran en ella. Esta tecnología resultó ser bastante económica de implementar y universal, lo que permitió llevarla a un amplio mercado. Además, esta arquitectura ha realizado sus propios ajustes a la ley de Moore: “la cantidad de núcleos de cómputo en el procesador se duplicará cada 18 meses”.

Si observa el mercado de la tecnología informática moderna, puede ver que dominan los dispositivos con procesadores de cuatro y ocho núcleos. Además, los fabricantes de procesadores dicen que pronto se verán en el mercado procesadores con cientos de núcleos de procesamiento. Como se ha dicho repetidamente antes, todo el potencial de una arquitectura multinúcleo se revela solo con software de alta calidad. Así, el ámbito de la producción de hardware y software informático está muy relacionado.

Pero con la conquista de nuevos picos en los indicadores de frecuencia, se hizo más difícil aumentarla, ya que esto afectó el aumento del TDP de los procesadores. Por lo tanto, los desarrolladores comenzaron a aumentar el ancho de los procesadores, es decir, agregar núcleos, y surgió el concepto de multinúcleo.

Literalmente, hace 6 o 7 años, los procesadores multinúcleo eran prácticamente desconocidos. No, antes existían procesadores multi-core de la misma empresa IBM, pero la aparición del primer procesador dual-core para computadores de escritorio, tuvo lugar solo en 2005, y este procesador se llamó Pentium D. Además, en 2005, se lanzó el Opteron de doble núcleo de AMD, pero para sistemas de servidor.

En este artículo, no profundizaremos en hechos históricos en detalle, sino que analizaremos los procesadores multinúcleo modernos como una de las características de la CPU. Y lo más importante: debemos averiguar qué ofrece este multinúcleo en términos de rendimiento para el procesador y para usted y para mí.

Mayor rendimiento con multinúcleo

El principio de aumentar el rendimiento del procesador debido a varios núcleos es dividir la ejecución de subprocesos (varias tareas) en varios núcleos. En resumen, casi todos los procesos que se ejecutan en su sistema tienen varios subprocesos.

Haré una reserva de inmediato de que el sistema operativo puede crear virtualmente muchos subprocesos por sí mismo y hacerlo todo al mismo tiempo, incluso si el procesador es físicamente de un solo núcleo. Este principio implementa la misma multitarea de Windows (por ejemplo, escuchar música y escribir al mismo tiempo).


Tomemos como ejemplo un programa antivirus. Tendremos un hilo escaneando la computadora, el otro actualizando la base de datos antivirus (hemos simplificado todo para comprender el concepto general).

Y considere lo que sucederá en dos casos diferentes:

a) Procesador de un solo núcleo. Dado que dos subprocesos se ejecutan al mismo tiempo, debemos crear para el usuario (visualmente) esta misma simultaneidad de ejecución. El sistema operativo es complicado:hay un cambio entre la ejecución de estos dos hilos (estos cambios son instantáneos y el tiempo es en milisegundos). Es decir, el sistema "realizó" la actualización un poco, luego cambió abruptamente a escanear y luego volvió a actualizar. Así, para ti y para mí, parece que estas dos tareas se están realizando simultáneamente. Pero, ¿qué se está perdiendo? Por supuesto, el rendimiento. Así que veamos la segunda opción.

b) El procesador es multinúcleo. En este caso, este cambio no ocurrirá. El sistema claramente enviará cada subproceso a un núcleo separado, lo que como resultado nos permitirá deshacernos del cambio de subproceso a subproceso que es perjudicial para el rendimiento (idealicemos la situación). Dos subprocesos se ejecutan simultáneamente, este es el principio de multi-core y multi-threading. En última instancia, realizaremos escaneos y actualizaciones mucho más rápido en un procesador de múltiples núcleos que en uno de un solo núcleo. Pero hay un problema: no todos los programas son compatibles con varios núcleos. No todos los programas se pueden optimizar de esta manera. Y todo sucede lejos de ser tan perfecto como lo hemos descrito. Pero todos los días, los desarrolladores crean más y más programas cuyo código está perfectamente optimizado para ejecutarse en procesadores de varios núcleos.

¿Son necesarios los procesadores multinúcleo? razonabilidad cotidiana

En elección de procesador para una computadora (es decir, al pensar en la cantidad de núcleos), uno debe determinar los principales tipos de tareas que realizará.

Para mejorar el conocimiento en el campo del hardware informático, puede leer el material sobre zócalos del procesador .

El punto de partida se puede llamar procesadores de doble núcleo, ya que no tiene sentido volver a las soluciones de un solo núcleo. Pero los procesadores de doble núcleo son diferentes. Puede que no sea el Celeron "más" nuevo, o puede ser un Core i3 en Ivy Bridge, como AMD - Sempron o Phenom II. Naturalmente, debido a otros indicadores, su rendimiento será muy diferente, por lo que debe analizar todo de manera integral y comparar varios núcleos con otros. características del procesador.

Por ejemplo, el Core i3 en Ivy Bridge tiene tecnología Hyper-Treading, que le permite procesar 4 subprocesos simultáneamente (el sistema operativo ve 4 núcleos lógicos, en lugar de 2 físicos). Y el mismo Celeron no se jacta de eso.

Pero volvamos directamente a las reflexiones sobre las tareas requeridas. Si se necesita una computadora para el trabajo de oficina y navegar por Internet, entonces un procesador de doble núcleo es suficiente.

Cuando se trata del rendimiento de los juegos, necesita 4 núcleos o más para sentirse cómodo en la mayoría de los juegos. Pero aquí aparece la trampa: no todos los juegos tienen código optimizado para procesadores de 4 núcleos, y si están optimizados, no es tan eficiente como nos gustaría. Pero, en principio, para los juegos ahora la solución óptima es precisamente el procesador de 4º núcleo.


Hoy en día, los mismos procesadores AMD de 8 núcleos son redundantes para juegos, es la cantidad de núcleos lo que es redundante, pero el rendimiento no está a la altura, pero tienen otras ventajas. Estos mismos 8 núcleos ayudarán mucho en tareas donde se necesita un trabajo potente con una carga multiproceso de alta calidad. Esto incluye, por ejemplo, renderización (cálculo) de video o computación de servidor. Por lo tanto, para tales tareas se necesitan 6, 8 o más núcleos. Y pronto los juegos podrán cargar 8 o más núcleos con alta calidad, por lo que en el futuro todo es muy color de rosa.

No olvide que todavía hay muchas tareas que crean una carga de un solo subproceso. Y deberías hacerte la pregunta: ¿necesito este 8-core o no?

Resumiendo un poco, me gustaría señalar una vez más que las ventajas de los múltiples núcleos se manifiestan durante el trabajo computacional "pesado" de subprocesos múltiples. Y si no juega juegos con requisitos exorbitantes y no realiza tipos específicos de trabajo que requieren una buena potencia informática, entonces gastar dinero en costosos procesadores multinúcleo simplemente no tiene sentido (

Habiendo tratado la teoría de subprocesos múltiples, consideremos un ejemplo práctico: Pentium 4. Ya en la etapa de desarrollo de este procesador, los ingenieros de Intel continuaron trabajando para aumentar su rendimiento sin realizar cambios en la interfaz del programa. Se consideraron cinco métodos simples:

Aumentar la frecuencia del reloj;

Colocando dos procesadores en un chip;

Introducción de nuevos bloques funcionales;

extensión del transportador;

Uso de subprocesos múltiples.

La forma más obvia de mejorar el rendimiento es aumentar la velocidad del reloj sin cambiar otros parámetros. Como regla general, cada modelo de procesador posterior tiene una velocidad de reloj ligeramente más alta que la anterior. Desafortunadamente, con un aumento lineal en la velocidad del reloj, los desarrolladores se enfrentan a dos problemas: mayor consumo de energía (que es relevante para las computadoras portátiles y otros dispositivos informáticos que funcionan con baterías) y sobrecalentamiento (que requiere disipadores de calor más eficientes).

El segundo método, colocar dos procesadores en un chip, es relativamente simple, pero implica duplicar el área ocupada por el chip. Si cada procesador cuenta con su propio caché, la cantidad de chips por oblea se reduce a la mitad, pero esto también significa el doble del costo de producción. Si ambos procesadores tienen una memoria caché compartida, se puede evitar un aumento significativo en el área ocupada, pero en este caso surge otro problema: la cantidad de memoria caché por procesador se reduce a la mitad y esto inevitablemente afecta el rendimiento. Además, mientras que las aplicaciones de servidor profesionales son capaces de utilizar completamente los recursos de múltiples procesadores, los programas de escritorio ordinarios tienen mucho menos paralelismo interno.

La introducción de nuevos bloques funcionales tampoco es difícil, pero es importante lograr un equilibrio aquí. ¿Cuál es el punto de una docena de ALU si el chip no puede enviar comandos a la tubería a una velocidad que pueda cargar todos esos bloques?

Una canalización con un mayor número de etapas, capaz de dividir tareas en segmentos más pequeños y procesarlas en períodos cortos de tiempo, por un lado, mejora el rendimiento, por otro lado, aumenta las consecuencias negativas de la predicción errónea de transiciones, errores de caché, interrupciones y otros eventos que interrumpen el procesamiento normal de las instrucciones del curso en el procesador. Además, para aprovechar al máximo las capacidades de la tubería extendida, es necesario aumentar la frecuencia del reloj y esto, como sabemos, conduce a un mayor consumo de energía y disipación de calor.

Finalmente, puede implementar subprocesos múltiples. La ventaja de esta tecnología es que introduce un subproceso de software adicional que permite poner en uso los recursos de hardware que de otro modo estarían inactivos. Con base en los resultados de estudios experimentales, los desarrolladores de Intel encontraron que un aumento del 5 % en el área del chip al implementar subprocesos múltiples para muchas aplicaciones genera un aumento del rendimiento del 25 %. Xeon fue el primer procesador Intel en admitir subprocesos múltiples en 2002. Posteriormente, a partir de 3,06 GHz, se introdujo el subprocesamiento múltiple en la línea Pentium 4. Intel llama a la implementación del subproceso múltiple en el Pentium 4 hyperthreading.

* siempre preguntas de actualidad, a qué debe prestar atención al elegir un procesador, para no cometer un error.

Nuestro objetivo en este artículo es describir todos los factores que afectan el rendimiento del procesador y otras características de rendimiento.

Probablemente no sea un secreto para nadie que el procesador es la unidad informática principal de una computadora. Incluso se podría decir: la parte más importante de la computadora.

Es él quien maneja casi todos los procesos y tareas que ocurren en la computadora.

Ya sea viendo videos, música, navegando por Internet, escribiendo y leyendo en la memoria, procesando 3D y video, juegos. Y muchos más.

Por lo tanto, para elegir C central PAGS procesador, debe tratarse con mucho cuidado. Puede resultar que decida instalar una tarjeta de video potente y un procesador que no corresponda a su nivel. En este caso, el procesador no revelará el potencial de la tarjeta de video, lo que ralentizará su trabajo. El procesador estará completamente cargado y literalmente hervirá, y la tarjeta de video esperará su turno, funcionando al 60-70% de sus capacidades.

Por eso, a la hora de elegir un ordenador equilibrado, no costos descuidar el procesador a favor de una poderosa tarjeta de video. La potencia del procesador debería ser suficiente para desbloquear el potencial de la tarjeta de video, de lo contrario, es solo dinero tirado.

Intel contra AMD

* perseguir para siempre

Corporación Intel, tiene enormes recursos humanos y finanzas casi inagotables. Muchas innovaciones en la industria de los semiconductores y las nuevas tecnologías provienen de esta empresa. Procesadores y desarrollos Intel, en promedio para 1-1,5 años por delante de los desarrollos de los ingenieros AMD. Pero como sabes, hay que pagar por la oportunidad de tener las tecnologías más modernas.

Política de precios del procesador Intel, está basado en numero de nucleos, cantidad de caché, pero también en "frescura" de la arquitectura, rendimiento por relojvatio,tecnología de proceso de chips. El valor de la memoria caché, las "sutilezas del proceso técnico" y otras características importantes del procesador se considerarán a continuación. Por la posesión de tecnologías tales como un multiplicador de frecuencia gratuito, también deberá pagar una cantidad adicional.

Compañía AMD, a diferencia de la empresa Intel, se esfuerza por la disponibilidad de sus procesadores para el consumidor final y por una política de precios competente.

Incluso se podría decir que AMD– « sello de la gente". En sus etiquetas de precio encontrarás lo que necesitas a un precio muy atractivo. Por lo general, un año después de la introducción de una nueva tecnología, la empresa Intel, un análogo de la tecnología de AMD. Si no persigue el máximo rendimiento y presta más atención al precio que a la presencia de tecnologías avanzadas, entonces los productos de la empresa AMD- solo para ti.

Política de precios AMD, se basa más en la cantidad de núcleos y muy poco en la cantidad de memoria caché, la presencia de mejoras arquitectónicas. En algunos casos, para tener la oportunidad de tener una memoria caché de tercer nivel, tendrá que pagar un poco más ( fenómeno tiene una memoria caché de nivel 3, Athlon contenido con solo limitado, 2 niveles). Pero a veces AMD mima a sus fans habilidad para desbloquear procesadores más baratos a los más caros. Puede desbloquear núcleos o memoria caché. Mejorar Athlon antes de fenómeno. Esto es posible debido a la arquitectura modular y la falta de algunos modelos más económicos, AMD simplemente desactiva algunos bloques en chip más caros (por software).

Núcleos– permanecen prácticamente sin cambios, solo difiere su número (válido para procesadores 2006-2011 años). Debido a la modularidad de sus procesadores, la empresa hace un excelente trabajo vendiendo chips desechados, que cuando se apagan algunos bloques, se convierten en un procesador de una línea menos productiva.

La compañía ha estado trabajando en una arquitectura completamente nueva durante muchos años bajo el nombre en clave Excavadora, pero en el momento del lanzamiento 2011 año, los nuevos procesadores no mostraron el mejor rendimiento. AMD Pecaron en los sistemas operativos que no entienden las características arquitectónicas de los núcleos duales y "otros subprocesos múltiples".

Según los representantes de la compañía, debe esperar las correcciones y parches especiales para sentir el rendimiento completo de estos procesadores. Sin embargo, al principio 2012 año, representantes de la compañía pospusieron el lanzamiento de una actualización para soportar la arquitectura Excavadora para la segunda mitad del año.

Frecuencia del procesador, número de núcleos, subprocesos múltiples.

A veces pentium 4 y ante el Frecuencia de la CPU, fue el principal factor de rendimiento del procesador al elegir un procesador.

Esto no es de extrañar, porque las arquitecturas de los procesadores fueron especialmente diseñadas para lograr altas frecuencias, esto se reflejó especialmente en el procesador. pentium 4 sobre arquitectura estallido de red. La alta frecuencia no fue efectiva con la tubería larga que se usó en la arquitectura. Incluso Athlon XP frecuencia 2GHz, en términos de rendimiento fue superior a pentium 4 C 2,4 GHz. Así que fue puro marketing. Después de este error, la empresa Intel Me di cuenta de mis errores y de vuelta al lado bueno Empecé a trabajar no en el componente de frecuencia, sino en el rendimiento por reloj. De la arquitectura estallido de red tuvo que negarse.

Qué nosotros da multi-núcleo?

Procesador de cuatro núcleos 2,4 GHz, en aplicaciones de subprocesos múltiples, teóricamente sería más o menos equivalente a un procesador de un solo núcleo con una frecuencia de 9,6 GHz o procesador de 2 núcleos con una frecuencia 4,8 GHz. Pero eso es solo En teoria. Prácticamente por otro lado, dos procesadores de doble núcleo en placas base de dos zócalos serán más rápidos que un procesador de 4 núcleos con la misma frecuencia operativa. Los límites de velocidad de los autobuses y las latencias de memoria se hacen sentir.

* sujeto a las mismas arquitecturas y la cantidad de memoria caché

Multinúcleo, permite ejecutar instrucciones y cálculos por partes. Por ejemplo, necesita realizar tres operaciones aritméticas. Los dos primeros se ejecutan en cada uno de los núcleos del procesador y los resultados se añaden a la memoria caché, donde la siguiente acción puede ser realizada con ellos por cualquiera de los núcleos libres. El sistema es muy flexible, pero sin la optimización adecuada puede que no funcione. Por lo tanto, la optimización de múltiples núcleos para la arquitectura de los procesadores en el entorno del sistema operativo es muy importante.

Aplicaciones que "aman" y utilizar subprocesamiento múltiple: archivadores, reproductores y codificadores de video, antivirus, programas desfragmentadores, editor gráfico, navegadores, Destello.

Además, los "fanáticos" de los subprocesos múltiples incluyen sistemas operativos como ventanas 7 Y Windows Vista, así como muchos sistema operativo, basado en el núcleo linux, que se ejecutan notablemente más rápido con un procesador multinúcleo.

Más juegos, a veces un procesador de 2 núcleos a alta frecuencia es suficiente. Ahora, sin embargo, hay más y más juegos "afilados" para subprocesos múltiples. Toma al menos estos salvadera juegos como GTA 4 o prototipo, en el que en un procesador de 2 núcleos con una frecuencia inferior 2,6 GHz- no te sientes cómodo, la velocidad de fotogramas cae por debajo de los 30 fotogramas por segundo. Aunque en este caso, lo más probable es que la causa de este tipo de incidencias sea la "débil" optimización de los juegos, la falta de tiempo o las manos "no directas" de quienes trasladaban los juegos de consolas a ordenador personal.

Al comprar un nuevo procesador para juegos, ahora debe prestar atención a los procesadores con 4 o más núcleos. Pero aún así, no descuides los procesadores de 2 núcleos de la "categoría superior". En algunos juegos, estos procesadores a veces se sienten mejor que algunos de varios núcleos.

Caché del procesador.

- esta es un área dedicada del chip del procesador, en la que los datos intermedios se procesan y almacenan entre los núcleos del procesador, la RAM y otros buses.

Funciona a una velocidad de reloj muy alta (generalmente a la frecuencia del propio procesador), tiene un ancho de banda muy alto y los núcleos del procesador funcionan directamente con él ( L1).

Por ella escasez, el procesador puede estar inactivo en tareas que consumen mucho tiempo, esperando que se procesen nuevos datos en la memoria caché. También la memoria caché sirve para registros de datos repetidos con frecuencia que se pueden restaurar rápidamente si es necesario sin cálculos innecesarios, sin obligar al procesador a dedicar tiempo a ellos nuevamente.

El rendimiento también agrega el hecho de que si se combina la memoria caché, todos los núcleos pueden usar los datos de la misma por igual. Esto brinda oportunidades adicionales para la optimización de subprocesos múltiples.

Esta técnica ahora se utiliza para caché de nivel 3. para procesadores Intel había procesadores con un caché de nivel 2 combinado ( C2D E 7***,E8***), gracias a lo cual este método pareció aumentar el rendimiento multiproceso.

Al hacer overclocking del procesador, la memoria caché puede convertirse en un punto débil, impidiendo que el procesador haga overclocking por encima de su frecuencia máxima de funcionamiento sin errores. Sin embargo, la ventaja es que funcionará a la misma frecuencia que el procesador overclockeado.

En general, cuanto mayor sea la memoria caché, más rápido UPC. ¿En qué aplicaciones?

En todas las aplicaciones en las que se utilizan muchos datos de punto flotante, instrucciones y subprocesos, la memoria caché se utiliza activamente. La memoria caché es muy popular archivadores, codificadores de video, antivirus Y editor gráfico etc

Favorablemente a una gran cantidad de memoria caché son juegos. Especialmente estrategias, auto-sims, RPG, SandBox y todos los juegos donde hay muchos pequeños detalles, partículas, elementos geométricos, flujos de información y efectos físicos.

La memoria caché juega un papel muy importante en el desbloqueo del potencial de los sistemas con 2 o más tarjetas de video. Después de todo, una parte de la carga recae en la interacción de los núcleos del procesador entre ellos y para trabajar con las transmisiones de varios chips de video. Es en este caso que la organización de la memoria caché es importante, y la memoria caché del 3er nivel de un gran volumen es muy útil.

La memoria caché siempre está equipada con protección contra posibles errores ( ECC), una vez detectados, se corrigen. Esto es muy importante, porque un pequeño error en la memoria caché, durante el procesamiento, puede convertirse en un error gigante y continuo, a partir del cual todo el sistema se "recostará".

Tecnologías corporativas.

(hiperhilo, HT)–

por primera vez la tecnología se aplicó en procesadores pentium 4, pero no siempre funcionaba correctamente y muchas veces ralentizaba el procesador más que acelerarlo. La razón fue una canalización demasiado larga y un sistema de predicción de ramificación inacabado. Aplicado por la empresa Intel, todavía no hay análogos de la tecnología, si no se considera un análogo, ¿entonces? lo que implementaron los ingenieros de la empresa AMD en arquitectura Excavadora.

El principio del sistema es tal que para cada núcleo físico, dos hilos de computación, en lugar de uno. Es decir, si tienes un procesador de 4 núcleos con HT (Núcleo i 7), entonces tienes subprocesos virtuales 8 .

La ganancia de rendimiento se logra debido al hecho de que los datos pueden ingresar a la canalización ya en el medio, y no necesariamente al principio. Si algunas unidades de procesador capaces de realizar esta acción están inactivas, reciben una tarea para ejecutar. El aumento de rendimiento no es el mismo que el de los núcleos físicos reales, pero es comparable (~ 50-75 %, según el tipo de aplicación). Es bastante raro que en algunas aplicaciones, HT afecta negativamente sobre el rendimiento Esto se debe a la mala optimización de las aplicaciones para esta tecnología, la incapacidad de entender que existen hilos "virtuales" y la falta de limitadores para cargar los hilos de manera uniforme.

TurboAumentar - una tecnología muy útil que aumenta la frecuencia de los núcleos de procesador más utilizados, según su nivel de carga de trabajo. Es muy útil cuando una aplicación no puede usar los 4 núcleos y carga solo uno o dos, mientras su frecuencia aumenta, lo que compensa parcialmente el rendimiento. Un análogo de esta tecnología en la empresa. AMD, es la tecnología núcleo turbo.

, 3 ¡ahora! instrucciones. Diseñado para acelerar el procesador en multimedia cálculos (video, música, gráficos 2D/3D, etc.), así como acelerar el trabajo de programas tales como archivadores, programas para trabajar con imágenes y video (con el apoyo de instrucciones de estos programas).

3¡ahora! - tecnología bastante antigua AMD, que contiene instrucciones adicionales para procesar contenido multimedia, además de SSE primera versión.

* Es decir, la posibilidad de procesamiento continuo de números reales de precisión simple.

La presencia de la última versión es una gran ventaja, el procesador comienza a realizar ciertas tareas de manera más eficiente con la optimización adecuada del software. Procesadores AMD tienen nombres similares, pero ligeramente diferentes.

* Ejemplo - SSE 4.1 (Intel) - SSE 4A (AMD).

Además, estos conjuntos de instrucciones no son idénticos. Estos son análogos, en los que hay ligeras diferencias.

fresco y tranquilo, paso rápido, CoolCore, Mejorado medio Estado (C1E) YT. D.

Estas tecnologías, a baja carga, reducen la frecuencia del procesador reduciendo el voltaje del multiplicador y del núcleo, inhabilitando parte de la caché, etc. Esto permite que el procesador se caliente mucho menos y consuma menos energía, haga menos ruido. Si se necesita energía, el procesador volverá a su estado normal en una fracción de segundo. En la configuración estándar biografías casi siempre habilitados, si se desea se pueden deshabilitar para reducir posibles "frisos" al cambiar en juegos 3D.

Algunas de estas tecnologías controlan la velocidad de los ventiladores en el sistema. Por ejemplo, si el procesador no necesita una disipación de calor mejorada y no está bajo carga, la velocidad del ventilador del procesador se reduce ( AMD Cool'n'Quiet, paso de velocidad de Intel).

Tecnología de virtualización de Intel Y Virtualización AMD.

Estas tecnologías de hardware permiten, con la ayuda de programas especiales, ejecutar varios sistemas operativos a la vez, sin una pérdida significativa de rendimiento. Además, se utiliza para el correcto funcionamiento de los servidores, ya que muchas veces tienen más de un SO instalado.

Ejecutar Desactivar Poco Yno ejecutar Poco una tecnología diseñada para proteger una computadora de ataques de virus y errores de software que pueden causar un bloqueo del sistema al desbordamiento de búfer.

Intel 64 , AMD 64 , EM 64 T - esta tecnología permite que el procesador funcione tanto en SO con arquitectura de 32 bits como en SO con arquitectura de 64 bits. Sistema 64 bits- en cuanto a prestaciones, para el usuario medio, se diferencia en que en este sistema se pueden utilizar más de 3,25 GB de RAM. En sistemas de 32 bits, use b sobre Más RAM no es posible debido a la cantidad limitada de memoria direccionable*.

La mayoría de las aplicaciones con una arquitectura de 32 bits se pueden ejecutar en un sistema con un sistema operativo de 64 bits.

* Qué hacer si allá por 1985, nadie podía siquiera pensar en cantidades tan gigantescas, para los estándares de esa época, de RAM.

Adicionalmente.

Unas pocas palabras sobre

Vale la pena prestar mucha atención a este punto. Cuanto más delgado es el proceso técnico, menos energía consume el procesador y, como resultado, se calienta menos. Y entre otras cosas, tiene un mayor margen de seguridad para el overclocking.

Cuanto más delgado sea el proceso técnico, más podrá "envolver" en el chip (y no solo) y aumentar las capacidades del procesador. La disipación de calor y el consumo de energía también disminuyen proporcionalmente, debido a menores pérdidas de corriente y una disminución en el área del núcleo. Puede ver una tendencia que con cada nueva generación de la misma arquitectura en una nueva tecnología de proceso, el consumo de energía también está creciendo, pero esto no es así. Es solo que los fabricantes se están moviendo hacia un rendimiento aún mayor y están superando la línea de disipación de calor de la generación anterior de procesadores debido a un aumento en la cantidad de transistores, que no es proporcional a una disminución en el proceso técnico.

integrado en el procesador.

Si no necesita un núcleo de video integrado, entonces no debe comprar un procesador con él. Solo obtendrá peor disipación de calor, calor adicional (no siempre), peor potencial de overclocking (no siempre) y dinero pagado en exceso.

Además, esos núcleos que están integrados en el procesador solo son adecuados para cargar el sistema operativo, navegar por Internet y ver videos (e incluso así no son de ninguna calidad).

Las tendencias del mercado aún están cambiando y la oportunidad de comprar un procesador productivo de Intel Sin un núcleo de video, se cae cada vez menos. La política de imposición forzada del núcleo de video incorporado, apareció con procesadores Intel con nombre en código Sandy Bridge, cuya principal innovación fue el núcleo integrado en el mismo proceso de fabricación. El núcleo de video se encuentra conjuntamente con procesador en un cristal, y no tan simple como en generaciones anteriores de procesadores Intel. Para aquellos que no lo usan, existen desventajas en forma de un sobrepago por el procesador, el desplazamiento de la fuente de calor con respecto al centro de la cubierta de distribución de calor. Sin embargo, también hay ventajas. Núcleo de video deshabilitado, se puede usar para una codificación de video muy rápida usando tecnología Sincronización rápida junto con un software especial que admite esta tecnología. En el futuro, Intel promete expandir los horizontes del uso del núcleo de video incorporado para computación paralela.

Zócalos para procesadores. Vida útil de la plataforma.


Intel lleva una política áspera para sus plataformas. La vida útil de cada uno (la fecha de inicio y finalización de las ventas de los procesadores) generalmente no supera los 1,5 a 2 años. Además, la empresa cuenta con varias plataformas de desarrollo en paralelo.

Compañía AMD, tiene la política de compatibilidad opuesta. A su plataforma soy 3, todos los procesadores de futuras generaciones que soporten DDR3. Incluso cuando la plataforma va a AM3+ y más tarde, ya sea nuevos procesadores bajo soy 3, o los nuevos procesadores serán compatibles con las placas base antiguas, y será posible realizar una actualización sin dolor para la billetera cambiando solo el procesador (sin cambiar la placa base, RAM, etc.) y flasheando la placa base. Los únicos matices de incompatibilidad pueden ser al cambiar el tipo, ya que se requerirá un controlador de memoria diferente integrado en el procesador. Por lo tanto, la compatibilidad es limitada y no es compatible con todas las placas base. Pero en general, para un usuario económico o aquellos que no están acostumbrados a cambiar la plataforma por completo cada 2 años -la elección del fabricante del procesador es comprensible- esto AMD.

Refrigeración de la CPU.

Viene con procesador de serie CAJA-nuevo enfriador que simplemente hará el trabajo. Es una pieza de aluminio con un área de dispersión no muy alta. Los enfriadores eficientes basados ​​en tubos de calor y placas unidas a ellos están diseñados para una disipación de calor altamente eficiente. Si no desea escuchar un ruido excesivo del ventilador, entonces debería considerar comprar un enfriador de tubo de calor alternativo más eficiente o un sistema de enfriamiento líquido de circuito cerrado o abierto. Dichos sistemas de refrigeración permitirán además el overclocking del procesador.

Conclusión.

Se han considerado todos los aspectos importantes que afectan el rendimiento y el rendimiento del procesador. Recapitulemos lo que hay que tener en cuenta:

  • Seleccionar fabricante
  • arquitectura del procesador
  • Proceso tecnológico
  • Frecuencia de la CPU
  • Número de núcleos de procesador
  • Tamaño y tipo de caché del procesador
  • Soporte para tecnologías e instrucciones.
  • Refrigeración de calidad

Esperamos que este material lo ayude a comprender y decidir la elección de un procesador que cumpla con sus expectativas.

Saúl 9 de septiembre de 2015 a las 13:38

Implementación de una arquitectura de motor de juego de subprocesos múltiples

  • blog de intel,
  • desarrollo de juegos,
  • programación paralela,
  • Desarrollo de sitios web
  • Traducción

Con la llegada de los procesadores multinúcleo, se hizo necesario crear un motor de juego basado en una arquitectura paralela. El uso de todos los procesadores del sistema, tanto de gráficos (GPU) como de procesador central (CPU), abre muchas más posibilidades en comparación con un motor de GPU de un solo subproceso. Por ejemplo, al usar más núcleos de CPU, puede mejorar las imágenes al aumentar la cantidad de objetos físicos que se usan en el juego, así como lograr un comportamiento de los personajes más realista mediante la implementación de inteligencia artificial (IA) avanzada.
Considere las características de la implementación de la arquitectura de subprocesos múltiples del motor del juego.

1. Introducción

1.1. Visión de conjunto

La arquitectura de subprocesos múltiples del motor del juego le permite utilizar al máximo las capacidades de todos los procesadores de la plataforma. Implica la ejecución paralela de varios bloques funcionales en todos los procesadores disponibles. Sin embargo, no es tan fácil implementar tal esquema. Los elementos separados del motor del juego a menudo interactúan entre sí, lo que puede generar errores cuando se ejecutan al mismo tiempo. Para manejar tales escenarios, el motor proporciona mecanismos especiales de sincronización de datos que excluyen posibles bloqueos. También implementa técnicas de sincronización de datos concurrentes para mantener el tiempo de ejecución al mínimo.

Para comprender el material presentado, debe estar bien versado en los métodos modernos de creación de juegos de computadora, admitir subprocesos múltiples para motores de juegos o mejorar el rendimiento de las aplicaciones en general.

2. Estado de ejecución paralela

El estado de ejecución en paralelo es un concepto clave de los subprocesos múltiples. Solo dividiendo el motor del juego en sistemas separados, cada uno operando en su propio modo y prácticamente sin interactuar con el resto del motor, se puede lograr la mayor eficiencia en computación paralela y reducir el tiempo requerido para la sincronización. No es posible aislar completamente las partes individuales del motor, excluyendo todos los recursos comunes. Sin embargo, para operaciones como la recuperación de la posición o la orientación de los objetos, los sistemas individuales pueden usar copias locales de los datos en lugar de recursos compartidos. Esto le permite minimizar la dependencia de datos en diferentes partes del motor. Las notificaciones de cambios en los datos compartidos realizados por un solo sistema se pasan al administrador de estado, que los pone en cola. Esto se llama el modo de mensajería. Este modo supone que, después de completar la ejecución de las tareas, los sistemas del motor reciben notificaciones de cambios y actualizan sus datos internos en consecuencia. Este mecanismo puede reducir significativamente el tiempo de sincronización y la dependencia de los sistemas entre sí.

2.1 Estados de ejecución

Para que el administrador del estado de ejecución funcione de manera eficiente, se recomienda sincronizar las operaciones en un pulso de reloj específico. Esto permite que todos los sistemas funcionen simultáneamente. En este caso, la velocidad del reloj no tiene que corresponder a la velocidad de fotogramas. Y la duración de los ciclos puede no depender de la frecuencia. Puede elegirse de tal forma que un ciclo corresponda al tiempo necesario para transmitir una trama (independientemente de su tamaño). En otras palabras, la frecuencia o duración de los ciclos está determinada por la implementación específica del administrador de estado. La Figura 1 muestra un modo de operación por pasos "libre", que no requiere que todos los sistemas completen una operación en el mismo ciclo de reloj. El modo en el que todos los sistemas completan la ejecución de operaciones en un ciclo de reloj se denomina modo paso a paso "duro". Se muestra esquemáticamente en la figura 2.


Figura 1. Estado de ejecución en modo paso a paso libre

2.1.1. Modo de giro libre
En el modo paso a paso libre, todos los sistemas funcionan continuamente durante un período de tiempo predeterminado necesario para completar la siguiente parte de los cálculos. Sin embargo, el nombre "libre" no debe tomarse literalmente: los sistemas no se sincronizan en un momento arbitrario en el tiempo, solo son "libres" para elegir la cantidad de ciclos necesarios para completar la siguiente etapa.
Por lo general, en este modo, no es suficiente enviar una simple notificación de cambio de estado al administrador de estado. También es necesario transmitir datos actualizados. Esto se debe a que el sistema que ha cambiado los datos compartidos puede estar en progreso mientras otro sistema que está esperando los datos está listo para actualizarse. En este caso, se requiere más memoria porque es necesario crear más copias de los datos. Por lo tanto, el modo "gratuito" no puede considerarse una solución universal para todas las ocasiones.
2.1.2. Modo de giro duro
En este modo, la ejecución de tareas de todos los sistemas se completa en un ciclo de reloj. Este mecanismo es más fácil de implementar y no requiere la transmisión de datos actualizados junto con la notificación. De hecho, si es necesario, un sistema puede simplemente solicitar nuevos valores de otro sistema (por supuesto, al final del ciclo de ejecución).
En el modo difícil, es posible implementar un modo de operación pseudo-paso libre mediante la distribución de cálculos entre diferentes pasos. En particular, esto puede ser necesario para los cálculos de IA, donde el "objetivo común" inicial se calcula en el primer ciclo, que se refina gradualmente en las siguientes etapas.


Figura 2. Estado de ejecución en modo paso a paso duro

2.2. Sincronización de datos

La modificación de datos compartidos por varios sistemas puede generar cambios conflictivos. En este caso, el sistema de mensajería debe proporcionar un algoritmo para elegir el valor total correcto. Hay dos enfoques principales basados ​​en los siguientes criterios.
  • Tiempo: El valor final es el último cambio realizado.
  • Prioridad: El valor final es el cambio realizado por el sistema con mayor prioridad. Si la prioridad de los sistemas es la misma, también puede tener en cuenta la sincronización de los cambios.
Todos los datos obsoletos (según cualquiera de los criterios) pueden simplemente sobrescribirse o excluirse de la cola de notificación.
Dado que el valor total puede depender del orden en que se realizan los cambios, puede ser muy difícil utilizar valores relativos para los datos totales. En tales casos, se deben utilizar valores absolutos. Luego, al actualizar los datos locales, los sistemas pueden simplemente reemplazar los valores antiguos por los nuevos. La solución óptima es elegir valores absolutos o relativos según la situación específica. Por ejemplo, los datos generales como la posición y la orientación deben tener valores absolutos porque para ellos es importante el orden en que se realizan los cambios. Los valores relativos se pueden usar, por ejemplo, para un sistema de generación de partículas, ya que toda la información sobre las partículas se almacena solo en sí mismo.

3. Motor

Al desarrollar el motor, la atención se centra en la flexibilidad necesaria para ampliar aún más su funcionalidad. Esto lo optimizará para su uso bajo ciertas restricciones (por ejemplo, memoria).
El motor se puede dividir condicionalmente en dos partes: marco y administradores. El marco (ver sección 3.1) incluye partes del juego que se replican en tiempo de ejecución, es decir, existen en múltiples instancias. También incluye los elementos que intervienen en la ejecución del bucle principal del juego. Los administradores (ver sección 3.2) son objetos Singleton responsables de ejecutar la parte lógica del juego.
A continuación se muestra un diagrama del motor del juego.


Figura 3. Arquitectura general del motor

Tenga en cuenta que los módulos o sistemas funcionales del juego no forman parte del motor. El motor únicamente los une entre sí, actuando como elemento de unión. Esta organización modular hace posible cargar y descargar sistemas según sea necesario.

La interacción del motor y los sistemas se lleva a cabo mediante interfaces. Se implementan de tal manera que dan acceso al motor a las funciones de los sistemas y a los sistemas a los administradores del motor.
Se proporciona un diagrama detallado del motor en el Apéndice A, “Diagrama del motor”.

De hecho, todos los sistemas son independientes entre sí (consulte la Sección 2, "Estado de ejecución concurrente"), lo que significa que pueden realizar acciones en paralelo sin afectar el funcionamiento de otros sistemas. Sin embargo, cualquier cambio de datos conllevará ciertas dificultades, ya que los sistemas tendrán que interactuar entre sí. El intercambio de información entre sistemas es necesario en los siguientes casos:

  • para informar a otro sistema sobre un cambio en los datos compartidos (por ejemplo, la posición u orientación de los objetos);
  • para realizar funciones que no están disponibles para este sistema (por ejemplo, el sistema AI llama al sistema para calcular las propiedades geométricas o físicas del objeto para realizar una prueba de cruce de rayos).
En el primer caso se puede utilizar el gestor de estados descrito en el apartado anterior para gestionar el intercambio de información. (Consulte la Sección 3.2.2, “Administrador de estado” para obtener más información sobre el administrador de estado).
En el segundo caso, es necesario implementar un mecanismo especial que le permita brindar servicios desde un sistema para que los use otro. En la Sección 3.2.3, Administrador de servicios, se proporciona una descripción completa de este mecanismo.

3.1. estructura

El marco sirve para combinar todos los elementos del motor. Es donde se inicializa el motor, con la excepción de los administradores, que se instancian globalmente. También almacena información de la escena. Para lograr una mayor flexibilidad, la escena se implementa como la llamada escena universal, que contiene objetos universales. Son contenedores que combinan varias partes funcionales de la escena. Consulte la sección 3.1.2 para obtener más detalles.
El bucle principal del juego también se implementa en el marco. Esquemáticamente, se puede representar de la siguiente manera.


Figura 4. Bucle principal del juego

El motor se ejecuta en un entorno de ventana, por lo que el primer paso en el ciclo del juego es procesar todos los mensajes de ventana del sistema operativo pendientes. Si no se hace esto, el motor no responderá a los mensajes del sistema operativo. En el segundo paso, el programador asigna tareas usando el administrador de tareas. Este proceso se detalla en la sección 3.1.1 a continuación. Después de eso, el administrador de estado (ver sección 3.2.2) envía información sobre los cambios realizados en los sistemas del motor que puede afectar. En el último paso, dependiendo del estado de ejecución, el marco determina si terminar o continuar el motor, por ejemplo, para pasar a la siguiente escena. La información sobre el estado del motor se almacena en el administrador de entorno. Consulte la sección 3.2.4 para obtener más información.

3.1.1. programador
El planificador genera un reloj de referencia de ejecución a una frecuencia especificada. Si el modo de evaluación comparativa requiere que la siguiente operación comience inmediatamente después de la finalización de la anterior, sin esperar al final del ciclo, la frecuencia puede ser ilimitada.
En una señal de reloj, el programador, con la ayuda del administrador de tareas, pone los sistemas en modo de ejecución. En el modo paso a paso libre (Sección 2.1.1), el programador sondea los sistemas para determinar cuántos pasos necesitan para completar una tarea. Según los resultados de la encuesta, el programador determina qué sistemas están listos para ejecutarse y cuáles completarán el trabajo en un ciclo particular. El programador puede cambiar la cantidad de tics si algún sistema necesita más tiempo para ejecutarse. En el modo paso a paso (Sección 2.1.2), todos los sistemas comienzan y finalizan la ejecución en el mismo ciclo de reloj, por lo que el programador espera a que todos los sistemas terminen de ejecutarse.
3.1.2. Escena Universal y Objetos
La escena universal y los objetos son contenedores para la funcionalidad implementada en otros sistemas. Están destinados únicamente a la interacción con el motor y no realizan ninguna otra función. Sin embargo, se pueden ampliar para aprovechar las funciones disponibles en otros sistemas. Esto permite un acoplamiento débil. De hecho, la escena y los objetos universales pueden usar las propiedades de otros sistemas sin estar atados a ellos. Es esta propiedad la que excluye la dependencia de los sistemas entre sí y hace posible que funcionen simultáneamente.
El siguiente diagrama muestra la expansión de la escena y el objeto universales.


Figura 5. Expandiendo la escena universal y el objeto.

Considere el principio de las extensiones en el siguiente ejemplo. Digamos que una escena universal universal se extiende, la escena se extiende para usar el uso de propiedades gráficas, físicas y de otro tipo. En este caso, la parte “gráfica” de la extensión se encargará de inicializar la visualización, y su parte “física” se encargará de implementar las leyes físicas de los sólidos, como la gravedad. Las escenas contienen objetos, por lo que una escena genérica también incluirá varios objetos genéricos. Los objetos genéricos también se pueden ampliar para utilizar propiedades gráficas, físicas y de otro tipo. Por ejemplo, el dibujo de un objeto en la pantalla será implementado por funciones de extensión gráfica, y el cálculo de la interacción de cuerpos rígidos será implementado por funciones físicas.

En el Apéndice B, "El diagrama de la interacción del motor y los sistemas" se proporciona un diagrama detallado de la interacción del motor y los sistemas.
Tenga en cuenta que la escena genérica y el objeto genérico son responsables de registrar todas sus "extensiones" con el administrador de estado para que todas las extensiones puedan ser notificadas de los cambios realizados por otras extensiones (es decir, otros sistemas). Un ejemplo sería una extensión gráfica registrada para recibir notificaciones de cambios de posición y orientación realizados por una extensión física.
Para obtener información detallada sobre los componentes del sistema, consulte la Sección 5.2, Componentes del sistema.

3.2. Gerentes

Los encargados gestionan el funcionamiento del motor. Son objetos Singleton, lo que significa que solo hay una instancia de cada tipo de administrador. Esto es necesario porque la duplicación de los recursos del administrador conducirá inevitablemente a la redundancia y afectará negativamente el desempeño. Además, los gerentes son responsables de implementar funciones comunes para todos los sistemas.
3.2.1. Administrador de tareas
El administrador de tareas es responsable de administrar las tareas del sistema en el grupo de subprocesos. Para garantizar un escalado nx óptimo y evitar que se asignen subprocesos redundantes, lo que elimina la sobrecarga innecesaria de cambios de tareas en el sistema operativo, el grupo de subprocesos crea un subproceso por procesador.

El planificador le da al administrador de tareas una lista de tareas para ejecutar, así como información sobre qué tareas completar para esperar. Recibe estos datos de varios sistemas. Cada sistema tiene solo una tarea para ejecutar. Este método se llama descomposición funcional. Sin embargo, para el procesamiento de datos, cada tarea puede dividirse en un número arbitrario de subtareas (descomposición de datos).
A continuación se muestra un ejemplo de la distribución de tareas entre subprocesos para un sistema de cuatro núcleos.


Figura 6. Ejemplo de un grupo de subprocesos utilizado por el administrador de tareas

Además de procesar las solicitudes del programador para acceder a las tareas principales, el administrador de tareas puede trabajar en el modo de inicialización. Sondea secuencialmente los sistemas de cada subproceso para que puedan inicializar los almacenes de datos locales necesarios para el trabajo.
Los consejos para implementar un administrador de tareas se proporcionan en el Apéndice D, Consejos para implementar tareas.

3.2.2. Gerente Estatal
El administrador de estado es parte del mecanismo de mensajería. Realiza un seguimiento de los cambios y envía notificaciones sobre ellos a todos los sistemas que puedan verse afectados por estos cambios. Para no enviar notificaciones innecesarias, el administrador de estado almacena información sobre qué sistemas notificar en un caso particular. Este mecanismo se implementa en base al patrón Observer (consulte el Apéndice C, Observer (Patrón de diseño)). En resumen, este patrón implica el uso de un "observador" que observa cualquier cambio en el sujeto, mientras que el controlador de cambios actúa como intermediario entre ellos.

El mecanismo funciona de la siguiente manera. 1. El observador le dice al controlador de cambios (o administrador de estado) qué temas quiere monitorear para cambios. 2. El sujeto notifica al controlador de todos sus cambios. 3. A la señal del marco, el controlador notifica al observador sobre los cambios en el sujeto. 4. El observador envía una solicitud al sujeto para recibir datos actualizados.

En el modo de paso libre (ver sección 2.1.1), la implementación de este mecanismo se vuelve algo más complicada. Primero, los datos actualizados deberán enviarse junto con la notificación de cambio. El sondeo no es aplicable en este modo. De hecho, si el sistema responsable de los cambios aún no ha terminado de ejecutarse en el momento de recibir la solicitud, no podrá proporcionar datos actualizados. En segundo lugar, si un sistema aún no está listo para recibir cambios al final del reloj, el administrador del estado deberá conservar los datos modificados hasta que todos los sistemas registrados para recibirlos estén listos.

El marco proporciona dos administradores de estado para esto: para manejar cambios a nivel de escena y a nivel de objeto. Por lo general, los mensajes de escena y de objeto son independientes entre sí, por lo que el uso de dos administradores separados elimina la necesidad de procesar datos innecesarios. Pero si la escena necesita tener en cuenta el estado de un objeto, se puede registrar para recibir notificaciones de sus cambios.

Para no realizar una sincronización innecesaria, el administrador de estado forma una cola de notificaciones de cambio por separado para cada subproceso creado por el administrador de tareas. Por lo tanto, no se requiere sincronización al acceder a la cola. La Sección 2.2 describe un método que se puede usar para fusionar colas después de la ejecución.


Figura 7. Notificación de cambio interno de objeto genérico

Las notificaciones de cambio no tienen que enviarse secuencialmente. Hay una manera de distribuirlos en paralelo. Al realizar una tarea, el sistema trabaja con todos sus objetos. Por ejemplo, a medida que los objetos físicos interactúan entre sí, el sistema físico gestiona su movimiento, cálculo de colisiones, nuevas fuerzas actuantes, etc. Al recibir notificaciones, un objeto del sistema no interactúa con otros objetos en su sistema. Interactúa con sus extensiones de objetos genéricos asociados. Esto significa que los objetos genéricos ahora son independientes entre sí y se pueden actualizar al mismo tiempo. Este enfoque no excluye los casos límite que deben tenerse en cuenta en el proceso de sincronización. Sin embargo, te permite usar el modo de ejecución en paralelo cuando parecía que solo podías actuar secuencialmente.

3.2.3. Supervisor
El administrador de servicios brinda a los sistemas acceso a funciones de otros sistemas que, de otro modo, no estarían disponibles para ellos. Es importante comprender que se accede a las funciones a través de interfaces y no directamente. La información sobre las interfaces del sistema también se almacena en el administrador de servicios.
Para evitar dependencias del sistema entre sí, cada uno de ellos tiene solo un pequeño conjunto de servicios. Además, la capacidad de usar un servicio en particular no está determinada por el sistema en sí, sino por el administrador del servicio.


Figura 8. Ejemplo de administrador de servicios

El administrador de servicios tiene otra función. Da acceso a los sistemas a las propiedades de otros sistemas. Las propiedades son valores específicos del sistema que no se pasan en el sistema de mensajería. Esto podría ser una extensión de la resolución de pantalla en un sistema gráfico, o una magnitud de gravedad en uno físico. El administrador de servicios brinda acceso a los sistemas a dichos datos, pero no permite que se controlen directamente. Pone los cambios de propiedad en una cola especial y los publica solo después de la ejecución secuencial. Tenga en cuenta que rara vez se requiere el acceso a las propiedades de otro sistema y no se debe abusar de él. Por ejemplo, puede necesitarlo para habilitar y deshabilitar el modo de estructura alámbrica en el sistema de gráficos desde la ventana de la consola, o para cambiar la resolución de la pantalla a pedido del jugador desde la interfaz de usuario. Esta función se utiliza principalmente para establecer parámetros que no cambien de cuadro a cuadro.

3.2.4. Gerente de medio ambiente
  • El administrador de entorno proporciona el entorno de tiempo de ejecución para el motor. Sus funciones se pueden dividir condicionalmente en los siguientes grupos.
  • Variables: nombres y valores de variables comunes utilizadas por todas las partes del motor. Por lo general, los valores de las variables se determinan al cargar una escena o ciertas configuraciones de usuario. El motor y varios sistemas pueden acceder a ellos enviando una solicitud.
  • Ejecución: datos de ejecución, como la finalización de una escena o la ejecución de un programa. Estos parámetros pueden ser configurados y solicitados tanto por los propios sistemas como por el motor.
3.2.5. Gerente de plataforma
El administrador de la plataforma implementa una abstracción para las llamadas al sistema operativo y también brinda funcionalidad adicional más allá de la simple abstracción. La ventaja de este enfoque es la encapsulación de varias funciones típicas dentro de una sola llamada. Es decir, no tienen que implementarse por separado para cada elemento de llamada, lo que lo sobrecarga con detalles sobre las llamadas del sistema operativo.
Considere, como ejemplo, llamar al administrador de la plataforma para cargar la biblioteca dinámica del sistema. No solo arranca el sistema, sino que también obtiene puntos de entrada de funciones y llama a la función de inicialización de la biblioteca. El administrador también almacena el descriptor de la biblioteca y lo descarga cuando el motor finaliza.

El administrador de la plataforma también es responsable de proporcionar información sobre el procesador, como las instrucciones SIMD admitidas, y de inicializar un modo de operación particular para los procesos. No se pueden utilizar otras funciones de consulta del sistema.

4. Interfaces

Las interfaces son los medios de interacción entre el marco, los administradores y los sistemas. El marco y los administradores son parte del motor, por lo que pueden interactuar entre sí directamente. Los sistemas no pertenecen al motor. Además, todos realizan diferentes funciones, lo que lleva a la necesidad de crear un único método de interacción con ellos. Debido a que los sistemas no pueden comunicarse directamente con los gerentes, deben proporcionar otra forma de acceder a ellos. Sin embargo, no todas las funciones de los gerentes deben estar abiertas a los sistemas. Algunos de ellos están disponibles solo para el marco.

Las interfaces definen un conjunto de funciones necesarias para utilizar un método de acceso estándar. Esto evita que el marco tenga que conocer los detalles de implementación de sistemas específicos, ya que solo puede interactuar con ellos a través de un conjunto específico de llamadas.

4.1. Interfaces de sujeto y observador

El objetivo principal de las interfaces de sujeto y observador es registrar qué observadores enviar notificaciones sobre qué sujetos, así como enviar dichas notificaciones. Registrarse y desconectarse de un observador son características estándar para todos los actores incluidos en la implementación de su interfaz.

4.2. Interfaces de administrador

Los administradores, a pesar de ser objetos Singleton, solo son accesibles directamente para el marco. Otros sistemas solo pueden acceder a los administradores a través de interfaces que representan solo un subconjunto de su funcionalidad general. Después de la inicialización, la interfaz se pasa al sistema, que la usa para trabajar con ciertas funciones del administrador.
No existe una interfaz única para todos los administradores. Cada uno de ellos tiene su propia interfaz separada.

4.3. Interfaces del sistema

Para que un marco acceda a los componentes del sistema, necesita interfaces. Sin ellos, el soporte para cada nuevo sistema de motor tendría que implementarse por separado.
Cada sistema incluye cuatro componentes, por lo que debe haber cuatro interfaces. A saber: sistema, escena, objeto y tarea. Consulte la Sección 5, Sistemas para obtener una descripción detallada. Las interfaces son un medio para obtener acceso a los componentes. Las interfaces del sistema le permiten crear y eliminar escenas. Las interfaces de escena, a su vez, le permiten crear y destruir objetos, así como solicitar información sobre la tarea principal del sistema. La interfaz de tareas la utiliza principalmente el administrador de tareas cuando asigna tareas a un grupo de subprocesos.
Dado que la escena y el objeto, como partes del sistema, deben interactuar entre sí y con la escena universal y el objeto al que están unidos, sus interfaces también se crean a partir de las interfaces del sujeto y el observador.

4.4. Cambiar interfaces

Estas interfaces sirven para transferir datos entre sistemas. Todos los sistemas que realicen cambios de un tipo particular deben implementar esta interfaz. La geometría es un ejemplo. La interfaz de geometría incluye métodos para determinar la posición, orientación y escala de un elemento. Cualquier sistema que realice cambios en la geometría debe implementar una interfaz tal que el acceso a los datos modificados no requiera el conocimiento de otros sistemas.

5. Sistemas

Los sistemas son la parte del motor que se encarga de implementar la funcionalidad del juego. Realizan todas las tareas básicas sin las cuales el motor no tendría sentido. La interacción entre el motor y los sistemas se realiza mediante interfaces (consulte la Sección 4.3, “Interfaces del sistema”). Esto es necesario para no sobrecargar el motor con información sobre diferentes tipos de sistemas. Las interfaces hacen que sea mucho más fácil agregar un nuevo sistema porque el motor no necesita tener en cuenta todos los detalles de implementación.

5.1. Tipos

Los sistemas de motor se pueden dividir libremente en varias categorías predefinidas, correspondientes a los componentes estándar del juego. Por ejemplo: geometría, gráficos, física (colisión de cuerpos rígidos), sonido, procesamiento de entrada, IA y animación.
Los sistemas con funciones no estándar pertenecen a una categoría separada. Es importante comprender que cualquier sistema que modifique los datos de una categoría en particular debe conocer la interfaz de esa categoría, ya que el motor no proporciona dicha información.

5.2. Componentes del sistema

Para cada sistema, se deben implementar varios componentes. Estos son algunos de ellos: sistema, escena, objeto y tarea. Todos estos componentes sirven para interactuar con varias partes del motor.
El siguiente diagrama muestra las interacciones entre los diversos componentes.


Figura 9. Componentes del sistema

En el Apéndice B, "El esquema de interacción entre el motor y los sistemas", se proporciona un diagrama detallado de las conexiones entre los sistemas del motor.

5.2.1. Sistema
El componente "sistema", o simplemente el sistema, es responsable de inicializar los recursos del sistema, que prácticamente no cambiarán durante la operación del motor. Por ejemplo, el sistema de gráficos analiza las direcciones de los recursos para determinar su ubicación y acelerar la carga cuando se utiliza el recurso. También establece la resolución de la pantalla.
El sistema es el principal punto de entrada para el marco. Proporciona información sobre sí mismo (como el tipo de sistema), así como métodos para crear y eliminar escenas.
5.2.2. Escena
El componente de escena, o escena del sistema, es responsable de administrar los recursos que están relacionados con la escena actual. Universal Scene utiliza escenas del sistema para ampliar la funcionalidad mediante el uso de sus características. Un ejemplo es una escena física, que se utiliza para crear un nuevo mundo de juego y determina las fuerzas gravitatorias en él cuando se inicializa la escena.
Las escenas proporcionan métodos para crear y destruir objetos, así como un componente de "tarea" para procesar la escena y un método para acceder a ella.
5.2.3. Un objeto
El componente objeto, u objeto del sistema, pertenece a la escena y suele estar asociado con lo que el usuario ve en la pantalla. El objeto genérico utiliza el objeto del sistema para ampliar la funcionalidad al exponer sus propiedades como si fueran propias.
Un ejemplo sería la extensión geométrica, gráfica y física de un objeto genérico para mostrar una viga de madera en la pantalla. Las propiedades geométricas incluirán la posición, la orientación y la escala del objeto. Para mostrarlo, el sistema de gráficos utilizará una cuadrícula especial. Y el sistema físico lo dotará de las propiedades de un cuerpo sólido para calcular las interacciones con otros cuerpos y las fuerzas de gravedad actuantes.

En ciertos casos, el objeto del sistema debe tener en cuenta los cambios en el objeto genérico o una de sus extensiones. Para ello, puede crear un enlace especial que le permitirá realizar un seguimiento de los cambios realizados.

5.2.4. Una tarea
El componente de tarea, o tarea del sistema, se utiliza para procesar la escena. La tarea recibe un comando para actualizar la escena desde el administrador de tareas. Esta es una señal para ejecutar funciones del sistema en objetos de escena.
La ejecución de una tarea se puede dividir en subtareas, distribuyéndolas también con la ayuda del administrador de tareas a un número aún mayor de hilos. Esta es una forma conveniente de escalar el motor en múltiples procesadores. Este método se llama descomposición de datos.
La información sobre el cambio de objetos en el proceso de actualización de tareas de escena se pasa al administrador de estado. Consulte la sección 3.2.2 para obtener detalles sobre el administrador de estado.

6. Combinando todos los componentes

Todos los elementos descritos anteriormente están interconectados y son parte de un todo. El funcionamiento del motor se puede dividir condicionalmente en varias etapas, que se describen en las siguientes secciones.

6.1. Fase de inicialización

El trabajo del motor comienza con la inicialización de los administradores y el marco.
  • El marco llama al cargador de escenas.
  • Habiendo determinado qué sistemas usará la escena, el cargador llama al administrador de la plataforma para cargar los módulos apropiados.
  • El administrador de la plataforma carga los módulos apropiados y los pasa al administrador de la interfaz, luego los llama para crear un nuevo sistema.
  • El módulo devuelve al cargador un puntero a la instancia del sistema que implementa la interfaz del sistema.
  • El administrador de servicios registra todos los servicios que proporciona el módulo del sistema.


Figura 10. Inicialización de gestores y sistemas del motor

6.2. Etapa de carga de escena

El control vuelve al cargador, que carga la escena.
  • El cargador crea una escena universal. Para instanciar escenas del sistema, llama a las interfaces del sistema, ampliando la funcionalidad de la escena genérica.
  • Una escena genérica define qué datos puede cambiar cada escena del sistema y qué cambios se le deben notificar.
  • Después de hacer coincidir las escenas que realizan ciertos cambios y desean recibir una notificación al respecto, la escena genérica pasa esta información al administrador de estado.
  • Para cada objeto de escena, el cargador crea un objeto genérico y luego determina qué sistemas extenderán el objeto genérico. La correspondencia entre los objetos del sistema se determina según el mismo esquema que se utiliza para las escenas. También se pasa al administrador estatal.
  • Usando las interfaces de escena resultantes, el cargador crea instancias de objetos del sistema y las usa para extender objetos genéricos.
  • El planificador consulta las interfaces de escena para obtener información sobre sus tareas principales para pasar esta información al administrador de tareas durante la ejecución.


Figura 11. Inicialización de la escena y objeto universal

6.3. Etapa del ciclo del juego

  • El administrador de la plataforma se utiliza para procesar los mensajes de la ventana y otros elementos necesarios para que la plataforma actual funcione.
  • Luego, el control pasa al programador, que espera el final del ciclo para continuar.
  • Al final de un tic en el modo de pasos libres, el programador verifica qué tareas se han completado. Todas las tareas completadas (es decir, listas para ser ejecutadas) se transfieren al administrador de tareas.
  • El programador determina qué tareas se completarán en el ciclo actual y espera a que se completen.
  • En modo paso a paso duro, estas operaciones se repiten cada ciclo de reloj. El programador entrega todas las tareas al gerente y espera a que se completen.
6.3.1. La terminación de la tarea
El control pasa al administrador de tareas.
  • Forma una cola de todas las tareas recibidas, luego, cuando aparecen hilos libres, comienza a ejecutarlos. (El proceso de ejecución de tareas difiere según los sistemas. Los sistemas pueden trabajar con una sola tarea o procesar varias tareas de la cola al mismo tiempo, realizando así una ejecución paralela).
  • Durante la ejecución, las tareas pueden trabajar con toda la escena o solo con ciertos objetos, cambiando sus datos internos.
  • Los sistemas deben ser notificados de cualquier cambio en los datos compartidos (como la posición o la orientación). Por lo tanto, cuando se ejecuta una tarea, la escena u objeto del sistema informa al observador de cualquier cambio. En este caso, el observador en realidad actúa como un controlador de cambios, que forma parte del administrador de estado.
  • El controlador de cambios pone en cola las notificaciones de cambios para su posterior procesamiento. Ignora los cambios que no afectan al observador dado.
  • Para usar ciertos servicios, la tarea llama al administrador de servicios. El administrador de servicios también le permite cambiar las propiedades de otros sistemas que no están disponibles para la transmisión en el mecanismo de mensajería (por ejemplo, el sistema de entrada de datos cambia la extensión de la pantalla, una propiedad del sistema de gráficos).
  • Las tareas también pueden llamar al administrador de entorno para obtener variables de entorno y cambiar el estado de ejecución (suspensión de ejecución, transición a la siguiente escena, etc.).


Figura 12. Administrador de tareas y tareas

6.3.2. Actualización de datos
Una vez completadas todas las tareas del ciclo actual, el bucle principal del juego llama al administrador de estado para iniciar la fase de actualización de datos.
  • El administrador de estado llama a cada uno de sus controladores de cambios para distribuir las notificaciones acumuladas. El controlador verifica a qué observadores enviar notificaciones de cambio para cada uno de los sujetos.
  • Luego llama al observador deseado y le notifica el cambio (la notificación también incluye un puntero a la interfaz del sujeto). En el modo de pasos sueltos, el observador recibe los datos modificados del controlador de cambios, pero en el modo de pasos duros, debe solicitarlos al propio sujeto.
  • Normalmente, los observadores interesados ​​en recibir notificaciones de cambio de objetos del sistema son otros objetos del sistema asociados con el mismo objeto genérico. Esto le permite dividir el proceso de realizar cambios en varias tareas que se pueden realizar en paralelo. Para simplificar el proceso de sincronización, puede combinar todas las extensiones de objetos genéricos relacionados en una sola tarea.
6.3.3. Comprobación de ejecución y salida.
El paso final en el ciclo del juego es verificar el estado del tiempo de ejecución. Hay varios estados de este tipo: trabajo, pausa, siguiente escena, etc. Si se selecciona el estado de trabajo, se iniciará la siguiente iteración del bucle. El estado de "salida" significa que el bucle finalizó, se liberaron los recursos y se cerró la aplicación. Puede implementar otros estados, como "pausa", "siguiente escena", etc.

7. Conclusión

La idea principal de este artículo se da en la Sección 2, "Estado de ejecución concurrente". Gracias a la descomposición funcional y la descomposición de datos, es posible realizar no solo el subprocesamiento múltiple del motor, sino también su escalabilidad a incluso más núcleos en el futuro. Para eliminar la sobrecarga de sincronización y al mismo tiempo mantener los datos actualizados, use administradores de estado además del mecanismo de mensajería.

El patrón Observer es una función del motor de mensajería. Es importante tener una buena comprensión de cómo funciona para elegir la mejor manera de implementarlo para el motor. De hecho, este es un mecanismo de interacción entre diferentes sistemas, lo que asegura la sincronización de datos comunes.

La gestión de tareas juega un papel importante en la distribución de las cargas de trabajo. El Apéndice D proporciona consejos para crear un administrador de tareas efectivo para un motor de juego.

Como puede ver, el motor del juego es posible gracias a una estructura bien definida y un mecanismo de intercambio de mensajes. Con su ayuda, puede mejorar significativamente el rendimiento de los procesadores modernos y futuros.

Apéndice A. Esquema del motor

El procesamiento se inicia desde el bucle principal del juego (consulte la Figura 4, “Bucle principal del juego”).


Apéndice B. El esquema de interacción entre el motor y los sistemas.


Apéndice C. Observador (patrón de diseño)

El patrón Observer se describe en detalle en el libro Técnicas de diseño orientado a objetos. Patrones de diseño, Gamma E., Helm R., Johnson R., Vlissides J. Addison-Wesley lo publicó por primera vez en inglés en 1995.

La idea principal de este modelo es la siguiente: si algunos elementos necesitan ser notificados sobre cambios en otros elementos, no tienen que buscar en la lista de todos los cambios posibles, tratando de encontrar los datos necesarios en ella. El modelo implica un sujeto y un observador que se utilizan para enviar notificaciones de cambio. El observador realiza un seguimiento de cualquier cambio en el sujeto. El controlador de cambios actúa como intermediario entre estos dos componentes. El siguiente diagrama ilustra esta relación.


Figura 13. Patrón "Observador"

El proceso de uso de este modelo se describe a continuación.

  1. El controlador de cambios registra un observador y un sujeto sobre el que quiere ser notificado.
  2. El controlador de cambios es en realidad un observador. En lugar del observador, junto con el sujeto, se registra a sí mismo. El controlador de cambios también mantiene su lista de observadores y sujetos registrados con ellos.
  3. El sujeto agrega un observador (es decir, un controlador de cambios) a su lista de observadores que desean recibir notificaciones de sus cambios. A veces se indica adicionalmente el tipo de cambios, lo que determina en qué cambios está interesado el observador. Esto le permite agilizar el proceso de envío de notificaciones de cambios.
  4. Al cambiar los datos o el estado, el sujeto notifica al observador a través de un mecanismo de devolución de llamada y transmite información sobre los tipos cambiados.
  5. El controlador de cambios forma una cola de notificaciones de cambios y espera una señal para distribuirlas entre objetos y sistemas.
  6. Durante la distribución, el controlador de cambios habla con observadores reales.
  7. Los observadores solicitan información sobre cambios en los datos o el estado del sujeto (o la reciben junto con notificaciones).
  8. Antes de eliminar a un observador, o si ya no necesita ser notificado sobre un tema, se da de baja de ese tema en el controlador de cambios.
Hay muchas maneras diferentes de implementar la distribución de tareas. Sin embargo, es mejor mantener el número de subprocesos de trabajo igual al número de procesadores lógicos de plataforma disponibles. Trate de no vincular las tareas a un hilo específico. El tiempo de ejecución de tareas de diferentes sistemas no siempre coincide. Esto puede conducir a una distribución desigual de la carga entre los subprocesos de trabajo y afectar la eficiencia. Para facilitar este proceso, use bibliotecas de administración de tareas como

Nuevo en el sitio

>

Más popular