14
14
#include " arcane/utils/NumArray.h"
15
15
#include " arcane/utils/ValueChecker.h"
16
16
#include " arcane/utils/MemoryUtils.h"
17
+ #include " arcane/utils/PlatformUtils.h"
17
18
18
19
#include " arcane/core/BasicUnitTest.h"
19
20
#include " arcane/core/ServiceFactory.h"
22
23
#include " arcane/accelerator/core/Runner.h"
23
24
#include " arcane/accelerator/core/RunQueueEvent.h"
24
25
#include " arcane/accelerator/core/IAcceleratorMng.h"
26
+ #include " arcane/accelerator/core/internal/RunQueueImpl.h"
25
27
26
28
#include " arcane/accelerator/NumArrayViews.h"
27
29
#include " arcane/accelerator/SpanViews.h"
@@ -49,7 +51,6 @@ class RunQueueUnitTest
49
51
public:
50
52
51
53
explicit RunQueueUnitTest (const ServiceBuildInfo& cb);
52
- ~RunQueueUnitTest ();
53
54
54
55
public:
55
56
@@ -58,14 +59,14 @@ class RunQueueUnitTest
58
59
59
60
private:
60
61
61
- ax::Runner* m_runner = nullptr ;
62
+ ax::Runner m_runner;
62
63
63
64
public:
64
65
65
66
void _executeTestNullQueue ();
66
67
void _executeTest1 (bool use_priority);
67
68
void _executeTest2 ();
68
- void _executeTest3 ();
69
+ void _executeTest3 (bool use_pooling );
69
70
void _executeTest4 ();
70
71
void _executeTest5 ();
71
72
};
@@ -87,21 +88,13 @@ RunQueueUnitTest(const ServiceBuildInfo& sb)
87
88
/* ---------------------------------------------------------------------------*/
88
89
/* ---------------------------------------------------------------------------*/
89
90
90
- RunQueueUnitTest::
91
- ~RunQueueUnitTest ()
92
- {
93
- }
94
-
95
- /* ---------------------------------------------------------------------------*/
96
- /* ---------------------------------------------------------------------------*/
97
-
98
91
/* ---------------------------------------------------------------------------*/
99
92
/* ---------------------------------------------------------------------------*/
100
93
101
94
void RunQueueUnitTest::
102
95
initializeTest ()
103
96
{
104
- m_runner = subDomain ()->acceleratorMng ()->defaultRunner ();
97
+ m_runner = subDomain ()->acceleratorMng ()->runner ();
105
98
}
106
99
107
100
/* ---------------------------------------------------------------------------*/
@@ -112,14 +105,13 @@ executeTest()
112
105
{
113
106
_executeTestNullQueue ();
114
107
_executeTest2 ();
115
- bool old_v = m_runner->isConcurrentQueueCreation ();
116
- m_runner->setConcurrentQueueCreation (true );
117
108
_executeTest1 (false );
118
109
_executeTest1 (true );
119
- _executeTest3 ();
110
+ _executeTest3 (false );
111
+ if (m_runner.executionPolicy () != ax::eExecutionPolicy::SYCL)
112
+ _executeTest3 (true );
120
113
_executeTest4 ();
121
114
_executeTest5 ();
122
- m_runner->setConcurrentQueueCreation (old_v);
123
115
}
124
116
125
117
/* ---------------------------------------------------------------------------*/
@@ -140,13 +132,13 @@ _executeTestNullQueue()
140
132
if (queue.allocationOptions () != default_mem_opt)
141
133
ARCANE_FATAL (" Bad null allocationOptions()" );
142
134
143
- queue = makeQueue (* m_runner);
135
+ queue = makeQueue (m_runner);
144
136
vc.areEqual (queue.isNull (), false , " not null" );
145
137
146
138
queue = RunQueue ();
147
139
vc.areEqual (queue.isNull (), true , " is null (2)" );
148
140
149
- queue = makeQueue (* m_runner);
141
+ queue = makeQueue (m_runner);
150
142
if (queue.executionPolicy () == eExecutionPolicy::None)
151
143
ARCANE_FATAL (" Bad execution policy" );
152
144
}
@@ -185,14 +177,15 @@ _executeTest1(bool use_priority)
185
177
ax::RunQueueBuildInfo bi;
186
178
if (use_priority && (i > 3 ))
187
179
bi.setPriority (-8 );
188
- auto queue_ref = makeQueueRef (* m_runner, bi);
180
+ auto queue_ref = makeQueueRef (m_runner, bi);
189
181
queue_ref->setAsync (true );
190
182
allthreads.add (new std::thread (task_func, queue_ref, i));
191
183
}
192
184
for (auto thr : allthreads) {
193
185
thr->join ();
194
186
delete thr;
195
187
}
188
+ info () << " End of wait" ;
196
189
197
190
Int64 true_total = 0 ;
198
191
Int64 expected_true_total = 0 ;
@@ -217,10 +210,10 @@ _executeTest2()
217
210
info () << " Test2: use events" ;
218
211
ValueChecker vc (A_FUNCINFO);
219
212
220
- auto event{ makeEvent (* m_runner) };
221
- auto queue1{ makeQueue (* m_runner) };
213
+ auto event{ makeEvent (m_runner) };
214
+ auto queue1{ makeQueue (m_runner) };
222
215
queue1.setAsync (true );
223
- auto queue2{ makeQueue (* m_runner) };
216
+ auto queue2{ makeQueue (m_runner) };
224
217
queue2.setAsync (true );
225
218
226
219
Integer nb_value = 100000 ;
@@ -244,7 +237,7 @@ _executeTest2()
244
237
v (iter) = v (iter) * 2 ;
245
238
};
246
239
}
247
- queue1. barrier ();
240
+
248
241
queue2.barrier ();
249
242
250
243
// Vérifie les valeurs
@@ -257,19 +250,19 @@ _executeTest2()
257
250
258
251
/* ---------------------------------------------------------------------------*/
259
252
/* ---------------------------------------------------------------------------*/
260
- // Test la synchronisation de avec un évènement.
253
+ // Teste la synchronisation avec un évènement.
261
254
void RunQueueUnitTest::
262
- _executeTest3 ()
255
+ _executeTest3 (bool use_pooling )
263
256
{
264
- info () << " Test3: use events with wait()" ;
257
+ info () << " Test3: use events with wait() or pooling is_pooling?= " << use_pooling ;
265
258
ValueChecker vc (A_FUNCINFO);
266
259
267
260
UniqueArray<Ref<ax::RunQueueEvent>> event_array;
268
- event_array.add (makeEventRef (* m_runner));
261
+ event_array.add (makeEventRef (m_runner));
269
262
270
- auto queue1{ makeQueue (* m_runner) };
263
+ auto queue1{ makeQueue (m_runner) };
271
264
queue1.setAsync (true );
272
- auto queue2{ makeQueue (* m_runner) };
265
+ auto queue2{ makeQueue (m_runner) };
273
266
queue2.setAsync (true );
274
267
275
268
Integer nb_value = 100000 ;
@@ -284,7 +277,12 @@ _executeTest3()
284
277
};
285
278
queue1.recordEvent (event_array[0 ]);
286
279
}
287
- event_array[0 ]->wait ();
280
+ if (use_pooling)
281
+ while (event_array[0 ]->hasPendingWork ()) {
282
+ // Do something ...
283
+ }
284
+ else
285
+ event_array[0 ]->wait ();
288
286
{
289
287
auto command2 = makeCommand (queue2);
290
288
auto v = viewInOut (command2, values);
@@ -316,7 +314,7 @@ _executeTest4()
316
314
Arcane::Accelerator::RunQueueEvent event0;
317
315
if (!event0.isNull ())
318
316
ARCANE_FATAL (" Event is not null" );
319
- event0 = makeEvent (* m_runner);
317
+ event0 = makeEvent (m_runner);
320
318
if (event0.isNull ())
321
319
ARCANE_FATAL (" Event is null" );
322
320
Arcane::Accelerator::RunQueueEvent event1 (event0);
@@ -326,7 +324,7 @@ _executeTest4()
326
324
327
325
ValueChecker vc (A_FUNCINFO);
328
326
// ![SampleRunQueueEventSample1]
329
- Arcane::Accelerator::Runner runner = * m_runner;
327
+ Arcane::Accelerator::Runner runner = m_runner;
330
328
331
329
Arcane::Accelerator::RunQueueEvent event (makeEvent (runner));
332
330
0 commit comments