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

SCM Repository

[diderot] Annotation of /branches/vis15/src/compiler/target-cpu/fragments/world-methods.in
ViewVC logotype

Annotation of /branches/vis15/src/compiler/target-cpu/fragments/world-methods.in

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4516 - (view) (download)

1 : jhr 3924 // Allocate the program's world
2 :     //
3 :     world::world ()
4 : jhr 3958 : diderot::world_base (ProgramName, @IS_GRID@, @NUM_AXES@)
5 : jhr 3924 {
6 :     #ifndef DIDEROT_NO_GLOBALS
7 :     this->_globals = new globals;
8 :     #endif
9 :    
10 :     #ifdef DIDEROT_TARGET_PARALLEL
11 : jhr 4259 this->_sched = new diderot::scheduler();
12 :     this->_sched->get_cpu_info (this);
13 :     this->_sched->_numWorkers = this->_sched->_numHWCores;
14 : jhr 3924 #endif
15 :    
16 : jhr 4367 #ifdef DIDEROT_HAS_STRAND_COMMUNICATION
17 :     this->_tree = nullptr;
18 :     #endif
19 : jhr 3924 } // world constructor
20 :    
21 :     // shutdown and deallocate the world
22 :     //
23 : jhr 3917 world::~world ()
24 :     {
25 :     #ifndef DIDEROT_NO_GLOBALS
26 :     delete this->_globals;
27 :     #endif
28 :    
29 : jhr 4374 #ifdef DIDEROT_HAS_STRAND_COMMUNICATION
30 :     delete this->_tree;
31 :     #endif
32 :    
33 : jhr 3924 } // world destructor
34 : jhr 3917
35 : jhr 3924 // Initialize the program's world
36 :     //
37 :     bool world::init ()
38 :     {
39 :     if (this->_stage != diderot::POST_NEW) {
40 :     biffMsgAdd (this->_errors, "multiple calls to world::init");
41 :     return true;
42 :     }
43 :    
44 :     #ifdef DIDEROT_TARGET_PARALLEL
45 :     // initialize synchronization structures
46 : jhr 4259 if ((pthread_mutex_init (&(this->_sched->_lock), 0) != 0)
47 :     || (pthread_cond_init (&(this->_sched->_barrier), 0) != 0)
48 :     || (pthread_cond_init (&(this->_sched->_runWait), 0) != 0)) {
49 : jhr 3924 biffMsgAdd (this->_errors, "unable to initialize scheduler structures");
50 :     return true;
51 :     }
52 :     #endif
53 :    
54 :     #if !defined(DIDEROT_STANDALONE_EXEC) && !defined(DIDEROT_NO_INPUTS)
55 :     // initialize the defined flags for the input globals
56 :     init_defined_inputs (this);
57 :     #endif
58 :    
59 :     this->_stage = diderot::POST_INIT;
60 :    
61 :     return false;
62 :    
63 :     }
64 :    
65 :     // allocate the initial strands and initialize the rest of the world structure.
66 :     //
67 : jhr 3927 bool world::alloc (int32_t base[@NUM_AXES@], uint32_t size[@NUM_AXES@])
68 : jhr 3924 {
69 :     size_t numStrands = 1;
70 :     for (uint32_t i = 0; i < @NUM_AXES@; i++) {
71 :     numStrands *= size[i];
72 :     this->_base[i] = base[i];
73 :     this->_size[i] = size[i];
74 :     }
75 :    
76 :     if (this->_verbose) {
77 : jhr 4317 std::cerr << "world::alloc: " << size[0];
78 :     for (uint32_t i = 1; i < @NUM_AXES@; i++) {
79 :     std::cerr << " x " << size[i];
80 :     }
81 :     std::cerr << std::endl;
82 : jhr 3924 }
83 :    
84 : jhr 4367 #ifdef DIDEROT_HAS_STRAND_COMMUNICATION
85 : jhr 4516 this->_tree = new diderot::kdtree<@SPATIAL_DIM@, @REALTY@, strand_array> (&this->_strands);
86 : jhr 4367 #endif
87 :    
88 : jhr 4489 // allocate the strand array
89 :     if (this->_strands.alloc (numStrands)) {
90 :     biffMsgAdd (this->_errors, "unable to allocate strand-state array\n");
91 : jhr 3924 return true;
92 :     }
93 :    
94 :     // initialize strand state pointers etc.
95 : jhr 4489 this->_strands.create_strands (numStrands);
96 : jhr 3924
97 :     return false;
98 :    
99 :     } // world::alloc
100 :    
101 :     // swap input and output states
102 :     //
103 : jhr 3917 inline void world::swap_state ()
104 :     {
105 : jhr 4489 this->_strands.swap ();
106 : jhr 3917 }
107 : jhr 4394
108 : jhr 4489 #ifdef DIDEROT_HAS_STABILIZE_ALL
109 :     void world::stabilize_all ()
110 :     {
111 :     #ifndef DIDEROT_NO_GLOBALS
112 :     globals *glob = this->_globals;
113 : jhr 4394 #endif
114 : jhr 4489
115 :     if (this->_strands.num_active() > 0) {
116 :     for (auto ix = this->_strands.begin_active();
117 :     ix != this->_strands.end_active();
118 :     ix = this->_strands.next_active(ix))
119 :     {
120 :     this->_strands.stabilize (@STABILIZE_ARGS@ix);
121 :     }
122 :     }
123 :     }
124 :     #endif

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