Hvad er arbejdstyveri?

click fraud protection

Moderne computere har flere processorkerner. Forudsat at der er nok behandling, så hver kerne kan forblive konstant optaget. de vil blive tildelt en kø af beregningsmæssige arbejdsemner. Eller tråde, der skal færdiggøres af skemalæggeren.

Under udførelse af disse tråde er det muligt at skabe nye tråde eller arbejdsemner. Disse er separate tråde, der kan behandles samtidigt. De kan være nødt til at sende resultater tilbage til gydeprogrammerne eller forblive fuldstændig adskilt på ubestemt tid. Disse underordnede tråde er typisk tildelt den samme behandlingskerne som den overordnede.

Alt dette forudsætter, at alle kerner holdes beskæftiget. Dette vil ske, hvis ingen trådender eller nye tråde dannes med samme hastighed eller hurtigere end eksisterende tråde. I den virkelige verden er den langsigtede arbejdsbyrde dog sjældent så enkel, især i slutbrugerenheder. Til sidst vil en behandlingskerne sandsynligvis fuldføre alle de tildelte opgaver. Når dette sker, i stedet for at sidde inaktiv og spilde potentiel ydeevne, tjekker den i stedet arbejdskøerne for de andre behandlingskerner og stjæler et arbejdsemne fra dem.

Fordele og ulemper

Arbejdetstyveri betyder, at en inaktiv behandlingskerne aktivt vil søge efter arbejde, som den kan fuldføre. Dette forhindrer en potentielt stor del af den samlede processor i at sidde inaktiv, hvilket er nyttigt. Arbejdet stjæler kan dog medføre nogle omkostninger. For eksempel vil den nye behandlingskerne sandsynligvis skulle indlæse alle relevante data i sin cachehukommelse.

Dette kan tage tid, især hvis det skal anmodes om fra system-RAM i stedet for at blive serveret af et delt cache-lag. Det er muligt, at den oprindelige processor ville have været i stand til at genoptage det pågældende arbejdsemne inden for den tidsramme, hvilket førte til hurtigere overordnet udførelse. Dette kan endda være tilfældet, hvis forarbejdningskernen, hvorfra arbejdsemnet blev stjålet, aldrig var begyndt at behandle det. Nogle cachelagrede værdier kan være identiske mellem overordnede og underordnede tråde.

Implementeringer

Flere programmeringssprog har køretider, der kan planlægge arbejde direkte på dedikerede processorer. For eksempel kan programmeringssproget Cilk, Rust Tokio runtime og .Net Task Parallel Library gøre dette. Alternativt kan operativsystemet være ansvarlig for at planlægge den faktiske processortid. Med programmet tilføjer du simpelthen opgaver til en pulje af "arbejdertråde", som selv er planlagt af operativsystemet.

Dette sker i systemer, hvor programmet ikke har dedikeret direkte adgang til behandlingskerner, men skal dele adgang med andre processer. Der skal udvises ekstra forsigtighed i dette scenarie for at sikre, at en tråd ikke bliver stjålet gentagne gange, da den er inaktiv.

Der er forskellige tilgange til, hvordan arbejdsgenstande udvælges til at blive stjålet. I det oprindelige koncept var tilgangen at vælge en anden tilfældig kerne. Hvis den havde et eller flere arbejdsemner i sin kø, så tag det sidste. Afhængigt af præferencen for, om en underordnet proces straks udføres af den oprindelige processor. Eller hvis den skubbes til processorens kø, og den overordnede proces fortsætter med at blive udført, vil den overordnede eller underordnede tråd blive stjålet.

Det hele kan opsummeres som Work Stealing, en belastningsbalanceringsteknik, der sikrer, at ordbelastningen fordeles jævnt mellem tilgængelige processorer. På den måde gør alle processorer noget for at hjælpe.

Konklusion

Arbejdstyveri er en proces, der sker automatisk i multicore CPU'er. Hver kerne har en kø af opgaver, der skal udføres. Når en processor fuldfører sine opgaver, stjæler den derefter en anden opgave fra køen af ​​en anden behandlingskerne. Dette er med til at forhindre, at processoren har nogle kerner i tomgang, mens andre stadig har en kø af opgaver, der skal udføres.