OpenNN
Open-source neural networks library
Loading...
Searching...
No Matches
configuration.h
Go to the documentation of this file.
1// OpenNN: Open Neural Networks Library
2// www.opennn.net
3//
4// C O N F I G U R A T I O N
5//
6// Artificial Intelligence Techniques SL
7// artelnics@artelnics.com
8
9#pragma once
10
11#include "pch.h"
12
13namespace opennn
14{
15
16enum class Device { Auto, CPU, CUDA };
17
18enum class Type { Auto, FP32, BF16, INT8 };
19
20template<Type T> struct TypeInfo;
21
22template<> struct TypeInfo<Type::FP32>
23{
24 using type = float;
26 static constexpr cudaDataType_t cuda = CUDA_R_32F;
27 static constexpr Index bytes = Index(sizeof(float));
28 static constexpr const char* name = "FP32";
29};
30
31template<> struct TypeInfo<Type::BF16>
32{
35 static constexpr cudaDataType_t cuda = CUDA_R_16BF;
36 static constexpr Index bytes = Index(sizeof(__nv_bfloat16));
37 static constexpr const char* name = "BF16";
38};
39
40template<> struct TypeInfo<Type::INT8>
41{
42 using type = int8_t;
44 static constexpr cudaDataType_t cuda = CUDA_R_8I;
45 static constexpr Index bytes = Index(1);
46 static constexpr const char* name = "INT8";
47};
48
49template<Type... Supported, typename F>
50void visit_type(Type t, F&& f)
51{
52 bool matched = false;
53 ((t == Supported && (f(TypeInfo<Supported>{}), matched = true, false)) || ...);
54 if (!matched) throw runtime_error("visit_type: unsupported Type value");
55}
56
57template<Type... Supported, typename F>
58void visit_type_pair(Type t_in, Type t_out, F&& f)
59{
60 visit_type<Supported...>(t_in, [&](auto in_info)
61 {
62 visit_type<Supported...>(t_out, [&](auto out_info)
63 {
64 f(in_info, out_info);
65 });
66 });
67}
68
69inline cudnnDataType_t to_cudnn(Type type) noexcept
70{
71 switch (type)
72 {
76 default: return TypeInfo<Type::FP32>::cudnn;
77 }
78}
79
80inline cudaDataType_t to_cuda(Type type) noexcept
81{
82 switch (type)
83 {
87 default: return TypeInfo<Type::FP32>::cuda;
88 }
89}
90
91inline Index type_bytes(Type type) noexcept
92{
93 switch (type)
94 {
98 default: return TypeInfo<Type::FP32>::bytes;
99 }
100}
101
102class Configuration
103{
104public:
105
112
113 static Configuration& instance()
114 {
115 static Configuration configuration;
116 return configuration;
117 }
118
119 void set(Device new_device = Device::Auto,
120 Type new_training_type = Type::Auto,
121 Type new_inference_type = Type::Auto);
122
123 Device get_device() const { return device; }
124 Type get_training_type() const { return training_type; }
125 Type get_inference_type() const { return inference_type; }
126
127 const Resolved& resolve() const
128 {
129 if (cache_valid)
130 return cached_resolved;
131
132 return resolve_slow();
133 }
134
135 bool is_gpu() const { return resolve().device == Device::CUDA; }
136 bool is_cpu() const { return resolve().device == Device::CPU; }
137
138 bool is_bf16_training() const { return resolve().training_type == Type::BF16; }
140
141private:
142
143 Configuration() = default;
144
145 const Resolved& resolve_slow() const;
146
147 Device device = Device::Auto;
148 Type training_type = Type::Auto;
149 Type inference_type = Type::Auto;
150
151 mutable Resolved cached_resolved;
152 mutable std::atomic<bool> cache_valid{false};
153};
154
155}
156
157// OpenNN: Open Neural Networks Library.
158// Copyright(C) 2005-2026 Artificial Intelligence Techniques, SL.
159// Licensed under the GNU Lesser General Public License v2.1 or later.
Definition configuration.h:103
const Resolved & resolve() const
Definition configuration.h:127
bool is_cpu() const
Definition configuration.h:136
Device get_device() const
Definition configuration.h:123
Type get_training_type() const
Definition configuration.h:124
bool is_bf16_inference() const
Definition configuration.h:139
bool is_bf16_training() const
Definition configuration.h:138
bool is_gpu() const
Definition configuration.h:135
Type get_inference_type() const
Definition configuration.h:125
static Configuration & instance()
Definition configuration.h:113
void set(Device new_device=Device::Auto, Type new_training_type=Type::Auto, Type new_inference_type=Type::Auto)
Definition adaptive_moment_estimation.h:19
cudnnDataType_t
Definition neural_network.h:88
@ CUDNN_DATA_INT8
Definition neural_network.h:88
@ CUDNN_DATA_FLOAT
Definition neural_network.h:88
@ CUDNN_DATA_BFLOAT16
Definition neural_network.h:88
Index type_bytes(Type type) noexcept
Definition configuration.h:91
Device
Definition configuration.h:16
@ Auto
Definition configuration.h:16
@ CPU
Definition configuration.h:16
@ CUDA
Definition configuration.h:16
cudnnDataType_t to_cudnn(Type type) noexcept
Definition configuration.h:69
Type
Definition configuration.h:18
@ Auto
Definition configuration.h:18
@ FP32
Definition configuration.h:18
@ INT8
Definition configuration.h:18
@ BF16
Definition configuration.h:18
cudaDataType_t
Definition neural_network.h:82
@ CUDA_R_8I
Definition neural_network.h:82
@ CUDA_R_16BF
Definition neural_network.h:82
@ CUDA_R_32F
Definition neural_network.h:82
void visit_type(Type t, F &&f)
Definition configuration.h:50
cudaDataType_t to_cuda(Type type) noexcept
Definition configuration.h:80
void visit_type_pair(Type t_in, Type t_out, F &&f)
Definition configuration.h:58
Definition configuration.h:107
Type training_type
Definition configuration.h:109
Type inference_type
Definition configuration.h:110
Device device
Definition configuration.h:108
__nv_bfloat16 type
Definition configuration.h:33
static constexpr Index bytes
Definition configuration.h:36
static constexpr cudaDataType_t cuda
Definition configuration.h:35
static constexpr cudnnDataType_t cudnn
Definition configuration.h:34
static constexpr const char * name
Definition configuration.h:37
float type
Definition configuration.h:24
static constexpr Index bytes
Definition configuration.h:27
static constexpr cudnnDataType_t cudnn
Definition configuration.h:25
static constexpr const char * name
Definition configuration.h:28
static constexpr cudaDataType_t cuda
Definition configuration.h:26
static constexpr cudaDataType_t cuda
Definition configuration.h:44
int8_t type
Definition configuration.h:42
static constexpr cudnnDataType_t cudnn
Definition configuration.h:43
static constexpr const char * name
Definition configuration.h:46
static constexpr Index bytes
Definition configuration.h:45
Definition configuration.h:20
Definition neural_network.h:78
Device device
Definition neural_network.h:108
Type training_type
Definition neural_network.h:109
Type inference_type
Definition neural_network.h:110