# Task farming

Task farming is een werkwijze waarmee seriële processen met een hoge snelheid uitgevoerd kunnen worden op een parallel computersysteem.

## Beschrijving

Het gaat hier om distributed computing waarbij grote aantallen centrale verwerkingseenheden (CVE's of CPU's) en andere bronnen (computergeheugen e.d.) beschikbaar zijn. Seriële processen zijn processen die bestaan uit een serie stappen die in principe na elkaar uitgevoerd moeten worden. Task farming werkt op basis van het meester-slaafprincipe (Master-Slaveparadigma). Een van de verwerkingseenheden fungeert als master (meester) en de overige als slave (slaaf). De master verdeelt de verschillende taken (task) over de slaves. De slave verwerkt dan de toegewezen task en stuurt het resultaat terug naar de master. De master en slaves zijn de knooppunten (nodes) in een netwerk, die onafhankelijk van elkaar kunnen werken.

## Voordeel

Met deze aanpak kunnen toepassingen worden uitgevoerd in enkele uren, die op een enkele PC dagen of weken zouden duren. Dit is vooral van belang voor rekenintensieve toepassingen. Enkele nuttige toepassingen zijn weerkundige toepassingen, 3D-renderen van games (spelletjes).

## Aandachtspunten

Er zijn elke aandachtspunten die er voor kunnen zorgen dat de applicatie (toepassing) efficiënter en sneller kan worden verwerkt.
Task farming levert de meeste tijdwinst als de taken onafhankelijk van elkaar kunnen werken, zodat de ene taak niet op resultaten van andere taken hoeft te wachten.
Voor een goede benuttingsgraad van de verwerkingscapaciteit moeten de taken ongeveer een gelijke grootte en zwaarte hebben. Anders kan het zijn dat een knooppunt veel langer met een taak bezig is dan andere knooppunten. Die andere knooppunten kunnen dan een hele tijd niets doen. Dit heeft tot gevolg dat de CPU-tijd niet efficiënt worden gebruikt, want de werkers worden pas vrijgegeven als al de taken van de meester zijn uitgevoerd.
Het aantal taken waarin de toepassing verdeeld wordt, moet bij voorkeur gelijk zijn aan of groter zijn dan het aantal beschikbare slaven. Als er bijvoorbeeld 22 CPU's beschikbaar zijn, moet de toepassing in minimaal 21 taken worden opgedeeld, omdat een van de CPU's nodig is als master.

## Master-worker(slave) principe

Task Farming werk via het master-workerprincipe. Alle taken worden via de master verdeeld naar de verschillende workers die zich onder de master bevinden. Als de worker zijn taak heeft uitgevoerd zal hij de resultaten terugsturen naar de master. Het master-workerprincipe verloopt in vier stappen.
* Een transmissie- (verzend-) commando om de taak te initialiseren (beginnen) bij de worker. Ook wordt er de nodige data mee verstuurd om de taak succesvol uit te voeren.
* De taak wordt dan uitgevoerd op de toegewezen worker.
* Na het uitvoeren van de taak worden de resultaten van de worker terug naar de master gestuurd.
* De master moet de resultaten die het gekregen heeft van de worker onmiddellijk verwerken.
Het master-workerprincipe kan worden uitgebreid met een supervisor. De supervisor controleert verschillende processets (reeksen). Elke set bestaat uit een master en verschillende workers. Het verdelen van de taken gebeurd in twee fasen
* De supervisor verdeeld de applicatie (toepassing) over de verschillende masters, waarna de master de taken verdeeld naar de workers
* Als alle resultaten van de workers door de master werden verzameld, zal de master de resultaten bundelen en doorsturen naar de supervisor.

## Voordelen

Er zijn verschillende voordelen verbonden aan het werken met een supervisor bij het master-workerprincipe.
* Het eerste voordeel is dat de communicatie-overhead wordt beperkt door gebruik te maken van processets. De master en worker communiceren regelmatig met elkaar in deze sets. De bronnen (nodes) zijn dicht bij elkaar geplaatst, om de tijd die nodig is voor communicatieoverhead geminimaliseerd wordt.
* Het vermijd dat een master een knelpunt wordt, omdat er met verschillende masters wordt gewerkt. Het werk wordt verdeeld over de verschillende proces sets.

## Communicatieoverhead

Communicatie-overhead is een van de nadelen van task farming. Communicatie-overhead is het gevolg van de frequente communicatie tussen de master en de workers. Deze communicatie dient voor het opsporen van workers die geen taak hebben om uit te voeren, waardoor de master een nieuw taak naar de worker kan sturen. Wanneer deze communicatie meer tijd vraagt dan de tijd die nodig is om een taak uit te voeren, dan zal de prestatie van de applicatie verminderen.

## Master bottleneck

Master bottleneck (knelpunt) is een van de problemen die bij task farming kunnen voorkomen. Dit komt voor als de master te veel workers heeft om te beheren. De master moet in dit geval te veel vermogen steken in het communiceren met de workers. Dit heeft tot gevolg dat de master niet meer voldoende vermogen heeft om de resultaten van workers te verwerken en te bundelen. Het heeft weer tot gevolg dat de prestaties van de toepassing zullen dalen.