14
14
15
15
#include " ../esimd_test_utils.hpp"
16
16
17
- #include < algorithm>
18
- #include < cmath>
19
17
#include < numeric>
20
18
#include < sycl/ext/intel/esimd.hpp>
21
19
#include < sycl/sycl.hpp>
@@ -28,25 +26,17 @@ template <unsigned SIMDSize> int testAccessor(queue q) {
28
26
auto size = size_t {128 };
29
27
30
28
auto vec_0 = std::vector<int >(size);
31
- auto vec_1 = std::vector<int >(size);
32
29
auto vec_2 = std::vector<int >(size);
33
- auto vec_3 = std::vector<int >(size);
34
30
35
31
std::iota (vec_0.begin (), vec_0.end (), 0 );
36
- std::iota (vec_1.begin (), vec_1.end (), 0 );
37
32
std::iota (vec_2.begin (), vec_2.end (), 0 );
38
- std::iota (vec_3.begin (), vec_3.end (), 0 );
39
33
auto buf_0 = buffer{vec_0};
40
- auto buf_1 = buffer{vec_1};
41
34
auto buf_2 = buffer{vec_2};
42
- auto buf_3 = buffer{vec_3};
43
35
44
36
try {
45
37
q.submit ([&](handler &h) {
46
38
auto access_0 = buf_0.template get_access <access::mode::read_write>(h);
47
- auto access_1 = buf_1.template get_access <access::mode::read_write>(h);
48
39
auto access_2 = buf_2.template get_access <access::mode::read_write>(h);
49
- auto access_3 = buf_3.template get_access <access::mode::read_write>(h);
50
40
51
41
h.parallel_for (
52
42
range<1 >{size / SIMDSize}, [=](id<1 > id) SYCL_ESIMD_KERNEL {
@@ -61,38 +51,34 @@ template <unsigned SIMDSize> int testAccessor(queue q) {
61
51
lsc_block_store<int , SIMDSize>(access_0, offset, data_0 * 2 ,
62
52
pred_enable);
63
53
64
- auto data_1 =
65
- lsc_block_load<int , SIMDSize>(access_1, offset, pred_disable);
66
- lsc_block_store<int , SIMDSize>(access_1, offset, data_1 * 2 ,
67
- pred_enable);
68
-
69
54
auto data_2 =
70
55
lsc_block_load<int , SIMDSize>(access_2, offset, pred_enable);
71
56
lsc_block_store<int , SIMDSize>(access_2, offset, data_2 * 2 ,
72
57
pred_disable);
73
-
74
- auto data_3 =
75
- lsc_block_load<int , SIMDSize>(access_3, offset, pred_disable);
76
- lsc_block_store<int , SIMDSize>(access_3, offset, data_3 * 2 ,
77
- pred_disable);
78
58
});
79
59
});
80
60
q.wait ();
81
61
buf_0.template get_access <access::mode::read_write>();
82
- buf_1.template get_access <access::mode::read_write>();
83
62
buf_2.template get_access <access::mode::read_write>();
84
- buf_3.template get_access <access::mode::read_write>();
85
63
} catch (sycl::exception e) {
86
64
std::cout << " SYCL exception caught: " << e.what ();
87
65
return 1 ;
88
66
}
89
67
90
68
auto error = 0 ;
91
69
for (auto i = 0 ; i != size; ++i) {
92
- error += vec_0[i] != 2 * i;
93
- error += vec_1[i] > 0 ;
94
- error += vec_2[i] != i;
95
- error += vec_3[i] != i;
70
+ if (vec_0[i] != 2 * i) {
71
+ ++error;
72
+ std::cout << " Accessor Test 1 out[" << i << " ] = 0x" << std::hex
73
+ << vec_0[i] << " vs etalon = 0x" << 2 * i << std::dec
74
+ << std::endl;
75
+ }
76
+
77
+ if (vec_2[i] != i) {
78
+ ++error;
79
+ std::cout << " Accessor Test 2 out[" << i << " ] = 0x" << std::hex
80
+ << vec_2[i] << " vs etalon = 0x" << i << std::dec << std::endl;
81
+ }
96
82
}
97
83
std::cout << " Accessor lsc predicate test " ;
98
84
std::cout << (error != 0 ? " FAILED" : " passed" ) << std::endl;
@@ -104,80 +90,67 @@ template <unsigned SIMDSize> int testUSM(queue q) {
104
90
105
91
auto *vec_0 = malloc_shared<int >(size, q);
106
92
auto *vec_1 = malloc_shared<int >(size, q);
107
- auto *vec_2 = malloc_shared<int >(size, q);
108
- auto *vec_3 = malloc_shared<int >(size, q);
109
93
std::iota (vec_0, vec_0 + size, 0 );
110
94
std::iota (vec_1, vec_1 + size, 0 );
111
- std::iota (vec_2, vec_2 + size, 0 );
112
- std::iota (vec_3, vec_3 + size, 0 );
113
95
114
96
try {
115
97
q.submit ([&](handler &h) {
116
98
h.parallel_for (
117
99
range<1 >{size / SIMDSize}, [=](id<1 > id) SYCL_ESIMD_KERNEL {
118
100
auto offset = id[0 ] * SIMDSize;
119
- auto offsets = simd<uint32_t , SIMDSize>(id * SIMDSize * sizeof (int ),
120
- sizeof (int ));
101
+
121
102
auto pred_enable = simd_mask<1 >(1 );
122
103
auto pred_disable = simd_mask<1 >(0 );
123
104
124
105
auto data_0 =
125
106
lsc_block_load<int , SIMDSize>(vec_0 + offset, pred_enable);
126
107
lsc_block_store<int , SIMDSize>(vec_0 + offset, data_0 * 2 ,
127
108
pred_enable);
128
-
129
109
auto data_1 =
130
- lsc_block_load<int , SIMDSize>(vec_1 + offset, pred_disable );
110
+ lsc_block_load<int , SIMDSize>(vec_1 + offset, pred_enable );
131
111
lsc_block_store<int , SIMDSize>(vec_1 + offset, data_1 * 2 ,
132
- pred_enable);
133
-
134
- auto data_2 =
135
- lsc_block_load<int , SIMDSize>(vec_2 + offset, pred_enable);
136
- lsc_block_store<int , SIMDSize>(vec_2 + offset, data_2 * 2 ,
137
- pred_disable);
138
- auto data_3 =
139
- lsc_block_load<int , SIMDSize>(vec_3 + offset, pred_disable);
140
- lsc_block_store<int , SIMDSize>(vec_3 + offset, data_3 * 2 ,
141
112
pred_disable);
142
113
});
143
114
});
144
- q.wait ();
115
+ q.wait_and_throw ();
145
116
} catch (sycl::exception e) {
146
117
std::cout << " SYCL exception caught: " << e.what ();
147
118
sycl::free (vec_0, q);
148
119
sycl::free (vec_1, q);
149
- sycl::free (vec_2, q);
150
- sycl::free (vec_3, q);
151
120
return 1 ;
152
121
}
153
122
154
123
int error = 0 ;
155
124
for (auto i = 0 ; i != size; ++i) {
156
- error += vec_0[i] != 2 * i;
157
- error += vec_1[i] > 0 ;
158
- error += vec_2[i] != i;
159
- error += vec_3[i] != i;
125
+ if (vec_0[i] != 2 * i) {
126
+ ++error;
127
+ std::cout << " USM Test 1 out[" << i << " ] = 0x" << std::hex << vec_0[i]
128
+ << " vs etalon = 0x" << 2 * i << std::dec << std::endl;
129
+ }
130
+
131
+ if (vec_1[i] != i) {
132
+ ++error;
133
+ std::cout << " USM Test 2 out[" << i << " ] = 0x" << std::hex << vec_1[i]
134
+ << " vs etalon = 0x" << i << std::dec << std::endl;
135
+ }
160
136
}
161
137
sycl::free (vec_0, q);
162
138
sycl::free (vec_1, q);
163
- sycl::free (vec_2, q);
164
- sycl::free (vec_3, q);
165
139
std::cout << " USM lsc predicate test " ;
166
140
std::cout << (error != 0 ? " FAILED" : " passed" ) << std::endl;
167
141
return error;
168
142
}
169
143
170
144
int main () {
171
145
172
- auto q =
173
- queue{esimd_test::ESIMDSelector, esimd_test::createExceptionHandler ()};
146
+ queue q (esimd_test::ESIMDSelector, esimd_test::createExceptionHandler ());
174
147
auto device = q.get_device ();
175
148
std::cout << " Device name: " << device.get_info <info::device::name>()
176
149
<< std::endl;
177
150
178
151
int error = testUSM<8 >(q);
179
- error = testUSM<16 >(q);
180
- error = testUSM<32 >(q);
152
+ error + = testUSM<16 >(q);
153
+ error + = testUSM<32 >(q);
181
154
182
155
error += testAccessor<8 >(q);
183
156
error += testAccessor<16 >(q);
0 commit comments