Skip to content

Commit

Permalink
Simplify tt_SiliconDevice construction
Browse files Browse the repository at this point in the history
  • Loading branch information
pjanevskiTT committed Nov 6, 2024
1 parent 718132f commit f978a9e
Show file tree
Hide file tree
Showing 14 changed files with 366 additions and 236 deletions.
28 changes: 28 additions & 0 deletions common/utils.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* SPDX-FileCopyrightText: (c) 2024 Tenstorrent Inc.
*
* SPDX-License-Identifier: Apache-2.0
*/

#pragma once

#include <filesystem>
#include <string>

namespace tt::umd::utils {

std::string get_abs_path(std::string path) {
// Note that __FILE__ might be resolved at compile time to an absolute or relative address, depending on the compiler.
std::filesystem::path current_file_path = std::filesystem::path(__FILE__);
std::filesystem::path umd_root;
if (current_file_path.is_absolute()) {
umd_root = current_file_path.parent_path().parent_path();
} else {
std::filesystem::path umd_root_relative = std::filesystem::relative(std::filesystem::path(__FILE__).parent_path().parent_path().parent_path(), "../");
umd_root = std::filesystem::canonical(umd_root_relative);
}
std::filesystem::path abs_path = umd_root / path;
return abs_path.string();
}

} // namespace std
2 changes: 1 addition & 1 deletion device/mockup/tt_mockup_device.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

