26 return new MetalDevice(info, stats, profiler, headless);
36 MetalDeviceKernels::static_deinitialize();
41 auto usable_devices = MetalInfo::get_usable_devices();
43 set<string> unique_ids;
45 for (id<MTLDevice> &device : usable_devices) {
47 string device_name = MetalInfo::get_device_name(device);
49 string id = string(
"METAL_") + device_name;
52 if (unique_ids.find(
id) != unique_ids.end()) {
55 unique_ids.insert(
id);
62 info.
num = device_index;
67# if defined(WITH_OPENIMAGEDENOISE)
68# if OIDN_VERSION >= 20300
69 if (oidnIsMetalDeviceSupported(device)) {
71 if (OIDNDenoiserGPU::is_device_supported(info)) {
82 if (@available(macos 13.0, *)) {
90# if defined(MAC_OS_VERSION_14_0)
91 if (@available(macos 14.0, *)) {
96 (MetalInfo::get_apple_gpu_architecture(device) >= APPLE_M3);
106 VLOG_INFO <<
"Device with id \"" << info.
id <<
"\" supports "
114 auto allDevices = MTLCopyAllDevices();
116 if (num_devices == 0) {
117 return "No Metal devices found\n";
119 result +=
string_printf(
"Number of devices: %u\n", num_devices);
121 for (id<MTLDevice> device in allDevices) {
122 string device_name = MetalInfo::get_device_name(device);
123 result +=
string_printf(
"\t\tDevice: %s\n", device_name.c_str());
DenoiserTypeMask denoisers
bool use_metalrt_by_default
bool use_hardware_raytracing
CCL_NAMESPACE_BEGIN const char * denoiserTypeToHumanReadable(DenoiserType type)
@ DENOISER_OPENIMAGEDENOISE
#define CCL_NAMESPACE_END
string device_metal_capabilities()
CCL_NAMESPACE_BEGIN Device * device_metal_create(const DeviceInfo &info, Stats &stats, Profiler &profiler)
void device_metal_info(vector< DeviceInfo > &devices)
Vector< CPUDevice > devices
list of all CPUDevices. for every hardware thread an instance of CPUDevice is created
string string_remove_trademark(const string &s)
CCL_NAMESPACE_BEGIN string string_printf(const char *format,...)