Compute Library
 21.11
Validate.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2018-2021 Arm Limited.
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to
8  * deal in the Software without restriction, including without limitation the
9  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10  * sell copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in all
14  * copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22  * SOFTWARE.
23  */
24 #ifndef ARM_COMPUTE_CPP_VALIDATE_H
25 #define ARM_COMPUTE_CPP_VALIDATE_H
26 
29 
30 namespace arm_compute
31 {
32 /** Return an error if the data type of the passed tensor info is FP16 and FP16 support is not compiled in.
33  *
34  * @param[in] function Function in which the error occurred.
35  * @param[in] file Name of the file where the error occurred.
36  * @param[in] line Line on which the error occurred.
37  * @param[in] tensor_info Tensor info to validate.
38  *
39  * @return Status
40  */
41 inline Status error_on_unsupported_cpu_fp16(const char *function, const char *file, const int line,
42  const ITensorInfo *tensor_info)
43 {
44  bool fp16_kernels_enabled = false;
45 #if defined(ARM_COMPUTE_ENABLE_FP16) && defined(ENABLE_FP16_KERNELS)
46  fp16_kernels_enabled = true;
47 #endif /* defined(ARM_COMPUTE_ENABLE_FP16) && defined(ENABLE_FP16_KERNELS) */
48 
49  ARM_COMPUTE_RETURN_ERROR_ON_LOC(tensor_info == nullptr, function, file, line);
50  ARM_COMPUTE_RETURN_ERROR_ON_LOC_MSG((tensor_info->data_type() == DataType::F16) && (!CPUInfo::get().has_fp16() || !fp16_kernels_enabled),
51  function, file, line, "This CPU architecture does not support F16 data type, you need v8.2 or above");
52  return Status{};
53 }
54 
55 /** Return an error if the data type of the passed tensor info is BFLOAT16 and BFLOAT16 support is not compiled in.
56  *
57  * @param[in] function Function in which the error occurred.
58  * @param[in] file Name of the file where the error occurred.
59  * @param[in] line Line on which the error occurred.
60  * @param[in] tensor_info Tensor info to validate.
61  *
62  * @return Status
63  */
64 inline Status error_on_unsupported_cpu_bf16(const char *function, const char *file, const int line,
65  const ITensorInfo *tensor_info)
66 {
67  bool bf16_kernels_enabled = false;
68 #if defined(ARM_COMPUTE_ENABLE_BF16)
69  bf16_kernels_enabled = true;
70 #endif /* defined(ARM_COMPUTE_ENABLE_BF16) */
71 
72  ARM_COMPUTE_RETURN_ERROR_ON_LOC(tensor_info == nullptr, function, file, line);
73  ARM_COMPUTE_RETURN_ERROR_ON_LOC_MSG((tensor_info->data_type() == DataType::BFLOAT16) && (!CPUInfo::get().has_bf16() || !bf16_kernels_enabled),
74  function, file, line, "This CPU architecture does not support BFloat16 data type, you need v8.6 or above");
75  return Status{};
76 }
77 
78 /** Return an error if the data type of the passed tensor is FP16 and FP16 support is not compiled in.
79  *
80  * @param[in] function Function in which the error occurred.
81  * @param[in] file Name of the file where the error occurred.
82  * @param[in] line Line on which the error occurred.
83  * @param[in] tensor Tensor to validate.
84  *
85  * @return Status
86  */
87 inline Status error_on_unsupported_cpu_fp16(const char *function, const char *file, const int line,
88  const ITensor *tensor)
89 {
90  ARM_COMPUTE_RETURN_ERROR_ON_LOC(tensor == nullptr, function, file, line);
92  return Status{};
93 }
94 
95 /** Return an error if the data type of the passed tensor is BFLOAT16 and BFLOAT16 support is not compiled in.
96  *
97  * @param[in] function Function in which the error occurred.
98  * @param[in] file Name of the file where the error occurred.
99  * @param[in] line Line on which the error occurred.
100  * @param[in] tensor Tensor to validate.
101  *
102  * @return Status
103  */
104 inline Status error_on_unsupported_cpu_bf16(const char *function, const char *file, const int line,
105  const ITensor *tensor)
106 {
107  ARM_COMPUTE_RETURN_ERROR_ON_LOC(tensor == nullptr, function, file, line);
109  return Status{};
110 }
111 
112 #define ARM_COMPUTE_ERROR_ON_CPU_F16_UNSUPPORTED(tensor) \
113  ARM_COMPUTE_ERROR_THROW_ON(::arm_compute::error_on_unsupported_cpu_fp16(__func__, __FILE__, __LINE__, tensor))
114 
115 #define ARM_COMPUTE_RETURN_ERROR_ON_CPU_F16_UNSUPPORTED(tensor) \
116  ARM_COMPUTE_RETURN_ON_ERROR(::arm_compute::error_on_unsupported_cpu_fp16(__func__, __FILE__, __LINE__, tensor))
117 
118 #define ARM_COMPUTE_ERROR_ON_CPU_BF16_UNSUPPORTED(tensor) \
119  ARM_COMPUTE_ERROR_THROW_ON(::arm_compute::error_on_unsupported_cpu_bf16(__func__, __FILE__, __LINE__, tensor))
120 
121 #define ARM_COMPUTE_RETURN_ERROR_ON_CPU_BF16_UNSUPPORTED(tensor) \
122  ARM_COMPUTE_RETURN_ON_ERROR(::arm_compute::error_on_unsupported_cpu_bf16(__func__, __FILE__, __LINE__, tensor))
123 } // namespace arm_compute
124 #endif /* ARM_COMPUTE_CPP_VALIDATE_H */
bool has_bf16() const
Checks if the cpu model supports bf16.
Definition: CPPTypes.cpp:63
#define ARM_COMPUTE_RETURN_ERROR_ON_LOC_MSG(cond, func, file, line, msg)
If the condition is true, an error is thrown.
Definition: Error.h:283
#define ARM_COMPUTE_RETURN_ERROR_ON_LOC(cond, func, file, line)
If the condition is true, an error is returned.
Definition: Error.h:306
#define ARM_COMPUTE_RETURN_ON_ERROR(status)
Checks if a status contains an error and returns it.
Definition: Error.h:204
bool has_fp16() const
Checks if the cpu model supports fp16.
Definition: CPPTypes.cpp:58
virtual DataType data_type() const =0
Data type used for each element of the tensor.
Store the tensor's metadata.
Definition: ITensorInfo.h:40
Status class.
Definition: Error.h:52
Interface for CPU tensor.
Definition: ITensor.h:36
Copyright (c) 2017-2021 Arm Limited.
1 channel, 1 F16 per channel
16-bit brain floating-point number
Status error_on_unsupported_cpu_bf16(const char *function, const char *file, const int line, const ITensorInfo *tensor_info)
Return an error if the data type of the passed tensor info is BFLOAT16 and BFLOAT16 support is not co...
Definition: Validate.h:64
virtual ITensorInfo * info() const =0
Interface to be implemented by the child class to return the tensor's metadata.
Status error_on_unsupported_cpu_fp16(const char *function, const char *file, const int line, const ITensorInfo *tensor_info)
Return an error if the data type of the passed tensor info is FP16 and FP16 support is not compiled i...
Definition: Validate.h:41
static CPUInfo & get()
Access the KernelLibrary singleton.
Definition: CPPTypes.cpp:39