source: CIVL/examples/concurrency/adders.cvl@ 294f9ce

1.23 2.0 acw/focus-triggers main test-branch
Last change on this file since 294f9ce was 6874b6d, checked in by Tim Zirkel <zirkeltk@…>, 13 years ago

Updated some bounds in addres.cvl

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@208 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 792 bytes
Line 
1/* Compare sequential and parallel sum of array */
2#include<civlc.h>
3$input int N;
4$assume N>=2 && N<=3;
5$input int P;
6$assume P>=1 && P<=2;
7$input double a[N];
8double sum_seq;
9double sum_par;
10
11void adder_seq() {
12 sum_seq = 0.0;
13 for (int i=0; i<N; i++)
14 sum_seq += a[i];
15}
16
17void adder_par() {
18 $proc workers[P];
19 int lock = 0;
20
21 void run_worker(int id) {
22 int start = (id*N)/P;
23 int stop = ((id+1)*N)/P;
24 double localSum = 0.0;
25
26 for (int i=start; i<stop; i++)
27 localSum += a[i];
28 $when (lock==0) lock = 1;
29 sum_par += localSum;
30 lock = 0;
31 }
32 sum_par = 0.0;
33 for (int i=0; i<P; i++)
34 workers[i] = $spawn run_worker(i);
35 for (int i=0; i<P; i++)
36 $wait workers[i];
37}
38
39void main() {
40 adder_seq();
41 adder_par();
42 $assert sum_seq == sum_par;
43}
Note: See TracBrowser for help on using the repository browser.