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 589 - (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 : jhr 572 #include <stdio.h>
16 : jhr 571 #include <Diderot/diderot.h>
17 :    
18 : jhr 572 extern float getOutf (void *self);
19 :    
20 : jhr 571 int main (int argc, const char **argv)
21 :     {
22 :     //
23 : jhr 572 printf("initializing globals ...\n");
24 : jhr 571 Diderot_InitGlobals ();
25 :    
26 :     // FIXME: we need to figure out how initialization should be handled.
27 : jhr 572 printf("initializing strands ...\n");
28 : jhr 571 void *strands1[NR*NC], *strands2[NR*NC];
29 :     bool active[NR*NC];
30 : jhr 589 for (int r = 0; r < NR; r++) {
31 :     for (int c = 0; c < NC; c++) {
32 : jhr 571 int i = NC*r + c;
33 : jhr 589 strands1[i] = Diderot_AllocStrand (&(Diderot_Strands[0]));
34 :     strands2[i] = Diderot_AllocStrand (&(Diderot_Strands[0]));
35 : jhr 571 active[i] = true;
36 :     Diderot_Strands[0].init(strands1[i], r, c);
37 : jhr 589 // copy so that static fields are initialized
38 :     memcpy (strands2[i], strands1[i], Diderot_Strands[0].stateSzb);
39 : jhr 571 }
40 :     }
41 :    
42 :     // iterate until all strands are stable
43 : jhr 572 printf("run ...\n");
44 :     int nSteps = 0, nUpdates = 0;
45 : jhr 571 int nActive = NR*NC;
46 :     void **in = &(strands1[0]);
47 :     void **out = &(strands2[0]);
48 :     while (nActive > 0) {
49 : jhr 572 nSteps++;
50 : jhr 571 // update strands
51 :     for (int i = 0; i < NR*NC; i++) {
52 :     if (active[i]) {
53 : jhr 572 nUpdates++;
54 : jhr 571 StrandStatus_t sts = Diderot_Strands[0].update(in[i], out[i]);
55 :     if (sts == DIDEROT_STABILIZE) {
56 : jhr 589 // copy out to in so that both copies are the stable state
57 : jhr 571 memcpy (in[i], out[i], Diderot_Strands[0].stateSzb);
58 :     active[i] = false;
59 :     nActive--;
60 :     }
61 :     }
62 :     }
63 :     // swap in and out
64 :     void **tmp = in;
65 :     in = out;
66 :     out = tmp;
67 :     }
68 :    
69 : jhr 572 printf("done: %d updates, %d steps\n", nUpdates, nSteps);
70 : jhr 571 // here we have the final state of all of the strands in the "in" buffer
71 : jhr 572 FILE *outS = fopen("mip.txt", "w");
72 :     if (outS == NULL) {
73 :     fprintf (stderr, "Cannot open output file\n");
74 :     exit (8);
75 :     }
76 : jhr 571
77 : jhr 572 for (int r = 0; r <= 199; r++) {
78 :     for (int c = 0; c <= 199; c++) {
79 :     int i = NC*r + c;
80 :     float outV = getOutf (in[i]);
81 :     if (outV < 0)
82 :     fprintf (outS, "%.4f\n", 0.0f);
83 :     else
84 :     fprintf (outS, "%.4f\n", outV);
85 :     }
86 :     }
87 :     fclose (outS);
88 :    
89 : jhr 571 return 0;
90 :    
91 :     }
92 :    
93 :    
94 :     // this should be the part of the scheduler
95 :     void *Diderot_AllocStrand (Strand_t *strand)
96 :     {
97 :     return malloc(strand->stateSzb);
98 :     }

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