OpenNN
Open-source neural networks library
Loading...
Searching...
No Matches
pch.h
Go to the documentation of this file.
1#pragma once
2
3// IntelliSense-only: real builds get OPENNN_HAS_CUDA from CMake.
4#if defined(__INTELLISENSE__) && !defined(OPENNN_HAS_CUDA)
5#define OPENNN_HAS_CUDA
6#endif
7
8#ifndef EIGEN_USE_THREADS
9#define EIGEN_USE_THREADS
10#endif
11
12#define EIGEN_MAX_ALIGN_BYTES 64
13#ifndef EIGEN_NO_DEBUG
14#define EIGEN_NO_DEBUG
15#endif
16#ifndef NOMINMAX
17#define NOMINMAX
18#endif
19#define _SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING
20#define _CRT_SECURE_NO_WARNINGS
21#define EIGEN_PERMANENTLY_DISABLE_STUPID_WARNINGS
22#define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING
23
24#include <algorithm>
25#include <ranges>
26#include <span>
27#include <numbers>
28#include <source_location>
29#include <execution>
30#include <charconv>
31#include <format>
32#include <string>
33#include <string_view>
34#include <cassert>
35#include <cmath>
36#include <ctime>
37#include <filesystem>
38#include <functional>
39#include <iomanip>
40#include <iostream>
41#include <time.h>
42#include <iterator>
43#include <map>
44#include <numeric>
45#include <vector>
46#include <unordered_map>
47#include <unordered_set>
48#include <exception>
49#include <memory>
50#include <random>
51#include <regex>
52#include <cstring>
53#include <cstdlib>
54#include <fstream>
55#include <stdexcept>
56#include <stdlib.h>
57#include <set>
58#include <sstream>
59#include <omp.h>
60
61#include <Eigen/Core>
62#include <unsupported/Eigen/CXX11/Tensor>
63#include <Eigen/src/Core/util/DisableStupidWarnings.h>
64
65#ifdef OPENNN_HAS_CUDA
66
67#include <cuda.h>
68#include <cuda_runtime.h>
69#include <cublas_v2.h>
70#include <cublasXt.h>
71#include <cublasLt.h>
72#include <curand.h>
73#include <cudnn.h>
74#include <cuda_bf16.h>
75#include <nvtx3/nvToolsExt.h>
76
77#else
78
79// CPU-only stubs.
80
81// --- Runtime / library handles ---
82using cudaStream_t = void*;
83using cudaEvent_t = void*;
84using cublasHandle_t = void*;
85using cublasLtHandle_t = void*;
86using cudnnHandle_t = void*;
87
88// --- Scalar / opaque types ---
89struct __nv_bfloat16 {};
90struct __half {};
91
92// --- CUDA / cuBLAS enums ---
97
98// --- cuDNN enums ---
106
107// --- cuDNN descriptor handles (opaque pointer-typed) ---
116
117#endif
118
119#ifdef OPENNN_HAS_CUDA
120
121#include "../opennn/kernel.cuh"
122
123template <typename T>
124void check_cuda_status(T status, const char* msg,
125 std::source_location loc = std::source_location::current())
126{
127 // `using namespace std;` is declared below this point in pch.h so std::
128 // qualifications are required here.
129 if (status != 0)
130 throw std::runtime_error(std::string(msg) + " Error: " + std::to_string(static_cast<int>(status)) +
131 " in " + loc.file_name() + ":" + std::to_string(loc.line()));
132}
133
134#define CHECK_CUDA(x) check_cuda_status(x, "CUDA")
135#define CHECK_CUBLAS(x) check_cuda_status(x, "CuBLAS")
136#define CHECK_CUDNN(x) check_cuda_status(x, "cuDNN")
137
138#endif
139
140using namespace std;
141using namespace Eigen;
142
143namespace opennn {
144
146
147inline void throw_if(bool condition, const string& message,
148 const source_location& loc = source_location::current())
149{
150 if (condition)
151 throw runtime_error(std::format("{} [at {}:{}]",
152 message, loc.file_name(), loc.line()));
153}
154
155constexpr float EPSILON = numeric_limits<float>::epsilon();
156constexpr float MAX = numeric_limits<float>::max();
157constexpr float NEG_INFINITY = -numeric_limits<float>::infinity();
158constexpr float QUIET_NAN = numeric_limits<float>::quiet_NaN();
159constexpr float SOFTMAX_MASK_VALUE = float(-1e9f);
160
161template <typename T>
162ostream& operator<<(ostream& os, const vector<T>& vec)
163{
164 os << "[ ";
165 for (size_t i = 0; i < vec.size(); ++i)
166 {
167 os << vec[i];
168 if (i + 1 < vec.size()) os << "; ";
169 }
170 os << " ]";
171 return os;
172}
173}
174
175constexpr int Layout = Eigen::RowMajor;
176
177using MatrixR = Matrix<float, Dynamic, Dynamic, Layout>;
178using MatrixI = Matrix<Index, Dynamic, Dynamic, Layout>;
179using MatrixB = Matrix<bool, Dynamic, Dynamic, Layout>;
180
181using VectorR = Matrix<float, Dynamic, 1>;
182using VectorI = Matrix<Index, Dynamic, 1>;
183using VectorB = Matrix<bool, Dynamic, 1>;
184
185using VectorMap = Map<VectorR, AlignedMax>;
186using MatrixMap = Map<MatrixR, Layout | AlignedMax>;
187
188using Tensor0 = Tensor<float, 0, Layout | AlignedMax>;
189using Tensor2 = Tensor<float, 2, Layout | AlignedMax>;
190using Tensor3 = Tensor<float, 3, Layout | AlignedMax>;
191using Tensor4 = Tensor<float, 4, Layout | AlignedMax>;
192
193template <int Rank>
194using TensorR = Tensor<float, Rank, Layout | AlignedMax>;
195
196using TensorMap2 = TensorMap<Tensor<float, 2, Layout | AlignedMax>, AlignedMax>;
197using TensorMap3 = TensorMap<Tensor<float, 3, Layout | AlignedMax>, AlignedMax>;
198using TensorMap4 = TensorMap<Tensor<float, 4, Layout | AlignedMax>, AlignedMax>;
199
200template <int Rank>
201using TensorMapR = TensorMap<Tensor<float, Rank, Layout | AlignedMax>, AlignedMax>;
202
203#pragma GCC diagnostic push
204#pragma GCC diagnostic ignored "-Wunused-parameter"
205#include "json.h"
206#pragma GCC diagnostic pop
207
208// OpenNN: Open Neural Networks Library.
209// Copyright(C) 2005-2026 Artificial Intelligence Techniques, SL.
210// Licensed under the GNU Lesser General Public License v2.1 or later.
Definition adaptive_moment_estimation.h:14
constexpr float MAX
Definition pch.h:156
constexpr float NEG_INFINITY
Definition pch.h:157
constexpr float EPSILON
Definition pch.h:155
constexpr float SOFTMAX_MASK_VALUE
Definition pch.h:159
void throw_if(bool condition, const string &message, const source_location &loc=source_location::current())
Definition pch.h:147
constexpr float QUIET_NAN
Definition pch.h:158
ostream & operator<<(ostream &os, const vector< T > &vec)
Definition pch.h:162
__nv_bfloat16 bfloat16
Definition pch.h:145
cudnnTensorStruct * cudnnTensorDescriptor_t
Definition pch.h:109
Map< VectorR, AlignedMax > VectorMap
Definition pch.h:185
TensorMap< Tensor< float, Rank, Layout|AlignedMax >, AlignedMax > TensorMapR
Definition pch.h:201
void * cudnnHandle_t
Definition pch.h:86
Tensor< float, 3, Layout|AlignedMax > Tensor3
Definition pch.h:190
void * cudaEvent_t
Definition pch.h:83
Matrix< float, Dynamic, 1 > VectorR
Definition pch.h:181
void * cudaStream_t
Definition pch.h:82
cudnnConvolutionFwdAlgo_t
Definition pch.h:103
@ CUDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_GEMM
Definition pch.h:103
Matrix< bool, Dynamic, 1 > VectorB
Definition pch.h:183
void * cudnnFilterDescriptor_t
Definition pch.h:110
cudaDataType_t
Definition pch.h:93
@ CUDA_R_32F
Definition pch.h:93
@ CUDA_R_16F
Definition pch.h:93
@ CUDA_R_8I
Definition pch.h:93
@ CUDA_R_32I
Definition pch.h:93
@ CUDA_R_16BF
Definition pch.h:93
Tensor< float, Rank, Layout|AlignedMax > TensorR
Definition pch.h:194
Tensor< float, 2, Layout|AlignedMax > Tensor2
Definition pch.h:189
TensorMap< Tensor< float, 4, Layout|AlignedMax >, AlignedMax > TensorMap4
Definition pch.h:198
void * cublasLtHandle_t
Definition pch.h:85
cudnnActivationMode_t
Definition pch.h:100
@ CUDNN_ACTIVATION_RELU
Definition pch.h:100
@ CUDNN_ACTIVATION_SIGMOID
Definition pch.h:100
@ CUDNN_ACTIVATION_TANH
Definition pch.h:100
@ CUDNN_ACTIVATION_IDENTITY
Definition pch.h:100
@ CUDNN_ACTIVATION_ELU
Definition pch.h:100
void * cudnnOpTensorDescriptor_t
Definition pch.h:115
Matrix< Index, Dynamic, Dynamic, Layout > MatrixI
Definition pch.h:178
cudnnPoolingMode_t
Definition pch.h:101
@ CUDNN_POOLING_MAX
Definition pch.h:101
Tensor< float, 0, Layout|AlignedMax > Tensor0
Definition pch.h:188
void * cudnnDropoutDescriptor_t
Definition pch.h:114
cublasLtEpilogue_t
Definition pch.h:96
@ CUBLASLT_EPILOGUE_BIAS
Definition pch.h:96
@ CUBLASLT_EPILOGUE_RELU_BIAS
Definition pch.h:96
@ CUBLASLT_EPILOGUE_DEFAULT
Definition pch.h:96
void * cublasHandle_t
Definition pch.h:84
cublasOperation_t
Definition pch.h:95
@ CUBLAS_OP_N
Definition pch.h:95
@ CUBLAS_OP_T
Definition pch.h:95
cudnnDataType_t
Definition pch.h:99
@ CUDNN_DATA_INT32
Definition pch.h:99
@ CUDNN_DATA_BFLOAT16
Definition pch.h:99
@ CUDNN_DATA_HALF
Definition pch.h:99
@ CUDNN_DATA_INT8
Definition pch.h:99
@ CUDNN_DATA_FLOAT
Definition pch.h:99
Matrix< bool, Dynamic, Dynamic, Layout > MatrixB
Definition pch.h:179
void * cudnnPoolingDescriptor_t
Definition pch.h:112
cudnnConvolutionBwdDataAlgo_t
Definition pch.h:104
@ CUDNN_CONVOLUTION_BWD_DATA_ALGO_0
Definition pch.h:104
cudnnBatchNormMode_t
Definition pch.h:102
@ CUDNN_BATCHNORM_PER_ACTIVATION
Definition pch.h:102
Matrix< float, Dynamic, Dynamic, Layout > MatrixR
Definition pch.h:177
TensorMap< Tensor< float, 2, Layout|AlignedMax >, AlignedMax > TensorMap2
Definition pch.h:196
Matrix< Index, Dynamic, 1 > VectorI
Definition pch.h:182
Map< MatrixR, Layout|AlignedMax > MatrixMap
Definition pch.h:186
void * cudnnActivationDescriptor_t
Definition pch.h:113
void * cudnnConvolutionDescriptor_t
Definition pch.h:111
constexpr int Layout
Definition pch.h:175
TensorMap< Tensor< float, 3, Layout|AlignedMax >, AlignedMax > TensorMap3
Definition pch.h:197
Tensor< float, 4, Layout|AlignedMax > Tensor4
Definition pch.h:191
cudnnConvolutionBwdFilterAlgo_t
Definition pch.h:105
@ CUDNN_CONVOLUTION_BWD_FILTER_ALGO_0
Definition pch.h:105
cublasComputeType_t
Definition pch.h:94
@ CUBLAS_COMPUTE_32F_FAST_TF32
Definition pch.h:94
@ CUBLAS_COMPUTE_32F
Definition pch.h:94
@ CUBLAS_COMPUTE_32F_FAST_16BF
Definition pch.h:94
Definition pch.h:90
Definition pch.h:89
Definition pch.h:108