Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Annotation of /branches/pure-cfg/src/lib/main.c
ViewVC logotype

Annotation of /branches/pure-cfg/src/lib/main.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 571 - (view) (download) (as text)

1 : jhr 571 /*! \file main.c
2 :     *
3 :     * \author John Reppy
4 :     */
5 :    
6 :     /*
7 :     * COPYRIGHT (c) 2011 The Diderot Project (http://diderot-language.cs.uchicago.edu)
8 :     * All rights reserved.
9 :     */
10 :    
11 :     #define NR 200
12 :     #define NC 200
13 :    
14 :     #include <string.h>
15 :     #include <Diderot/diderot.h>
16 :    
17 :     int main (int argc, const char **argv)
18 :     {
19 :     //
20 :     Diderot_InitGlobals ();
21 :    
22 :     // FIXME: we need to figure out how initialization should be handled.
23 :     void *strands1[NR*NC], *strands2[NR*NC];
24 :     bool active[NR*NC];
25 :     for (int r = 0; r <= 199; r++) {
26 :     for (int c = 0; c <= 199; c++) {
27 :     int i = NC*r + c;
28 :     strands1[i] = Diderot_AllocStrand(&(Diderot_Strands[0]));
29 :     strands2[i] = Diderot_AllocStrand(&(Diderot_Strands[0]));
30 :     active[i] = true;
31 :     Diderot_Strands[0].init(strands1[i], r, c);
32 :     }
33 :     }
34 :    
35 :     // iterate until all strands are stable
36 :     int nActive = NR*NC;
37 :     void **in = &(strands1[0]);
38 :     void **out = &(strands2[0]);
39 :     while (nActive > 0) {
40 :     // update strands
41 :     for (int i = 0; i < NR*NC; i++) {
42 :     if (active[i]) {
43 :     StrandStatus_t sts = Diderot_Strands[0].update(in[i], out[i]);
44 :     if (sts == DIDEROT_STABILIZE) {
45 :     // copy out to in so that final state is correct
46 :     memcpy (in[i], out[i], Diderot_Strands[0].stateSzb);
47 :     active[i] = false;
48 :     nActive--;
49 :     }
50 :     }
51 :     }
52 :     // swap in and out
53 :     void **tmp = in;
54 :     in = out;
55 :     out = tmp;
56 :     }
57 :    
58 :     // here we have the final state of all of the strands in the "in" buffer
59 :    
60 :     return 0;
61 :    
62 :     }
63 :    
64 :    
65 :     // this should be the part of the scheduler
66 :     void *Diderot_AllocStrand (Strand_t *strand)
67 :     {
68 :     return malloc(strand->stateSzb);
69 :     }

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0