10
10
11
11
#include < CL/sycl/access/access.hpp>
12
12
#include < CL/sycl/accessor.hpp>
13
- #include < CL/sycl/atomic.hpp>
14
13
#include < CL/sycl/context.hpp>
15
14
#include < CL/sycl/detail/cg.hpp>
16
15
#include < CL/sycl/detail/cg_types.hpp>
@@ -533,7 +532,6 @@ class __SYCL_EXPORT handler {
533
532
// /
534
533
// / \param Src is a source SYCL accessor.
535
534
// / \param Dst is a destination SYCL accessor.
536
- // TODO: support atomic accessor in Src or/and Dst.
537
535
template <typename TSrc, int DimSrc, access::mode ModeSrc,
538
536
access::target TargetSrc, typename TDst, int DimDst,
539
537
access::mode ModeDst, access::target TargetDst,
@@ -558,60 +556,6 @@ class __SYCL_EXPORT handler {
558
556
return true ;
559
557
}
560
558
561
- template <typename T, int Dim, access::mode Mode, access::target Target,
562
- access::placeholder IsPH>
563
- static detail::enable_if_t <Dim == 0 && Mode == access::mode::atomic, T>
564
- readFromFirstAccElement (accessor<T, Dim, Mode, Target, IsPH> Src) {
565
- #ifdef __ENABLE_USM_ADDR_SPACE__
566
- atomic<T, access ::address_space::global_device_space> AtomicSrc = Src;
567
- #else
568
- atomic<T, access ::address_space::global_space> AtomicSrc = Src;
569
- #endif // __ENABLE_USM_ADDR_SPACE__
570
- return AtomicSrc.load ();
571
- }
572
-
573
- template <typename T, int Dim, access::mode Mode, access::target Target,
574
- access::placeholder IsPH>
575
- static detail::enable_if_t <(Dim > 0 ) && Mode == access::mode::atomic, T>
576
- readFromFirstAccElement (accessor<T, Dim, Mode, Target, IsPH> Src) {
577
- id<Dim> Id = getDelinearizedIndex (Src.get_range (), 0 );
578
- return Src[Id].load ();
579
- }
580
-
581
- template <typename T, int Dim, access::mode Mode, access::target Target,
582
- access::placeholder IsPH>
583
- static detail::enable_if_t <Mode != access::mode::atomic, T>
584
- readFromFirstAccElement (accessor<T, Dim, Mode, Target, IsPH> Src) {
585
- return *(Src.get_pointer ());
586
- }
587
-
588
- template <typename T, int Dim, access::mode Mode, access::target Target,
589
- access::placeholder IsPH>
590
- static detail::enable_if_t <Dim == 0 && Mode == access::mode::atomic, void >
591
- writeToFirstAccElement (accessor<T, Dim, Mode, Target, IsPH> Dst, T V) {
592
- #ifdef __ENABLE_USM_ADDR_SPACE__
593
- atomic<T, access ::address_space::global_device_space> AtomicDst = Dst;
594
- #else
595
- atomic<T, access ::address_space::global_space> AtomicDst = Dst;
596
- #endif // __ENABLE_USM_ADDR_SPACE__
597
- AtomicDst.store (V);
598
- }
599
-
600
- template <typename T, int Dim, access::mode Mode, access::target Target,
601
- access::placeholder IsPH>
602
- static detail::enable_if_t <(Dim > 0 ) && Mode == access::mode::atomic, void >
603
- writeToFirstAccElement (accessor<T, Dim, Mode, Target, IsPH> Dst, T V) {
604
- id<Dim> Id = getDelinearizedIndex (Dst.get_range (), 0 );
605
- Dst[Id].store (V);
606
- }
607
-
608
- template <typename T, int Dim, access::mode Mode, access::target Target,
609
- access::placeholder IsPH>
610
- static detail::enable_if_t <Mode != access::mode::atomic, void >
611
- writeToFirstAccElement (accessor<T, Dim, Mode, Target, IsPH> Dst, T V) {
612
- *(Dst.get_pointer ()) = V;
613
- }
614
-
615
559
// / Handles some special cases of the copy operation from one accessor
616
560
// / to another accessor. Returns true if the copy is handled here.
617
561
// /
@@ -632,7 +576,7 @@ class __SYCL_EXPORT handler {
632
576
single_task<class __copyAcc2Acc <TSrc, DimSrc, ModeSrc, TargetSrc,
633
577
TDst, DimDst, ModeDst, TargetDst,
634
578
IsPHSrc, IsPHDst>> ([=]() {
635
- writeToFirstAccElement (Dst, readFromFirstAccElement (Src));
579
+ * (Dst. get_pointer ()) = * (Src. get_pointer ( ));
636
580
});
637
581
return true ;
638
582
}
@@ -670,7 +614,7 @@ class __SYCL_EXPORT handler {
670
614
single_task<class __copyAcc2Ptr <TSrc, TDst, Dim, AccMode, AccTarget, IsPH>>
671
615
([=]() {
672
616
using TSrcNonConst = typename detail::remove_const_t <TSrc>;
673
- *(reinterpret_cast <TSrcNonConst *>(Dst)) = readFromFirstAccElement (Src);
617
+ *(reinterpret_cast <TSrcNonConst *>(Dst)) = * (Src. get_pointer () );
674
618
});
675
619
}
676
620
@@ -703,7 +647,7 @@ class __SYCL_EXPORT handler {
703
647
accessor<TDst, Dim, AccMode, AccTarget, IsPH> Dst) {
704
648
single_task<class __copyPtr2Acc <TSrc, TDst, Dim, AccMode, AccTarget, IsPH>>
705
649
([=]() {
706
- writeToFirstAccElement (Dst, *(reinterpret_cast <const TDst *>(Src) ));
650
+ * (Dst. get_pointer ()) = *(reinterpret_cast <const TDst *>(Src));
707
651
});
708
652
}
709
653
#endif // __SYCL_DEVICE_ONLY__
0 commit comments