1 #ifndef HALIDE_TARGET_H 2 #define HALIDE_TARGET_H 177 for (
const auto &f : initial_features) {
183 Target(
OS o,
Arch a,
int b,
const std::vector<Feature> &initial_features = std::vector<Feature>())
198 explicit Target(
const std::string &s);
199 explicit Target(
const char *s);
211 void set_features(
const std::vector<Feature> &features_to_set,
bool value =
true);
267 return os == other.
os &&
271 features == other.features;
275 return !(*
this == other);
308 template<
typename data_t>
360 std::bitset<FeatureEnd> features;
365 void validate_features()
const;
Enable Vulkan 64-bit integer support.
Disable the bounds querying functionality.
Enable ARM Scalable Vector Extensions v2.
Enable x86 (AMD) FMA4 instruction set.
bool supports_device_api(DeviceAPI api) const
Returns whether a particular device API can be used with this Target.
Target get_target_from_environment()
Return the target that Halide will use.
enum Halide::Target::Arch arch
static bool validate_target_string(const std::string &s)
Check if a target string is valid.
bool features_all_of(const std::vector< Feature > &test_features) const
enum Halide::Target::Processor processor_tune
Enable +simd128 instructions for WebAssembly codegen.
Enable ARM Scalable Vector Extensions.
Enable hooks for MSAN support.
Tune for AMD Zen CPU (AMD Family 17h, launched 2017).
bool has_feature(Feature f) const
Tune for AMD Bulldozer CPU (AMD Family 15h, launched 2011).
Enable Vulkan runtime support.
Enable hooks for TSAN support.
Target(OS o, Arch a, int b, Processor pt, const std::vector< Feature > &initial_features=std::vector< Feature >(), int vb=0)
bool supported() const
Was libHalide compiled with support for this target?
Enable half support on OpenCL targets.
Used together with Target::NoOS for the baremetal target built with semihosting library and run with ...
A struct representing a target machine and os to generate code for.
Generate C++ mangled names for result function, et al.
Enable the AVX512 features supported by Knight's Landing chips, such as the Xeon Phi x200...
Target::Feature target_feature_for_device_api(DeviceAPI api)
Get the Target feature corresponding to a DeviceAPI.
Arch
The architecture used by the target.
int bits
The bit-width of the target machine.
Do not include a copy of the Halide runtime in any generated object file or assembly.
Tune for later versions of AMD K8 CPU, with SSE3 support.
Enable Vulkan v1.3 runtime target support.
Enable Hexagon v62 architecture.
static Target::Feature feature_from_name(const std::string &name)
Return the feature corresponding to a given name, in the form used to construct Target strings (e...
bool has_large_buffers() const
Return true iff 64 bits and has_feature(LargeBuffers).
Processor
The specific processor to be targeted, tuned for.
This file defines the class FunctionDAG, which is our representation of a Halide pipeline, and contains methods to using Halide's bounds tools to query properties of it.
Enable HVX 128 byte mode.
bool get_runtime_compatible_target(const Target &other, Target &result)
Create a "greatest common denominator" runtime target that is compatible with both this target and ot...
Enable Hexagon v66 architecture.
bool has_feature(halide_target_feature_t f) const
bool has_unknowns() const
Return true if any of the arch/bits/os fields are "unknown"/0; return false otherwise.
Enable CUDA compute capability 3.5 (Kepler)
Enable Vulkan 16-bit float support.
Enable the base AVX512 subset supported by all AVX512 architectures. The specific feature sets are AV...
Enable CUDA compute capability 5.0 (Maxwell)
Enable the OpenCL runtime.
Generate code for ARMv7s. Only relevant for 32-bit ARM.
Enable RISCV "V" Vector Extension.
Use SSE 4.1 and earlier instructions. Only relevant on x86.
Enable CUDA compute capability 8.6 (Ampere)
bool operator==(const Target &other) const
Enable the WebGPU runtime.
Tune for AMD Bobcat CPU (AMD Family 14h, launched 2011).
Enable Direct3D 12 Compute runtime.
OS
The operating system used by the target.
Enable soft float ABI. This only enables the soft float ABI calling convention, which does not necess...
Enable 64-bit buffer indexing to support buffers > 2GB. Ignored if bits != 64.
This file declares the routines used by Halide internally in its runtime.
Launch a sampling profiler alongside the Halide pipeline that monitors and reports the runtime used b...
Use AVX 2 instructions. Only relevant on x86.
Enable the AVX512 features supported by Skylake Xeon server processors. This adds AVX512-VL...
Enable SPIR-V code generation support.
Enable CUDA compute capability 7.0 (Volta)
void set_feature(Feature f, bool value=true)
Enable CUDA compute capability 6.1 (Pascal)
Turn off all non-IEEE floating-point optimization. Currently applies only to LLVM targets...
Generate code that will run immediately inside the calling process.
Enable the AVX512 features supported by Sapphire Rapids processors. This include all of the Zen4 feat...
Enable 64-bit atomics operations on OpenCL targets.
Enable hooks for ASAN support.
Enable +bulk-memory instructions for WebAssembly codegen.
Enable loop vectorization + unrolling in LLVM. Overrides halide_target_feature_disable_llvm_loop_opt...
int get_vulkan_capability_lower_bound() const
Get the minimum Vulkan capability found as an integer.
bool has_gpu_feature() const
Is a fully feature GPU compute runtime enabled? I.e.
Enable double support on OpenCL targets.
signed __INT64_TYPE__ int64_t
Trace all stores done by the pipeline. Equivalent to calling Func::trace_stores on every non-inlined ...
bool operator!=(const Target &other) const
Enable Vulkan 8-bit integer support.
Enable hooks for SanitizerCoverage support.
Disable all runtime checks, for slightly tighter code.
halide_target_feature_t
Optional features a compilation Target can have.
Target with_feature(Feature f) const
Return a copy of the target with the given feature set.
Enable the CUDA runtime. Defaults to compute capability 2.0 (Fermi)
Use VSX instructions. Only relevant on POWERPC.
Use the LLVM large code model to compile.
Trace all loads done by the pipeline. Equivalent to calling Func::trace_loads on every non-inlined Fu...
Enable ARMv8.2-a half-precision floating point data processing.
Turn on debug info and output for runtime code.
Tune for AMD Jaguar CPU (AMD Family 16h, launched 2013).
bool supports_type(const Type &t) const
Does this target allow using a certain type.
Tune for AMD Steamroller CPU (AMD Family 15h (3nd-gen), launched 2014).
Enable CUDA compute capability 7.5 (Turing)
Force use of EGL support.
Enable Vulkan 64-bit float support.
const std::bitset< FeatureEnd > & get_features_bitset() const
Return a bitset of the Featuress set in this Target (set = 1).
Enable x86 16-bit float support.
A sentinel. Every target is considered to have this feature, and setting this feature does nothing...
Use POWER ISA 2.07 new instructions. Only relevant on POWERPC.
Disable all extensions to WebAssembly codegen (including +sign-ext and +nontrapping-fptoint, which are on by default).
Feature
Optional features a target can have.
Avoid using NEON instructions. Only relevant for 32-bit ARM.
Do not tune for any specific CPU. In practice, this means that halide will decide the tune CPU based ...
void set_features(const std::vector< Feature > &features_to_set, bool value=true)
int get_cuda_capability_lower_bound() const
Get the minimum cuda capability found as an integer.
On every floating point store, set the last bit of the mantissa to zero. Pipelines for which the outp...
Types in the halide type system.
Enable ARMv8.1-a instructions.
Insert assertions for promises.
Enable use of threads in WebAssembly codegen. Requires the use of a wasm runtime that provides pthrea...
Generated code takes a user_context pointer as first argument.
Enable x86 FMA instruction.
Tune for AMD Zen 2 CPU (AMD Family 17h, launched 2019).
Enable Hexagon DMA buffers.
Trace all realizations done by the pipeline. Equivalent to calling Func::trace_realizations on every ...
Emulate clang -fembed-bitcode flag.
int64_t maximum_buffer_size() const
Return the maximum buffer size in bytes supported on this Target.
Tune for AMD Excavator CPU (AMD Family 15h (4th-gen), launched 2015).
Use AVX 1 instructions. Only relevant on x86.
bool features_any_of(const std::vector< Feature > &test_features) const
Tune for AMD Piledriver CPU (AMD Family 15h (2nd-gen), launched 2012).
Target(OS o, Arch a, int b, const std::vector< Feature > &initial_features=std::vector< Feature >())
int vector_bits
The bit-width of a vector register for targets where this is configurable and targeting a fixed size ...
Target get_jit_target_from_environment()
Return the target that Halide will use for jit-compilation.
Enable CUDA compute capability 3.2 (Tegra K1)
Alternative to halide_target_feature_profile using timer interrupt for systems without threads or app...
Enable Hexagon v65 architecture.
Enable CUDA compute capability 3.0 (Kepler)
static std::string feature_to_name(Target::Feature feature)
Return the name corresponding to a given Feature, in the form used to construct Target strings (e...
enum Halide::Target::OS os
DeviceAPI get_required_device_api() const
If this Target (including all Features) requires a specific DeviceAPI, return it. ...
unsigned __INT64_TYPE__ uint64_t
Enable the AVX512 features supported by Zen4 processors. This include all of the Cannonlake features...
std::string to_string() const
Convert the Target into a string form that can be reconstituted by merge_string(), which will always be of the form.
Enable OpenGL Compute runtime. NOTE: This feature is deprecated and will be removed in Halide 17...
Tune for AMD K10 "Barcelona" CPU (AMD Family 10h, launched 2007).
DeviceAPI
An enum describing a type of device API.
Enable CUDA compute capability 8.0 (Ampere)
Enable the (Apple) Metal runtime.
Enable Vulkan v1.2 runtime target support.
Enable the AVX512 features expected to be supported by future Cannonlake processors. This includes all of the Skylake features, plus AVX512-IFMA and AVX512-VBMI.
int natural_vector_size() const
Given a data type, return an estimate of the "natural" vector size for that data type when compiling ...
Target get_host_target()
Return the target corresponding to the host machine.
Enable Vulkan 16-bit integer support.
Enable ARMv8.2-a dotprod extension (i.e. udot and sdot instructions)
Target without_feature(Feature f) const
Return a copy of the target with the given feature cleared.
Tune for AMD K8 Hammer CPU (AMD Family 0Fh, launched 2003).
Tune for AMD Zen 3 CPU (AMD Family 19h, launched 2020).
Enable Vulkan v1.0 runtime target support.