blob: a43df3d08ed4bcaf43ae63c0bee687ea814cddcb [file] [log] [blame]
Michele Di Giorgio164b65d2018-04-13 14:28:08 +01001/*
2 * Copyright (c) 2018 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_GPUTARGET_H__
25#define __ARM_COMPUTE_GPUTARGET_H__
26
Michele Di Giorgiob8fc60f2018-04-25 11:58:07 +010027#include "arm_compute/core/Helpers.h"
28
29#include <string>
30
Michele Di Giorgio164b65d2018-04-13 14:28:08 +010031namespace arm_compute
32{
33/** Available GPU Targets */
34enum class GPUTarget
35{
36 UNKNOWN = 0x101,
37 GPU_ARCH_MASK = 0xF00,
38 MIDGARD = 0x100,
39 BIFROST = 0x200,
40 T600 = 0x110,
41 T700 = 0x120,
42 T800 = 0x130,
43 G71 = 0x210,
44 G72 = 0x220,
45 G51 = 0x230,
46 G51BIG = 0x231,
47 G51LIT = 0x232,
Georgios Pinitasa34286e2018-09-04 12:18:50 +010048 G52 = 0x240,
49 G52LIT = 0x241,
50 G76 = 0x250,
51 TTRX = 0x260,
52 TBOX = 0x270
Michele Di Giorgio164b65d2018-04-13 14:28:08 +010053};
Michele Di Giorgiob8fc60f2018-04-25 11:58:07 +010054
55/** Enable bitwise operations on GPUTarget enumerations */
56template <>
57struct enable_bitwise_ops<arm_compute::GPUTarget>
58{
59 static constexpr bool value = true; /**< Enabled. */
60};
61
62/** Translates a given gpu device target to string.
63 *
64 * @param[in] target Given gpu target.
65 *
66 * @return The string describing the target.
67 */
68const std::string &string_from_target(GPUTarget target);
69
70/** Helper function to get the GPU target from a device name
71 *
72 * @param[in] device_name A device name
73 *
74 * @return the GPU target
75 */
76GPUTarget get_target_from_name(const std::string &device_name);
77
78/** Helper function to get the GPU arch
79 *
80 * @param[in] target GPU target
81 *
82 * @return the GPU target which shows the arch
83 */
84GPUTarget get_arch_from_target(GPUTarget target);
85/** Helper function to check whether a gpu target is equal to the provided targets
86 *
87 * @param[in] target_to_check gpu target to check
88 * @param[in] target First target to compare against
89 * @param[in] targets (Optional) Additional targets to compare with
90 *
91 * @return True if the target is equal with at least one of the targets.
92 */
93template <typename... Args>
94bool gpu_target_is_in(GPUTarget target_to_check, GPUTarget target, Args... targets)
95{
96 return (target_to_check == target) | gpu_target_is_in(target_to_check, targets...);
97}
98
99/** Variant of gpu_target_is_in for comparing two targets */
100inline bool gpu_target_is_in(GPUTarget target_to_check, GPUTarget target)
101{
102 return target_to_check == target;
103}
Michele Di Giorgio164b65d2018-04-13 14:28:08 +0100104} // namespace arm_compute
105#endif /* __ARM_COMPUTE_GPUTARGET_H__ */