Unity bereidt een nieuwe compiler voor in C # genaamd Burst

Unity-logo

Unity is een extreem populaire game-enginevooral vanwege de uitgebreide en gebruiksvriendelijke bewerkingstools.

De motor moet echter de evolutie van de machines volgen: gedurende tien jaar nemen processoren niet toe in frequentie, maar in aantal kernen. Met andere woorden, Om de nieuwe beschikbare prestaties te benutten, moeten games hun code op verschillende kernen draaien, door verschillende draden.

Vanaf het moment dat de technologie beschikbaar is, zijn er echter maar weinig games echt succesvol. In feite zijn de problemen bij het schrijven van dergelijke code talrijk.

Om deze nadelen te vermijden, is het mogelijk om een ​​aantal regels te volgen. Dit is een van de redenen waarom Unity werkt aan een nieuwe compiler in C #, genaamd Burst waarmee, als deze regels niet worden gevolgd, er een compilatiefout optreedt.

Om dit te behalen, de code moet worden geschreven als een verzameling taken die moeten worden uitgevoerd​ Elk van deze taken voert enkele transformaties uit op de gegevens.

De programmeur moet de geheugengebieden specificeren waartoe hij alleen-lezen toegang heeft en die waarnaar hij gegevens wil lezen en schrijven- De compiler zorgt ervoor dat u niets buiten deze declaraties gebruikt.

Een planner bepaalt vervolgens de beste manier om deze taken in realtime uit te voeren met deze aanvullende informatie: u kunt ervoor zorgen dat geen enkele taak gegevens schrijft waar iemand anders bijvoorbeeld probeert te lezen of schrijven.

Burst is niet alleen bedoeld om parallel programmeren te vergemakkelijken: het wordt ook gebruikt in de meest kritische onderdelen (vanuit het oogpunt van prestaties) van de Unity-code.

Deze werden tot nu toe in C ++ geschreven, maar de huidige compilers voldoen niet helemaal.

In feite als een ontwikkelaar wil dat een lus wordt gevectoriseerd, hebben ze geen garantie dat de compiler dat zal doen, door een optelling tussen twee vectoren moet de compiler bijvoorbeeld formeel bewijzen dat, in alle mogelijke en denkbare gevallen, de twee vectoren niet overeenkomen met dezelfde adressen in het geheugen.

burst-inspecteur

Waarom Burst en geen bestaande compiler?

Prestaties zijn een kritiek punt. Als een lus niet is gevectoriseerd, is het een echt probleem dat snel moet worden opgelost.

Bovendien heeft gegenereerd binair bestand moet veilig zijn gezien bufferoverloopfouten en gevaarlijke verwijzingen moeten zo snel mogelijk worden ontdekt, met feitelijke foutmeldingen in plaats van ongedefinieerd gedrag (dat veel beveiligingsproblemen veroorzaakt).

Geconfronteerd met deze verhoogde behoeften, je moet nog steeds de invoertaal van deze compiler kiezen- Een variant of een subset van C, C ++, C # of een nieuwe taal?

Een nieuwe taal is geen goede optie, aangezien u in eerste instantie voorkomt dat u mensen moet opleiden met deze nieuwe tool.

C # heeft de voorkeur vanuit het oogpunt van de gebruiker, Omdat het al wordt gebruikt door de game-engine, wordt het gecodeerd in dezelfde taal als de games.

Bovendien heeft C # heeft al een heel groot ecosysteem, integendeel, C ++ lijdt nog steeds onder zijn C-erfgoed, met niet altijd voor de hand liggende insluitsels die moeten worden bepaald en enorme compilatietijden, gebreken die C ++ 20 gedeeltelijk oplost, ondanks zijn obsessie met prestaties.

De beslissing werd genomen om door te gaan met C #, maar door een aantal prestatiebelemmerende items te verwijderen, zoals de standaardbibliotheek, voornamelijk garbage collection en permissies.

Burst werkt niet echt als een volledige compiler omdat er niet een grote hoeveelheid code voor nodig is als invoer, maar alleen het toegangspunt tot een cruciale lus.

Het compileert het gewoon als een functie, evenals alles wat het aanroept. Het optimalisatieniveau is extreem hoog: aangezien Burst zich richt op bepaalde delen van de code, kan het even duren.

De eerste iteratie van Burst, met HPC # en het taaksysteem, kwam met Unity 2018.1.

De gegenereerde code is soms sneller dan de vorige versie in C ++, soms langzamer, maar ontwikkelaars vertrouwen erop dat ze altijd ten minste hetzelfde prestatieniveau zullen behalen als C ++.

bron:  blogs.unity3d.com


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: AB Internet Networks 2008 SL
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.