pRC
multi-purpose Tensor Train library for C++
Loading...
Searching...
No Matches
barrier.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-2-Clause
2
3#ifndef pRC_CORE_PROFILING_BARRIER_H
4#define pRC_CORE_PROFILING_BARRIER_H
5
6namespace pRC
7{
8 template<class T, class... Ts>
9 [[gnu::always_inline]] static inline auto optimizationBarrier(
10 const T &basic, Ts &...basics)
11 {
12#if defined(__clang__)
13 asm volatile("#MARKER" : : "g"(basic) : "memory");
14#else
15 asm volatile("#MARKER" : : "i,r,m"(basic) : "memory");
16#endif // __clang__
17
18 if constexpr(sizeof...(Ts) == 0)
19 {
20 return;
21 }
22 else
23 {
24 return optimizationBarrier(basics...);
25 }
26 }
27}
28#endif // pRC_CORE_PROFILING_BARRIER_H
Definition cholesky.hpp:18
static constexpr Conditional< IsSatisfied< C >, RemoveConstReference< X >, X > copy(X &&a)
Definition copy.hpp:13
static auto optimizationBarrier(const T &basic, Ts &...basics)
Definition barrier.hpp:9