blob: b107a52d9f70b2ef922bb51e390a15f44bcbd98e [file] [log] [blame]
Michele Di Giorgio164b65d2018-04-13 14:28:08 +01001/*
Gunes Bayir85cafff2023-12-18 13:29:31 +00002 * Copyright (c) 2018-2023 Arm Limited.
Michele Di Giorgio164b65d2018-04-13 14:28:08 +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 */
Gunes Bayir85cafff2023-12-18 13:29:31 +000024#ifndef ACL_ARM_COMPUTE_CORE_GPUTARGET_H
25#define ACL_ARM_COMPUTE_CORE_GPUTARGET_H
Michele Di Giorgio164b65d2018-04-13 14:28:08 +010026
Sang-Hoon Park68dd25f2020-10-19 16:00:11 +010027#include "support/Traits.h"
Michele Di Giorgiob8fc60f2018-04-25 11:58:07 +010028
29#include <string>
30
Michele Di Giorgio164b65d2018-04-13 14:28:08 +010031namespace arm_compute
32{
33/** Available GPU Targets */
34enum class GPUTarget
35{
Gian Marco Iodice3c4d0852022-07-11 12:09:45 +010036 UNKNOWN = 0x101,
37 GPU_ARCH_MASK = 0xF00,
38 GPU_GENERATION_MASK = 0x0F0,
39 MIDGARD = 0x100,
40 BIFROST = 0x200,
41 VALHALL = 0x300,
Gunes Bayir85cafff2023-12-18 13:29:31 +000042 FIFTHGEN = 0X400,
Gian Marco Iodice3c4d0852022-07-11 12:09:45 +010043 T600 = 0x110,
44 T700 = 0x120,
45 T800 = 0x130,
46 G71 = 0x210,
47 G72 = 0x220,
48 G51 = 0x221,
49 G51BIG = 0x222,
50 G51LIT = 0x223,
51 G31 = 0x224,
52 G76 = 0x230,
53 G52 = 0x231,
54 G52LIT = 0x232,
55 G77 = 0x310,
56 G57 = 0x311,
57 G78 = 0x320,
58 G68 = 0x321,
59 G78AE = 0x330,
60 G710 = 0x340,
61 G610 = 0x341,
62 G510 = 0x342,
63 G310 = 0x343,
64 G715 = 0x350,
65 G615 = 0x351,
Gunes Bayir85cafff2023-12-18 13:29:31 +000066 G720 = 0x410,
67 G620 = 0X411
Michele Di Giorgio164b65d2018-04-13 14:28:08 +010068};
Michele Di Giorgiob8fc60f2018-04-25 11:58:07 +010069
70/** Enable bitwise operations on GPUTarget enumerations */
71template <>
72struct enable_bitwise_ops<arm_compute::GPUTarget>
73{
74 static constexpr bool value = true; /**< Enabled. */
75};
76
77/** Translates a given gpu device target to string.
78 *
79 * @param[in] target Given gpu target.
80 *
81 * @return The string describing the target.
82 */
83const std::string &string_from_target(GPUTarget target);
84
85/** Helper function to get the GPU target from a device name
86 *
87 * @param[in] device_name A device name
88 *
89 * @return the GPU target
90 */
91GPUTarget get_target_from_name(const std::string &device_name);
92
93/** Helper function to get the GPU arch
94 *
95 * @param[in] target GPU target
96 *
97 * @return the GPU target which shows the arch
98 */
99GPUTarget get_arch_from_target(GPUTarget target);
100/** Helper function to check whether a gpu target is equal to the provided targets
101 *
102 * @param[in] target_to_check gpu target to check
103 * @param[in] target First target to compare against
104 * @param[in] targets (Optional) Additional targets to compare with
105 *
106 * @return True if the target is equal with at least one of the targets.
107 */
108template <typename... Args>
109bool gpu_target_is_in(GPUTarget target_to_check, GPUTarget target, Args... targets)
110{
111 return (target_to_check == target) | gpu_target_is_in(target_to_check, targets...);
112}
113
114/** Variant of gpu_target_is_in for comparing two targets */
115inline bool gpu_target_is_in(GPUTarget target_to_check, GPUTarget target)
116{
117 return target_to_check == target;
118}
Michele Di Giorgio164b65d2018-04-13 14:28:08 +0100119} // namespace arm_compute
Gunes Bayir85cafff2023-12-18 13:29:31 +0000120#endif // ACL_ARM_COMPUTE_CORE_GPUTARGET_H