Skip to content

Commit 98c4435

Browse files
authored
[ESIMD] Enable double type for atomic_update() (#8925)
This patch also improves the e2e tests for atomics by - adding more vector lengths - testing double type - stricter test for signed vs unsigned data for min/max Signed-off-by: Vyacheslav N Klochkov <[email protected]>
1 parent 98b7de8 commit 98c4435

File tree

4 files changed

+156
-97
lines changed

4 files changed

+156
-97
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -917,8 +917,8 @@ constexpr void check_atomic() {
917917
Op == __ESIMD_NS::atomic_op::fmin ||
918918
Op == __ESIMD_NS::atomic_op::fadd ||
919919
Op == __ESIMD_NS::atomic_op::fsub) {
920-
static_assert((is_type<T, float, sycl::half>()),
921-
"Type F or HF is expected");
920+
static_assert((is_type<T, float, sycl::half, double>()),
921+
"float, double or sycl::half type is expected");
922922
}
923923
if constexpr (Op == __ESIMD_NS::atomic_op::add ||
924924
Op == __ESIMD_NS::atomic_op::sub ||

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

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -384,10 +384,8 @@ constexpr void check_lsc_atomic() {
384384
"wrong number of operands");
385385
}
386386
if constexpr (Op == __ESIMD_NS::native::lsc::atomic_op::fcmpxchg) {
387-
if constexpr (!__ESIMD_DNS::is_type<T, float, sycl::half>()) {
388-
static_assert((__ESIMD_DNS::is_type<T, float, sycl::half>()),
389-
"Type F or HF is expected");
390-
}
387+
static_assert(__ESIMD_DNS::is_type<T, float, sycl::half, double>(),
388+
"float, double or sycl::half type is expected");
391389
} else {
392390
__ESIMD_DNS::check_atomic<__ESIMD_DNS::to_atomic_op<Op>(), T, N, NumSrc>();
393391
}
@@ -2717,7 +2715,7 @@ __ESIMD_API std::enable_if_t<
27172715
std::is_integral_v<Toffset> &&
27182716
__ESIMD_DNS::get_num_args<__ESIMD_DNS::to_lsc_atomic_op<Op>()>() == 0,
27192717
__ESIMD_NS::simd<T, N>>
2720-
lsc_atomic_update(T *p, Toffset offset, __ESIMD_NS::simd_mask<N> pred = 1) {
2718+
lsc_atomic_update(T *p, Toffset offset, __ESIMD_NS::simd_mask<N> pred = 1) {
27212719
return lsc_atomic_update<Op, T, N, DS, L1H, L3H>(
27222720
p, __ESIMD_NS::simd<Toffset, N>(offset), pred);
27232721
}
@@ -2879,9 +2877,9 @@ __ESIMD_API std::enable_if_t<
28792877
std::is_integral_v<Toffset> &&
28802878
__ESIMD_DNS::get_num_args<__ESIMD_DNS::to_lsc_atomic_op<Op>()>() == 2,
28812879
__ESIMD_NS::simd<T, N>>
2882-
lsc_atomic_update(T *p, Toffset offset, __ESIMD_NS::simd<T, N> src0,
2883-
__ESIMD_NS::simd<T, N> src1,
2884-
__ESIMD_NS::simd_mask<N> pred = 1) {
2880+
lsc_atomic_update(T *p, Toffset offset, __ESIMD_NS::simd<T, N> src0,
2881+
__ESIMD_NS::simd<T, N> src1,
2882+
__ESIMD_NS::simd_mask<N> pred = 1) {
28852883
return lsc_atomic_update<Op, T, N, DS, L1H, L3H>(
28862884
p, __ESIMD_NS::simd<Toffset, N>(offset), src0, src1, pred);
28872885
}

0 commit comments

Comments
 (0)