Unity priprema novi kompajler u C # koji se zove Burst

Logotip Unity

Unity je izuzetno popularan pokretač igreposebno zbog svojih sveobuhvatnih i jednostavnih alata za uređivanje.

Međutim, motor mora pratiti evoluciju mašina: deset godina procesori se ne povećavaju u frekvenciji, već u broju jezgara. Drugim riječima, Da bi iskoristile nove dostupne performanse, igre moraju pokretati svoj kod na različitim jezgrama, kroz različite niti.

Međutim, od trenutka kada je tehnologija dostupna, malo je igara zaista uspješno. U stvari, problema s pisanjem takvog koda je mnogo.

Da biste izbjegli ove nedostatke, moguće je slijediti neke skupove pravila. To je jedan od razloga što Unity radi na novom kompajleru u C #, zvanom Burst s kojim će se, ako se ova pravila ne poštuju, pojaviti greška u kompilaciji.

Da biste to postigli, kôd treba napisati kao zbirku zadataka koje treba izvršiti. Svaki od ovih zadataka vrši neke transformacije podataka.

Programer mora navesti područja memorije kojima može pristupiti samo za čitanje i ona kojima želi čitati i pisati podatke- Kompajler će se pobrinuti da ne koristite ništa izvan ovih deklaracija.

Planer tada određuje najbolji način za izvršavanje ovih zadataka, u stvarnom vremenu, s ovim dodatnim informacijama: možete osigurati da niti jedan zadatak neće zapisati podatke tamo gdje netko drugi pokušava, na primjer, čitati ili pisati.

Burst nije samo namijenjen olakšavanju paralelnog programiranja: on se koristi i u najkritičnijim dijelovima (sa stanovišta performansi) Unity koda.

Do sada su bili napisani na jeziku C ++, ali trenutni kompajleri nisu u potpunosti zadovoljavajući.

U stvari, ako programer želi da se petlja vektorizira, oni nemaju garanciju da će prevoditelj to učiniti, zbog dodavanja između dva vektora, na primjer, kompajler mora formalno dokazati da, u svim mogućim i zamislivim slučajevima, dva vektora ne odgovaraju istim adresama u memoriji.

inspektor rafala

Zašto Burst, a ne postojeći kompajler?

Izvedba je kritična točka ako petlja nije vektorizirana, to je stvaran problem koji treba brzo riješiti.

Takođe, generirana binarna datoteka trebala bi biti sigurna s obzirom na pogreške prelijevanja međuspremnika i opasne reference treba otkriti što je prije moguće, sa stvarnim porukama grešaka, a ne sa nedefiniranim ponašanjem (koje uzrokuje mnoge sigurnosne probleme).

Suočeni sa ovim podignutim potrebama, još uvijek morate odabrati jezik unosa ovog kompajlera- Varijanta ili podskup C, C ++, C # ili novi jezik?

Novi jezik nije dobra opcija jer u početku izbjegavate potrebu za obukom ljudi s ovim novim alatom.

C # ima prednost sa stanovišta korisnika, Budući da ga motor za igre već koristi, bit će kodiran na istom jeziku kao i igre.

Takođe, C # već ima vrlo velik ekosustav, naprotiv, C ++ i dalje pati od svog C nasljeđa, s ne uvijek očiglednim uključivanjima koja treba utvrditi i ogromnim vremenima kompajliranja, nedostacima koje C ++ 20 djelomično popravlja, uprkos opsesiji performansama.

Donesena je odluka da se nastavi sa C #, ali uklanjanjem niza predmeta koji ometaju performanse, poput standardne biblioteke, uglavnom odvoza smeća i dozvola.

Burst zapravo ne radi kao cjeloviti kompajler jer ne uzima veliku količinu koda kao ulaz, već samo ulaznu točku u ključnu petlju.

Samo ga kompajlira kao funkciju, kao i sve što pozove. Razina optimizacije je izuzetno visoka: budući da se Burst fokusira na određene dijelove koda, može potrajati.

Prva iteracija Burst-a s HPC-om # i sistemom zadataka došla je s Unity 2018.1.

Generirani kôd je ponekad brži od prethodne verzije na C ++-u, ponekad sporiji, ali programeri vjeruju da će uvijek postići barem isti nivo performansi kao C ++.

Izvor:  blogs.unity3d.com


Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  1. Odgovoran za podatke: AB Internet Networks 2008 SL
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.