Mūsdienu datoriem ir vairāki apstrādes kodoli. Pieņemot, ka ir pietiekami daudz apstrādes, lai katrs kodols varētu būt nepārtraukti aizņemts. viņiem tiks piešķirta skaitļošanas darba vienumu rinda. Vai pavedieni, kas jāpabeidz plānotājam.
Šo pavedienu izpildes laikā ir iespējams izveidot jaunus pavedienus vai darba vienumus. Tie ir atsevišķi pavedieni, kurus var apstrādāt vienlaicīgi. Viņiem var būt nepieciešams atgriezt rezultātus nārsta programmās vai arī palikt pilnīgi atsevišķiem uz nenoteiktu laiku. Parasti šie pakārtotie pavedieni tiek piešķirti tam pašam apstrādes kodolam kā vecākajam.
Tas viss paredz, ka visi kodoli ir aizņemti. Tas notiks, ja pavedieni nebeidzas vai jauni pavedieni tiks izveidoti tādā pašā ātrumā vai ātrāk, nekā beidzas esošie pavedieni. Tomēr reālajā pasaulē ilgtermiņa darba slodze reti ir tik vienkārša, it īpaši galalietotāju skaitļošanas ierīcēs. Galu galā apstrādes kodols, visticamāk, pabeigs visus piešķirtos uzdevumus. Kad tas notiek, tā vietā, lai sēdētu dīkstāvē un izšķērdētu potenciālo veiktspēju, tā pārbauda citu apstrādes kodolu darba rindas un nozog no tiem darba vienumu.
Ieguvumi un mīnusi
Darba zagšana nozīmē, ka dīkstāves apstrādes kodols aktīvi meklēs darbu, lai to pabeigtu. Tas neļauj potenciāli lielai daļai no kopējā procesora palikt dīkstāvē, kas ir noderīgi. Tomēr darba zādzība var radīt zināmas izmaksas. Piemēram, jaunajam apstrādes kodolam, visticamāk, savā kešatmiņā būs jāielādē visi attiecīgie dati.
Tas var aizņemt laiku, it īpaši, ja tas ir jāpieprasa no sistēmas RAM, nevis tiek apkalpots ar koplietojamo kešatmiņas līmeni. Iespējams, ka sākotnējais procesors būtu spējis atsākt šo darba vienumu šajā laika posmā, tādējādi nodrošinot ātrāku kopējo izpildi. Tas var būt pat gadījumā, ja apstrādes kodols, no kura tika nozagts darba vienums, nekad nav sācis to apstrādāt. Dažas kešatmiņā saglabātās vērtības var būt identiskas vecāku un pakārtotajos pavedienos.
Īstenojumi
Vairākām programmēšanas valodām ir izpildlaiki, kas var ieplānot darbu tieši specializētajos procesoros. Piemēram, Cilk programmēšanas valoda, Rust Tokio izpildlaiks un .Net Task Parallel Library to var izdarīt. Alternatīvi, operētājsistēma var būt atbildīga par faktiskā procesora laika plānošanu. Programmai vienkārši pievienojot uzdevumus “darba pavedienu” pūlam, kurus pati ieplāno operētājsistēma.
Tas notiek sistēmās, kurās programmai nav īpašas tiešas piekļuves apstrādes kodoliem, bet tai ir jādala piekļuve ar citiem procesiem. Šajā scenārijā ir jāievēro īpaša piesardzība, lai nodrošinātu, ka pavediens netiek atkārtoti nozagts, kad tas atrodas dīkstāvē.
Ir dažādas pieejas, kā tiek atlasītas darba lietas zagšanai. Sākotnējā koncepcijā pieeja bija izvēlēties citu nejaušu kodolu. Ja tā rindā bija viens vai vairāki darba vienumi, izmantojiet pēdējo. Atkarībā no izvēles, vai sākotnējais procesors nekavējoties izpilda atvasināto procesu. Vai arī, ja tas tiek nosūtīts uz procesora rindu un vecākprocess tiek turpināts, vecākpavediens vai pakārtotais pavediens tiks nozagts.
To visu var apkopot kā Work Stealing — slodzes līdzsvarošanas paņēmienu, kas nodrošina vienmērīgu vārdu slodzes sadalījumu starp pieejamajiem procesoriem. Tādā veidā visi procesori kaut ko dara, lai palīdzētu.
Secinājums
Darba zagšana ir process, kas notiek automātiski daudzkodolu procesoros. Katram kodolam ir veicamo uzdevumu rinda. Kad procesors pabeidz savus uzdevumus, tas nozog citu uzdevumu no cita apstrādes kodola rindas. Tas palīdz novērst to, ka procesoram daži kodoli paliek dīkstāvē, kamēr citiem joprojām ir veicamo uzdevumu rinda.