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

Commit 2a0f4b6

Browse files
committed
Apply suggestions
1 parent 328e794 commit 2a0f4b6

File tree

1 file changed

+81
-192
lines changed

1 file changed

+81
-192
lines changed

SYCL/Basic/accessor/accessor.cpp

Lines changed: 81 additions & 192 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ void fillVec(std::vector<int> &vec) {
6767
}
6868
}
6969

70-
template <typename T> void modifyAccBuf(const T &acc, bool useReverse = false) {
70+
template <typename T> void modifyAccBuf(const T &acc, bool useReverse) {
7171
if (!useReverse) {
7272
for (auto It = acc.begin(); It != acc.end(); It++)
7373
*It *= 2;
@@ -82,7 +82,7 @@ template <typename T> void modifyAccBuf(const T &acc, bool useReverse = false) {
8282
}
8383

8484
template <typename T1, typename T2>
85-
void copyAccBuf(const T1 &accProd, T2 &accCons, bool useReverse = false) {
85+
void copyAccBuf(const T1 &accProd, T2 &accCons, bool useReverse) {
8686
if (!useReverse) {
8787
auto ItCons = accCons.begin();
8888
for (auto ItProd = accProd.cbegin(); ItProd != accProd.cend(); ++ItProd)
@@ -94,6 +94,72 @@ void copyAccBuf(const T1 &accProd, T2 &accCons, bool useReverse = false) {
9494
}
9595
}
9696

97+
template <typename T> void testAccModImpl(T &buf, bool useReverse) {
98+
sycl::queue q;
99+
q.submit([&](sycl::handler &cgh) {
100+
auto devAcc = buf.template get_access<sycl::access::mode::read_write>(cgh);
101+
cgh.single_task([=]() { modifyAccBuf(devAcc, useReverse); });
102+
});
103+
q.wait();
104+
105+
auto hostAcc = buf.template get_access<sycl::access::mode::read_write>();
106+
modifyAccBuf(hostAcc, useReverse);
107+
}
108+
109+
void testAccMod(std::vector<int> &vec, bool useReverse = false, int Dim = 1) {
110+
try {
111+
if (Dim == 1) {
112+
sycl::buffer<int> buf(vec.data(), vec.size());
113+
testAccModImpl(buf, useReverse);
114+
} else if (Dim == 3) {
115+
sycl::buffer<int, 3> buf(vec.data(), sycl::range<3>(2, 3, 4));
116+
testAccModImpl(buf, useReverse);
117+
}
118+
} catch (sycl::exception &e) {
119+
std::cout << e.what() << std::endl;
120+
}
121+
122+
for (size_t i = 0; i < vec.size(); ++i)
123+
assert(vec[i] == (i * 2 + 1) * 2 + 1);
124+
}
125+
126+
template <typename T>
127+
void testAccCopyImpl(T &buf1, T &buf2, T &buf3, bool useReverse) {
128+
sycl::queue q;
129+
q.submit([&](sycl::handler &cgh) {
130+
auto accProd = buf1.template get_access<sycl::access::mode::read>(cgh);
131+
auto accCons = buf2.template get_access<sycl::access::mode::write>(cgh);
132+
cgh.single_task([=]() { copyAccBuf(accProd, accCons, useReverse); });
133+
});
134+
q.wait();
135+
136+
auto accProd = buf2.template get_access<sycl::access::mode::read>();
137+
auto accCons = buf3.template get_access<sycl::access::mode::write>();
138+
copyAccBuf(accProd, accCons, useReverse);
139+
}
140+
141+
void testAccCopy(std::vector<int> &vec1, std::vector<int> &vec2,
142+
std::vector<int> &vec3, bool useReverse = false, int Dim = 1) {
143+
try {
144+
if (Dim == 1) {
145+
sycl::buffer<int> bufProd(vec1.data(), vec1.size());
146+
sycl::buffer<int> bufCons1(vec2.data(), vec2.size());
147+
sycl::buffer<int> bufCons2(vec3.data(), vec3.size());
148+
testAccCopyImpl(bufProd, bufCons1, bufCons2, useReverse);
149+
} else if (Dim == 3) {
150+
sycl::buffer<int, 3> bufProd(vec1.data(), sycl::range<3>(2, 3, 4));
151+
sycl::buffer<int, 3> bufCons1(vec2.data(), sycl::range<3>(2, 3, 4));
152+
sycl::buffer<int, 3> bufCons2(vec3.data(), sycl::range<3>(2, 3, 4));
153+
testAccCopyImpl(bufProd, bufCons1, bufCons2, useReverse);
154+
}
155+
} catch (sycl::exception &e) {
156+
std::cout << e.what() << std::endl;
157+
}
158+
159+
for (const auto &i : vec3)
160+
assert(i == 1);
161+
}
162+
97163
int main() {
98164
// Host accessor.
99165
{
@@ -820,247 +886,70 @@ int main() {
820886
}
821887
}
822888

823-
// Accessor begin/end member functions
889+
// Accessor begin/end member function
824890
{
825891
// 0-dim accessor iteration
826892
{
827-
int data = 8;
828-
try {
829-
sycl::buffer<int> buf(&data, 1);
830-
sycl::queue q;
831-
832-
q.submit([&](sycl::handler &cgh) {
833-
auto devAcc = buf.get_access<sycl::access::mode::read_write>(cgh);
834-
cgh.single_task([=]() { modifyAccBuf(devAcc); });
835-
});
836-
q.wait();
837-
838-
auto hostAcc = buf.get_access<sycl::access::mode::read_write>();
839-
modifyAccBuf(hostAcc);
840-
} catch (sycl::exception &e) {
841-
std::cout << e.what() << std::endl;
842-
}
843-
844-
assert(data == (8 * 2 + 1) * 2 + 1);
893+
std::vector<int> vec(1, 0);
894+
testAccMod(vec);
845895
}
846896

847897
// Simple iteration through the accessor
848898
{
849-
constexpr int N = 32;
850-
std::vector<int> vec(N);
899+
std::vector<int> vec(32);
851900
fillVec(vec);
852-
853-
try {
854-
sycl::buffer<int> buf(vec.data(), vec.size());
855-
sycl::queue q;
856-
857-
q.submit([&](sycl::handler &cgh) {
858-
auto devAcc = buf.get_access<sycl::access::mode::read_write>(cgh);
859-
cgh.single_task([=]() { modifyAccBuf(devAcc); });
860-
});
861-
q.wait();
862-
863-
auto hostAcc = buf.get_access<sycl::access::mode::read_write>();
864-
modifyAccBuf(hostAcc);
865-
} catch (sycl::exception &e) {
866-
std::cout << e.what() << std::endl;
867-
}
868-
869-
for (size_t i = 0; i < vec.size(); ++i)
870-
assert(vec[i] == (i * 2 + 1) * 2 + 1);
901+
testAccMod(vec);
871902
}
872903

873904
// Const iterator
874905
{
875906
constexpr int N = 32;
876907
std::vector<int> vecProd(N, 1), vecCons1(N, 0), vecCons2(N, 0);
877-
try {
878-
sycl::buffer<int> bufProd(vecProd.data(), vecProd.size());
879-
sycl::buffer<int> bufCons1(vecCons1.data(), vecCons1.size());
880-
sycl::buffer<int> bufCons2(vecCons2.data(), vecCons2.size());
881-
sycl::queue q;
882-
883-
q.submit([&](sycl::handler &cgh) {
884-
auto accProd = bufProd.get_access<sycl::access::mode::read>(cgh);
885-
auto accCons = bufCons1.get_access<sycl::access::mode::write>(cgh);
886-
cgh.single_task([=]() { copyAccBuf(accProd, accCons); });
887-
});
888-
q.wait();
889-
890-
auto accProd = bufCons1.get_access<sycl::access::mode::read>();
891-
auto accCons = bufCons2.get_access<sycl::access::mode::write>();
892-
copyAccBuf(accProd, accCons);
893-
} catch (sycl::exception &e) {
894-
std::cout << e.what() << std::endl;
895-
}
896-
897-
for (const auto &i : vecCons2)
898-
assert(i == 1);
908+
testAccCopy(vecProd, vecCons1, vecCons2);
899909
}
900910

901911
// Reverse iterator
902912
{
903-
constexpr int N = 32;
904-
std::vector<int> vec(N);
913+
std::vector<int> vec(32);
905914
fillVec(vec);
906-
907-
try {
908-
sycl::buffer<int> buf(vec.data(), vec.size());
909-
sycl::queue q;
910-
911-
q.submit([&](sycl::handler &cgh) {
912-
auto acc = buf.get_access<sycl::access::mode::read_write>(cgh);
913-
cgh.single_task([=]() { modifyAccBuf(acc, true); });
914-
});
915-
q.wait();
916-
917-
auto acc = buf.get_access<sycl::access::mode::read_write>();
918-
modifyAccBuf(acc, true);
919-
} catch (sycl::exception &e) {
920-
std::cout << e.what() << std::endl;
921-
}
922-
923-
for (size_t i = 0; i < vec.size(); ++i)
924-
assert(vec[i] == (i * 2 + 1) * 2 + 1);
915+
testAccMod(vec, true);
925916
}
926917

927918
// Const reverse iterator
928919
{
929920
constexpr int N = 32;
930921
std::vector<int> vecProd(N, 1), vecCons1(N, 0), vecCons2(N, 0);
931-
932-
try {
933-
sycl::buffer<int> bufProd(vecProd.data(), vecProd.size());
934-
sycl::buffer<int> bufCons1(vecCons1.data(), vecCons1.size());
935-
sycl::buffer<int> bufCons2(vecCons2.data(), vecCons2.size());
936-
sycl::queue q;
937-
938-
q.submit([&](sycl::handler &cgh) {
939-
auto accProd = bufProd.get_access<sycl::access::mode::read>(cgh);
940-
auto accCons1 = bufCons1.get_access<sycl::access::mode::write>(cgh);
941-
cgh.single_task([=]() { copyAccBuf(accProd, accCons1, true); });
942-
});
943-
q.wait();
944-
945-
auto accCons1 = bufCons1.get_access<sycl::access::mode::read>();
946-
auto accCons2 = bufCons2.get_access<sycl::access::mode::write>();
947-
copyAccBuf(accCons1, accCons2, true);
948-
} catch (sycl::exception &e) {
949-
std::cout << e.what() << std::endl;
950-
}
951-
952-
for (const auto &i : vecCons2)
953-
assert(i == 1);
922+
testAccCopy(vecProd, vecCons1, vecCons2, true);
954923
}
955924

956925
// 3-dim accessor simple iteration
957926
{
958927
constexpr int N = 24;
959928
std::vector<int> vec(N);
960929
fillVec(vec);
961-
962-
try {
963-
sycl::buffer<int, 3> buf(vec.data(), sycl::range<3>(2, 3, 4));
964-
sycl::queue q;
965-
966-
q.submit([&](sycl::handler &cgh) {
967-
auto acc = buf.get_access<sycl::access::mode::read_write>(cgh);
968-
cgh.single_task([=]() { modifyAccBuf(acc); });
969-
});
970-
q.wait();
971-
972-
auto acc = buf.get_access<sycl::access::mode::read_write>();
973-
modifyAccBuf(acc);
974-
} catch (sycl::exception &e) {
975-
std::cout << e.what() << std::endl;
976-
}
977-
978-
for (size_t i = 0; i < vec.size(); ++i)
979-
assert(vec[i] == (i * 2 + 1) * 2 + 1);
930+
testAccMod(vec, false, 3);
980931
}
981932

982933
// 3-dim accessor const iterator
983934
{
984935
constexpr int N = 24;
985936
std::vector<int> vecProd(N, 1), vecCons1(N, 0), vecCons2(N, 0);
986-
987-
try {
988-
sycl::buffer<int, 3> bufProd(vecProd.data(), sycl::range<3>(2, 3, 4));
989-
sycl::buffer<int, 3> bufCons1(vecCons1.data(), sycl::range<3>(2, 3, 4));
990-
sycl::buffer<int, 3> bufCons2(vecCons2.data(), sycl::range<3>(2, 3, 4));
991-
sycl::queue q;
992-
993-
q.submit([&](sycl::handler &cgh) {
994-
auto accProd = bufProd.get_access<sycl::access::mode::read>(cgh);
995-
auto accCons = bufCons1.get_access<sycl::access::mode::write>(cgh);
996-
cgh.single_task([=]() { copyAccBuf(accProd, accCons); });
997-
});
998-
q.wait();
999-
1000-
auto accProd = bufCons1.get_access<sycl::access::mode::read>();
1001-
auto accCons = bufCons2.get_access<sycl::access::mode::write>();
1002-
copyAccBuf(accProd, accCons);
1003-
} catch (sycl::exception &e) {
1004-
std::cout << e.what() << std::endl;
1005-
}
1006-
1007-
for (const auto &i : vecCons2)
1008-
assert(i == 1);
937+
testAccCopy(vecProd, vecCons1, vecCons2, false, 3);
1009938
}
1010939

1011940
// 3-dim accessor reverse iterator
1012941
{
1013942
constexpr int N = 24;
1014943
std::vector<int> vec(N);
1015944
fillVec(vec);
1016-
1017-
try {
1018-
sycl::buffer<int, 3> buf(vec.data(), sycl::range<3>(2, 3, 4));
1019-
sycl::queue q;
1020-
1021-
q.submit([&](sycl::handler &cgh) {
1022-
auto acc = buf.get_access<sycl::access::mode::write>(cgh);
1023-
cgh.single_task([=]() { modifyAccBuf(acc, true); });
1024-
});
1025-
q.wait();
1026-
1027-
auto acc = buf.get_access<sycl::access::mode::write>();
1028-
modifyAccBuf(acc, true);
1029-
} catch (sycl::exception &e) {
1030-
std::cout << e.what() << std::endl;
1031-
}
1032-
1033-
for (size_t i = 0; i < vec.size(); ++i)
1034-
assert(vec[i] == (i * 2 + 1) * 2 + 1);
945+
testAccMod(vec, true, 3);
1035946
}
1036947

1037948
// 3-dim accessor const reverse iterator
1038949
{
1039950
constexpr int N = 24;
1040951
std::vector<int> vecProd(N, 1), vecCons1(N, 0), vecCons2(N, 0);
1041-
1042-
try {
1043-
sycl::buffer<int, 3> bufProd(vecProd.data(), sycl::range<3>(2, 3, 4));
1044-
sycl::buffer<int, 3> bufCons1(vecCons1.data(), sycl::range<3>(2, 3, 4));
1045-
sycl::buffer<int, 3> bufCons2(vecCons2.data(), sycl::range<3>(2, 3, 4));
1046-
sycl::queue q;
1047-
1048-
q.submit([&](sycl::handler &cgh) {
1049-
auto accProd = bufProd.get_access<sycl::access::mode::read>(cgh);
1050-
auto accCons = bufCons1.get_access<sycl::access::mode::write>(cgh);
1051-
cgh.single_task([=]() { copyAccBuf(accProd, accCons, true); });
1052-
});
1053-
q.wait();
1054-
1055-
auto accProd = bufCons1.get_access<sycl::access::mode::read>();
1056-
auto accCons = bufCons2.get_access<sycl::access::mode::write>();
1057-
copyAccBuf(accProd, accCons, true);
1058-
} catch (sycl::exception &e) {
1059-
std::cout << e.what() << std::endl;
1060-
}
1061-
1062-
for (const auto &i : vecCons2)
1063-
assert(i == 1);
952+
testAccCopy(vecProd, vecCons1, vecCons2, true, 3);
1064953
}
1065954
}
1066955

0 commit comments

Comments
 (0)