@@ -212,7 +212,7 @@ class accessor_common {
212
212
MIDs[0 ] = Index;
213
213
}
214
214
215
- template <int CurDims = SubDims, typename = enable_if_t <CurDims != 1 >>
215
+ template <int CurDims = SubDims, typename = enable_if_t <( CurDims > 1 ) >>
216
216
AccessorSubscript<CurDims - 1 > operator [](size_t Index) {
217
217
MIDs[Dims - CurDims] = Index;
218
218
return AccessorSubscript<CurDims - 1 >(MAccessor, MIDs);
@@ -282,19 +282,19 @@ class accessor :
282
282
283
283
size_t Result = 0 ;
284
284
for (int I = 0 ; I < Dims; ++I)
285
- Result = Result * getOrigRange ()[I] + getOffset ()[I] + Id[I];
285
+ Result = Result * getMemoryRange ()[I] + getOffset ()[I] + Id[I];
286
286
return Result;
287
287
}
288
288
289
289
#ifdef __SYCL_DEVICE_ONLY__
290
290
291
291
id<AdjustedDim> &getOffset () { return impl.Offset ; }
292
- range<AdjustedDim> &getRange () { return impl.AccessRange ; }
293
- range<AdjustedDim> &getOrigRange () { return impl.MemRange ; }
292
+ range<AdjustedDim> &getAccessRange () { return impl.AccessRange ; }
293
+ range<AdjustedDim> &getMemoryRange () { return impl.MemRange ; }
294
294
295
295
const id<AdjustedDim> &getOffset () const { return impl.Offset ; }
296
- const range<AdjustedDim> &getRange () const { return impl.AccessRange ; }
297
- const range<AdjustedDim> &getOrigRange () const { return impl.MemRange ; }
296
+ const range<AdjustedDim> &getAccessRange () const { return impl.AccessRange ; }
297
+ const range<AdjustedDim> &getMemoryRange () const { return impl.MemRange ; }
298
298
299
299
detail::AccessorImplDevice<AdjustedDim> impl;
300
300
@@ -305,8 +305,8 @@ class accessor :
305
305
MData = Ptr;
306
306
for (int I = 0 ; I < AdjustedDim; ++I) {
307
307
getOffset ()[I] = Offset[I];
308
- getRange ()[I] = AccessRange[I];
309
- getOrigRange ()[I] = MemRange[I];
308
+ getAccessRange ()[I] = AccessRange[I];
309
+ getMemoryRange ()[I] = MemRange[I];
310
310
}
311
311
// In case of 1D buffer, adjust pointer during initialization rather
312
312
// then each time in operator[] or get_pointer functions.
@@ -317,9 +317,9 @@ class accessor :
317
317
PtrType getQualifiedPtr () const { return MData; }
318
318
#else
319
319
320
- using AccessorBaseHost::getRange ;
320
+ using AccessorBaseHost::getAccessRange ;
321
321
using AccessorBaseHost::getOffset;
322
- using AccessorBaseHost::getOrigRange ;
322
+ using AccessorBaseHost::getMemoryRange ;
323
323
324
324
char padding[sizeof (detail::AccessorImplDevice<AdjustedDim>) +
325
325
sizeof (PtrType) - sizeof (detail::AccessorBaseHost)];
@@ -332,17 +332,15 @@ class accessor :
332
332
333
333
public:
334
334
using value_type = DataT;
335
- using reference = typename detail::PtrValueType< DataT, AS>::type &;
335
+ using reference = DataT &;
336
336
using const_reference = const reference;
337
337
338
338
template <int Dims = Dimensions>
339
- accessor (buffer<DataT, 1 > &BufferRef,
340
- enable_if_t <((!IsPlaceH && IsHostBuf) ||
339
+ accessor (enable_if_t <((!IsPlaceH && IsHostBuf) ||
341
340
(IsPlaceH && (IsGlobalBuf || IsConstantBuf))) &&
342
- Dims == 0 > )
341
+ Dims == 0 , buffer<DataT, 1 > > &BufferRef )
343
342
#ifdef __SYCL_DEVICE_ONLY__
344
- : impl(id<AdjustedDim>(), BufferRef.get_range(), BufferRef.MemRange)
345
- {
343
+ : impl(id<AdjustedDim>(), BufferRef.get_range(), BufferRef.MemRange) {
346
344
#else
347
345
: AccessorBaseHost (
348
346
/* Offset=*/ {0 , 0 , 0 },
@@ -351,15 +349,17 @@ class accessor :
351
349
detail::getSyclObjImpl (BufferRef).get (), AdjustedDim,
352
350
sizeof (DataT)) {
353
351
detail::EventImplPtr Event =
354
- detail::Scheduler::getInstance ().addHostAccessor (this );
352
+ detail::Scheduler::getInstance ().addHostAccessor (
353
+ AccessorBaseHost::impl.get ());
355
354
Event->wait (Event);
356
355
#endif
357
356
}
358
357
359
358
template <int Dims = Dimensions>
360
359
accessor (
361
- buffer<DataT, 1 > &BufferRef, handler &CommandGroupHandler,
362
- enable_if_t <(!IsPlaceH && (IsGlobalBuf || IsConstantBuf)) && Dims == 0 >)
360
+ buffer<DataT, 1 > &BufferRef,
361
+ enable_if_t <(!IsPlaceH && (IsGlobalBuf || IsConstantBuf)) && Dims == 0 ,
362
+ handler> &CommandGroupHandler)
363
363
#ifdef __SYCL_DEVICE_ONLY__
364
364
: impl (id<AdjustedDim>(), BufferRef.get_range (), BufferRef.MemRange ) {
365
365
}
@@ -458,13 +458,13 @@ class accessor :
458
458
459
459
constexpr bool is_placeholder () const { return IsPlaceH; }
460
460
461
- size_t get_size () const { return getRange ().size () * sizeof (DataT); }
461
+ size_t get_size () const { return getMemoryRange ().size () * sizeof (DataT); }
462
462
463
- size_t get_count () const { return getRange ().size (); }
463
+ size_t get_count () const { return getMemoryRange ().size (); }
464
464
465
465
template <int Dims = Dimensions, typename = enable_if_t <(Dims > 0 )>>
466
466
range<Dimensions> get_range () const {
467
- return detail::convertToArrayOfN<Dimensions, 1 >(getRange ());
467
+ return detail::convertToArrayOfN<Dimensions, 1 >(getAccessRange ());
468
468
}
469
469
470
470
template <int Dims = Dimensions, typename = enable_if_t <(Dims > 0 )>>
@@ -475,7 +475,7 @@ class accessor :
475
475
template <int Dims = Dimensions,
476
476
typename = enable_if_t <IsAccessAnyWrite && Dims == 0 >>
477
477
operator RefType () const {
478
- const size_t LinearIndex = getLinearIndex (id<Dimensions >());
478
+ const size_t LinearIndex = getLinearIndex (id<AdjustedDim >());
479
479
return *(getQualifiedPtr () + LinearIndex);
480
480
}
481
481
@@ -570,6 +570,9 @@ class accessor :
570
570
const size_t LinearIndex = getLinearIndex (id<AdjustedDim>());
571
571
return constant_ptr<DataT>(getQualifiedPtr () + LinearIndex);
572
572
}
573
+
574
+ bool operator ==(const accessor &Rhs) const { return impl == Rhs.impl ; }
575
+ bool operator !=(const accessor &Rhs) const { return !(*this == Rhs); }
573
576
};
574
577
575
578
// Local accessor
@@ -604,8 +607,8 @@ class accessor<DataT, Dimensions, AccessMode, access::target::local,
604
607
#ifdef __SYCL_DEVICE_ONLY__
605
608
detail::LocalAccessorBaseDevice<AdjustedDim> impl;
606
609
607
- sycl::range<AdjustedDim> &getSize () { return impl.AccessRange ; }
608
- const sycl::range<AdjustedDim> &getSize () const { return impl.AccessRange ; }
610
+ sycl::range<AdjustedDim> &getSize () { return impl.MemRange ; }
611
+ const sycl::range<AdjustedDim> &getSize () const { return impl.MemRange ; }
609
612
610
613
void __init (PtrType Ptr, range<AdjustedDim> AccessRange,
611
614
range<AdjustedDim> MemRange, id<AdjustedDim> Offset) {
@@ -719,6 +722,9 @@ class accessor<DataT, Dimensions, AccessMode, access::target::local,
719
722
local_ptr<DataT> get_pointer () const {
720
723
return local_ptr<DataT>(getQualifiedPtr ());
721
724
}
725
+
726
+ bool operator ==(const accessor &Rhs) const { return impl == Rhs.impl ; }
727
+ bool operator !=(const accessor &Rhs) const { return !(*this == Rhs); }
722
728
};
723
729
724
730
// Image accessor
@@ -815,9 +821,10 @@ struct hash<cl::sycl::accessor<DataT, Dimensions, AccessMode, AccessTarget,
815
821
// Hash is not supported on DEVICE. Just return 0 here.
816
822
return 0 ;
817
823
#else
818
- std::shared_ptr<cl::sycl::detail::AccessorBaseHost> AccBaseImplPtr =
819
- cl::sycl::detail::getSyclObjImpl (A);
820
- return hash<decltype (AccBaseImplPtr)>()(AccBaseImplPtr);
824
+ // getSyclObjImpl() here returns a pointer to either AccessorImplHost
825
+ // or LocalAccessorImplHost depending on the AccessTarget.
826
+ auto AccImplPtr = cl::sycl::detail::getSyclObjImpl (A);
827
+ return hash<decltype (AccImplPtr)>()(AccImplPtr);
821
828
#endif
822
829
}
823
830
};
0 commit comments