class tt_MockupDevice : public tt_device {
public:
tt_MockupDevice(const std::string& sdesc_path) : tt_device(sdesc_path) {
tt_MockupDevice(const std::string& sdesc_path) : tt_device() {
soc_descriptor_per_chip.emplace(0, tt_SocDescriptor(sdesc_path));
std::set<chip_id_t> target_devices = {0};
}
Expand Down
2 changes: 1 addition & 1 deletion device/simulation/tt_simulation_device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ void print_flatbuffer(const DeviceRequestResponse *buf){
std::cout << std::endl;
}

tt_SimulationDevice::tt_SimulationDevice(const std::string &sdesc_path) : tt_device(sdesc_path){
tt_SimulationDevice::tt_SimulationDevice(const std::string &sdesc_path) : tt_device(){
log_info(tt::LogEmulationDriver, "Instantiating simulation device");
soc_descriptor_per_chip.emplace(0, tt_SocDescriptor(sdesc_path));
std::set<chip_id_t> target_devices = {0};
Expand Down
71 changes: 71 additions & 0 deletions device/soc_descriptors/blackhole_140_arch_no_eth.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# Note taken from software repo - may need updates.
grid:
x_size: 17
y_size: 12

arc:
[ 8-0 ]

pcie:
[ 11-0 ]

dram:
[
[0-0, 0-1, 0-11],
[0-2, 0-10, 0-3],
[0-9, 0-4, 0-8],
[0-5, 0-7, 0-6],
[9-0, 9-1, 9-11],
[9-2, 9-10, 9-3],
[9-9, 9-4, 9-8],
[9-5, 9-7, 9-6],
]

eth:
[]

functional_workers:
[
1-2, 2-2, 3-2, 4-2, 5-2, 6-2, 7-2, 10-2, 11-2, 12-2, 13-2, 14-2, 15-2, 16-2,
1-3, 2-3, 3-3, 4-3, 5-3, 6-3, 7-3, 10-3, 11-3, 12-3, 13-3, 14-3, 15-3, 16-3,
1-4, 2-4, 3-4, 4-4, 5-4, 6-4, 7-4, 10-4, 11-4, 12-4, 13-4, 14-4, 15-4, 16-4,
1-5, 2-5, 3-5, 4-5, 5-5, 6-5, 7-5, 10-5, 11-5, 12-5, 13-5, 14-5, 15-5, 16-5,
1-6, 2-6, 3-6, 4-6, 5-6, 6-6, 7-6, 10-6, 11-6, 12-6, 13-6, 14-6, 15-6, 16-6,
1-7, 2-7, 3-7, 4-7, 5-7, 6-7, 7-7, 10-7, 11-7, 12-7, 13-7, 14-7, 15-7, 16-7,
1-8, 2-8, 3-8, 4-8, 5-8, 6-8, 7-8, 10-8, 11-8, 12-8, 13-8, 14-8, 15-8, 16-8,
1-9, 2-9, 3-9, 4-9, 5-9, 6-9, 7-9, 10-9, 11-9, 12-9, 13-9, 14-9, 15-9, 16-9,
1-10, 2-10, 3-10, 4-10, 5-10, 6-10, 7-10, 10-10, 11-10, 12-10, 13-10, 14-10, 15-10, 16-10,
1-11, 2-11, 3-11, 4-11, 5-11, 6-11, 7-11, 10-11, 11-11, 12-11, 13-11, 14-11, 15-11, 16-11,
]

harvested_workers:
[]

router_only:
[
1-0, 2-0, 3-0, 4-0, 5-0, 6-0, 7-0, 10-0, 12-0, 13-0, 14-0, 15-0, 16-0,
1-1, 2-1, 3-1, 4-1, 5-1, 6-1, 7-1, 10-1, 11-1, 12-1, 13-1, 14-1, 15-1, 16-1,
8-1, 8-2, 8-3, 8-4, 8-5, 8-6, 8-7, 8-8, 8-9, 8-10, 8-11
]

worker_l1_size:
1499136

dram_bank_size:
4294967296

eth_l1_size:
262144

arch_name: BLACKHOLE

features:
unpacker:
version: 2
inline_srca_trans_without_srca_trans_instr: True
math:
dst_size_alignment: 32768
packer:
version: 2
overlay:
version: 2
61 changes: 61 additions & 0 deletions device/soc_descriptors/grayskull_10x12.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
grid:
x_size: 13
y_size: 12

arc:
[0-2]

pcie:
[0-4]

dram:
[[1-0], [1-6], [4-0], [4-6], [7-0], [7-6], [10-0], [10-6]]

eth:
[]

functional_workers:
[
1-1, 2-1, 3-1, 4-1, 5-1, 6-1, 7-1, 8-1, 9-1, 10-1, 11-1, 12-1,
1-2, 2-2, 3-2, 4-2, 5-2, 6-2, 7-2, 8-2, 9-2, 10-2, 11-2, 12-2,
1-3, 2-3, 3-3, 4-3, 5-3, 6-3, 7-3, 8-3, 9-3, 10-3, 11-3, 12-3,
1-4, 2-4, 3-4, 4-4, 5-4, 6-4, 7-4, 8-4, 9-4, 10-4, 11-4, 12-4,
1-5, 2-5, 3-5, 4-5, 5-5, 6-5, 7-5, 8-5, 9-5, 10-5, 11-5, 12-5,
1-7, 2-7, 3-7, 4-7, 5-7, 6-7, 7-7, 8-7, 9-7, 10-7, 11-7, 12-7,
1-8, 2-8, 3-8, 4-8, 5-8, 6-8, 7-8, 8-8, 9-8, 10-8, 11-8, 12-8,
1-9, 2-9, 3-9, 4-9, 5-9, 6-9, 7-9, 8-9, 9-9, 10-9, 11-9, 12-9,
1-10, 2-10, 3-10, 4-10, 5-10, 6-10, 7-10, 8-10, 9-10, 10-10, 11-10, 12-10,
1-11, 2-11, 3-11, 4-11, 5-11, 6-11, 7-11, 8-11, 9-11, 10-11, 11-11, 12-11
]

harvested_workers:
[]

router_only:
[
0-0, 0-11, 0-1, 0-10, 0-9, 0-3, 0-8, 0-7, 0-5, 0-6,
12-0, 11-0, 2-0, 3-0, 9-0, 8-0, 5-0, 6-0,
12-6, 11-6, 2-6, 3-6, 9-6, 8-6, 5-6, 6-6
]

worker_l1_size:
1048576

dram_bank_size:
1073741824

eth_l1_size:
0

arch_name: GRAYSKULL

features:
unpacker:
version: 1
inline_srca_trans_without_srca_trans_instr: False
math:
dst_size_alignment: 32768
packer:
version: 1
overlay:
version: 1
70 changes: 70 additions & 0 deletions device/soc_descriptors/wormhole_b0_8x10.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# Note taken from software repo - may need updates.
grid:
x_size: 10
y_size: 12

arc:
[ 0-10 ]

pcie:
[ 0-3 ]

dram:
[
[0-0, 0-1, 0-11],
[0-5, 0-6, 0-7],
[5-0, 5-1, 5-11],
[5-2, 5-9, 5-10],
[5-3, 5-4, 5-8],
[5-5, 5-6, 5-7],
]

eth:
[
9-0, 1-0, 8-0, 2-0, 7-0, 3-0, 6-0, 4-0,
9-6, 1-6, 8-6, 2-6, 7-6, 3-6, 6-6, 4-6,
]

functional_workers:
[
1-1, 2-1, 3-1, 4-1, 6-1, 7-1, 8-1, 9-1,
1-2, 2-2, 3-2, 4-2, 6-2, 7-2, 8-2, 9-2,
1-3, 2-3, 3-3, 4-3, 6-3, 7-3, 8-3, 9-3,
1-4, 2-4, 3-4, 4-4, 6-4, 7-4, 8-4, 9-4,
1-5, 2-5, 3-5, 4-5, 6-5, 7-5, 8-5, 9-5,
1-7, 2-7, 3-7, 4-7, 6-7, 7-7, 8-7, 9-7,
1-8, 2-8, 3-8, 4-8, 6-8, 7-8, 8-8, 9-8,
1-9, 2-9, 3-9, 4-9, 6-9, 7-9, 8-9, 9-9,
1-10, 2-10, 3-10, 4-10, 6-10, 7-10, 8-10, 9-10,
1-11, 2-11, 3-11, 4-11, 6-11, 7-11, 8-11, 9-11,
]

harvested_workers:
[]

router_only:
[
0-2, 0-4, 0-8, 0-9
]

worker_l1_size:
1499136

dram_bank_size:
2147483648

eth_l1_size:
262144

arch_name: WORMHOLE_B0

features:
unpacker:
version: 2
inline_srca_trans_without_srca_trans_instr: True
math:
dst_size_alignment: 32768
packer:
version: 2
overlay:
version: 2
2 changes: 1 addition & 1 deletion device/tt_device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
////////
// Device base
////////
tt_device::tt_device(const std::string& sdesc_path) : soc_descriptor_per_chip({}) {
tt_device::tt_device() : soc_descriptor_per_chip({}) {
}

tt_device::~tt_device() {
Expand Down
25 changes: 22 additions & 3 deletions device/tt_device.h
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ struct tt_device_params {
class tt_device
{
public:
tt_device(const std::string& sdesc_path);
tt_device();
virtual ~tt_device();
// Setup/Teardown Functions
/**
Expand Down Expand Up @@ -605,7 +605,7 @@ class tt_device
*/
class tt_SiliconDevice: public tt_device
{
public:
public:
// Constructor
/**
* Silicon Driver constructor.
Expand All @@ -623,6 +623,20 @@ class tt_SiliconDevice: public tt_device
const uint32_t &num_host_mem_ch_per_mmio_device = 1, const bool skip_driver_allocs = false,
const bool clean_system_resources = false, bool perform_harvesting = true, std::unordered_map<chip_id_t, uint32_t> simulated_harvesting_masks = {});

/**
* Silicon Driver constructor. For now this is a constructor that should be used to work towards removing all
* of the params from the constructor. For now this works only for Wormhole. Fixing parsing cluster descriptor
* will enable this to work for Grayskull and Blackhole.
*
* @param num_host_mem_ch_per_mmio_device Requested number of host channels (hugepages).
* @param skip_driver_allocs
* @param clean_system_resource Specifies if host state from previous runs needs to be cleaned up.
* @param perform_harvesting Allow the driver to modify the SOC descriptors per chip.
* @param simulated_harvesting_masks
*/
tt_SiliconDevice(const uint32_t &num_host_mem_ch_per_mmio_device = 1, const bool skip_driver_allocs = false,
const bool clean_system_resources = false, bool perform_harvesting = true, std::unordered_map<chip_id_t, uint32_t> simulated_harvesting_masks = {});

//Setup/Teardown Functions
virtual std::unordered_map<chip_id_t, tt_SocDescriptor>& get_virtual_soc_descriptors();
virtual void set_device_l1_address_params(const tt_device_l1_address_params& l1_address_params_);
Expand Down Expand Up @@ -705,11 +719,12 @@ class tt_SiliconDevice: public tt_device
virtual tt_version get_ethernet_fw_version() const;
// TODO: This should be accessible through public API, probably to be moved to tt_device.
PCIDevice *get_pci_device(int device_id) const;
const tt_ClusterDescriptor* get_cluster_desc();

// Destructor
virtual ~tt_SiliconDevice ();

private:
private:
// Helper functions
// Startup + teardown
void create_device(const std::unordered_set<chip_id_t> &target_mmio_device_ids, const uint32_t &num_host_mem_ch_per_mmio_device, const bool skip_driver_allocs, const bool clean_system_resources);
Expand Down Expand Up @@ -770,6 +785,9 @@ class tt_SiliconDevice: public tt_device
// This functions has to be called for local chip, and then it will wait for all connected remote chips to flush.
void wait_for_connected_non_mmio_flush(chip_id_t chip_id);

void construct_tt_silicon_device(const uint32_t &num_host_mem_ch_per_mmio_device, const bool skip_driver_allocs,
const bool clean_system_resources, bool perform_harvesting, std::unordered_map<chip_id_t, uint32_t> simulated_harvesting_masks);

// State variables
tt_device_dram_address_params dram_address_params;
tt_device_l1_address_params l1_address_params;
Expand All @@ -782,6 +800,7 @@ class tt_SiliconDevice: public tt_device
std::unordered_map<chip_id_t, std::unique_ptr<PCIDevice>> m_pci_device_map; // Map of enabled pci devices
int m_num_pci_devices; // Number of pci devices in system (enabled or disabled)
std::shared_ptr<tt_ClusterDescriptor> ndesc;
std::string sdesc_path;

// remote eth transfer setup
static constexpr std::uint32_t NUM_ETH_CORES_FOR_NON_MMIO_TRANSFERS = 6;
Expand Down
Loading

0 comments on commit f978a9e

Please sign in to comment.