source:
CIVL/examples/adder.cvl@
9179b4f
| Last change on this file since 9179b4f was f28d814, checked in by , 13 years ago | |
|---|---|
|
|
| File size: 622 bytes | |
| Rev | Line | |
|---|---|---|
| [f28d814] | 1 | #include <civlc.h> |
| 2 | $input double a[3]; | |
| [844ebd8] | 3 | |
| 4 | double adderSeq(int n) { | |
| 5 | double s = 0.0; | |
| 6 | ||
| 7 | for (int i = 0; i < n; i++) { | |
| 8 | s += a[i]; | |
| 9 | } | |
| 10 | return s; | |
| 11 | } | |
| 12 | ||
| 13 | double adderPar(int m) { | |
| 14 | double s = 0.0; | |
| 15 | int mutex = 0; | |
| [f28d814] | 16 | $proc workers[m]; |
| [5b49b89] | 17 | |
| [844ebd8] | 18 | void worker(int i) { |
| [5b49b89] | 19 | double t; |
| 20 | ||
| [f28d814] | 21 | $when (mutex == 0) mutex = 1; |
| [5b49b89] | 22 | t = s; |
| 23 | t += a[i]; | |
| 24 | s = t; | |
| [844ebd8] | 25 | mutex = 0; |
| 26 | } | |
| 27 | ||
| 28 | for (int j = 0; j < m; j++) { | |
| [f28d814] | 29 | workers[j] = $spawn worker(j); |
| [5b49b89] | 30 | } |
| 31 | for (int k = 0; k < m; k++) { | |
| [f28d814] | 32 | $wait workers[k]; |
| [844ebd8] | 33 | } |
| 34 | return s; | |
| 35 | } | |
| 36 | ||
| 37 | void main() { | |
| 38 | double seq; | |
| 39 | double par; | |
| 40 | ||
| 41 | seq = adderSeq(3); | |
| 42 | par = adderPar(3); | |
| [f28d814] | 43 | $assert seq == par; |
| [844ebd8] | 44 | } |
Note:
See TracBrowser
for help on using the repository browser.
