alpaka
Abstraction Library for Parallel Kernel Acceleration
Loading...
Searching...
No Matches
MemFenceCpuSerial.hpp
Go to the documentation of this file.
1/* Copyright 2022 Jan Stephan, Andrea Bocci, Tapish Narwal
2 * SPDX-License-Identifier: MPL-2.0
3 */
4
5#pragma once
6
10
11#include <atomic>
12
13namespace alpaka
14{
15 //! The serial CPU memory fence.
16 class MemFenceCpuSerial : public interface::Implements<ConceptMemFence, MemFenceCpuSerial>
17 {
18 };
19
20 namespace trait
21 {
22 template<>
23 struct MemFenceDefaultOrder<MemFenceCpuSerial>
24 {
25 using type = mem_order::AcqRel;
26 static constexpr auto value = mem_order::acq_rel;
27 };
28
29 template<MemoryOrder TMemOrder>
30 struct MemFence<MemFenceCpuSerial, TMemOrder, memory_scope::Block>
31 {
32 static auto mem_fence(MemFenceCpuSerial const&, TMemOrder, memory_scope::Block const&)
33 {
34 /* Nothing to be done on the block level for the serial case. */
35 }
36 };
37
38 template<MemoryOrder TMemOrder>
39 struct MemFence<MemFenceCpuSerial, TMemOrder, memory_scope::Grid>
40 {
41 static auto mem_fence(MemFenceCpuSerial const&, TMemOrder, memory_scope::Grid const&)
42 {
43 /* Nothing to be done on the grid level for the serial case. */
44 }
45 };
46
47 template<MemoryOrder TMemOrder, MemoryScope TMemScope>
48 struct MemFence<MemFenceCpuSerial, TMemOrder, TMemScope>
49 {
50 static auto mem_fence(MemFenceCpuSerial const&, TMemOrder order, TMemScope const&)
51 {
52 /* Enable device fences because we may want to synchronize with other (serial) kernels. */
53 std::atomic_thread_fence(MemOrderStl::get(order));
54 }
55 };
56 } // namespace trait
57} // namespace alpaka
The serial CPU memory fence.
static constexpr AcqRel acq_rel
The alpaka accelerator library.
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_ACC auto mem_fence(TMemFence const &fence, TMemOrder order, TMemScope const &scope) -> void
Issues memory fence instructions.
Definition Traits.hpp:80
static constexpr auto get(TMemOrder)
Tag used in class inheritance hierarchies that describes that a specific interface (TInterface) is im...
Definition Interface.hpp:15