Skip to content

Commit

Permalink
Merge branch 'main' into pjanevski/core_coordinates
Browse files Browse the repository at this point in the history
  • Loading branch information
pjanevskiTT authored Dec 2, 2024
2 parents c078977 + b3b5f1a commit 467ad4a
Show file tree
Hide file tree
Showing 31 changed files with 592 additions and 219 deletions.
37 changes: 21 additions & 16 deletions cmake/dependencies.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ function(fetch_dependencies)

include(${PROJECT_SOURCE_DIR}/cmake/CPM.cmake)

############################################################################################################################
####################################################################################################################
# google test
############################################################################################################################
####################################################################################################################
CPMAddPackage(
NAME googletest
GITHUB_REPOSITORY google/googletest
Expand All @@ -20,9 +20,9 @@ function(fetch_dependencies)
"INSTALL_GTEST OFF"
)

############################################################################################################################
####################################################################################################################
# yaml-cpp
############################################################################################################################
####################################################################################################################
CPMAddPackage(
NAME yaml-cpp
GITHUB_REPOSITORY jbeder/yaml-cpp
Expand All @@ -42,15 +42,15 @@ function(fetch_dependencies)
)
endif()

############################################################################################################################
###################################################################################################################
# boost::interprocess
############################################################################################################################
###################################################################################################################
include(${PROJECT_SOURCE_DIR}/cmake/fetch_boost.cmake)
fetch_boost_library(interprocess)

############################################################################################################################
###################################################################################################################
# Nanomsg
############################################################################################################################
###################################################################################################################
CPMAddPackage(
NAME nanomsg
GITHUB_REPOSITORY nanomsg/nng
Expand All @@ -61,9 +61,9 @@ function(fetch_dependencies)
"NNG_TOOLS OFF"
)

