docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
global_tenstorrent_init.h
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4#include <tt-metalium/device_pool.hpp>
5#include <tt-metalium/host_api.hpp>
6#include <unordered_map>
7
8#ifndef DAISY_TT_DEVICE_IDX
9#define DAISY_TT_DEVICE_IDX 0
10#endif
11
13
15 explicit __daisy_DeviceDeleter(int id = -1) : id(id) {}
16
17 void operator()(tt::tt_metal::IDevice* ptr) const {
18 // Device mgmt of Tenstorrent is itself a global var that gets descructed at C++ exit handlers. So it may have
19 // already destructed the devices...
20 }
21
22private:
23 int id;
24};
25
26__attribute__((weak)) std::unordered_map<int, std::unique_ptr<tt::tt_metal::IDevice, __daisy_DeviceDeleter>>
27 __daisy_global_tt_devices;
28
29__attribute__((weak)) tt::tt_metal::IDevice* daisy_get_tt_device(int device_id = 0) {
30 auto& holder = __daisy_global_tt_devices[device_id];
31 auto* ptr = holder.get();
32 if (!ptr) {
33 if (tt::DevicePool::is_initialized()) {
34 auto& pool = tt::DevicePool::instance();
35 if (pool.is_device_active(device_id)) {
36 ptr = pool.get_active_device(device_id);
37 }
38 }
39 if (!ptr) {
40 ptr = tt::tt_metal::CreateDevice(DAISY_TT_DEVICE_IDX);
41 }
42 holder = std::unique_ptr<tt::tt_metal::IDevice, __daisy_DeviceDeleter>(ptr, __daisy_DeviceDeleter(device_id));
43 }
44 return ptr;
45}
46
47__attribute__((weak)) bool daisy_force_close_tt_device(tt::tt_metal::IDevice* device) {
48 auto id = device->id();
49 auto& holder = __daisy_global_tt_devices[id];
50 auto* ptr = holder.get();
51 holder.reset();
52 return ptr != nullptr;
53}
54
55__attribute__((weak)) void daisy_force_close_all_tt_devices() { __daisy_global_tt_devices.clear(); }
56
57} // namespace daisy::tenstorrent
#define DAISY_TT_DEVICE_IDX
Definition global_tenstorrent_init.h:9
Definition global_tenstorrent_init.h:12
__attribute__((weak)) std __attribute__((weak)) tt
Definition global_tenstorrent_init.h:29
Definition global_tenstorrent_init.h:14
void operator()(tt::tt_metal::IDevice *ptr) const
Definition global_tenstorrent_init.h:17
__daisy_DeviceDeleter(int id=-1)
Definition global_tenstorrent_init.h:15