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<>
24 {
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.
static constexpr auto get(TMemOrder)
Tag used in class inheritance hierarchies that describes that a specific interface (TInterface) is im...
Definition Interface.hpp:15
Memory fences are observed by all threads in the same block.
Definition Traits.hpp:25
Memory fences are observed by all threads in the same grid.
Definition Traits.hpp:30
static auto mem_fence(MemFenceCpuSerial const &, TMemOrder order, TMemScope const &)
static auto mem_fence(MemFenceCpuSerial const &, TMemOrder, memory_scope::Block const &)
static auto mem_fence(MemFenceCpuSerial const &, TMemOrder, memory_scope::Grid const &)
The mem_fence trait.
Definition Traits.hpp:47