Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions libcudacxx/include/cuda/std/__atomic/api/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -163,12 +163,12 @@
_CCCL_HOST_DEVICE_API inline _Tp fetch_add(ptrdiff_t __op, memory_order __m = memory_order_seq_cst) \
_CONST _VOLATILE noexcept \
{ \
return __atomic_fetch_add_dispatch(&__a, __op, __m, __thread_scope_system_tag{}); \
return __atomic_fetch_add_dispatch(&__a, __op, __m, _Sco{}); \
} \
_CCCL_HOST_DEVICE_API inline _Tp fetch_sub(ptrdiff_t __op, memory_order __m = memory_order_seq_cst) \
_CONST _VOLATILE noexcept \
{ \
return __atomic_fetch_sub_dispatch(&__a, __op, __m, __thread_scope_system_tag{}); \
return __atomic_fetch_sub_dispatch(&__a, __op, __m, _Sco{}); \
} \
_CCCL_HOST_DEVICE_API inline _Tp operator++(int) _CONST _VOLATILE noexcept \
{ \
Expand Down
30 changes: 30 additions & 0 deletions libcudacxx/test/atomic_codegen/atomic_add_non_volatile.cu
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,24 @@ __global__ void add_relaxed_device_non_volatile(int* data, int* out, int n)
*out = ref.fetch_add(n, cuda::std::memory_order_relaxed);
}

__global__ void add_relaxed_block_pointer_non_volatile(int** data, int** out, int n)
{
auto ref = cuda::atomic_ref<int*, cuda::thread_scope_block>{*data};
*out = ref.fetch_add(n, cuda::std::memory_order_relaxed);
Comment thread
coderabbitai[bot] marked this conversation as resolved.
}

__global__ void add_relaxed_device_pointer_non_volatile(int** data, int** out, int n)
{
auto ref = cuda::atomic_ref<int*, cuda::thread_scope_device>{*data};
*out = ref.fetch_add(n, cuda::std::memory_order_relaxed);
}

__global__ void add_relaxed_system_pointer_non_volatile(int** data, int** out, int n)
{
auto ref = cuda::atomic_ref<int*, cuda::thread_scope_system>{*data};
*out = ref.fetch_add(n, cuda::std::memory_order_relaxed);
}

/*

; SM8X-LABEL: .target sm_80
Expand All @@ -18,4 +36,16 @@ __global__ void add_relaxed_device_non_volatile(int* data, int* out, int n)
; SM8X-NEXT: st.global.{{b|u}}32 [%rd[[#GOUT]]], %r[[#DEST]];
; SM8X-NEXT: ret;

; SM8X-LABEL: .visible .entry {{_.*add_relaxed_block_pointer_non_volatile.*}}(
; SM8X: {{.*}}atom.add.relaxed.cta.u64{{.*}}
; SM8X: ret;

; SM8X-LABEL: .visible .entry {{_.*add_relaxed_device_pointer_non_volatile.*}}(
; SM8X: {{.*}}atom.add.relaxed.gpu.u64{{.*}}
; SM8X: ret;

; SM8X-LABEL: .visible .entry {{_.*add_relaxed_system_pointer_non_volatile.*}}(
; SM8X: {{.*}}atom.add.relaxed.sys.u64{{.*}}
; SM8X: ret;

*/
30 changes: 30 additions & 0 deletions libcudacxx/test/atomic_codegen/atomic_sub_non_volatile.cu
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,24 @@ __global__ void sub_relaxed_device_non_volatile(int* data, int* out, int n)
*out = ref.fetch_sub(n, cuda::std::memory_order_relaxed);
}

__global__ void sub_relaxed_block_pointer_non_volatile(int** data, int** out, int n)
{
auto ref = cuda::atomic_ref<int*, cuda::thread_scope_block>{*data};
*out = ref.fetch_sub(n, cuda::std::memory_order_relaxed);
}

__global__ void sub_relaxed_device_pointer_non_volatile(int** data, int** out, int n)
{
auto ref = cuda::atomic_ref<int*, cuda::thread_scope_device>{*data};
*out = ref.fetch_sub(n, cuda::std::memory_order_relaxed);
}

__global__ void sub_relaxed_system_pointer_non_volatile(int** data, int** out, int n)
{
auto ref = cuda::atomic_ref<int*, cuda::thread_scope_system>{*data};
*out = ref.fetch_sub(n, cuda::std::memory_order_relaxed);
}

/*

; SM8X-LABEL: .target sm_80
Expand All @@ -19,4 +37,16 @@ __global__ void sub_relaxed_device_non_volatile(int* data, int* out, int n)
; SM8X-NEXT: st.global.{{b|u}}32 [%rd[[#GOUT]]], %r[[#DEST]];
; SM8X-NEXT: ret;

; SM8X-LABEL: .visible .entry {{_.*sub_relaxed_block_pointer_non_volatile.*}}(
; SM8X: {{.*}}atom.add.relaxed.cta.u64{{.*}}
; SM8X: ret;

; SM8X-LABEL: .visible .entry {{_.*sub_relaxed_device_pointer_non_volatile.*}}(
; SM8X: {{.*}}atom.add.relaxed.gpu.u64{{.*}}
; SM8X: ret;

; SM8X-LABEL: .visible .entry {{_.*sub_relaxed_system_pointer_non_volatile.*}}(
; SM8X: {{.*}}atom.add.relaxed.sys.u64{{.*}}
; SM8X: ret;

*/
Loading