Unity prepara un nuevo compilador en C# llamado Burst

Unity Logo

Unity es un motor de juego extremadamente popular, especialmente por sus herramientas de edición completas y fáciles de usar.

Sin embargo, el motor debe seguir la evolución de las máquinas: durante diez años, los procesadores no aumentan en frecuencia, sino en número de núcleos. En otras palabras, para explotar el nuevo rendimiento disponible, los juegos deben ejecutar su código en diferentes núcleos, a través de diferentes hilos.

Sin embargo, desde el momento en que la tecnología está disponible, pocos juegos realmente tienen éxito. De hecho, los problemas para escribir dicho código son numerosos.

Para evitar estas desventajas, es posible seguir algunos conjuntos de reglas. Esta es una de las razones por las que Unity está trabajando en un nuevo compilador en C #, llamado Burst con el cual, si no se siguen estas reglas, se producirá un error de compilación.

Para lograr esto, el código debe escribirse como una colección de tareas a realizar. Cada una de estas tareas realiza algunas transformaciones en los datos.

El programador debe especificar las áreas de memoria a las que puede acceder de solo lectura y aquellas en las que desea leer y escribir datos: el compilador se asegurará de que no use nada fuera de estas declaraciones.

Luego, un programador determina la mejor manera de realizar estas tareas, en tiempo real, con esta información adicional: puede asegurarse de que ninguna tarea escribirá datos donde otra persona intente leer o escribir, por ejemplo.

Burst no solo tiene el objetivo de facilitar la programación paralela: también se utiliza en las partes más críticas (desde el punto de vista del rendimiento) del código de Unity.

Hasta ahora, estos estaban escritos en C ++, pero los compiladores actuales no son del todo satisfactorios.

De hecho, si un desarrollador desea que un bucle se vectorice, no tiene garantía de que el compilador lo hará, debido una adición entre dos vectores, por ejemplo, el compilador debe probar formalmente que, en todos los casos posibles e imaginables, los dos vectores no corresponden a las mismas direcciones en la memoria).

burst-inspector

¿Por qué Burst y no un compilador existente?

El rendimiento es un punto crítico si un bucle no es vectorizado es un problema real que debe solucionarse rápidamente.

Además, el binario generado debe ser seguro dado que los errores de desbordamiento de búfer y las referencias peligrosas se deben descubrir lo antes posible, con mensajes de error reales en lugar de comportamientos indefinidos (que causan muchos problemas de seguridad).

Ante estas necesidades planteadas, aún es necesario elegir el idioma de entrada de este compilador: ¿una variante o un subconjunto de C, C ++, C # o un nuevo idioma?

Un nuevo lenguaje no es una buena opción ya que en un principio evitas tener que entrenar a las personas con esta nueva herramienta.

C # tiene la preferencia desde el punto de vista de los usuarios, ya que ya lo utilizan el motor del juego se codificará en el mismo idioma que los juegos.

Además, C # ya tiene un ecosistema muy grande, por el contrario, C ++ todavía sufre de su herencia de C, con no siempre obvias inclusiones por determinar y enormes tiempos de compilación, defectos que C ++ 20 corrige parcialmente, a pesar de su obsesión con el rendimiento.

Se tomó la decisión de continuar con C #, pero al eliminar una serie de elementos que dificultan el rendimiento, tales como la biblioteca estándar, en su mayor parte, la recolección de basura y los permisos.

Burst realmente no funciona como un compilador completo puesto que no toma como entrada una gran cantidad de código, sino solo el punto de entrada a un bucle crucial.

Se limita a compilarlo como una función, así como a todo lo que llama. El nivel de optimización es extremadamente alto: dado que Burst se enfoca en ciertas partes del código, puede pasar tiempo.

La primera iteración de Burst, con HPC # y el sistema de tareas vino con Unity 2018.1.

El código generado es a veces más rápido que la versión anterior en C ++, a veces más lento, pero los desarrolladores confían en que siempre lograrán al menos el mismo nivel de rendimiento que C ++.

Fuente:  blogs.unity3d.com

Sé el primero en comentar

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.