Unity prepara un nou compilador en C # anomenat Burst

unity Logo

Unity és un motor de joc extremadament popular, Especialment per les seves eines d'edició completes i fàcils d'utilitzar.

No obstant això, el motor ha de seguir l'evolució de les màquines: Durant deu anys, els processadors no augmenten en freqüència, sinó en nombre de nuclis. En altres paraules, per explotar el nou rendiment disponible, els jocs han de executar el seu codi en diferents nuclis, a través de diferents fils.

No obstant això, des del moment en què la tecnologia està disponible, pocs jocs realment tenen èxit. De fet, els problemes per escriure aquest codi són nombrosos.

Per evitar aquests desavantatges, és possible seguir alguns conjunts de regles. Aquesta és una de les raons per les quals Unity està treballant en un nou compilador en C #, anomenat Burst amb el qual, si no se segueixen aquestes regles, es produirà un error de compilació.

Per aconseguir això, el codi s'ha d'escriure com una col·lecció de tasques a realitzar. Cadascuna d'aquestes tasques realitza algunes transformacions en les dades.

El programador ha d'especificar les àrees de memòria a les que pot accedir només de lectura i aquelles en què voleu llegir i escriure dades: El compilador s'ha d'assegurar que no faci servir res fora d'aquestes declaracions.

Després, un programador determina la millor manera de realitzar aquestes tasques, en temps real, amb aquesta informació addicional: assegurar-vos que cap tasca escriurà dades on una altra persona intenti llegir o escriure, per exemple.

Burst no només té l'objectiu de facilitar la programació paral·lela: també s'utilitza en les parts més crítiques (Des del punt de vista de l'rendiment) d'el codi d'Unity.

Fins ara, aquests estaven escrits en C ++, però els compiladors actuals no són de el tot satisfactoris.

De fet, si un desenvolupador desitja que un bucle es vectorice, no té garantia de que el compilador ho farà, degut una addició entre dos vectors, per exemple, el compilador ha de provar formalment que, en tots els casos possibles i imaginables, els dos vectors no corresponen a les mateixes adreces a la memòria).

burst-inspector

Per què Burst i no un compilador existent?

El rendiment és un punt crític si un bucle no és vectoritzat és un problema real que s'ha de solucionar ràpidament.

A més, el binari generat ha de ser segur atès que els errors de desbordament de memòria intermèdia i les referències perilloses s'han de descobrir el més aviat possible, amb missatges d'error reals en lloc de comportaments indefinits (que causen molts problemes de seguretat).

Davant aquestes necessitats plantejades, encara cal triar l'idioma d'entrada d'aquest compilador: Una variant o un subconjunt de C, C ++, C # o un nou idioma?

Un nou llenguatge no és una bona opció ja que al principi evites haver de entrenar a les persones amb aquesta nova eina.

C # té la preferència des del punt de vista dels usuaris, ja que ja l'utilitzen el motor de el joc es codificarà en el mateix idioma que els jocs.

A més, C # ja té un ecosistema molt gran, per contra, C ++ encara pateix de la seva herència de C, Amb no sempre òbvies inclusions per determinar i enormes temps de compilació, defectes que C ++ 20 corregeix parcialment, malgrat la seva obsessió amb el rendiment.

Es va prendre la decisió de continuar amb C #, però a l'eliminar una sèrie d'elements que dificulten el rendiment, com ara la biblioteca estàndard, en la seva major part, la recollida d'escombraries i els permisos.

Burst realment no funciona com un compilador complet ja que no pren com a entrada una gran quantitat de codi, sinó només el punt d'entrada a un bucle crucial.

Es limita a compilar com una funció, així com a tot el que diu. El nivell d'optimització és extremadament alt: com que Burst s'enfoca en certes parts de el codi, pot passar temps.

La primera iteració de Burst, amb HPC # i el sistema de tasques vi amb Unity 2018.1.

El codi generat és de vegades més ràpid que la versió anterior en C ++, de vegades més lent, però els desenvolupadors confien que sempre aconseguiran a l'almenys el mateix nivell de rendiment que C ++.

font:  blocs.unity3d.com


Sigues el primer a comentar

Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: AB Internet Networks 2008 SL
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.