blob: 00b7cda2e1621a2cfe239cb394b361a98ef5e161 [file] [log] [blame]
Anthony Barbier6ff3b192017-09-04 18:44:23 +01001/*
Viet-Hoa Doaa794052022-05-23 16:47:42 +01002 * Copyright (c) 2017-2022 Arm Limited.
Anthony Barbier6ff3b192017-09-04 18:44:23 +01003 *
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 */
Michalis Spyrouf4643372019-11-29 16:17:13 +000024#ifndef ARM_COMPUTE_CL_TYPES_H
25#define ARM_COMPUTE_CL_TYPES_H
Anthony Barbier6ff3b192017-09-04 18:44:23 +010026
Georgios Pinitas4c5469b2019-05-21 13:32:43 +010027#include "arm_compute/core/CL/ICLArray.h"
Michele Di Giorgio164b65d2018-04-13 14:28:08 +010028#include "arm_compute/core/GPUTarget.h"
29
Michalis Spyrou11d49182020-03-26 10:31:32 +000030#include <set>
Gian Marco Iodice77497d72017-09-27 09:17:00 +010031#include <string>
32
Anthony Barbier6ff3b192017-09-04 18:44:23 +010033namespace arm_compute
34{
Gian Marco Iodice77497d72017-09-27 09:17:00 +010035/** Default string for the CLKernel configuration id */
36static const std::string default_config_id = "no_config_id";
37
Alex Gildayc357c472018-03-21 13:54:09 +000038/** Available OpenCL Version */
steniu0134702472017-07-11 09:22:58 +010039enum class CLVersion
40{
41 CL10, /* the OpenCL 1.0 */
42 CL11, /* the OpenCL 1.1 */
43 CL12, /* the OpenCL 1.2 */
Viet-Hoa Dof8bb0922022-05-30 15:15:15 +010044 CL20, /* the OpenCL 2.x */
45 CL30, /* the OpenCL 3.x */
steniu0134702472017-07-11 09:22:58 +010046 UNKNOWN /* unkown version */
47};
Georgios Pinitasc0d1c862018-03-23 15:13:15 +000048
49/** OpenCL device options */
50struct CLDeviceOptions
51{
Michalis Spyrou11d49182020-03-26 10:31:32 +000052 std::string name{}; /**< Device name */
53 std::string device_version{}; /**< Device version string */
54 std::set<std::string> extensions{}; /**< List of supported extensions */
55 std::string ddk_version{}; /**< DDK version */
56 GPUTarget gpu_target{}; /**< GPU target architecture/instance */
57 CLVersion version{}; /**< Device OpenCL version */
58 size_t compute_units{}; /**< Number of compute units */
59 size_t cache_size{}; /**< Cache size */
Georgios Pinitasc0d1c862018-03-23 15:13:15 +000060};
Georgios Pinitas4c5469b2019-05-21 13:32:43 +010061
62/** OpenCL quantization data */
63struct CLQuantization
64{
65 /** Default Constructor */
66 CLQuantization()
67 : scale(nullptr), offset(nullptr) {};
68 /** Constructor
69 *
70 * @param[in] scale OpenCL scale array
71 * @param[in] offset OpenCL offset array
72 */
73 CLQuantization(const ICLFloatArray *scale, const ICLInt32Array *offset)
74 : scale(scale), offset(offset) {};
75
76 const ICLFloatArray *scale; /**< Quantization scale array */
77 const ICLInt32Array *offset; /**< Quantization offset array */
78};
Giorgio Arena4a95bba2021-06-28 11:00:27 +010079
80enum CLKernelType
81{
82 UNKNOWN, /**< Unknown CL kernel type */
83 DEPTHWISE, /**< Depthwise CL kernel type */
84 DIRECT, /**< Direct Convolution CL kernel type */
Viet-Hoa Doaa794052022-05-23 16:47:42 +010085 ELEMENTWISE, /**< Elementwise CL kernel type */
Giorgio Arena4a95bba2021-06-28 11:00:27 +010086 GEMM, /**< GEMM CL kernel type */
87 POOL, /**< Pool CL kernel type */
88 WINOGRAD /**< Winograd CL kernel type */
89};
Georgios Pinitasc0d1c862018-03-23 15:13:15 +000090} // namespace arm_compute
Michalis Spyrouf4643372019-11-29 16:17:13 +000091#endif /* ARM_COMPUTE_CL_TYPES_H */