@@ -61,7 +61,7 @@ namespace cadmium {
61
61
rootCoordinator->stop ();
62
62
}
63
63
64
- void simulate (long nIterations, size_t thread_number = std::thread::hardware_concurrency()) {
64
+ void simulate (long nIterations, unsigned int thread_number = std::thread::hardware_concurrency()) {
65
65
// First, we make sure that Mutexes are activated
66
66
if (rootCoordinator->getLogger ()) {
67
67
rootCoordinator->getLogger ()->createMutex ();
@@ -82,15 +82,15 @@ namespace cadmium {
82
82
while (nIterations-- > 0 && timeNext < std::numeric_limits<double >::infinity ()) {
83
83
// Step 1: execute output functions
84
84
#pragma omp for schedule(static)
85
- for (size_t i = 0 ; i < nSubcomponents; i++) {
85
+ for (long i = 0 ; i < nSubcomponents; i++) {
86
86
subcomponents.at (i)->collection (timeNext);
87
87
}
88
88
#pragma omp barrier
89
89
// end Step 1
90
90
91
91
// Step 2: route messages
92
92
#pragma omp for schedule(static)
93
- for (size_t i = 0 ; i < nICs; i++) { // We only parallelize by destination port, right?
93
+ for (long i = 0 ; i < nICs; i++) { // We only parallelize by destination port, right?
94
94
for (auto & portFrom: stackedIC[i].second ) {
95
95
stackedIC.at (i).first ->propagate (portFrom);
96
96
}
@@ -100,7 +100,7 @@ namespace cadmium {
100
100
101
101
// Step 3: state transitions
102
102
#pragma omp for schedule(static)
103
- for (size_t i = 0 ; i < nSubcomponents; i++) {
103
+ for (long i = 0 ; i < nSubcomponents; i++) {
104
104
subcomponents.at (i)->transition (timeNext);
105
105
subcomponents.at (i)->clear ();
106
106
}
@@ -110,7 +110,7 @@ namespace cadmium {
110
110
// Step 4: time for next events
111
111
localNext = subcomponents[0 ]->getTimeNext (); // Potential bug: what if model is empty? I'd initialize this to infinity and iterate from 0
112
112
#pragma omp for schedule(static)
113
- for (size_t i = 1 ; i < nSubcomponents; i++){
113
+ for (long i = 1 ; i < nSubcomponents; i++){
114
114
if (subcomponents[i]->getTimeNext () < localNext) {
115
115
localNext = subcomponents[i]->getTimeNext ();
116
116
}
@@ -133,7 +133,10 @@ namespace cadmium {
133
133
}
134
134
}
135
135
136
- void simulate (double timeInterval, size_t thread_number = std::thread::hardware_concurrency()) {
136
+ void simulate (double timeInterval, unsigned int thread_number = std::thread::hardware_concurrency()) {
137
+ // error: only a variable or static member can be used in a data sharing clause
138
+ auto rootCoordinator = this ->rootCoordinator ;
139
+
137
140
// First, we make sure that Mutexes are activated
138
141
if (rootCoordinator->getLogger ()) {
139
142
rootCoordinator->getLogger ()->createMutex ();
@@ -155,15 +158,15 @@ namespace cadmium {
155
158
while (timeNext < timeFinal) {
156
159
// Step 1: execute output functions
157
160
#pragma omp for schedule(static)
158
- for (size_t i = 0 ; i < nSubcomponents; i++) {
161
+ for (long i = 0 ; i < nSubcomponents; i++) {
159
162
subcomponents.at (i)->collection (timeNext);
160
163
}
161
164
#pragma omp barrier
162
165
// end Step 1
163
166
164
167
// Step 2: route messages
165
168
#pragma omp for schedule(static)
166
- for (size_t i = 0 ; i < nICs; i++) {
169
+ for (long i = 0 ; i < nICs; i++) {
167
170
for (auto & portFrom: stackedIC[i].second ){
168
171
stackedIC.at (i).first ->propagate (portFrom);
169
172
}
@@ -173,7 +176,7 @@ namespace cadmium {
173
176
174
177
// Step 3: state transitions
175
178
#pragma omp for schedule(static)
176
- for (size_t i = 0 ; i < nSubcomponents; i++){
179
+ for (long i = 0 ; i < nSubcomponents; i++){
177
180
subcomponents.at (i)->transition (timeNext);
178
181
subcomponents.at (i)->clear ();
179
182
}
@@ -183,7 +186,7 @@ namespace cadmium {
183
186
// Step 4: time for next events
184
187
localNext = subcomponents[0 ]->getTimeNext ();
185
188
#pragma omp for schedule(static)
186
- for (size_t i = 1 ; i < nSubcomponents; i++){
189
+ for (long i = 1 ; i < nSubcomponents; i++){
187
190
if (subcomponents[i]->getTimeNext () < localNext){
188
191
localNext = subcomponents[i]->getTimeNext ();
189
192
}
@@ -206,7 +209,10 @@ namespace cadmium {
206
209
}
207
210
}
208
211
209
- void simulateSerialCollection (double timeInterval, size_t thread_number = std::thread::hardware_concurrency()) {
212
+ void simulateSerialCollection (double timeInterval, unsigned int thread_number = std::thread::hardware_concurrency()) {
213
+ // error: only a variable or static member can be used in a data sharing clause
214
+ auto rootCoordinator = this ->rootCoordinator ;
215
+
210
216
// Firsts, we make sure that Mutexes are activated
211
217
if (rootCoordinator->getLogger ()) {
212
218
rootCoordinator->getLogger ()->createMutex ();
@@ -228,7 +234,7 @@ namespace cadmium {
228
234
while (timeNext < timeFinal) {
229
235
// Step 1: execute output functions
230
236
#pragma omp for schedule(static)
231
- for (size_t i = 0 ; i < nSubcomponents; i++){
237
+ for (long i = 0 ; i < nSubcomponents; i++){
232
238
subcomponents.at (i)->collection (timeNext);
233
239
}
234
240
#pragma omp barrier
@@ -244,7 +250,7 @@ namespace cadmium {
244
250
245
251
// Step 3: state transitions
246
252
#pragma omp for schedule(static)
247
- for (size_t i = 0 ; i < nSubcomponents; i++) {
253
+ for (long i = 0 ; i < nSubcomponents; i++) {
248
254
subcomponents.at (i)->transition (timeNext);
249
255
subcomponents.at (i)->clear ();
250
256
}
@@ -254,7 +260,7 @@ namespace cadmium {
254
260
// Step 4: time for next events
255
261
localNext = subcomponents[0 ]->getTimeNext ();
256
262
#pragma omp for schedule(static)
257
- for (size_t i = 1 ; i < nSubcomponents; i++){
263
+ for (long i = 1 ; i < nSubcomponents; i++){
258
264
if (subcomponents[i]->getTimeNext () < localNext) {
259
265
localNext = subcomponents[i]->getTimeNext ();
260
266
}
0 commit comments