Ginkgo Generated from branch based on main. Ginkgo version 1.9.0
A numerical linear algebra library targeting many-core architectures
Loading...
Searching...
No Matches
exception.hpp
1// SPDX-FileCopyrightText: 2017 - 2024 The Ginkgo authors
2//
3// SPDX-License-Identifier: BSD-3-Clause
4
5#ifndef GKO_PUBLIC_CORE_BASE_EXCEPTION_HPP_
6#define GKO_PUBLIC_CORE_BASE_EXCEPTION_HPP_
7
8
9#include <exception>
10#include <string>
11
12#include <ginkgo/core/base/types.hpp>
13
14
15namespace gko {
16
17
57class Error : public std::exception {
58public:
66 Error(const std::string& file, int line, const std::string& what)
67 : what_(file + ":" + std::to_string(line) + ": " + what)
68 {}
69
74 virtual const char* what() const noexcept override { return what_.c_str(); }
75
76private:
77 const std::string what_;
78};
79
80
85class NotImplemented : public Error {
86public:
94 NotImplemented(const std::string& file, int line, const std::string& func)
95 : Error(file, line, func + " is not implemented")
96 {}
97};
98
99
104class NotCompiled : public Error {
105public:
114 NotCompiled(const std::string& file, int line, const std::string& func,
115 const std::string& module)
116 : Error(file, line,
117 "feature " + func + " is part of the " + module +
118 " module, which is not compiled on this system")
119 {}
120};
121
122
127class NotSupported : public Error {
128public:
138 NotSupported(const std::string& file, int line, const std::string& func,
139 const std::string& obj_type)
140 : Error(file, line,
141 "Operation " + func + " does not support parameters of type " +
142 obj_type)
143 {}
144};
145
146
150class MpiError : public Error {
151public:
159 MpiError(const std::string& file, int line, const std::string& func,
160 int64 error_code)
161 : Error(file, line, func + ": " + get_error(error_code))
162 {}
163
164private:
165 static std::string get_error(int64 error_code);
166};
167
168
172class CudaError : public Error {
173public:
182 CudaError(const std::string& file, int line, const std::string& func,
183 int64 error_code)
184 : Error(file, line, func + ": " + get_error(error_code))
185 {}
186
187private:
188 static std::string get_error(int64 error_code);
189};
190
191
195class CublasError : public Error {
196public:
205 CublasError(const std::string& file, int line, const std::string& func,
206 int64 error_code)
207 : Error(file, line, func + ": " + get_error(error_code))
208 {}
209
210private:
211 static std::string get_error(int64 error_code);
212};
213
214
218class CurandError : public Error {
219public:
228 CurandError(const std::string& file, int line, const std::string& func,
229 int64 error_code)
230 : Error(file, line, func + ": " + get_error(error_code))
231 {}
232
233private:
234 static std::string get_error(int64 error_code);
235};
236
237
241class CusparseError : public Error {
242public:
251 CusparseError(const std::string& file, int line, const std::string& func,
252 int64 error_code)
253 : Error(file, line, func + ": " + get_error(error_code))
254 {}
255
256private:
257 static std::string get_error(int64 error_code);
258};
259
260
264class CufftError : public Error {
265public:
274 CufftError(const std::string& file, int line, const std::string& func,
275 int64 error_code)
276 : Error(file, line, func + ": " + get_error(error_code))
277 {}
278
279private:
280 static std::string get_error(int64 error_code);
281};
282
283
287class HipError : public Error {
288public:
297 HipError(const std::string& file, int line, const std::string& func,
298 int64 error_code)
299 : Error(file, line, func + ": " + get_error(error_code))
300 {}
301
302private:
303 static std::string get_error(int64 error_code);
304};
305
306
310class HipblasError : public Error {
311public:
320 HipblasError(const std::string& file, int line, const std::string& func,
321 int64 error_code)
322 : Error(file, line, func + ": " + get_error(error_code))
323 {}
324
325private:
326 static std::string get_error(int64 error_code);
327};
328
329
333class HiprandError : public Error {
334public:
343 HiprandError(const std::string& file, int line, const std::string& func,
344 int64 error_code)
345 : Error(file, line, func + ": " + get_error(error_code))
346 {}
347
348private:
349 static std::string get_error(int64 error_code);
350};
351
352
357class HipsparseError : public Error {
358public:
367 HipsparseError(const std::string& file, int line, const std::string& func,
368 int64 error_code)
369 : Error(file, line, func + ": " + get_error(error_code))
370 {}
371
372private:
373 static std::string get_error(int64 error_code);
374};
375
376
380class HipfftError : public Error {
381public:
390 HipfftError(const std::string& file, int line, const std::string& func,
391 int64 error_code)
392 : Error(file, line, func + ": " + get_error(error_code))
393 {}
394
395private:
396 static std::string get_error(int64 error_code);
397};
398
399
403class MetisError : public Error {
404public:
413 MetisError(const std::string& file, int line, const std::string& func,
414 const std::string& error)
415 : Error(file, line, func + ": " + error)
416 {}
417};
418
419
424class DimensionMismatch : public Error {
425public:
440 DimensionMismatch(const std::string& file, int line,
441 const std::string& func, const std::string& first_name,
442 size_type first_rows, size_type first_cols,
443 const std::string& second_name, size_type second_rows,
444 size_type second_cols, const std::string& clarification)
445 : Error(file, line,
446 func + ": attempting to combine operators " + first_name +
447 " [" + std::to_string(first_rows) + " x " +
448 std::to_string(first_cols) + "] and " + second_name + " [" +
449 std::to_string(second_rows) + " x " +
450 std::to_string(second_cols) + "]: " + clarification)
451 {}
452};
453
454
459class BadDimension : public Error {
460public:
472 BadDimension(const std::string& file, int line, const std::string& func,
473 const std::string& op_name, size_type op_num_rows,
474 size_type op_num_cols, const std::string& clarification)
475 : Error(file, line,
476 func + ": Object " + op_name + " has dimensions [" +
477 std::to_string(op_num_rows) + " x " +
478 std::to_string(op_num_cols) + "]: " + clarification)
479 {}
480};
481
482
489template <typename IndexType>
490class BlockSizeError : public Error {
491public:
498 BlockSizeError(const std::string& file, const int line,
499 const int block_size, const IndexType size)
500 : Error(file, line,
501 "block size = " + std::to_string(block_size) +
502 ", size = " + std::to_string(size))
503 {}
504};
505
506
510class ValueMismatch : public Error {
511public:
522 ValueMismatch(const std::string& file, int line, const std::string& func,
523 size_type val1, size_type val2,
524 const std::string& clarification)
525 : Error(file, line,
526 func + ": Value mismatch : " + std::to_string(val1) + " and " +
527 std::to_string(val2) + " : " + clarification)
528 {}
529};
530
531
535class AllocationError : public Error {
536public:
545 AllocationError(const std::string& file, int line,
546 const std::string& device, size_type bytes)
547 : Error(file, line,
548 device + ": failed to allocate memory block of " +
549 std::to_string(bytes) + "B")
550 {}
551};
552
553
558class OutOfBoundsError : public Error {
559public:
568 OutOfBoundsError(const std::string& file, int line, size_type index,
569 size_type bound)
570 : Error(file, line,
571 "trying to access index " + std::to_string(index) +
572 " in a memory block of " + std::to_string(bound) +
573 " elements")
574 {}
575};
576
577
582class OverflowError : public Error {
583public:
589 OverflowError(const std::string& file, const int line,
590 const std::string& index_type)
591 : Error(file, line, "Overflowing " + index_type)
592 {}
593};
594
595
599class StreamError : public Error {
600public:
609 StreamError(const std::string& file, int line, const std::string& func,
610 const std::string& message)
611 : Error(file, line, func + ": " + message)
612 {}
613};
614
615
620class KernelNotFound : public Error {
621public:
629 KernelNotFound(const std::string& file, int line, const std::string& func)
630 : Error(file, line, func + ": unable to find an eligible kernel")
631 {}
632};
633
634
642public:
650 UnsupportedMatrixProperty(const std::string& file, const int line,
651 const std::string& msg)
652 : Error(file, line, msg)
653 {}
654};
655
656
658class InvalidStateError : public Error {
659public:
668 InvalidStateError(const std::string& file, int line,
669 const std::string& func, const std::string& clarification)
670 : Error(file, line,
671 func + ": Invalid state encountered : " + clarification)
672 {}
673};
674
675
676} // namespace gko
677
678
679#endif // GKO_PUBLIC_CORE_BASE_EXCEPTION_HPP_
AllocationError is thrown if a memory allocation fails.
Definition exception.hpp:535
AllocationError(const std::string &file, int line, const std::string &device, size_type bytes)
Initializes an allocation error.
Definition exception.hpp:545
BadDimension is thrown if an operation is being applied to a LinOp with bad dimensions.
Definition exception.hpp:459
BadDimension(const std::string &file, int line, const std::string &func, const std::string &op_name, size_type op_num_rows, size_type op_num_cols, const std::string &clarification)
Initializes a bad dimension error.
Definition exception.hpp:472
Error that denotes issues between block sizes and matrix dimensions.
Definition exception.hpp:490
BlockSizeError(const std::string &file, const int line, const int block_size, const IndexType size)
Definition exception.hpp:498
CublasError is thrown when a cuBLAS routine throws a non-zero error code.
Definition exception.hpp:195
CublasError(const std::string &file, int line, const std::string &func, int64 error_code)
Initializes a cuBLAS error.
Definition exception.hpp:205
CudaError is thrown when a CUDA routine throws a non-zero error code.
Definition exception.hpp:172
CudaError(const std::string &file, int line, const std::string &func, int64 error_code)
Initializes a CUDA error.
Definition exception.hpp:182
CufftError is thrown when a cuFFT routine throws a non-zero error code.
Definition exception.hpp:264
CufftError(const std::string &file, int line, const std::string &func, int64 error_code)
Initializes a cuFFT error.
Definition exception.hpp:274
CurandError is thrown when a cuRAND routine throws a non-zero error code.
Definition exception.hpp:218
CurandError(const std::string &file, int line, const std::string &func, int64 error_code)
Initializes a cuRAND error.
Definition exception.hpp:228
CusparseError is thrown when a cuSPARSE routine throws a non-zero error code.
Definition exception.hpp:241
CusparseError(const std::string &file, int line, const std::string &func, int64 error_code)
Initializes a cuSPARSE error.
Definition exception.hpp:251
DimensionMismatch is thrown if an operation is being applied to LinOps of incompatible size.
Definition exception.hpp:424
DimensionMismatch(const std::string &file, int line, const std::string &func, const std::string &first_name, size_type first_rows, size_type first_cols, const std::string &second_name, size_type second_rows, size_type second_cols, const std::string &clarification)
Initializes a dimension mismatch error.
Definition exception.hpp:440
The Error class is used to report exceptional behaviour in library functions.
Definition exception.hpp:57
Error(const std::string &file, int line, const std::string &what)
Initializes an error.
Definition exception.hpp:66
virtual const char * what() const noexcept override
Returns a human-readable string with a more detailed description of the error.
Definition exception.hpp:74
HipError is thrown when a HIP routine throws a non-zero error code.
Definition exception.hpp:287
HipError(const std::string &file, int line, const std::string &func, int64 error_code)
Initializes a HIP error.
Definition exception.hpp:297
HipblasError is thrown when a hipBLAS routine throws a non-zero error code.
Definition exception.hpp:310
HipblasError(const std::string &file, int line, const std::string &func, int64 error_code)
Initializes a hipBLAS error.
Definition exception.hpp:320
HipfftError is thrown when a hipFFT routine throws a non-zero error code.
Definition exception.hpp:380
HipfftError(const std::string &file, int line, const std::string &func, int64 error_code)
Initializes a hipFFT error.
Definition exception.hpp:390
HiprandError is thrown when a hipRAND routine throws a non-zero error code.
Definition exception.hpp:333
HiprandError(const std::string &file, int line, const std::string &func, int64 error_code)
Initializes a hipRAND error.
Definition exception.hpp:343
HipsparseError is thrown when a hipSPARSE routine throws a non-zero error code.
Definition exception.hpp:357
HipsparseError(const std::string &file, int line, const std::string &func, int64 error_code)
Initializes a hipSPARSE error.
Definition exception.hpp:367
Exception thrown if an object is in an invalid state.
Definition exception.hpp:658
InvalidStateError(const std::string &file, int line, const std::string &func, const std::string &clarification)
Initializes an invalid state error.
Definition exception.hpp:668
KernelNotFound is thrown if Ginkgo cannot find a kernel which satisfies the criteria imposed by the i...
Definition exception.hpp:620
KernelNotFound(const std::string &file, int line, const std::string &func)
Initializes a KernelNotFound error.
Definition exception.hpp:629
MetisError is thrown when METIS routine throws an error code.
Definition exception.hpp:403
MetisError(const std::string &file, int line, const std::string &func, const std::string &error)
Initializes a METIS error.
Definition exception.hpp:413
MpiError is thrown when a MPI routine throws a non-zero error code.
Definition exception.hpp:150
MpiError(const std::string &file, int line, const std::string &func, int64 error_code)
Initializes a MPI error.
Definition exception.hpp:159
NotCompiled is thrown when attempting to call an operation which is a part of a module that was not c...
Definition exception.hpp:104
NotCompiled(const std::string &file, int line, const std::string &func, const std::string &module)
Initializes a NotCompiled error.
Definition exception.hpp:114
NotImplemented is thrown in case an operation has not yet been implemented (but will be implemented i...
Definition exception.hpp:85
NotImplemented(const std::string &file, int line, const std::string &func)
Initializes a NotImplemented error.
Definition exception.hpp:94
NotSupported is thrown in case it is not possible to perform the requested operation on the given obj...
Definition exception.hpp:127
NotSupported(const std::string &file, int line, const std::string &func, const std::string &obj_type)
Initializes a NotSupported error.
Definition exception.hpp:138
OutOfBoundsError is thrown if a memory access is detected to be out-of-bounds.
Definition exception.hpp:558
OutOfBoundsError(const std::string &file, int line, size_type index, size_type bound)
Initializes an OutOfBoundsError.
Definition exception.hpp:568
OverflowError is thrown when an index calculation for storage requirements overflows.
Definition exception.hpp:582
OverflowError(const std::string &file, const int line, const std::string &index_type)
Definition exception.hpp:589
StreamError is thrown if accessing a stream failed.
Definition exception.hpp:599
StreamError(const std::string &file, int line, const std::string &func, const std::string &message)
Initializes a file access error.
Definition exception.hpp:609
Exception throws if a matrix does not have a property required by a numerical method.
Definition exception.hpp:641
UnsupportedMatrixProperty(const std::string &file, const int line, const std::string &msg)
Initializes the UnsupportedMatrixProperty error.
Definition exception.hpp:650
ValueMismatch is thrown if two values are not equal.
Definition exception.hpp:510
ValueMismatch(const std::string &file, int line, const std::string &func, size_type val1, size_type val2, const std::string &clarification)
Initializes a value mismatch error.
Definition exception.hpp:522
The Ginkgo namespace.
Definition abstract_factory.hpp:20
std::int64_t int64
64-bit signed integral type.
Definition types.hpp:112
std::size_t size_type
Integral type used for allocation quantities.
Definition types.hpp:89
STL namespace.