Kaj je krajo dela?

Sodobni računalniki imajo več procesorskih jeder. Ob predpostavki, da je obdelave dovolj, da lahko vsako jedro ostane nenehno zasedeno. dodeljena jim bo čakalna vrsta računalniških delovnih elementov. Ali niti, ki jih dokonča razporejevalnik.

Med izvajanjem teh niti je mogoče ustvariti nove niti ali delovne elemente. To so ločene niti, ki jih je mogoče obdelovati hkrati. Morda bodo morali rezultate vrniti programom za drstenje ali pa ostati popolnoma ločeni za nedoločen čas. Običajno so te podrejene niti dodeljene istemu procesorskemu jedru kot nadrejeni.

Vse to predvideva, da so vsa jedra zasedena. To se bo zgodilo, če se nobena nit ne konča ali se nove niti ustvarijo z enako hitrostjo ali hitreje, kot se končajo obstoječe niti. V resničnem svetu pa je dolgoročna delovna obremenitev redko tako preprosta, zlasti v računalniških napravah za končne uporabnike. Sčasoma bo procesorsko jedro verjetno opravilo vse dodeljene naloge. Ko se to zgodi, namesto da miruje in zapravlja potencialno zmogljivost, namesto tega preveri čakalne vrste dela drugih procesorskih jeder in jim ukrade delovni element.

Prednosti in slabosti

Kraja dela pomeni, da nedejavno procesorsko jedro aktivno išče delo, ki ga mora dokončati. To prepreči, da bi potencialno velik del celotnega procesorja miroval, kar je koristno. Kraja dela pa lahko prinese nekaj stroškov. Na primer, novo procesorsko jedro bo moralo verjetno naložiti vse pomembne podatke v svoj predpomnilnik.

To lahko traja nekaj časa, zlasti če ga je treba zahtevati iz sistemskega RAM-a, namesto da bi ga stregla raven predpomnilnika v skupni rabi. Možno je, da bi prvotni procesor lahko nadaljeval ta delovni element v tem časovnem okviru, kar bi vodilo k hitrejši splošni izvedbi. To se lahko zgodi celo, če procesorsko jedro, iz katerega je bil delovni element ukraden, še nikoli ni začelo z obdelavo. Nekatere predpomnjene vrednosti so lahko enake med nadrejenimi in podrejenimi nitmi.

Izvedbe

Več programskih jezikov ima izvajalne čase, ki lahko načrtujejo delo neposredno na namenskih procesorjih. To zmorejo na primer programski jezik Cilk, izvajalno okolje Rust Tokio in vzporedna knjižnica nalog .Net. Druga možnost je, da je operacijski sistem zadolžen za načrtovanje dejanskega procesorskega časa. S programom preprosto dodaja naloge v skupino »delovnih niti«, ki jih sam načrtuje operacijski sistem.

To se zgodi v sistemih, kjer program nima namenskega neposrednega dostopa do procesorskih jeder, ampak mora deliti dostop z drugimi procesi. V tem scenariju je treba biti še posebej previden, da zagotovite, da nit ni večkrat ukradena, ko miruje.

Obstajajo različni pristopi k izbiri delovnih predmetov za krajo. V prvotnem konceptu je bil pristop izbira drugega naključnega jedra. Če je imel v čakalni vrsti enega ali več delovnih elementov, vzemite zadnjega. Odvisno od preference, ali izvorni procesor takoj izvede podrejeni proces. Ali pa, če je potisnjen v čakalno vrsto procesorja in se nadrejeni proces še naprej izvaja, bo nadrejena ali podrejena nit ukradena.

Vse to lahko povzamemo kot Work Stealing, tehniko uravnoteženja obremenitve, ki zagotavlja, da se besedna obremenitev enakomerno porazdeli med razpoložljive procesorje. Na ta način si vsi procesorji nekaj pomagajo.

Zaključek

Kraja dela je proces, ki se zgodi samodejno v večjedrnih procesorjih. Vsako jedro ima čakalno vrsto nalog za izvedbo. Ko procesor dokonča svoje naloge, nato ukrade drugo nalogo iz čakalne vrste drugega procesorskega jedra. To pomaga preprečiti, da bi nekatera jedra procesorja mirovala, medtem ko imajo druga še vedno čakalno vrsto nalog, ki jih morajo opraviti.