Muesli
 All Classes Namespaces Files Functions Typedefs Enumerations
farm.h
1 #ifndef GPUFARM_H_
2 #define GPUFARM_H_
3 
4 #include "muesli.h"
5 #include "process.h"
6 #include "local_farm.h"
7 
8 namespace msl {
9 
10 // TODO: Translate description.
11 
12 /* Eine Farm verwaltet sich dezentral. Alle Worker werden in einem logischen Ring verwaltet.
13  Jeder Worker dieser Farm kann Ein- bzw. Ausgang des Skeletts sein. Der vorgelagerte Prozess
14  waehlt per Zufall (gleichverteilte Zufallsvariable) einen Arbeiter aus, dem er eine Nachricht
15  zusendet. Handelt es sich hierbei um "normale" Daten, dann verarbeitet der worker diese und
16  leitet sie an einen der nachgelagerten Empfaenger weiter (es kann mehrere geben, z.B. wiederum
17  eine Farm). Handelt es sich um ein STOP- oder TERMINATION-TEST-TAG, so wird diese Nachricht
18  einmal durch den Ring geschickt, bis diese bei dem urspruenglichen Empfaenger wieder angekommen
19  ist ("Stille Post"-Prinzip). Dann leitet er diese Nachricht an einen der nachgelagerten
20  Empfaenger weiter.
21  */
22 
23 template <class I, class O, class F>
24 class Farm: public detail::Process
25 {
26 
27 public:
28  Farm(F& worker, int n, bool concurrent_mode = 0);
29 
30  ~Farm();
31 
32  // Set predecessors of each worker. These could be several, e.g. when the
33  // predecessor process is a farm. In this case, each worker of this farm may
34  // receive data from each worker of the predecessor farm.
35  inline void setPredecessors(const std::vector<ProcessorNo>& src);
36 
37  // Set succesors of each worker. These could be several, e.g. when the
38  // succesor process is a farm. In this case, each worker of this farm may
39  // send data to each worker of the successor farm.
40  inline void setSuccessors(const std::vector<ProcessorNo>& drn);
41 
42  // starts all workers
43  inline void start();
44 
45  inline void show() const;
46 
47 protected:
48 
49 private:
50  // workers (local farms)
51  std::vector<detail::Process*> p;
52  int nWorkers;
53 };
54 
55 }
56 
57 #include "../../src/farm.cpp"
58 
59 #endif
Definition: process.h:44
Definition: farm.h:24
Contains global definitions such as macros, functions, enums and classes, and constants in order to c...