#pragma once #include #include namespace c10::xpu { #define AT_FORALL_XPU_DEVICE_PROPERTIES(_) \ /* the device name of this SYCL device. */ \ _(name) \ \ /* the device type associated with the device. */ \ _(device_type) \ \ /* the vendor of this SYCL device. */ \ _(vendor) \ \ /* a backend-defined driver version as a std::string. */ \ _(driver_version) \ \ /* the SYCL version as a std::string in the form . */ \ _(version) \ \ /* true if the SYCL device is available. Otherwise, return false. */ \ _(is_available) \ \ /* the maximum size in bytes of the arguments that can be passed to a \ * kernel. */ \ _(max_parameter_size) \ \ /* the number of parallel compute units available to the device. */ \ _(max_compute_units) \ \ /* the maximum dimensions that specify the global and local work-item IDs \ * used by the data parallel execution model. */ \ _(max_work_item_dimensions) \ \ /* the maximum number of workitems that are permitted in a work-group \ * executing a kernel on a single compute unit. */ \ _(max_work_group_size) \ \ /* the maximum number of subgroups in a work-group for any kernel executed \ * on the device. */ \ _(max_num_sub_groups) \ \ /* a std::vector of size_t containing the set of sub-group sizes supported \ * by the device. */ \ _(sub_group_sizes) \ \ /* the maximum configured clock frequency of this SYCL device in MHz. */ \ _(max_clock_frequency) \ \ /* the default compute device address space size specified as an unsigned \ * integer value in bits. Must return either 32 or 64. */ \ _(address_bits) \ \ /* the maximum size of memory object allocation in bytes. */ \ _(max_mem_alloc_size) \ \ /* the minimum value in bits of the largest supported SYCL built-in data \ * type if this SYCL device is not of device type \ * sycl::info::device_type::custom. */ \ _(mem_base_addr_align) \ \ /* a std::vector of info::fp_config describing the half/single/double \ * precision floating-point capability of this SYCL device. */ \ _(half_fp_config) \ _(single_fp_config) \ _(double_fp_config) \ \ /* the size of global device memory in bytes. */ \ _(global_mem_size) \ \ /* the type of global memory cache supported. */ \ _(global_mem_cache_type) \ \ /* the size of global memory cache in bytes. */ \ _(global_mem_cache_size) \ \ /* the size of global memory cache line in bytes. */ \ _(global_mem_cache_line_size) \ \ /* the type of local memory supported. */ \ _(local_mem_type) \ \ /* the size of local memory arena in bytes. */ \ _(local_mem_size) \ \ /* the maximum number of sub-devices that can be created when this device is \ * partitioned. */ \ _(partition_max_sub_devices) \ \ /* the resolution of device timer in nanoseconds. */ \ _(profiling_timer_resolution) \ \ /* the preferred native vector width size for built-in scalar types that can \ * be put into vectors. */ \ _(preferred_vector_width_char) \ _(preferred_vector_width_short) \ _(preferred_vector_width_int) \ _(preferred_vector_width_long) \ _(preferred_vector_width_float) \ _(preferred_vector_width_double) \ _(preferred_vector_width_half) \ \ /* the native ISA vector width. The vector width is defined as the number of \ * scalar elements that can be stored in the vector. */ \ _(native_vector_width_char) \ _(native_vector_width_short) \ _(native_vector_width_int) \ _(native_vector_width_long) \ _(native_vector_width_float) \ _(native_vector_width_double) \ _(native_vector_width_half) #define AT_FORALL_XPU_EXT_DEVICE_PROPERTIES(_) \ /* the number of EUs associated with the Intel GPU. */ \ _(gpu_eu_count, 512) \ \ /* the number of EUs in a subslice. */ \ _(gpu_eu_count_per_subslice, 8) \ \ /* the simd width of EU of GPU. */ \ _(gpu_eu_simd_width, 8) \ \ /* the number of hardware threads per EU of GPU. */ \ _(gpu_hw_threads_per_eu, 8) #define _DEFINE_SYCL_PROP(ns, property, member) \ ns::property::return_type member; #define DEFINE_DEVICE_PROP(property) \ _DEFINE_SYCL_PROP(sycl::info::device, property, property) #define DEFINE_PLATFORM_PROP(property, member) \ _DEFINE_SYCL_PROP(sycl::info::platform, property, member) #define DEFINE_EXT_DEVICE_PROP(property, ...) \ _DEFINE_SYCL_PROP(sycl::ext::intel::info::device, property, property) struct C10_XPU_API DeviceProp { AT_FORALL_XPU_DEVICE_PROPERTIES(DEFINE_DEVICE_PROP); // the platform name. DEFINE_PLATFORM_PROP(name, platform_name); AT_FORALL_XPU_EXT_DEVICE_PROPERTIES(DEFINE_EXT_DEVICE_PROP) }; #undef _DEFINE_SYCL_PROP #undef DEFINE_DEVICE_PROP #undef DEFINE_PLATFORM_PROP #undef DEFINE_EXT_DEVICE_PROP } // namespace c10::xpu