Hva er arbeid å stjele?

Moderne datamaskiner har flere prosesseringskjerner. Forutsatt at det er nok behandling slik at hver kjerne kan forbli kontinuerlig opptatt. de vil bli tildelt en kø med beregningsarbeidselementer. Eller tråder å fullføre av planleggeren.

Når du kjører disse trådene, er det mulig å skape nye tråder eller arbeidselementer. Dette er separate tråder som kan behandles samtidig. De kan trenge å mate resultatene tilbake til gyteprogrammene eller forbli helt adskilt på ubestemt tid. Vanligvis er disse underordnede trådene tilordnet den samme behandlingskjernen som den overordnede.

Alt dette forutsetter at alle kjernene holdes opptatt. Dette vil skje hvis ingen trådslutt eller nye tråder blir skapt med samme hastighet eller raskere enn eksisterende trådslutt. I den virkelige verden er imidlertid den langsiktige arbeidsbelastningen sjelden så enkel, spesielt i sluttbrukerdatamaskiner. Til slutt vil en prosesseringskjerne sannsynligvis fullføre alle de tildelte oppgavene. Når dette skjer, i stedet for å sitte stille og kaste bort potensiell ytelse, sjekker den i stedet arbeidskøene til de andre behandlingskjernene og stjeler et arbeidselement fra dem.

Fordeler og ulemper

Arbeidsstjeling betyr at en inaktiv prosesseringskjerne aktivt søker etter arbeid for å fullføre den. Dette forhindrer at en potensielt stor brøkdel av den totale prosessoren blir inaktiv, noe som er nyttig. Arbeidsstjeling kan imidlertid medføre noen kostnader. For eksempel vil den nye behandlingskjernen sannsynligvis måtte laste alle relevante data inn i bufferminnet.

Dette kan ta tid, spesielt hvis det må forespørs fra system-RAM i stedet for å betjenes av et delt hurtigbufferlag. Det er mulig at den opprinnelige prosessoren ville ha vært i stand til å gjenoppta det arbeidselementet i den tidsrammen, noe som førte til raskere total utførelse. Dette kan til og med være tilfelle hvis behandlingskjernen som arbeidsgjenstanden ble stjålet fra aldri hadde begynt å behandle den. Noen bufrede verdier kan være identiske mellom overordnede og underordnede tråder.

Implementeringer

Flere programmeringsspråk har kjøretider som kan planlegge arbeid direkte på dedikerte prosessorer. For eksempel kan programmeringsspråket Cilk, Rust Tokio runtime og .Net Task Parallel Library gjøre dette. Alternativt kan operativsystemet være ansvarlig for å planlegge faktisk prosessortid. Med programmet legger du ganske enkelt oppgaver til en pool av "arbeidertråder", som i seg selv er planlagt av operativsystemet.

Dette skjer i systemer der programmet ikke har dedikert direkte tilgang til prosesseringskjerner, men må dele tilgang med andre prosesser. Det må utvises ekstra forsiktighet i dette scenariet for å sikre at en tråd ikke blir stjålet gjentatte ganger når den er inaktiv.

Det finnes ulike tilnærminger til hvordan arbeidsgjenstander velges ut for å bli stjålet. I det opprinnelige konseptet var tilnærmingen å velge en annen tilfeldig kjerne. Hvis den hadde ett eller flere arbeidselementer i køen, ta den siste. Avhengig av preferansen for om en underordnet prosess utføres umiddelbart av den opprinnelige prosessoren. Eller, hvis den blir skjøvet til prosessorens kø og den overordnede prosessen fortsetter å bli utført, vil den overordnede eller underordnede tråden bli stjålet.

Det hele kan oppsummeres som Work Stealing, en lastbalanseringsteknikk som sikrer at ordbelastningen fordeles jevnt mellom tilgjengelige prosessorer. På den måten gjør alle prosessorer noe for å hjelpe.

Konklusjon

Arbeidsstjeling er en prosess som skjer automatisk i flerkjerne-CPUer. Hver kjerne har en kø med oppgaver som skal utføres. Når en prosessor fullfører oppgavene sine, stjeler den en annen oppgave fra køen til en annen prosesseringskjerne. Dette bidrar til å forhindre at prosessoren har noen kjerner uvirksomme mens andre fortsatt har en kø med oppgaver å utføre.