NVIDIA Green Contexts: Eksplicitna podjela GPU resursa za konkurentne zadatke

  • PublicPublic
  • 07 Oct, 2026
NVIDIA Green Contexts: Eksplicitna podjela GPU resursa za konkurentne zadatke

Suvremene GPU aplikacije često pokreću više neovisnih komponenti unutar jednog procesa. Na primjer, operateri osjetljivi na latenciju rade uz pozadinska jezgre usmjerena na propusnost. Ove komponente često dijele jedan GPU, što dovodi do nepredvidivog međusobnog utjecaja i natjecanja za resurse. Tradicionalni CUDA konteksti dizajnirani su za eru kada su GPU-ovi obrađivali jedan dominantan tip opterećenja. Zbog toga su postali teški i loše prikladni za fino zrnatu podjelu resursa. Uzrokuju značajno opterećenje hardvera pri prebacivanju konteksta i ne posjeduju mehanizme za eksplicitno definiranje načina na koji se izvedbeni resursi dijele među konkurentnim zadacima.

Green contexts rješavaju ovaj problem omogućujući aplikacijama da eksplicitno odaberu podskup GPU izvedbenih resursa i usmijere rad izravno na te resurse. Dostupni u Driver API-ju od CUDA 12.4, sada su dostupni putem Runtime API-ja počevši od CUDA 13.1. Ova funkcija omogućuje razvojnicima da definiraju gdje se rad izvršava i kako se resursi dijele unutar procesa. Primarni slučaj upotrebe je podjela SM-ova, pri čemu se određeni Streaming Multiprocessori dodjeljuju green contextu. To omogućuje više opterećenja da rade istovremeno bez natjecanja za iste izračunske jedinice.

Osimko dodjele SM, green contexts mogu rezervirati resurse redova poslova. U tradicionalnom modelu, neovisni radni tokovi s uređenim radom mogli bi se preslikati na iste osnovne redove poslova, uzrokujući neželjenu serializaciju, čak i kada je bilo dovoljno resursa za izvršavanje. Izričito rezervirajući redove poslova, green contexts omogućuju aplikacijama da izraze očekivani stupanj paralelizma i uklone lažne ovisnosti. Ovi konteksti su lagani za stvaranje i uništavanje, a njihov životni ciklus ne implicira sinkronizaciju neovisnog GPU rada, pružajući izričitiji model programiranja nego oslanjanje na implicitno stanje uređaja.

Model programiranja pomaknut je s implicitnog na izričito ciljanje. Povijesno, aplikacije su koristile cudaSetDevice i stvarale radne tokove čiji se cilj izvršavanja zaključivao iz trenutnog stanja uređaja vezanog na nit. S green contexts, predstavljenima tipom cudaExecutionContext_t, razvojni inženjeri stvaraju kontekst za odabrani skup resursa, a zatim iz njega stvaraju radne tokove pomoću cudaExecutionCtxStreamCreate. To osigurava da je rad predan u te radne tokove strogo povezan s resursima green contexta. Za aplikacije koje ciljaju cijeli uređaj, tradicionalni model ostaje dostupan putem cudaDeviceGetExecutionCtx, što osigurava natrag kompatibilnost i postepeno usvajanje.

Klasičan primjer upotrebe je preklapanje komunikacije s GEMM jezgrama u distribuiranom učenju ili obrada operatora osjetljivih na latenciju na AI senzorskim platformama. Sam prioritet radnog toka nije dovoljan kada masovne jezgre zauzimaju sve SM, jer raspoređivač ne može prekinuti izvršene blokove. Green contexts dodjeljuju određene SM za kritičan rad, zaobilazeći čekanje ispražnjenja masovnih blokova. Testiranje na GPU NVIDIA Blackwell s 148 SM pokazalo je da, dok prioritet radnog toka nudi poboljšanje od 27 puta u usporedbi s radnim tokovima jednakog prioriteta, green contexts pružaju dodatno smanjenje latencije od 20 puta, osiguravajući posvećene resurse za kritičnu jezgru.

Implementacija uključuje upit resursa uređaja, podjelu SM u kritične i preostale grupe te pakiranje svake s određenim konfiguracijama redova poslova. Razvojni inženjeri koriste cudaDevSmResourceSplit za izdvajanje resursa i cudaDevResourceGenerateDesc za stvaranje deskriptora. Green contexts su opcionalni i aditivni, omogućujući postojećim aplikacijama da nastavljaju koristiti cijeli uređaj dok uvođenje finije kontrole tamo gdje je potrebno. Ovaj pristup je posebno koristan za postizanje željenih ciljeva paralelizma ili latencije u složenim radnim tokovima, nudeći robustan mehanizam za upravljanje dijeljenjem GPU resursa u modernim aplikacijama s više komponenti.