Čo je kradnutie práce?

click fraud protection

Moderné počítače majú viacero výpočtových jadier. Za predpokladu, že je dostatok spracovania, takže každé jadro môže zostať nepretržite zaneprázdnené. bude im pridelený rad výpočtových pracovných položiek. Alebo vlákna, ktoré má dokončiť plánovač.

Počas vykonávania týchto vlákien je možné vytvárať nové vlákna alebo pracovné položky. Ide o samostatné vlákna, ktoré možno spracovávať súčasne. Možno budú musieť odovzdať výsledky späť do programov plodenia alebo zostať úplne oddelené na neurčito. Tieto podradené vlákna sú zvyčajne priradené k rovnakému jadru spracovania ako rodičovské.

To všetko predpokladá, že všetky jadrá sú zaneprázdnené. Stane sa to vtedy, ak sa žiadne vlákno nekončí alebo sa nové vlákna nevytvárajú rovnakou rýchlosťou alebo rýchlejšie ako sa skončia existujúce vlákna. V skutočnom svete je však dlhodobá pracovná záťaž zriedkakedy taká jednoduchá, najmä pri výpočtových zariadeniach koncových používateľov. Nakoniec procesorové jadro pravdepodobne dokončí všetky pridelené úlohy. Keď sa to stane, namiesto nečinnosti a plytvania potenciálnym výkonom skontroluje pracovné fronty ostatných jadier spracovania a ukradne z nich pracovnú položku.

Výhody a nevýhody

Krádež práce znamená, že nečinné jadro spracovania bude aktívne vyhľadávať prácu, aby ju dokončil. To bráni potenciálne veľkej časti celého procesora nečinnosti, čo je užitočné. Krádež práce však môže priniesť určité náklady. Napríklad nové jadro spracovania bude pravdepodobne musieť načítať všetky relevantné údaje do svojej vyrovnávacej pamäte.

Môže to chvíľu trvať, najmä ak to musí byť vyžiadané zo systémovej pamäte RAM a nie je obsluhované vrstvou zdieľanej vyrovnávacej pamäte. Je možné, že pôvodný procesor by bol schopný obnoviť túto pracovnú položku v tomto časovom rámci, čo by viedlo k rýchlejšiemu celkovému vykonávaniu. To môže nastať aj v prípade, ak spracovateľské jadro, z ktorého bol pracovný predmet odcudzený, ho nikdy nezačalo spracovávať. Niektoré hodnoty uložené vo vyrovnávacej pamäti môžu byť identické medzi nadradenými a podriadenými vláknami.

Implementácie

Niekoľko programovacích jazykov má runtime, ktoré dokáže naplánovať prácu priamo na dedikovaných procesoroch. Dokáže to napríklad programovací jazyk Cilk, runtime Rust Tokio a .Net Task Parallel Library. Alternatívne môže byť operačný systém zodpovedný za plánovanie skutočného času procesora. Pomocou programu jednoducho pridáte úlohy do skupiny „pracovných vlákien“, ktoré sú samotné naplánované operačným systémom.

Stáva sa to v systémoch, kde program nemá vyhradený priamy prístup k jadrám spracovania, ale musí zdieľať prístup s inými procesmi. V tomto scenári je potrebné venovať zvýšenú pozornosť, aby sa zabezpečilo, že vlákno nebude opakovane odcudzené, keď je nečinné.

Existujú rôzne prístupy k tomu, ako sa vyberajú pracovné predmety na odcudzenie. V pôvodnom koncepte sa vychádzalo z výberu iného náhodného jadra. Ak má vo fronte jednu alebo viac pracovných položiek, zoberte poslednú. V závislosti od preferencie, či pôvodný procesor okamžite vykoná podriadený proces. Alebo ak sa presunie do frontu procesora a nadradený proces sa naďalej vykonáva, nadradené alebo podriadené vlákno bude odcudzené.

Všetko sa to dá zhrnúť ako Work Stealing, technika vyvažovania záťaže, ktorá zaisťuje rovnomerné rozloženie slovnej záťaže medzi dostupné procesory. Týmto spôsobom všetky procesory robia niečo, aby pomohli.

Záver

Krádež práce je proces, ktorý sa vo viacjadrových procesoroch deje automaticky. Každé jadro má rad úloh, ktoré treba vykonať. Keď procesor dokončí svoje úlohy, ukradne ďalšiu úlohu z frontu iného jadra spracovania. To pomáha zabrániť tomu, aby niektoré jadrá boli nečinné, zatiaľ čo iné majú stále rad úloh, ktoré treba vykonať.