Wat is werkstelen?

click fraud protection

Moderne computers hebben meerdere verwerkingskernen. Ervan uitgaande dat er voldoende verwerking is, zodat elke kern continu bezig kan blijven. ze krijgen een wachtrij met computationele werkitems toegewezen. Of threads om te voltooien door de planner.

Tijdens het uitvoeren van deze threads is het mogelijk om nieuwe threads of werkitems te spawnen. Dit zijn afzonderlijke threads die tegelijkertijd kunnen worden verwerkt. Mogelijk moeten ze de resultaten terugvoeren naar de spawning-programma's of voor onbepaalde tijd volledig gescheiden blijven. Meestal worden deze onderliggende threads toegewezen aan dezelfde verwerkingskern als de bovenliggende.

Dit alles veronderstelt dat alle kernen bezig worden gehouden. Dit gebeurt als er geen thread eindigt of nieuwe threads met dezelfde snelheid of sneller worden voortgebracht dan het einde van de bestaande threads. In de echte wereld is de werklast op de lange termijn echter zelden zo eenvoudig, vooral bij computerapparatuur van eindgebruikers. Uiteindelijk zal een verwerkingskern waarschijnlijk alle toegewezen taken voltooien. Wanneer dit gebeurt, in plaats van stil te zitten en potentiële prestaties te verspillen, controleert het in plaats daarvan de werkwachtrijen van de andere verwerkingskernen en steelt een werkitem van hen.

Voordelen en nadelen

Werkstelen betekent dat een inactieve verwerkingskern actief op zoek gaat naar werk om het te voltooien. Dit voorkomt dat een potentieel groot deel van de totale processor inactief blijft, wat handig is. Het stelen van werk kan echter kosten met zich meebrengen. De nieuwe verwerkingskern zal bijvoorbeeld waarschijnlijk alle relevante gegevens in zijn cachegeheugen moeten laden.

Dit kan enige tijd duren, vooral als het moet worden aangevraagd vanuit het systeem-RAM in plaats van te worden bediend door een gedeelde cachelaag. Het is mogelijk dat de oorspronkelijke processor dat werkitem in dat tijdsbestek zou hebben kunnen hervatten, wat heeft geleid tot een snellere algehele uitvoering. Dit kan zelfs het geval zijn als de verwerkingskern waaruit het werkitem is gestolen, nooit is begonnen met de verwerking ervan. Sommige waarden in de cache kunnen identiek zijn tussen bovenliggende en onderliggende threads.

Implementaties

Verschillende programmeertalen hebben runtimes die het werk rechtstreeks op speciale processors kunnen plannen. De programmeertaal Cilk, de runtime van Rust Tokio en de .Net Task Parallel Library kunnen dit bijvoorbeeld doen. Als alternatief kan het besturingssysteem verantwoordelijk zijn voor het plannen van de werkelijke processortijd. Met het programma voegt u eenvoudig taken toe aan een pool van "werkthreads", die zelf worden gepland door het besturingssysteem.

Dit gebeurt in systemen waar het programma geen speciale directe toegang heeft tot verwerkingskernen, maar de toegang moet delen met andere processen. In dit scenario moet extra zorg worden besteed om ervoor te zorgen dat een thread niet herhaaldelijk wordt gestolen terwijl deze inactief is.

Er zijn verschillende benaderingen voor de manier waarop werkitems worden geselecteerd om te worden gestolen. In het oorspronkelijke concept was de benadering om een ​​andere willekeurige kern te kiezen. Als er een of meer werkitems in de wachtrij stonden, neem dan de laatste. Afhankelijk van de voorkeur of een kindproces direct wordt uitgevoerd door de oorspronkelijke processor. Of, als het naar de wachtrij van de processor wordt gepusht en het bovenliggende proces wordt uitgevoerd, wordt de bovenliggende of onderliggende thread gestolen.

Het kan allemaal worden samengevat als Work Stealing, een load balancing-techniek die ervoor zorgt dat de woordbelasting gelijkmatig wordt verdeeld over de beschikbare processors. Op die manier doen alle processors iets om te helpen.

Conclusie

Werkstelen is een proces dat automatisch plaatsvindt in multicore-CPU's. Elke kern heeft een wachtrij met taken om uit te voeren. Wanneer een processor zijn taken voltooit, steelt hij vervolgens een andere taak uit de wachtrij van een andere verwerkingskern. Dit helpt voorkomen dat de processor sommige kernen inactief laat terwijl andere nog een wachtrij met taken hebben om uit te voeren.