source: CIVL/examples/concurrency/adders.cvl@ 2b5dc93

1.23 2.0 main test-branch
Last change on this file since 2b5dc93 was bfdacccd, checked in by Stephen Siegel <siegel@…>, 13 years ago

Added a little debugging code to aid in tracking down a bug (which was in SARL and is now fixed). Small parameter changes to example.

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

  • Property mode set to 100644
File size: 903 bytes
Line 
1/* Compare sequential and parallel sum of array */
2#include<civlc.h>
3$input int N;
4$assume N>=1 && 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 // $assume start <= id*N;
27 // $assume stop <= (id+1)*N;
28
29 for (int i=start; i<stop; i++)
30 localSum += a[i];
31 $when (lock==0) lock = 1;
32 sum_par += localSum;
33 lock = 0;
34 }
35 sum_par = 0.0;
36 // hack follows:
37 for (int i=0; i<P; i++) ;
38 for (int i=0; i<P; i++)
39 workers[i] = $spawn run_worker(i);
40 for (int i=0; i<P; i++)
41 $wait workers[i];
42}
43
44void main() {
45 adder_seq();
46 adder_par();
47 $assert sum_seq == sum_par;
48}
Note: See TracBrowser for help on using the repository browser.