Skip to content

Commit cc3fd43

Browse files
authored
[SYCL][ESIMD] Make raw_send mask size match exec size where possible (#11094)
We still have the overloads that take execSize as a runtime parameter, so we can't fix those ones, but we can fix the ones with it as a template parameter. This is locked down with existing tests. Signed-off-by: Sarnie, Nick <[email protected]>
1 parent ab57810 commit cc3fd43

File tree

1 file changed

+16
-14
lines changed
  • sycl/include/sycl/ext/intel/experimental/esimd

1 file changed

+16
-14
lines changed

sycl/include/sycl/ext/intel/experimental/esimd/memory.hpp

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -109,11 +109,11 @@ raw_sends(__ESIMD_NS::simd<T1, n1> msgDst, __ESIMD_NS::simd<T2, n2> msgSrc0,
109109
/// @return the vector value read from memory.
110110
template <uint8_t execSize, uint8_t sfid, uint8_t numSrc0, uint8_t numSrc1,
111111
uint8_t numDst, uint8_t isEOT = 0, uint8_t isSendc = 0, typename T1,
112-
int n1, typename T2, int n2, typename T3, int n3, int N = 16>
112+
int n1, typename T2, int n2, typename T3, int n3>
113113
__ESIMD_API __ESIMD_NS::simd<T1, n1>
114114
raw_sends(__ESIMD_NS::simd<T1, n1> msgDst, __ESIMD_NS::simd<T2, n2> msgSrc0,
115115
__ESIMD_NS::simd<T3, n3> msgSrc1, uint32_t exDesc, uint32_t msgDesc,
116-
__ESIMD_NS::simd_mask<N> mask = 1) {
116+
__ESIMD_NS::simd_mask<execSize> mask = 1) {
117117
constexpr unsigned _Width1 = n1 * sizeof(T1);
118118
static_assert(_Width1 % 32 == 0, "Invalid size for raw send rspVar");
119119
constexpr unsigned _Width2 = n2 * sizeof(T2);
@@ -127,7 +127,7 @@ raw_sends(__ESIMD_NS::simd<T1, n1> msgDst, __ESIMD_NS::simd<T2, n2> msgSrc0,
127127

128128
constexpr uint8_t modifier = ((isEOT & 0x1) << 1) | (isSendc & 0x1);
129129

130-
return __esimd_raw_sends2<ElemT1, n1, ElemT2, n2, ElemT3, n3, N>(
130+
return __esimd_raw_sends2<ElemT1, n1, ElemT2, n2, ElemT3, n3, execSize>(
131131
modifier, execSize, mask.data(), numSrc0, numSrc1, numDst, sfid, exDesc,
132132
msgDesc, msgSrc0.data(), msgSrc1.data(), msgDst.data());
133133
}
@@ -192,10 +192,11 @@ raw_send(__ESIMD_NS::simd<T1, n1> msgDst, __ESIMD_NS::simd<T2, n2> msgSrc0,
192192
/// @return the vector value read from memory
193193
template <uint8_t execSize, uint8_t sfid, uint8_t numSrc0, uint8_t numDst,
194194
uint8_t isEOT = 0, uint8_t isSendc = 0, typename T1, int n1,
195-
typename T2, int n2, int N = 16>
195+
typename T2, int n2>
196196
__ESIMD_API __ESIMD_NS::simd<T1, n1>
197197
raw_send(__ESIMD_NS::simd<T1, n1> msgDst, __ESIMD_NS::simd<T2, n2> msgSrc0,
198-
uint32_t exDesc, uint32_t msgDesc, __ESIMD_NS::simd_mask<N> mask = 1) {
198+
uint32_t exDesc, uint32_t msgDesc,
199+
__ESIMD_NS::simd_mask<execSize> mask = 1) {
199200
constexpr unsigned _Width1 = n1 * sizeof(T1);
200201
static_assert(_Width1 % 32 == 0, "Invalid size for raw send rspVar");
201202
constexpr unsigned _Width2 = n2 * sizeof(T2);
@@ -205,7 +206,7 @@ raw_send(__ESIMD_NS::simd<T1, n1> msgDst, __ESIMD_NS::simd<T2, n2> msgSrc0,
205206
using ElemT2 = __ESIMD_DNS::__raw_t<T2>;
206207

207208
constexpr uint8_t modifier = ((isEOT & 0x1) << 1) | (isSendc & 0x1);
208-
return __esimd_raw_send2<ElemT1, n1, ElemT2, n2, N>(
209+
return __esimd_raw_send2<ElemT1, n1, ElemT2, n2, execSize>(
209210
modifier, execSize, mask.data(), numSrc0, numDst, sfid, exDesc, msgDesc,
210211
msgSrc0.data(), msgDst.data());
211212
}
@@ -268,11 +269,11 @@ raw_sends(__ESIMD_NS::simd<T1, n1> msgSrc0, __ESIMD_NS::simd<T2, n2> msgSrc1,
268269
/// to on).
269270
template <uint8_t execSize, uint8_t sfid, uint8_t numSrc0, uint8_t numSrc1,
270271
uint8_t isEOT = 0, uint8_t isSendc = 0, typename T1, int n1,
271-
typename T2, int n2, int N = 16>
272+
typename T2, int n2>
272273
__ESIMD_API void raw_sends(__ESIMD_NS::simd<T1, n1> msgSrc0,
273274
__ESIMD_NS::simd<T2, n2> msgSrc1, uint32_t exDesc,
274275
uint32_t msgDesc,
275-
__ESIMD_NS::simd_mask<N> mask = 1) {
276+
__ESIMD_NS::simd_mask<execSize> mask = 1) {
276277
constexpr unsigned _Width1 = n1 * sizeof(T1);
277278
static_assert(_Width1 % 32 == 0, "Invalid size for raw send msgSrc0");
278279
constexpr unsigned _Width2 = n2 * sizeof(T2);
@@ -282,7 +283,7 @@ __ESIMD_API void raw_sends(__ESIMD_NS::simd<T1, n1> msgSrc0,
282283
using ElemT2 = __ESIMD_DNS::__raw_t<T2>;
283284

284285
constexpr uint8_t modifier = ((isEOT & 0x1) << 1) | (isSendc & 0x1);
285-
__esimd_raw_sends2_noresult<ElemT1, n1, ElemT2, n2, N>(
286+
__esimd_raw_sends2_noresult<ElemT1, n1, ElemT2, n2, execSize>(
286287
modifier, execSize, mask.data(), numSrc0, numSrc1, sfid, exDesc, msgDesc,
287288
msgSrc0.data(), msgSrc1.data());
288289
}
@@ -335,16 +336,17 @@ raw_send(__ESIMD_NS::simd<T1, n1> msgSrc0, uint32_t exDesc, uint32_t msgDesc,
335336
/// @param mask is the predicate to specify enabled channels (optional - default
336337
/// to on).
337338
template <uint8_t execSize, uint8_t sfid, uint8_t numSrc0, uint8_t isEOT = 0,
338-
uint8_t isSendc = 0, typename T1, int n1, int N = 16>
339+
uint8_t isSendc = 0, typename T1, int n1>
339340
__ESIMD_API void raw_send(__ESIMD_NS::simd<T1, n1> msgSrc0, uint32_t exDesc,
340-
uint32_t msgDesc, __ESIMD_NS::simd_mask<N> mask = 1) {
341+
uint32_t msgDesc,
342+
__ESIMD_NS::simd_mask<execSize> mask = 1) {
341343
constexpr unsigned _Width1 = n1 * sizeof(T1);
342344
static_assert(_Width1 % 32 == 0, "Invalid size for raw send msgSrc0");
343345
using ElemT1 = __ESIMD_DNS::__raw_t<T1>;
344346
constexpr uint8_t modifier = ((isEOT & 0x1) << 1) | (isSendc & 0x1);
345-
__esimd_raw_send2_noresult<ElemT1, n1, N>(modifier, execSize, mask.data(),
346-
numSrc0, sfid, exDesc, msgDesc,
347-
msgSrc0.data());
347+
__esimd_raw_send2_noresult<ElemT1, n1, execSize>(
348+
modifier, execSize, mask.data(), numSrc0, sfid, exDesc, msgDesc,
349+
msgSrc0.data());
348350
}
349351

350352
/// @} sycl_esimd_raw_send

0 commit comments

Comments
 (0)