alpaka
Abstraction Library for Parallel Kernel Acceleration
Loading...
Searching...
No Matches
Api.hpp
Go to the documentation of this file.
1/* Copyright 2024 René Widera
2 * SPDX-License-Identifier: MPL-2.0
3 */
4
5
6#pragma once
7
9#include "alpaka/concepts.hpp"
12#include "alpaka/utility.hpp"
13
14#include <memory>
15#include <sstream>
16
17namespace alpaka
18{
19 namespace api
20 {
22 {
24
25 auto get() const
26 {
27 return this;
28 }
29
30 void _()
31 {
32 static_assert(concepts::Api<Hip>);
33 }
34
35 static std::string getName()
36 {
37 return "Hip";
38 }
39 };
40
41 constexpr auto hip = Hip{};
42 } // namespace api
43
44 namespace onHost::trait
45 {
46#if ALPAKA_LANG_HIP
47 template<>
48 struct IsPlatformAvailable::Op<api::Hip> : std::true_type
49 {
50 };
51
52 template<>
53 struct IsDeviceSupportedBy::Op<deviceKind::AmdGpu, api::Hip> : std::true_type
54 {
55 };
56#endif
57
58 /** All modern AMD GPUs support at least 1024 threads per block. */
59 template<>
61 {
62 consteval uint32_t operator()(api::Hip const, deviceKind::AmdGpu const, exec::GpuHip const) const
63 {
64 return 1024u;
65 }
66 };
67 } // namespace onHost::trait
68
69 namespace unifiedCudaHip::trait
70 {
71 template<>
72 struct IsUnifiedApi<api::Hip> : std::true_type
73 {
74 };
75 } // namespace unifiedCudaHip::trait
76
77 namespace trait
78 {
79 template<typename T_Type>
81 {
82 constexpr uint32_t operator()(api::Hip const, deviceKind::AmdGpu const) const
83 {
84 /** vector load/store width in bytes */
85 constexpr size_t simdWidthInByte = 16u;
86 return alpaka::divExZero(simdWidthInByte, sizeof(T_Type));
87 }
88 };
89
90 template<>
92 {
93 constexpr uint32_t operator()(api::Hip const, deviceKind::AmdGpu const) const
94 {
95 /* AMD GPUs SIMD units will be interpreted as pipelines */
96 constexpr uint32_t numPipes = 4u;
97 return numPipes;
98 }
99 };
100
101 template<>
103 {
104 constexpr uint32_t operator()(api::Hip const, deviceKind::AmdGpu const) const
105 {
106 // loading 16 byte per thread will result in optimal memory bandwidth
107 return 16u;
108 }
109 };
110 } // namespace trait
111} // namespace alpaka
Concept to check for APIs.
Definition api.hpp:42
constexpr auto hip
Definition Api.hpp:41
constexpr DeviceKind deviceKind
Definition tag.hpp:30
main alpaka namespace.
Definition alpaka.hpp:76
ALPAKA_FN_HOST_ACC constexpr auto divExZero(Integral a, Integral b) -> Integral
Returns the max(a / b, 1) as integer.
Definition utility.hpp:41
Hip element_type
Definition Api.hpp:23
static std::string getName()
Definition Api.hpp:35
auto get() const
Definition Api.hpp:25
consteval uint32_t operator()(api::Hip const, deviceKind::AmdGpu const, exec::GpuHip const) const
Definition Api.hpp:62
constexpr uint32_t operator()(api::Hip const, deviceKind::AmdGpu const) const
Definition Api.hpp:82
constexpr uint32_t operator()(api::Hip const, deviceKind::AmdGpu const) const
Definition Api.hpp:104
constexpr uint32_t operator()(api::Hip const, deviceKind::AmdGpu const) const
Definition Api.hpp:93