Skip to content

Commit b63b23d

Browse files
authored
[SYCL] Add a check for interop_handle::get_backend() method (intel#258)
This patch also has NFC change that removes excessive printing to std::out Signed-off-by: Vyacheslav N Klochkov <vyacheslav.n.klochkov@intel.com>
1 parent e0922f0 commit b63b23d

File tree

1 file changed

+25
-58
lines changed

1 file changed

+25
-58
lines changed

SYCL/HostInteropTask/interop-task.cpp

Lines changed: 25 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,18 @@ template <typename T> class Modifier;
1818

1919
template <typename T> class Init;
2020

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+
2133
template <typename DataT>
2234
void copy(buffer<DataT, 1> &Src, buffer<DataT, 1> &Dst, queue &Q) {
2335
Q.submit([&](handler &CGH) {
@@ -41,6 +53,11 @@ void copy(buffer<DataT, 1> &Src, buffer<DataT, 1> &Dst, queue &Q) {
4153

4254
if (RC != CL_SUCCESS)
4355
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);
4461
});
4562
});
4663
}
@@ -89,22 +106,8 @@ void test1() {
89106
copy(Buffer2, Buffer1, Q);
90107
}
91108

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);
108111
}
109112

110113
// Same as above, but performing each command group on a separate SYCL queue
@@ -128,23 +131,8 @@ void test2() {
128131
modify(Buffer2, Q);
129132
copy(Buffer2, Buffer1, Q);
130133
}
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);
148136
}
149137

150138
// Same as above but with queue constructed out of context
@@ -168,23 +156,8 @@ void test2_1() {
168156
modify(Buffer2, Q);
169157
copy(Buffer2, Buffer1, Q);
170158
}
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);
188161
}
189162

190163
// A test that does a clEnqueueWait inside the interop scope, for an event
@@ -245,14 +218,7 @@ void test5() {
245218

246219
copy(Buffer1, Buffer2, Q);
247220

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));
256222
}
257223

258224
// The test checks that an exception which is thrown from host_task body
@@ -292,5 +258,6 @@ int main() {
292258
test4();
293259
test5();
294260
test6();
261+
std::cout << "Test PASSED" << std::endl;
295262
return 0;
296263
}

0 commit comments

Comments
 (0)