############################################################################################################################
###################################################################################################################
# Flatbuffers
############################################################################################################################
###################################################################################################################
CPMAddPackage(
NAME flatbuffers
GITHUB_REPOSITORY google/flatbuffers
Expand Down Expand Up @@ -94,22 +94,27 @@ function(fetch_dependencies)
set(FBS_GENERATED_HEADER ${FBS_GENERATED_HEADER} PARENT_SCOPE)
endfunction()

############################################################################################################################
###################################################################################################################
# libuv (for process management)
############################################################################################################################
###################################################################################################################
CPMAddPackage(NAME libuv GITHUB_REPOSITORY libuv/libuv GIT_TAG v1.48.0 OPTIONS "LIBUV_BUILD_TESTS OFF")

############################################################################################################################
###################################################################################################################
# fmt : https://github.com/fmtlib/fmt
############################################################################################################################
###################################################################################################################

CPMAddPackage(NAME fmt GITHUB_REPOSITORY fmtlib/fmt GIT_TAG 11.0.1)

############################################################################################################################
###################################################################################################################
# nanobench (for uBenchmarking)
############################################################################################################################
###################################################################################################################
if(MASTER_PROJECT)
CPMAddPackage(NAME nanobench GITHUB_REPOSITORY martinus/nanobench GIT_TAG v4.3.11)
endif()

####################################################################################################################
# spdlog
####################################################################################################################
CPMAddPackage(NAME spdlog GITHUB_REPOSITORY gabime/spdlog GIT_TAG v1.14.1 VERSION v1.14.1)
endfunction()
fetch_dependencies()
2 changes: 2 additions & 0 deletions common/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ target_sources(
backtrace.hpp
gtest_initializer.hpp # FIXME: this should be tucked away with the tests
logger.hpp
logger_.hpp # FIXME: replace old logger, see issue #315
logger_.cpp
)

target_include_directories(umd_common INTERFACE .)
49 changes: 49 additions & 0 deletions common/logger_.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*
* SPDX-FileCopyrightText: (c) 2024 Tenstorrent Inc.
*
* SPDX-License-Identifier: Apache-2.0
*/

#include "logger_.hpp" // TODO: rename after logger.hpp is removed

#include <fmt/format.h>
#include <spdlog/sinks/basic_file_sink.h>
#include <spdlog/sinks/stdout_sinks.h>

#include <mutex>

namespace tt::umd::logger {

void initialize(const Options& options) {
static std::mutex mutex;
std::scoped_lock lock{mutex};

if (detail::is_initialized.load(std::memory_order_relaxed)) {
return;
}

std::vector<spdlog::sink_ptr> sinks;

if (options.log_to_stderr) {
auto stderr_sink = std::make_shared<spdlog::sinks::stderr_sink_mt>();
sinks.push_back(stderr_sink);
}

if (!options.filename.empty()) {
auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>(options.filename);
sinks.push_back(file_sink);
}

auto logger = std::make_shared<spdlog::logger>("UMD", sinks.begin(), sinks.end());
logger->set_level(options.log_level);
logger->set_pattern(options.pattern);

spdlog::set_default_logger(logger);
detail::is_initialized.store(true, std::memory_order_release);
}

namespace detail {
std::atomic_bool is_initialized = false;
}

} // namespace tt::umd::logger
90 changes: 90 additions & 0 deletions common/logger_.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
/*
* SPDX-FileCopyrightText: (c) 2024 Tenstorrent Inc.
*
* SPDX-License-Identifier: Apache-2.0
*
*/

#pragma once

#include <atomic>

#define SPDLOG_FMT_EXTERNAL
#include <spdlog/spdlog.h>

namespace tt::umd::logger {

/**
* Parameters controlling the behavior of the logger.
*/
struct Options {
bool log_to_stderr{true};
std::string filename{};
std::string pattern{"[%Y-%m-%d %H:%M:%S.%e] [%l] [%s:%#] %v"};
spdlog::level::level_enum log_level{spdlog::level::debug};

// TODO: this can be augmented as needed (log rotation, flush policy...)
};

/**
* One-time initialization of the logger.
*
* If you don't call it, the logger will be initialized with default options the
* first time a message is logged.
*/
void initialize(const Options& options = Options{});

/**
* Macros for using the logger.
*/
#define UMD_TRACE(...) \
do { \
::tt::umd::logger::detail::ensure_initialized(); \
SPDLOG_TRACE(__VA_ARGS__); \
} while (0)

#define UMD_DEBUG(...) \
do { \
::tt::umd::logger::detail::ensure_initialized(); \
SPDLOG_DEBUG(__VA_ARGS__); \
} while (0)

#define UMD_INFO(...) \
do { \
::tt::umd::logger::detail::ensure_initialized(); \
SPDLOG_INFO(__VA_ARGS__); \
} while (0)

#define UMD_WARN(...) \
do { \
::tt::umd::logger::detail::ensure_initialized(); \
SPDLOG_WARN(__VA_ARGS__); \
} while (0)

#define UMD_ERROR(...) \
do { \
::tt::umd::logger::detail::ensure_initialized(); \
SPDLOG_ERROR(__VA_ARGS__); \
} while (0)

#define UMD_CRITICAL(...) \
do { \
::tt::umd::logger::detail::ensure_initialized(); \
SPDLOG_CRITICAL(__VA_ARGS__); \
} while (0)

/**
* This is not part of the API.
*/
namespace detail {
extern std::atomic_bool is_initialized;

inline void ensure_initialized() {
if (!is_initialized.load(std::memory_order_acquire)) {
initialize();
}
}

} // namespace detail

} // namespace tt::umd::logger
61 changes: 61 additions & 0 deletions common/timestamp.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/*
* SPDX-FileCopyrightText: (c) 2024 Tenstorrent Inc.
*
* SPDX-License-Identifier: Apache-2.0
*/

#pragma once

#include <fmt/format.h>

#include <chrono>
#include <string>

namespace tt::umd::util {

class Timestamp {
std::chrono::steady_clock::time_point start;

public:
Timestamp() : start(std::chrono::steady_clock::now()) {}

void reset() { start = std::chrono::steady_clock::now(); }

uint64_t nanoseconds() const {
auto now = std::chrono::steady_clock::now();
return std::chrono::duration_cast<std::chrono::nanoseconds>(now - start).count();
}

uint64_t microseconds() const {
auto now = std::chrono::steady_clock::now();
return std::chrono::duration_cast<std::chrono::microseconds>(now - start).count();
}

uint64_t milliseconds() const {
auto now = std::chrono::steady_clock::now();
return std::chrono::duration_cast<std::chrono::milliseconds>(now - start).count();
}

uint64_t seconds() const {
auto now = std::chrono::steady_clock::now();
return std::chrono::duration_cast<std::chrono::seconds>(now - start).count();
}

std::string to_string() const {
auto ns = nanoseconds();
if (ns < 1000) {
return fmt::format("{} ns", ns);
}
auto us = microseconds();
if (us < 1000) {
return fmt::format("{} μs", us);
}
auto ms = milliseconds();
if (ms < 1000) {
return fmt::format("{} ms", ms);
}
return fmt::format("{} s", seconds());
}
};

} // namespace tt::umd::util
1 change: 1 addition & 0 deletions device/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ target_link_libraries(
hwloc
rt
Boost::interprocess
spdlog::spdlog_header_only
fmt::fmt-header-only
yaml-cpp::yaml-cpp
${CMAKE_CURRENT_SOURCE_DIR}/libs/${CMAKE_SYSTEM_PROCESSOR}/libcreate_ethernet_map.a
Expand Down
4 changes: 1 addition & 3 deletions device/api/umd/device/cluster.h
Original file line number Diff line number Diff line change
Expand Up @@ -659,7 +659,6 @@ class Cluster : public tt_device {
* Cluster constructor.
*
* @param sdesc_path SOC descriptor specifying single chip.
* @param ndesc_path Network Descriptor specifying the network topology of the system.
* @param target_devices Devices to target.
* @param num_host_mem_ch_per_mmio_device Requested number of host channels (hugepages).
* @param skip_driver_allocs
Expand All @@ -669,7 +668,6 @@ class Cluster : public tt_device {
*/
Cluster(
const std::string& sdesc_path,
const std::string& ndesc_path,
const std::set<chip_id_t>& target_devices,
const uint32_t& num_host_mem_ch_per_mmio_device = 1,
const bool skip_driver_allocs = false,
Expand Down Expand Up @@ -982,7 +980,7 @@ class Cluster : public tt_device {
tt::ARCH arch_name;
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::shared_ptr<tt_ClusterDescriptor> cluster_desc;

// remote eth transfer setup
static constexpr std::uint32_t NUM_ETH_CORES_FOR_NON_MMIO_TRANSFERS = 6;
Expand Down
17 changes: 4 additions & 13 deletions device/api/umd/device/pci_device.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ using tt::umd::semver_t;
class PCIDevice {
const std::string device_path; // Path to character device: /dev/tenstorrent/N
const int pci_device_num; // N in /dev/tenstorrent/N
const int logical_id; // Unique identifier for each device in entire network topology
const int pci_device_file_desc; // Character device file descriptor
const PciDeviceInfo info; // PCI device info
const int numa_node; // -1 if non-NUMA
Expand All @@ -93,9 +92,8 @@ class PCIDevice {
* sysfs, and maps device memory region(s) into the process address space.
*
* @param pci_device_number N in /dev/tenstorrent/N
* @param logical_device_id unique identifier for this device in the network topology
*/
PCIDevice(int pci_device_number, int logical_device_id = 0);
PCIDevice(int pci_device_number);

/**
* PCIDevice destructor.
Expand Down Expand Up @@ -129,13 +127,6 @@ class PCIDevice {
*/
int get_device_num() const { return pci_device_num; }

/**
* @return unique integer for each device in entire network topology
* TODO: target for removal; upper layers shouldn't to pass this in here. It
* is unused by this class.
*/
int get_logical_id() const { return logical_id; }

/**
* @return PCI device id
*/
Expand Down Expand Up @@ -179,18 +170,18 @@ class PCIDevice {
tt_xy_pair end,
std::uint64_t address,
bool multicast,
std::unordered_map<chip_id_t, std::unordered_map<tt_xy_pair, tt_xy_pair>> &harvested_coord_translation,
std::unordered_map<tt_xy_pair, tt_xy_pair> &harvested_coord_translation,
std::uint64_t ordering);
dynamic_tlb set_dynamic_tlb(
unsigned int tlb_index,
tt_xy_pair target,
std::uint64_t address,
std::unordered_map<chip_id_t, std::unordered_map<tt_xy_pair, tt_xy_pair>> &harvested_coord_translation,
std::unordered_map<tt_xy_pair, tt_xy_pair> &harvested_coord_translation,
std::uint64_t ordering = tt::umd::tlb_data::Relaxed);
dynamic_tlb set_dynamic_tlb_broadcast(
unsigned int tlb_index,
std::uint64_t address,
std::unordered_map<chip_id_t, std::unordered_map<tt_xy_pair, tt_xy_pair>> &harvested_coord_translation,
std::unordered_map<tt_xy_pair, tt_xy_pair> &harvested_coord_translation,
tt_xy_pair start,
tt_xy_pair end,
std::uint64_t ordering = tt::umd::tlb_data::Relaxed);
Expand Down
Loading

0 comments on commit 467ad4a

Please sign in to comment.