source: CIVL/examples/concurrency/adders.cvl@ 56d4ca9

1.23 2.0 acw/focus-triggers main test-branch
Last change on this file since 56d4ca9 was 56d4ca9, checked in by Stephen Siegel <siegel@…>, 13 years ago

committing slight hack to adders.cvl to force concretization of loop upper bound.

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

  • Property mode set to 100644
File size: 839 bytes
Line 
1/* Compare sequential and parallel sum of array */
2#include<civlc.h>
3$input int N;
4$assume N>=2 && N<=8;
5$input int P;
6$assume P>=1 && P<=4;
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 // hack follows:
34 for (int i=0; i<P; i++) ;
35 for (int i=0; i<P; i++)
36 workers[i] = $spawn run_worker(i);
37 for (int i=0; i<P; i++)
38 $wait workers[i];
39}
40
41void main() {
42 adder_seq();
43 adder_par();
44 $assert sum_seq == sum_par;
45}
Note: See TracBrowser for help on using the repository browser.