@@ -18,6 +18,18 @@ template <typename T> class Modifier;
18
18
19
19
template <typename T> class Init ;
20
20
21
+ template <typename BufferT, typename ValueT>
22
+ void checkBufferValues (BufferT Buffer, ValueT Value) {
23
+ auto Acc = Buffer.template get_access <mode::read>();
24
+ for (size_t Idx = 0 ; Idx < Acc.get_count (); ++Idx) {
25
+ if (Acc[Idx] != Value) {
26
+ std::cerr << " buffer[" << Idx << " ] = " << Acc[Idx]
27
+ << " , expected val = " << Value << std::endl;
28
+ assert (0 && " Invalid data in the buffer" );
29
+ }
30
+ }
31
+ }
32
+
21
33
template <typename DataT>
22
34
void copy (buffer<DataT, 1 > &Src, buffer<DataT, 1 > &Dst, queue &Q) {
23
35
Q.submit ([&](handler &CGH) {
@@ -41,6 +53,11 @@ void copy(buffer<DataT, 1> &Src, buffer<DataT, 1> &Dst, queue &Q) {
41
53
42
54
if (RC != CL_SUCCESS)
43
55
throw runtime_error (" Can't wait for event on buffer copy" , RC);
56
+
57
+ if (Q.get_backend () != IH.get_backend ())
58
+ throw runtime_error (
59
+ " interop_handle::get_backend() returned a wrong value" ,
60
+ CL_INVALID_VALUE);
44
61
});
45
62
});
46
63
}
@@ -89,22 +106,8 @@ void test1() {
89
106
copy (Buffer2, Buffer1, Q);
90
107
}
91
108
92
- {
93
- auto Acc = Buffer1.get_access <mode::read>();
94
-
95
- for (size_t Idx = 0 ; Idx < Acc.get_count (); ++Idx) {
96
- std::cout << " First buffer [" << Idx << " ] = " << Acc[Idx] << std::endl;
97
- assert ((Acc[Idx] == COUNT - 1 ) && " Invalid data in the first buffer" );
98
- }
99
- }
100
- {
101
- auto Acc = Buffer2.get_access <mode::read>();
102
-
103
- for (size_t Idx = 0 ; Idx < Acc.get_count (); ++Idx) {
104
- std::cout << " Second buffer [" << Idx << " ] = " << Acc[Idx] << std::endl;
105
- assert ((Acc[Idx] == COUNT - 1 ) && " Invalid data in the second buffer" );
106
- }
107
- }
109
+ checkBufferValues (Buffer1, COUNT - 1 );
110
+ checkBufferValues (Buffer2, COUNT - 1 );
108
111
}
109
112
110
113
// Same as above, but performing each command group on a separate SYCL queue
@@ -128,23 +131,8 @@ void test2() {
128
131
modify (Buffer2, Q);
129
132
copy (Buffer2, Buffer1, Q);
130
133
}
131
-
132
- {
133
- auto Acc = Buffer1.get_access <mode::read>();
134
-
135
- for (size_t Idx = 0 ; Idx < Acc.get_count (); ++Idx) {
136
- std::cout << " First buffer [" << Idx << " ] = " << Acc[Idx] << std::endl;
137
- assert ((Acc[Idx] == COUNT - 1 ) && " Invalid data in the first buffer" );
138
- }
139
- }
140
- {
141
- auto Acc = Buffer2.get_access <mode::read>();
142
-
143
- for (size_t Idx = 0 ; Idx < Acc.get_count (); ++Idx) {
144
- std::cout << " Second buffer [" << Idx << " ] = " << Acc[Idx] << std::endl;
145
- assert ((Acc[Idx] == COUNT - 1 ) && " Invalid data in the second buffer" );
146
- }
147
- }
134
+ checkBufferValues (Buffer1, COUNT - 1 );
135
+ checkBufferValues (Buffer2, COUNT - 1 );
148
136
}
149
137
150
138
// Same as above but with queue constructed out of context
@@ -168,23 +156,8 @@ void test2_1() {
168
156
modify (Buffer2, Q);
169
157
copy (Buffer2, Buffer1, Q);
170
158
}
171
-
172
- {
173
- auto Acc = Buffer1.get_access <mode::read>();
174
-
175
- for (size_t Idx = 0 ; Idx < Acc.get_count (); ++Idx) {
176
- std::cout << " First buffer [" << Idx << " ] = " << Acc[Idx] << std::endl;
177
- assert ((Acc[Idx] == COUNT - 1 ) && " Invalid data in the first buffer" );
178
- }
179
- }
180
- {
181
- auto Acc = Buffer2.get_access <mode::read>();
182
-
183
- for (size_t Idx = 0 ; Idx < Acc.get_count (); ++Idx) {
184
- std::cout << " Second buffer [" << Idx << " ] = " << Acc[Idx] << std::endl;
185
- assert ((Acc[Idx] == COUNT - 1 ) && " Invalid data in the second buffer" );
186
- }
187
- }
159
+ checkBufferValues (Buffer1, COUNT - 1 );
160
+ checkBufferValues (Buffer2, COUNT - 1 );
188
161
}
189
162
190
163
// A test that does a clEnqueueWait inside the interop scope, for an event
@@ -245,14 +218,7 @@ void test5() {
245
218
246
219
copy (Buffer1, Buffer2, Q);
247
220
248
- {
249
- auto Acc = Buffer2.get_access <mode::read>();
250
-
251
- for (size_t Idx = 0 ; Idx < Acc.get_count (); ++Idx) {
252
- std::cout << " Second buffer [" << Idx << " ] = " << Acc[Idx] << std::endl;
253
- assert (Acc[Idx] == 123 );
254
- }
255
- }
221
+ checkBufferValues (Buffer2, static_cast <int >(123 ));
256
222
}
257
223
258
224
// The test checks that an exception which is thrown from host_task body
@@ -292,5 +258,6 @@ int main() {
292
258
test4 ();
293
259
test5 ();
294
260
test6 ();
261
+ std::cout << " Test PASSED" << std::endl;
295
262
return 0 ;
296
263
}
0 commit comments