@@ -420,44 +420,66 @@ class __event
420
420
{
421
421
sycl::event __m_event;
422
422
sycl::queue __m_queue;
423
- bool __in_order = false ;
423
+ bool __m_queue_synch ;
424
424
425
425
public:
426
- __event (sycl::event __e): __m_event(__e) {}
427
- __event () {}
428
-
429
- __event (sycl::queue __q): __m_queue(__q), __in_order(true ) {}
426
+ __event (sycl::event __e = {}): __m_event(__e), __m_queue_synch(false ) {}
427
+ __event (sycl::queue __q): __m_queue(__q), __m_queue_synch(true )
428
+ {
429
+ assert (__q.is_in_order ());
430
+ }
430
431
431
432
void wait ()
432
433
{
433
- if (__in_order )
434
+ if (__m_queue_synch )
434
435
__m_queue.wait_and_throw ();
435
436
else
436
437
__m_event.wait_and_throw ();
437
438
}
438
439
439
- bool has_event () const { return !__in_order; }
440
440
operator sycl::event () const
441
441
{
442
- assert (has_event () );
442
+ assert (!__m_queue_synch );
443
443
return __m_event;
444
444
}
445
445
};
446
446
447
- template <typename _Body>
447
+ template <typename _Body, typename _DependencyInternal, typename _DependencyExternal >
448
448
auto
449
- __submit (sycl::queue __queue, _Body __body, __event __e = {} )
449
+ __submit_impl (sycl::queue __queue, _Body __body, bool __is_implicit_synch, const _DependencyInternal* __dep_int, const _DependencyExternal* __dep_ext )
450
450
{
451
- if (__queue.is_in_order ())
452
- {
453
- __queue.submit (__body);
451
+ if (__queue.is_in_order () || __is_implicit_synch)
452
+ {
453
+ __queue.submit ([&](sycl::handler& __hdl) {
454
+ if (__dep_ext)
455
+ __hdl.depends_on (*__dep_ext);
456
+ __body (__hdl);
457
+ });
454
458
return __event (__queue);
455
- }
459
+ }
460
+
461
+ return __event (__queue.submit ([&](sycl::handler& __hdl) {
462
+ assert (!__is_implicit_synch);
463
+ if (__dep_ext)
464
+ __hdl.depends_on (*__dep_ext);
465
+ if (__dep_int)
466
+ __hdl.depends_on (*__dep_int);
467
+ __body (__hdl);
468
+ }));
469
+ }
456
470
457
- return __event (__queue.submit ([&](sycl::handler& __hdl) {
458
- __hdl.depends_on (__e);
459
- __body (__hdl);
460
- }));
471
+ template <typename _Body>
472
+ auto
473
+ __submit (sycl::queue __queue, _Body __body)
474
+ {
475
+ return __submit_impl (__queue, __body, true );
476
+ }
477
+
478
+ template <typename _Body, typename _Dependency>
479
+ auto
480
+ __submit (sycl::queue __queue, _Body __body, const _Dependency& __dependency)
481
+ {
482
+ return __submit_impl (__queue, __body, false , &__dependency, NULL );
461
483
}
462
484
463
485
} // namespace __dpl_sycl
0 commit comments