Skip to content

Commit c8a6f0d

Browse files
authored
[SYCL][HIP] Change atomic sub to atomic add (-val) (#11251)
This PR changes the use of `atomic_sub` to `atomic_add` with a negated `val`. Doing so extends the number of cases in which the atomic operation will work, since support for `atomic_add` is more common than `atomic_sub`, especially at the PCIe level.
1 parent b8021e3 commit c8a6f0d

File tree

1 file changed

+5
-6
lines changed

1 file changed

+5
-6
lines changed

libclc/amdgcn-amdhsa/libspirv/atomic/atomic_sub.cl

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
enum MemorySemanticsMask semantics, TYPE val) { \
1919
int atomic_scope = 0, memory_order = 0; \
2020
GET_ATOMIC_SCOPE_AND_ORDER(scope, atomic_scope, semantics, memory_order) \
21-
return BUILTIN(p, val, memory_order); \
21+
return BUILTIN(p, -val, memory_order); \
2222
}
2323

2424
#define AMDGPU_ATOMIC_SUB(FUNC_NAME, TYPE, TYPE_MANGLED, BUILTIN) \
@@ -28,11 +28,10 @@
2828
BUILTIN) \
2929
AMDGPU_ATOMIC_SUB_IMPL(FUNC_NAME, TYPE, TYPE_MANGLED, , , 0, BUILTIN)
3030

31-
AMDGPU_ATOMIC_SUB(_Z18__spirv_AtomicISub, int, i, __atomic_fetch_sub)
32-
AMDGPU_ATOMIC_SUB(_Z18__spirv_AtomicISub, unsigned int, j, __atomic_fetch_sub)
33-
AMDGPU_ATOMIC_SUB(_Z18__spirv_AtomicISub, long, l, __atomic_fetch_sub)
34-
AMDGPU_ATOMIC_SUB(_Z18__spirv_AtomicISub, unsigned long, m, __atomic_fetch_sub)
35-
AMDGPU_ATOMIC_SUB(_Z21__spirv_AtomicFSubEXT, float, f, __atomic_fetch_sub)
31+
AMDGPU_ATOMIC_SUB(_Z18__spirv_AtomicISub, int, i, __atomic_fetch_add)
32+
AMDGPU_ATOMIC_SUB(_Z18__spirv_AtomicISub, unsigned int, j, __atomic_fetch_add)
33+
AMDGPU_ATOMIC_SUB(_Z18__spirv_AtomicISub, long, l, __atomic_fetch_add)
34+
AMDGPU_ATOMIC_SUB(_Z18__spirv_AtomicISub, unsigned long, m, __atomic_fetch_add)
3635

3736
#undef AMDGPU_ATOMIC
3837
#undef AMDGPU_ATOMIC_IMPL

0 commit comments

Comments
 (0)