Skip to content
This repository was archived by the owner on Mar 28, 2023. It is now read-only.

Commit 5d63e2a

Browse files
author
Andrew Lamzed-Short
authored
[SYCL] Add end-to-end tests for queue shortcut functions (#1362)
1 parent 70a12b5 commit 5d63e2a

File tree

1 file changed

+165
-0
lines changed

1 file changed

+165
-0
lines changed
Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
// RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -o %t.out
2+
// RUN: %ACC_RUN_PLACEHOLDER %t.out
3+
// RUN: %CPU_RUN_PLACEHOLDER %t.out
4+
// RUN: %GPU_RUN_PLACEHOLDER %t.out
5+
6+
//==-- queue_shortcut_functions.cpp - SYCL queue shortcut functions test ---==//
7+
//
8+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
9+
// See https://llvm.org/LICENSE.txt for license information.
10+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
11+
//
12+
//==------------------------------------------------------------------------==//
13+
14+
#include <sycl/sycl.hpp>
15+
16+
#include <iostream>
17+
#include <memory>
18+
#include <vector>
19+
20+
int main() {
21+
sycl::queue Q;
22+
23+
constexpr std::size_t Size = 5;
24+
25+
{
26+
const int FillValue = 42;
27+
std::vector<int> Data(Size, 0);
28+
29+
{
30+
sycl::buffer<int> DataBuffer(Data.data(), sycl::range<1>(Size));
31+
32+
sycl::accessor<int, 1, sycl::access::mode::read_write,
33+
sycl::access::target::device,
34+
sycl::access::placeholder::true_t,
35+
sycl::ext::oneapi::accessor_property_list<>>
36+
Acc(DataBuffer);
37+
38+
Q.fill(Acc, FillValue);
39+
Q.update_host(Acc);
40+
Q.wait();
41+
}
42+
43+
for (int i = 0; i < Size; ++i) {
44+
if (Data[i] != FillValue) {
45+
std::cerr << "Incorrect result in fill/update_host test (index " << i
46+
<< "): got " << Data[i] << ", expected " << FillValue
47+
<< std::endl;
48+
return 1;
49+
}
50+
}
51+
}
52+
53+
{
54+
const std::vector<int> ReferenceData = {1, 2, 3, 4, 5};
55+
std::vector<int> Data(Size, 0);
56+
std::vector<int> CopyBackData(Size, 0);
57+
58+
{
59+
sycl::buffer<int> Buf(Data.data(), sycl::range<1>(Size));
60+
61+
sycl::accessor<int, 1, sycl::access::mode::read_write,
62+
sycl::access::target::device,
63+
sycl::access::placeholder::true_t,
64+
sycl::ext::oneapi::accessor_property_list<>>
65+
Acc(Buf);
66+
Q.copy(ReferenceData.data(), Acc);
67+
Q.wait();
68+
69+
Q.copy(Acc, CopyBackData.data());
70+
Q.wait();
71+
}
72+
73+
for (int i = 0; i < Size; ++i) {
74+
if (ReferenceData[i] != Data[i]) {
75+
std::cerr << "Incorrect result in copy(ptr,acc) at index " << i
76+
<< ": got " << Data[i] << ", expected " << ReferenceData[i]
77+
<< std::endl;
78+
return 1;
79+
}
80+
}
81+
82+
for (int i = 0; i < Size; ++i) {
83+
if (ReferenceData[i] != CopyBackData[i]) {
84+
std::cerr << "Incorrect result in copy(acc,ptr) at index " << i
85+
<< ": got " << CopyBackData[i] << ", expected "
86+
<< ReferenceData[i] << std::endl;
87+
return 1;
88+
}
89+
}
90+
}
91+
92+
{
93+
const std::vector<int> ReferenceData = {2, 4, 6, 8, 10};
94+
std::shared_ptr<int[]> DataPtr(new int[Size]{0});
95+
std::shared_ptr<int[]> CopyBackDataPtr(new int[Size]{0});
96+
97+
{
98+
sycl::buffer<int> Buf(DataPtr, sycl::range<1>(Size));
99+
100+
sycl::accessor<int, 1, sycl::access::mode::read_write,
101+
sycl::access::target::device,
102+
sycl::access::placeholder::true_t,
103+
sycl::ext::oneapi::accessor_property_list<>>
104+
Acc(Buf);
105+
Q.copy(ReferenceData.data(), Acc);
106+
Q.wait();
107+
108+
Q.copy(Acc, CopyBackDataPtr);
109+
Q.wait();
110+
}
111+
112+
for (int i = 0; i < Size; ++i) {
113+
if (ReferenceData[i] != DataPtr.get()[i]) {
114+
std::cerr << "Incorrect result in copy(shared_ptr,acc) at index " << i
115+
<< ": got " << DataPtr.get()[i] << ", expected "
116+
<< ReferenceData[i] << std::endl;
117+
return 1;
118+
}
119+
}
120+
121+
for (int i = 0; i < Size; ++i) {
122+
if (ReferenceData[i] != CopyBackDataPtr.get()[i]) {
123+
std::cerr << "Incorrect result in copy(acc,shared_ptr) at index " << i
124+
<< ": got " << CopyBackDataPtr.get()[i] << ", expected "
125+
<< ReferenceData[i] << std::endl;
126+
return 1;
127+
}
128+
}
129+
}
130+
131+
{
132+
const std::vector<int> ReferenceData = {3, 6, 9, 12, 15};
133+
std::vector<int> Data(Size, 0);
134+
135+
{
136+
sycl::buffer<int> RefBuf(ReferenceData.data(), sycl::range<1>(Size));
137+
sycl::buffer<int> DataBuf(Data.data(), sycl::range<1>(Size));
138+
139+
sycl::accessor<int, 1, sycl::access::mode::read,
140+
sycl::access::target::device,
141+
sycl::access::placeholder::true_t,
142+
sycl::ext::oneapi::accessor_property_list<>>
143+
RefAcc(RefBuf);
144+
sycl::accessor<int, 1, sycl::access::mode::write,
145+
sycl::access::target::device,
146+
sycl::access::placeholder::true_t,
147+
sycl::ext::oneapi::accessor_property_list<>>
148+
DataAcc(DataBuf);
149+
150+
Q.copy(RefAcc, DataAcc);
151+
Q.wait();
152+
}
153+
154+
for (int i = 0; i < Size; ++i) {
155+
if (ReferenceData[i] != Data[i]) {
156+
std::cerr << "Incorrect result in copy(acc,acc) at index " << i
157+
<< ": got " << Data[i] << ", expected " << ReferenceData[i]
158+
<< std::endl;
159+
return 1;
160+
}
161+
}
162+
}
163+
164+
return 0;
165+
}

0 commit comments

Comments
 (0)