Repository navigation
Expand file tree
/
Copy pathdevice.cpp
More file actions
64 lines (54 loc) · 1.52 KB
/
Copy pathdevice.cpp
File metadata and controls
64 lines (54 loc) · 1.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// Copyright © 2023-2026 Apple Inc.
#include <stdexcept>
#include "mlx/backend/cpu/device_info.h"
#include "mlx/backend/gpu/device_info.h"
#include "mlx/device.h"
namespace mlx::core {
Device& mutable_default_device() {
static Device default_device{gpu::is_available() ? Device::gpu : Device::cpu};
return default_device;
}
const Device& default_device() {
return mutable_default_device();
}
void set_default_device(const Device& d) {
if (!gpu::is_available() && d == Device::gpu) {
throw std::invalid_argument(
"[set_default_device] Cannot set gpu device without gpu backend.");
}
mutable_default_device() = d;
}
bool is_available(const Device& d) {
switch (d.type) {
case Device::cpu:
return cpu::is_available() && (d.index < cpu::device_count());
case Device::gpu:
return gpu::is_available() && (d.index < gpu::device_count());
}
// appease compiler
return false;
}
int device_count(Device::DeviceType type) {
switch (type) {
case Device::cpu:
return cpu::device_count();
case Device::gpu:
return gpu::device_count();
}
// appease compiler
return 0;
}
const std::unordered_map<std::string, std::variant<std::string, size_t>>&
device_info(const Device& d) {
switch (d.type) {
case Device::cpu:
return cpu::device_info(d.index);
case Device::gpu:
return gpu::device_info(d.index);
}
// appease compiler
static std::unordered_map<std::string, std::variant<std::string, size_t>>
empty;
return empty;
}
} // namespace mlx::core