Mercurial > hg > Members > Moririn
annotate src/parallel_execution/context.h @ 230:a1fb3f2d1a36
fix worker
author | ikkun |
---|---|
date | Sat, 21 Jan 2017 20:21:00 +0900 |
parents | 77faa28128b4 |
children | 123b0d277b84 |
rev | line source |
---|---|
86 | 1 /* Context definition for llrb example */ |
132 | 2 #ifndef CONTEXT_H |
3 #define CONTEXT_H | |
207
7470b8382672
Fix compile error to stack_test
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
194
diff
changeset
|
4 #include <stdlib.h> |
86 | 5 #include <pthread.h> |
101 | 6 #ifdef USE_CUDA |
98 | 7 #include <cuda.h> |
101 | 8 #endif |
86 | 9 |
95
3e28ee215c0e
modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
92
diff
changeset
|
10 #define ALLOCATE_SIZE 20000000 |
101 | 11 #define NEW(type) (type*)(calloc(1, sizeof(type))) |
12 #define NEWN(n, type) (type*)(calloc(n, sizeof(type))) | |
13 | |
133 | 14 #define ALLOC_DATA(context, dseg) ({\ |
15 struct Meta* meta = (struct Meta*)context->heap;\ | |
148
473b7d990a1f
fix data gears type enum
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
147
diff
changeset
|
16 meta->type = D_##dseg;\ |
133 | 17 context->heap += sizeof(struct Meta);\ |
148
473b7d990a1f
fix data gears type enum
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
147
diff
changeset
|
18 context->data[D_##dseg] = context->heap; context->heap += sizeof(struct dseg); (struct dseg *)context->data[D_##dseg]; }) |
101 | 19 |
133 | 20 #define ALLOC_DATA_TYPE(context, dseg, t) ({\ |
21 struct Meta* meta = (struct Meta*)context->heap;\ | |
148
473b7d990a1f
fix data gears type enum
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
147
diff
changeset
|
22 meta->type = D_##t;\ |
133 | 23 context->heap += sizeof(struct Meta);\ |
148
473b7d990a1f
fix data gears type enum
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
147
diff
changeset
|
24 context->data[D_##dseg] = context->heap; context->heap += sizeof(struct t); (struct t *)context->data[D_##dseg]; }) |
86 | 25 |
132 | 26 #define ALLOCATE(context, t) ({ \ |
133 | 27 struct Meta* meta = (struct Meta*)context->heap;\ |
28 context->heap += sizeof(struct Meta);\ | |
29 union Data* data = context->heap; \ | |
30 context->heap += sizeof(struct t); \ | |
148
473b7d990a1f
fix data gears type enum
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
147
diff
changeset
|
31 meta->type = D_##t; \ |
133 | 32 data; }) |
132 | 33 |
133 | 34 #define GET_TYPE(dseg) ({ \ |
35 struct Meta* meta = (struct Meta*)(((void*)dseg) - sizeof(struct Meta));\ | |
36 meta->type; }) | |
132 | 37 |
149 | 38 #define Gearef(context, t) (&(context)->data[D_##t]->t) |
186 | 39 |
40 #include "c/enumCode.h" | |
86 | 41 |
42 enum Relational { | |
43 EQ, | |
44 GT, | |
45 LT, | |
46 }; | |
47 | |
186 | 48 #include "c/enumData.h" |
86 | 49 |
50 struct Context { | |
51 enum Code next; | |
230 | 52 struct Worker* worker; |
53 struct TaskManager* taskManager; | |
86 | 54 int codeNum; |
55 __code (**code) (struct Context*); | |
56 void* heapStart; | |
57 void* heap; | |
58 long heapLimit; | |
59 pthread_t thread; | |
92 | 60 int thread_num; |
87 | 61 int dataNum; |
86 | 62 union Data **data; |
63 }; | |
64 | |
65 union Data { | |
133 | 66 struct Meta { |
67 enum DataType type; | |
176 | 68 struct Queue* wait; // tasks waiting this dataGear |
133 | 69 } meta; |
230 | 70 struct Context context; |
95
3e28ee215c0e
modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
92
diff
changeset
|
71 struct Time { |
102 | 72 enum Code next; |
95
3e28ee215c0e
modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
92
diff
changeset
|
73 double time; |
149 | 74 } Time; |
86 | 75 struct LoopCounter { |
76 int i; | |
166 | 77 struct Tree* tree; |
217
c34e6aa10967
Fix DataGear access name
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
207
diff
changeset
|
78 } LoopCounter; |
176 | 79 struct TaskManager { |
218
d8a59b727f65
Fix spawnTaskManager
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
217
diff
changeset
|
80 union Data* taskManager; |
176 | 81 int numWorker; |
82 enum Code spawn; | |
83 enum Code shutdown; | |
184 | 84 enum Code deadLockDetected; |
85 enum Code next; | |
218
d8a59b727f65
Fix spawnTaskManager
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
217
diff
changeset
|
86 struct Task* task; |
176 | 87 struct Worker* workers; |
184 | 88 } TaskManager; |
182 | 89 struct TaskManagerImpl { |
184 | 90 struct Queue* activeQueue; |
91 struct Queue* taskQueue; | |
92 } TaskManagerImpl; | |
86 | 93 struct Worker { |
176 | 94 int id; |
230 | 95 struct Queue* tasks; |
96 int runFlag; | |
97 struct Context* context; | |
222
77faa28128b4
Add taskSend for TaskManager
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
218
diff
changeset
|
98 enum Code taskReceive; |
176 | 99 enum Code shutdown; |
230 | 100 enum Code next; |
184 | 101 } Worker; |
101 | 102 #ifdef USE_CUDA |
98 | 103 struct CudaTask { |
104 CUdevice device; | |
105 CUcontext cuCtx; | |
106 CUfunction code; | |
107 CUdeviceptr* deviceptr; | |
108 CUstream stream; | |
185 | 109 } Cudatask; |
187 | 110 #else |
111 struct CudaTask { | |
112 enum Code next; | |
113 } Cudatask; | |
101 | 114 #endif |
177 | 115 struct Main { |
116 enum Code code; | |
117 enum Code next; | |
118 struct Queue* args; | |
185 | 119 } Main; |
90 | 120 struct Task { |
121 enum Code code; | |
176 | 122 struct Queue* dataGears; |
112 | 123 int idsCount; |
166 | 124 } Task; |
169
ea7b11f3e717
Using Queue Interface
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
168
diff
changeset
|
125 // Queue Interface |
90 | 126 struct Queue { |
136 | 127 union Data* queue; |
167 | 128 union Data* data; |
129 enum Code whenEmpty; | |
130 enum Code clear; | |
131 enum Code put; | |
132 enum Code take; | |
133 enum Code isEmpty; | |
130 | 134 enum Code next; |
184 | 135 } Queue; |
167 | 136 struct SingleLinkedQueue { |
137 struct Element* top; | |
138 struct Element* last; | |
184 | 139 } SingleLinkedQueue; |
132 | 140 // Stack Interface |
130 | 141 struct Stack { |
132 | 142 union Data* stack; |
130 | 143 union Data* data; |
133 | 144 union Data* data1; |
169
ea7b11f3e717
Using Queue Interface
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
168
diff
changeset
|
145 enum Code whenEmpty; |
145
cc071cf1ba85
add stack clear interface
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
144
diff
changeset
|
146 enum Code clear; |
130 | 147 enum Code push; |
148 enum Code pop; | |
133 | 149 enum Code pop2; |
130 | 150 enum Code isEmpty; |
134
2eccf4564efe
fix stack call in rb_tree
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
151 enum Code get; |
133 | 152 enum Code get2; |
130 | 153 enum Code next; |
194 | 154 } Stack; |
132 | 155 // Stack implementations |
156 struct SingleLinkedStack { | |
157 struct Element* top; | |
194 | 158 } SingleLinkedStack; |
132 | 159 struct ArrayStack { |
160 int size; | |
161 int limit; | |
162 struct Element* array; | |
194 | 163 } ArrayStack; |
132 | 164 // Stack implementation end |
90 | 165 struct Element { |
114
d05b9937aa95
Change element data from Task to Data
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
112
diff
changeset
|
166 union Data* data; |
90 | 167 struct Element* next; |
194 | 168 } Element; |
86 | 169 struct Array { |
90 | 170 int index; |
95
3e28ee215c0e
modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
92
diff
changeset
|
171 int prefix; |
86 | 172 int* array; |
194 | 173 } Array; |
86 | 174 struct Tree { |
166 | 175 union Data* tree; |
176 struct Node* node; | |
150 | 177 enum Code put; |
178 enum Code get; | |
179 enum Code remove; | |
171 | 180 enum Code clear; |
150 | 181 enum Code next; |
166 | 182 } Tree; |
172 | 183 struct RedBlackTree { |
150 | 184 struct Node* root; |
122 | 185 struct Node* current; // reading node of original tree |
138 | 186 struct Node* previous; // parent of reading node of original tree |
124 | 187 struct Node* newNode; // writing node of new tree |
143
34a7a21edc36
recude stack get using traverse field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
138
diff
changeset
|
188 struct Node* parent; |
34a7a21edc36
recude stack get using traverse field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
138
diff
changeset
|
189 struct Node* grandparent; |
132 | 190 struct Stack* nodeStack; |
86 | 191 int result; |
172 | 192 } RedBlackTree; |
147 | 193 struct RotateTree { |
194 enum Code next; | |
172 | 195 struct RedBlackTree* traverse; |
147 | 196 struct Tree* tree; |
217
c34e6aa10967
Fix DataGear access name
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
207
diff
changeset
|
197 } RotateTree; |
86 | 198 struct Node { |
199 int key; // comparable data segment | |
90 | 200 union Data* value; |
86 | 201 struct Node* left; |
202 struct Node* right; | |
203 // need to balancing | |
204 enum Color { | |
205 Red, | |
206 Black, | |
207 } color; | |
217
c34e6aa10967
Fix DataGear access name
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
207
diff
changeset
|
208 } Node; |
86 | 209 struct Allocate { |
210 enum Code next; | |
211 long size; | |
217
c34e6aa10967
Fix DataGear access name
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
207
diff
changeset
|
212 } Allocate; |
112 | 213 struct OutPutDataSegments { |
214 union Data **data; | |
217
c34e6aa10967
Fix DataGear access name
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
207
diff
changeset
|
215 } Ods; |
186 | 216 }; // union Data end |
114
d05b9937aa95
Change element data from Task to Data
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
112
diff
changeset
|
217 |
186 | 218 #include "c/typedefData.h" |
132 | 219 #endif |