Skip to content

Commit

Permalink
add spdlog
Browse files Browse the repository at this point in the history
  • Loading branch information
joelsmithTT committed Nov 18, 2024
1 parent f749fc1 commit 7c48bda
Show file tree
Hide file tree
Showing 8 changed files with 467 additions and 16 deletions.
38 changes: 22 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,16 +42,16 @@ function(fetch_dependencies)
)
endif()

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

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

############################################################################################################################
###################################################################################################################
# Flatbuffers
############################################################################################################################
###################################################################################################################
CPMAddPackage(
NAME flatbuffers
GITHUB_REPOSITORY google/flatbuffers
Expand Down Expand Up @@ -95,22 +95,28 @@ 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()
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
2 changes: 2 additions & 0 deletions device/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ set(UMD_DEVICE_SRCS
wormhole/wormhole_coordinate_manager.cpp
pcie/pci_device.cpp
hugepage.cpp
../common/logger_.cpp # ../common looks a bit strange
)

add_library(device SHARED ${UMD_DEVICE_SRCS})
Expand Down Expand Up @@ -52,6 +53,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
1 change: 1 addition & 0 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ if(MASTER_PROJECT)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/microbenchmark)
endif()
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/api)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/misc)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/pcie)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/simulation)
if($ENV{ARCH_NAME} STREQUAL "wormhole_b0")
Expand Down
17 changes: 17 additions & 0 deletions tests/misc/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
set(MISC_TESTS_SRCS test_logger.cpp)

add_executable(misc_tests ${MISC_TESTS_SRCS})
target_link_libraries(
misc_tests
PRIVATE
test_common
spdlog::spdlog_header_only
)
set_target_properties(
misc_tests
PROPERTIES
RUNTIME_OUTPUT_DIRECTORY
${CMAKE_BINARY_DIR}/test/
OUTPUT_NAME
misc_tests
)
Loading

0 comments on commit 7c48bda

Please sign in to comment.