@@ -47,16 +47,17 @@ class AccessorIteratorTest : public ::testing::Test {
47
47
}
48
48
49
49
template <int Dimensions, typename T = int >
50
- void checkPartialCopyThroughIteratorWithoutOffset (
51
- const sycl::range<Dimensions> &fullShape,
52
- const sycl::range<Dimensions> ©Shape) {
50
+ void
51
+ checkPartialCopyThroughIterator (const sycl::range<Dimensions> &fullShape,
52
+ const sycl::range<Dimensions> ©Shape,
53
+ const sycl::id<Dimensions> &offset = {}) {
53
54
std::vector<T> reference (fullShape.size ());
54
55
std::iota (reference.begin (), reference.end (), 0 );
55
56
sycl::buffer<T, Dimensions> buffer (reference.data (), fullShape);
56
57
std::vector<T> copied;
57
58
{
58
- auto accessor =
59
- buffer. template get_access <sycl::access_mode::read_write>( copyShape);
59
+ auto accessor = buffer. template get_access <sycl::access_mode::read_write>(
60
+ copyShape, offset );
60
61
auto I = accessor.begin ();
61
62
I = accessor.end ();
62
63
for (auto i = accessor.begin (), e = accessor.end (); i != e; ++i) {
@@ -69,12 +70,19 @@ class AccessorIteratorTest : public ::testing::Test {
69
70
{
70
71
auto fullAccessor = buffer.template get_access <sycl::access_mode::read>();
71
72
size_t linearId = 0 ;
72
- sycl::id<3 > shapeToCheck (Dimensions > 2 ? copyShape[Dimensions - 3 ] : 1 ,
73
- Dimensions > 1 ? copyShape[Dimensions - 2 ] : 1 ,
74
- copyShape[Dimensions - 1 ]);
75
- for (size_t z = 0 ; z < shapeToCheck[0 ]; ++z) {
76
- for (size_t y = 0 ; y < shapeToCheck[1 ]; ++y) {
77
- for (size_t x = 0 ; x < shapeToCheck[2 ]; ++x) {
73
+
74
+ sycl::id<3 > offsetToUse (Dimensions > 2 ? offset[Dimensions - 3 ] : 1 ,
75
+ Dimensions > 1 ? offset[Dimensions - 2 ] : 1 ,
76
+ offset[Dimensions - 1 ]);
77
+
78
+ sycl::id<3 > shapeToCheck (
79
+ (Dimensions > 2 ? copyShape[Dimensions - 3 ] : 1 ) - offsetToUse[0 ],
80
+ (Dimensions > 1 ? copyShape[Dimensions - 2 ] : 1 ) - offsetToUse[1 ],
81
+ copyShape[Dimensions - 1 ] - offsetToUse[2 ]);
82
+
83
+ for (size_t z = offsetToUse[0 ]; z < shapeToCheck[0 ]; ++z) {
84
+ for (size_t y = offsetToUse[1 ]; y < shapeToCheck[1 ]; ++y) {
85
+ for (size_t x = offsetToUse[2 ]; x < shapeToCheck[2 ]; ++x) {
78
86
auto value = accessHelper<Dimensions>(fullAccessor, z, y, x);
79
87
ASSERT_EQ (copied[linearId], value);
80
88
++linearId;
@@ -293,36 +301,72 @@ TEST_F(AccessorIteratorTest, FullCopy3D) {
293
301
}
294
302
295
303
TEST_F (AccessorIteratorTest, PartialCopyWithoutOffset1D) {
296
- ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIteratorWithoutOffset (
297
- sycl::range<1 >{10 }, sycl::range<1 >{5 }));
298
- ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIteratorWithoutOffset (
299
- sycl::range<1 >{10 }, sycl::range<1 >{10 }));
304
+ ASSERT_NO_FATAL_FAILURE (
305
+ checkPartialCopyThroughIterator ( sycl::range<1 >{10 }, sycl::range<1 >{5 }));
306
+ ASSERT_NO_FATAL_FAILURE (
307
+ checkPartialCopyThroughIterator ( sycl::range<1 >{10 }, sycl::range<1 >{10 }));
300
308
}
301
309
302
310
TEST_F (AccessorIteratorTest, PartialCopyWithoutOffset2D) {
303
- ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIteratorWithoutOffset (
311
+ ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIterator (
304
312
sycl::range<2 >{5 , 5 }, sycl::range<2 >{3 , 3 }));
305
- ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIteratorWithoutOffset (
313
+ ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIterator (
306
314
sycl::range<2 >{5 , 5 }, sycl::range<2 >{5 , 5 }));
307
- ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIteratorWithoutOffset (
315
+ ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIterator (
308
316
sycl::range<2 >{5 , 5 }, sycl::range<2 >{2 , 5 }));
309
- ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIteratorWithoutOffset (
317
+ ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIterator (
310
318
sycl::range<2 >{5 , 5 }, sycl::range<2 >{5 , 2 }));
311
- ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIteratorWithoutOffset (
319
+ ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIterator (
312
320
sycl::range<2 >{5 , 5 }, sycl::range<2 >{3 , 2 }));
313
321
}
314
322
315
323
TEST_F (AccessorIteratorTest, PartialCopyWithoutOffset3D) {
316
- ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIteratorWithoutOffset (
324
+ ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIterator (
317
325
sycl::range<3 >{5 , 5 , 5 }, sycl::range<3 >{3 , 3 , 3 }));
318
- ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIteratorWithoutOffset (
326
+ ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIterator (
319
327
sycl::range<3 >{5 , 5 , 5 }, sycl::range<3 >{5 , 3 , 3 }));
320
- ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIteratorWithoutOffset (
328
+ ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIterator (
321
329
sycl::range<3 >{5 , 5 , 5 }, sycl::range<3 >{3 , 5 , 3 }));
322
- ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIteratorWithoutOffset (
330
+ ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIterator (
323
331
sycl::range<3 >{5 , 5 , 5 }, sycl::range<3 >{3 , 3 , 5 }));
324
- ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIteratorWithoutOffset (
332
+ ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIterator (
325
333
sycl::range<3 >{5 , 5 , 5 }, sycl::range<3 >{5 , 5 , 5 }));
326
- ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIteratorWithoutOffset (
334
+ ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIterator (
327
335
sycl::range<3 >{5 , 5 , 5 }, sycl::range<3 >{1 , 2 , 3 }));
328
336
}
337
+
338
+ TEST_F (AccessorIteratorTest, PartialCopyWithOffset1D) {
339
+ ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIterator (
340
+ sycl::range<1 >{10 }, sycl::range<1 >{5 }, sycl::id<1 >{3 }));
341
+ ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIterator (
342
+ sycl::range<1 >{10 }, sycl::range<1 >{5 }, sycl::id<1 >{5 }));
343
+ }
344
+
345
+ TEST_F (AccessorIteratorTest, PartialCopyWithOffset2D) {
346
+ ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIterator (
347
+ sycl::range<2 >{10 , 10 }, sycl::range<2 >{5 , 5 }, sycl::id<2 >{3 , 3 }));
348
+ ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIterator (
349
+ sycl::range<2 >{10 , 10 }, sycl::range<2 >{5 , 5 }, sycl::id<2 >{3 , 0 }));
350
+ ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIterator (
351
+ sycl::range<2 >{10 , 10 }, sycl::range<2 >{5 , 5 }, sycl::id<2 >{0 , 3 }));
352
+ ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIterator (
353
+ sycl::range<2 >{10 , 10 }, sycl::range<2 >{5 , 5 }, sycl::id<2 >{5 , 5 }));
354
+ ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIterator (
355
+ sycl::range<2 >{5 , 10 }, sycl::range<2 >{3 , 5 }, sycl::id<2 >{1 , 4 }));
356
+ ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIterator (
357
+ sycl::range<2 >{10 , 5 }, sycl::range<2 >{5 , 3 }, sycl::id<2 >{5 , 1 }));
358
+ }
359
+
360
+ TEST_F (AccessorIteratorTest, PartialCopyWithOffset3D) {
361
+ ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIterator (
362
+ sycl::range<3 >{7 , 7 , 7 }, sycl::range<3 >{3 , 3 , 3 }, sycl::id<3 >{2 , 2 , 2 }));
363
+ ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIterator (
364
+ sycl::range<3 >{8 , 8 , 8 }, sycl::range<3 >{4 , 4 , 4 }, sycl::id<3 >{4 , 4 , 4 }));
365
+ // FIXME: figure out why the test below fails
366
+ // ASSERT_NO_FATAL_FAILURE(checkPartialCopyThroughIterator(
367
+ // sycl::range<3>{7, 7, 7}, sycl::range<3>{3, 3, 3}, sycl::id<3>{4, 4, 4}));
368
+ ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIterator (
369
+ sycl::range<3 >{7 , 7 , 7 }, sycl::range<3 >{3 , 4 , 5 }, sycl::id<3 >{3 , 2 , 1 }));
370
+ ASSERT_NO_FATAL_FAILURE (checkPartialCopyThroughIterator (
371
+ sycl::range<3 >{9 , 8 , 7 }, sycl::range<3 >{3 , 4 , 5 }, sycl::id<3 >{3 , 2 , 1 }));
372
+ }
0 commit comments