Skip to content

Commit 9dd68c5

Browse files
alexeyvoronov-intelromanovvlad
authored andcommitted
[SYCL] Fix for SYCL accessor.get_count() and accessor.get_size() methods.
A non-local accessor returned incorrect values when it was created with the provided range which was different from the buffer range. Signed-off-by: Alexey Voronov <[email protected]>
1 parent eb3ac32 commit 9dd68c5

File tree

2 files changed

+39
-6
lines changed

2 files changed

+39
-6
lines changed

sycl/include/CL/sycl/accessor.hpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -748,11 +748,11 @@ class accessor :
748748
(IsPlaceH && (IsGlobalBuf || IsConstantBuf)))>* = nullptr>
749749
accessor(buffer<DataT, 1, AllocatorT> &BufferRef)
750750
#ifdef __SYCL_DEVICE_ONLY__
751-
: impl(id<AdjustedDim>(), BufferRef.get_range(), BufferRef.get_range()) {
751+
: impl(id<AdjustedDim>(), range<1>{1}, BufferRef.get_range()) {
752752
#else
753753
: AccessorBaseHost(
754754
/*Offset=*/{0, 0, 0},
755-
detail::convertToArrayOfN<3, 1>(BufferRef.get_range()),
755+
detail::convertToArrayOfN<3, 1>(range<1>{1}),
756756
detail::convertToArrayOfN<3, 1>(BufferRef.get_range()), AccessMode,
757757
detail::getSyclObjImpl(BufferRef).get(), AdjustedDim, sizeof(DataT),
758758
BufferRef.OffsetInBytes, BufferRef.IsSubBuffer) {
@@ -771,12 +771,12 @@ class accessor :
771771
(!IsPlaceH && (IsGlobalBuf || IsConstantBuf)),
772772
handler> &CommandGroupHandler)
773773
#ifdef __SYCL_DEVICE_ONLY__
774-
: impl(id<AdjustedDim>(), BufferRef.get_range(), BufferRef.get_range()) {
774+
: impl(id<AdjustedDim>(), range<1>{1}, BufferRef.get_range()) {
775775
}
776776
#else
777777
: AccessorBaseHost(
778778
/*Offset=*/{0, 0, 0},
779-
detail::convertToArrayOfN<3, 1>(BufferRef.get_range()),
779+
detail::convertToArrayOfN<3, 1>(range<1>{1}),
780780
detail::convertToArrayOfN<3, 1>(BufferRef.get_range()), AccessMode,
781781
detail::getSyclObjImpl(BufferRef).get(), Dimensions, sizeof(DataT),
782782
BufferRef.OffsetInBytes, BufferRef.IsSubBuffer) {
@@ -875,9 +875,9 @@ class accessor :
875875

876876
constexpr bool is_placeholder() const { return IsPlaceH; }
877877

878-
size_t get_size() const { return getMemoryRange().size() * sizeof(DataT); }
878+
size_t get_size() const { return getAccessRange().size() * sizeof(DataT); }
879879

880-
size_t get_count() const { return getMemoryRange().size(); }
880+
size_t get_count() const { return getAccessRange().size(); }
881881

882882
template <int Dims = Dimensions, typename = detail::enable_if_t<(Dims > 0)>>
883883
range<Dimensions> get_range() const {

sycl/test/basic_tests/buffer/buffer.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -650,6 +650,39 @@ int main() {
650650
b(data, cl::sycl::range<1>(8), buf_alloc);
651651
}
652652

653+
{
654+
constexpr int Size = 6;
655+
cl::sycl::buffer<char, 1> Buf_1(Size);
656+
cl::sycl::buffer<char, 1> Buf_2(Size / 2);
657+
658+
auto AccA = Buf_1.get_access<cl::sycl::access::mode::read_write>(Size / 2);
659+
auto AccB = Buf_2.get_access<cl::sycl::access::mode::read_write>(Size / 2);
660+
assert(AccA.get_size() == AccB.get_size());
661+
assert(AccA.get_range() == AccB.get_range());
662+
assert(AccA.get_count() == AccB.get_count());
663+
664+
auto AH0 = accessor<char, 0, access::mode::read_write,
665+
access::target::host_buffer>(Buf_1);
666+
auto BH0 = accessor<char, 0, access::mode::read_write,
667+
access::target::host_buffer>(Buf_2);
668+
assert(AH0.get_size() == sizeof(char));
669+
assert(BH0.get_size() == sizeof(char));
670+
assert(AH0.get_count() == 1);
671+
assert(BH0.get_count() == 1);
672+
673+
queue Queue;
674+
Queue.submit([&](handler &CGH) {
675+
auto AK0 = accessor<char, 0, access::mode::read_write,
676+
access::target::global_buffer>(Buf_1, CGH);
677+
auto BK0 = accessor<char, 0, access::mode::read_write,
678+
access::target::global_buffer>(Buf_2, CGH);
679+
assert(AK0.get_size() == sizeof(char));
680+
assert(BK0.get_size() == sizeof(char));
681+
assert(AK0.get_count() == 1);
682+
assert(BK0.get_count() == 1);
683+
});
684+
}
685+
653686
// TODO tests with mutex property
654687
return failed;
655688
}

0 commit comments

Comments
 (0)