DPC++ Runtime
Runtime libraries for oneAPI DPC++
atomic_fence.hpp
Go to the documentation of this file.
1
//==--------- atomic_fence.hpp - SYCL 2020 atomic_fence --------------------==//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#pragma once
10
11
#include <
sycl/memory_enums.hpp
>
// for getStdMemoryOrder, memory_order
12
13
#ifdef __SYCL_DEVICE_ONLY__
14
#include <
sycl/detail/spirv.hpp
>
15
#else
16
#include <atomic>
// for atomic_thread_fence
17
#endif
18
19
namespace
sycl
{
20
inline
namespace
_V1 {
21
22
inline
void
atomic_fence
(
memory_order
order,
memory_scope
scope) {
23
#ifdef __SYCL_DEVICE_ONLY__
24
auto
SPIRVOrder = detail::spirv::getMemorySemanticsMask(order);
25
auto
SPIRVScope = detail::spirv::getScope(scope);
26
__spirv_MemoryBarrier
(SPIRVScope,
static_cast<
uint32_t
>
(SPIRVOrder));
27
#else
28
(void)scope;
29
auto
StdOrder =
detail::getStdMemoryOrder
(order);
30
atomic_thread_fence(StdOrder);
31
#endif
32
}
33
34
}
// namespace _V1
35
}
// namespace sycl
sycl::_V1::atomic_fence
void atomic_fence(memory_order order, memory_scope scope)
Definition:
atomic_fence.hpp:22
sycl::_V1::detail::getStdMemoryOrder
std::memory_order getStdMemoryOrder(__spv::MemorySemanticsMask::Flag)
Definition:
atomic.hpp:82
sycl
Definition:
access.hpp:18
__spirv_MemoryBarrier
__SYCL_CONVERGENT__ __DPCPP_SYCL_EXTERNAL void __spirv_MemoryBarrier(__spv::Scope Memory, uint32_t Semantics) noexcept
Definition:
spirv_ops.cpp:36
spirv.hpp
sycl::_V1::memory_scope
memory_scope
Definition:
memory_enums.hpp:29
memory_enums.hpp
sycl::_V1::memory_order
memory_order
Definition:
memory_enums.hpp:19
include
sycl
atomic_fence.hpp
Generated by
1.8.17