blob: b107a52d9f70b2ef922bb51e390a15f44bcbd98e [file] [log] [blame]
/*
* Copyright (c) 2018-2023 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#ifndef ACL_ARM_COMPUTE_CORE_GPUTARGET_H
#define ACL_ARM_COMPUTE_CORE_GPUTARGET_H
#include "support/Traits.h"
#include <string>
namespace arm_compute
{
/** Available GPU Targets */
enum class GPUTarget
{
UNKNOWN = 0x101,
GPU_ARCH_MASK = 0xF00,
GPU_GENERATION_MASK = 0x0F0,
MIDGARD = 0x100,
BIFROST = 0x200,
VALHALL = 0x300,
FIFTHGEN = 0X400,
T600 = 0x110,
T700 = 0x120,
T800 = 0x130,
G71 = 0x210,
G72 = 0x220,
G51 = 0x221,
G51BIG = 0x222,
G51LIT = 0x223,
G31 = 0x224,
G76 = 0x230,
G52 = 0x231,
G52LIT = 0x232,
G77 = 0x310,
G57 = 0x311,
G78 = 0x320,
G68 = 0x321,
G78AE = 0x330,
G710 = 0x340,
G610 = 0x341,
G510 = 0x342,
G310 = 0x343,
G715 = 0x350,
G615 = 0x351,
G720 = 0x410,
G620 = 0X411
};
/** Enable bitwise operations on GPUTarget enumerations */
template <>
struct enable_bitwise_ops<arm_compute::GPUTarget>
{
static constexpr bool value = true; /**< Enabled. */
};
/** Translates a given gpu device target to string.
*
* @param[in] target Given gpu target.
*
* @return The string describing the target.
*/
const std::string &string_from_target(GPUTarget target);
/** Helper function to get the GPU target from a device name
*
* @param[in] device_name A device name
*
* @return the GPU target
*/
GPUTarget get_target_from_name(const std::string &device_name);
/** Helper function to get the GPU arch
*
* @param[in] target GPU target
*
* @return the GPU target which shows the arch
*/
GPUTarget get_arch_from_target(GPUTarget target);
/** Helper function to check whether a gpu target is equal to the provided targets
*
* @param[in] target_to_check gpu target to check
* @param[in] target First target to compare against
* @param[in] targets (Optional) Additional targets to compare with
*
* @return True if the target is equal with at least one of the targets.
*/
template <typename... Args>
bool gpu_target_is_in(GPUTarget target_to_check, GPUTarget target, Args... targets)
{
return (target_to_check == target) | gpu_target_is_in(target_to_check, targets...);
}
/** Variant of gpu_target_is_in for comparing two targets */
inline bool gpu_target_is_in(GPUTarget target_to_check, GPUTarget target)
{
return target_to_check == target;
}
} // namespace arm_compute
#endif // ACL_ARM_COMPUTE_CORE_GPUTARGET_H