alpaka
Abstraction Library for Parallel Kernel Acceleration
Loading...
Searching...
No Matches
SingleThreadStaticShared.hpp
Go to the documentation of this file.
1/* Copyright 2024 René Widera
2 * SPDX-License-Identifier: MPL-2.0
3 */
4
5#pragma once
6
9
10#include <cstdint>
11
12namespace alpaka::onAcc
13{
14 namespace cpu
15 {
16 template<std::size_t TDataAlignBytes>
17 struct SingleThreadStaticShared : private detail::SharedStorage<TDataAlignBytes>
18 {
20
21 template<typename T, size_t T_unique>
23 {
24 auto* data = Base::template getVarPtr<T>(T_unique);
25
26 if(!data)
27 {
28 Base::template alloc<T>(T_unique);
29 data = Base::template getLatestVarPtr<T>();
30 }
31 ALPAKA_ASSERT(data != nullptr);
32 return *data;
33 }
34
35 template<typename T, size_t T_unique>
36 T* allocDynamic(uint32_t numBytes)
37 {
38 auto* data = Base::template getVarPtr<T>(T_unique);
39
40 if(!data)
41 {
42 Base::template allocDynamic<T>(T_unique, numBytes);
43 data = Base::template getLatestVarPtr<T>();
44 }
45 ALPAKA_ASSERT(data != nullptr);
46 return data;
47 }
48
49 void reset()
50 {
51 }
52 };
53 } // namespace cpu
54} // namespace alpaka::onAcc
#define ALPAKA_ASSERT(...)
The assert can be explicit disabled by defining NDEBUG.
Definition Assert.hpp:14
Implementation of static block shared memory provider.
functionality which is usable on the accelerator compute device from within a kernel.
Definition executor.hpp:38
detail::SharedStorage< TDataAlignBytes > Base