Tatooine
cache_alignment.h
Go to the documentation of this file.
1#ifndef TATOOINE_CACHE_ALIGNMENT_H
2#define TATOOINE_CACHE_ALIGNMENT_H
3//==============================================================================
4#include <cstdint>
5#include <new>
6#include <utility>
7//==============================================================================
8namespace tatooine {
9//==============================================================================
10#ifdef __cpp_lib_hardware_interference_size
11using std::hardware_constructive_interference_size;
12using std::hardware_destructive_interference_size;
13#else
14// 64 bytes on x86-64 │ L1_CACHE_BYTES │ L1_CACHE_SHIFT │ __cacheline_aligned │
15// ...
16static constexpr std::size_t hardware_constructive_interference_size = 64;
17static constexpr std::size_t hardware_destructive_interference_size = 64;
18#endif
19
20template <typename T, std::size_t N = hardware_destructive_interference_size>
21class alignas(N) aligned {
23
24 public:
25 template <typename... Args>
26 explicit aligned(Args&&... args) : value(std::forward<Args>(args)...) {}
27
28 auto operator*() const -> auto const& { return value; }
29 auto operator*() -> auto& { return value; }
30 auto operator->() const { return &value; }
31 auto operator->() { return &value; }
32};
33//==============================================================================
34} // namespace tatooine
35//==============================================================================
36#endif
Definition: cache_alignment.h:21
aligned(Args &&... args)
Definition: cache_alignment.h:26
T value
Definition: cache_alignment.h:22
auto operator*() -> auto &
Definition: cache_alignment.h:29
auto operator->()
Definition: cache_alignment.h:31
auto operator->() const
Definition: cache_alignment.h:30
auto operator*() const -> auto const &
Definition: cache_alignment.h:28
Definition: algorithm.h:6
static constexpr std::size_t hardware_destructive_interference_size
Definition: cache_alignment.h:17
static constexpr std::size_t hardware_constructive_interference_size
Definition: cache_alignment.h:16