From 06e376e4d146030db1893c1e81cb2b14b786b6f1 Mon Sep 17 00:00:00 2001 From: tlq_27 Date: Tue, 28 Oct 2025 19:24:20 +0800 Subject: [PATCH] modify log interface --- impl/CMakeLists.txt | 3 +- impl/host_log.cpp | 62 ++++++++++++++++ impl/host_log.h | 134 +++++++++++++++++------------------ tests/CMakeLists.txt | 7 +- tests/tiling/test_tiling.cpp | 13 ++++ 5 files changed, 147 insertions(+), 72 deletions(-) create mode 100644 impl/host_log.cpp diff --git a/impl/CMakeLists.txt b/impl/CMakeLists.txt index 37168717..00e6f901 100644 --- a/impl/CMakeLists.txt +++ b/impl/CMakeLists.txt @@ -98,6 +98,7 @@ add_library(tiling_api STATIC ${CMAKE_CURRENT_SOURCE_DIR}/math/floor/floor_tiling_impl.cpp ${CMAKE_CURRENT_SOURCE_DIR}/math/fmod/fmod_tiling_impl.cpp ${CMAKE_CURRENT_SOURCE_DIR}/math/trunc/trunc_tiling_impl.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/host_log.cpp $<$:$> ) @@ -125,8 +126,6 @@ target_link_libraries(tiling_api PRIVATE $ -Wl,--no-as-needed c_sec - $<$:alog> - $<$:slog> -Wl,--as-needed $<$:platform> $<$:exe_graph> diff --git a/impl/host_log.cpp b/impl/host_log.cpp new file mode 100644 index 00000000..a777b4a4 --- /dev/null +++ b/impl/host_log.cpp @@ -0,0 +1,62 @@ +/** + * Copyright (c) 2024 Huawei Technologies Co., Ltd. + * This file is a part of the CANN Open Software. + * Licensed under CANN Open Software License Agreement Version 1.0 (the + * "License"). Please refer to the License for details. You may not use this + * file except in compliance with the License. THIS SOFTWARE IS PROVIDED ON AN + * "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS + * FOR A PARTICULAR PURPOSE. See LICENSE in the root of the software repository + * for the full text of the License. + */ + +/*! + * \file host_log.cpp + * \brief + */ + +#include +#include +#include +#include "host_log.h" + +namespace AscendC { +namespace UnifiedLog { +std::mutex LoggingSingleton::mutex_; +LoggingSingleton* LoggingSingleton::instance_ = nullptr; + +LoggingSingleton::LoggingSingleton() { + dLogHandle = dlopen("libunified_dlog.so", RTLD_LAZY); + logHandle = dLogHandle ? dLogHandle : dlopen("libslog.so", RTLD_LAZY); + CheckLogLevel = reinterpret_cast(dlsym(logHandle, "CheckLogLevel")); + DlogRecord = reinterpret_cast(dlsym(logHandle, "DlogRecord")); + CheckLogLibFuncApi(CheckLogLevel, DlogRecord); +} + +LoggingSingleton::~LoggingSingleton() { + if(logHandle != nullptr) { + dlclose(logHandle); + logHandle = nullptr; + } +} + +LoggingSingleton* LoggingSingleton::getInstance() { + std::lock_guard lock(mutex_); + if (instance_ == nullptr) { + instance_ = new LoggingSingleton(); + } + return instance_; +} + +void LoggingSingleton::CheckLogLibFuncApi( + int32_t (*checkLogLevel)(int32_t, int32_t), void (*dlogRecord)(int32_t, int32_t, const char*, ...)) const +{ + if(checkLogLevel == nullptr || dlogRecord == nullptr) { + printf("[ERROR][%s:%d][%s] Can not get function from log library. \n", __FILE__, __LINE__, __FUNCTION__); + raise(SIGABRT); + } +} +} // namespace UnifiedLog + +UnifiedLog::LoggingSingleton* logInstance = UnifiedLog::LoggingSingleton::getInstance(); +} // namespace AscendC \ No newline at end of file diff --git a/impl/host_log.h b/impl/host_log.h index 0c2ec608..92442fb1 100644 --- a/impl/host_log.h +++ b/impl/host_log.h @@ -17,80 +17,80 @@ #ifndef IMPL_HOST_LOG_H #define IMPL_HOST_LOG_H -#include -#include "alog_pub.h" -#include "toolchain/slog.h" +#include +#include "toolchain/dlog_pub.h" + +namespace AscendC { +namespace UnifiedLog { +class LoggingSingleton { +private: + static LoggingSingleton* instance_; + static std::mutex mutex_; + void* dLogHandle; + void* logHandle; + + LoggingSingleton(); + ~LoggingSingleton(); + + void CheckLogLibFuncApi( + int32_t(*checkLogLevel)(int32_t, int32_t), void(*dlogRecord)(int32_t, int32_t, const char*, ...)) const; + +public: + static LoggingSingleton* getInstance(); + int32_t (*CheckLogLevel)(int32_t, int32_t); + void (*DlogRecord)(int32_t, int32_t, const char*, ...); +}; // class LoggingSingleton + +} // namespace UnifiedLog + +extern UnifiedLog::LoggingSingleton* logInstance; +} // namespace AscendC #define ASCENDC_MODULE_NAME static_cast(ASCENDCKERNEL) -#define ASCENDC_HOST_ASSERT(cond, ret, format, ...) \ - do { \ - if (!(cond)) { \ - if (AlogRecord == nullptr) { \ - dlog_error(ASCENDC_MODULE_NAME, "[%s] " format "\n", __FUNCTION__, \ - ##__VA_ARGS__); \ - } else { \ - if (AlogCheckDebugLevel(ASCENDC_MODULE_NAME, DLOG_ERROR) == 1) { \ - AlogRecord(ASCENDC_MODULE_NAME, DLOG_TYPE_DEBUG, DLOG_ERROR, \ - "[%s:%d][%s] " format "\n", __FILE__, __LINE__, \ - __FUNCTION__, ##__VA_ARGS__); \ - } \ - } \ - ret; \ - } \ +#define ASCENDC_HOST_ASSERT(cond, ret, format, ...) \ + do { \ + if (!(cond)) { \ + if (AscendC::logInstance->CheckLogLevel(ASCENDC_MODULE_NAME, DLOG_ERROR) == 1) { \ + AscendC::logInstance->DlogRecord(ASCENDC_MODULE_NAME | DEBUG_LOG_MASK, DLOG_ERROR, \ + "[%s:%d][%s] " format "\n", __FILE__, __LINE__, \ + __FUNCTION__, ##__VA_ARGS__); \ + } \ + ret; \ + } \ } while (0) // 0 debug, 1 info, 2 warning, 3 error -#define TILING_LOG_ERROR(format, ...) \ - do { \ - if (AlogRecord == nullptr) { \ - dlog_error(ASCENDC_MODULE_NAME, "[%s] " format "\n", __FUNCTION__, \ - ##__VA_ARGS__); \ - } else { \ - if (AlogCheckDebugLevel(ASCENDC_MODULE_NAME, DLOG_ERROR) == 1) { \ - AlogRecord(ASCENDC_MODULE_NAME, DLOG_TYPE_DEBUG, DLOG_ERROR, \ - "[%s:%d][%s] " format "\n", __FILE__, __LINE__, \ - __FUNCTION__, ##__VA_ARGS__); \ - } \ - } \ +#define TILING_LOG_ERROR(format, ...) \ + do { \ + if (AscendC::logInstance->CheckLogLevel(ASCENDC_MODULE_NAME, DLOG_ERROR) == 1) { \ + AscendC::logInstance->DlogRecord(ASCENDC_MODULE_NAME | DEBUG_LOG_MASK, DLOG_ERROR, \ + "[%s:%d][%s] " format "\n", __FILE__, __LINE__, \ + __FUNCTION__, ##__VA_ARGS__); \ + } \ } while (0) -#define TILING_LOG_INFO(format, ...) \ - do { \ - if (AlogRecord == nullptr) { \ - dlog_info(ASCENDC_MODULE_NAME, "[%s] " format "\n", __FUNCTION__, \ - ##__VA_ARGS__); \ - } else { \ - if (AlogCheckDebugLevel(ASCENDC_MODULE_NAME, DLOG_INFO) == 1) { \ - AlogRecord(ASCENDC_MODULE_NAME, DLOG_TYPE_DEBUG, DLOG_INFO, \ - "[%s:%d][%s] " format "\n", __FILE__, __LINE__, \ - __FUNCTION__, ##__VA_ARGS__); \ - } \ - } \ +#define TILING_LOG_INFO(format, ...) \ + do { \ + if (AscendC::logInstance->CheckLogLevel(ASCENDC_MODULE_NAME, DLOG_INFO) == 1) { \ + AscendC::logInstance->DlogRecord(ASCENDC_MODULE_NAME | DEBUG_LOG_MASK, DLOG_INFO, \ + "[%s:%d][%s] " format "\n", __FILE__, __LINE__, \ + __FUNCTION__, ##__VA_ARGS__); \ + } \ } while (0) -#define TILING_LOG_WARNING(format, ...) \ - do { \ - if (AlogRecord == nullptr) { \ - dlog_warn(ASCENDC_MODULE_NAME, "[%s] " format "\n", __FUNCTION__, \ - ##__VA_ARGS__); \ - } else { \ - if (AlogCheckDebugLevel(ASCENDC_MODULE_NAME, DLOG_WARN) == 1) { \ - AlogRecord(ASCENDC_MODULE_NAME, DLOG_TYPE_DEBUG, DLOG_WARN, \ - "[%s:%d][%s] " format "\n", __FILE__, __LINE__, \ - __FUNCTION__, ##__VA_ARGS__); \ - } \ - } \ +#define TILING_LOG_WARNING(format, ...) \ + do { \ + if (AscendC::logInstance->CheckLogLevel(ASCENDC_MODULE_NAME, DLOG_WARN) == 1) { \ + AscendC::logInstance->DlogRecord(ASCENDC_MODULE_NAME | DEBUG_LOG_MASK, DLOG_WARN, \ + "[%s:%d][%s] " format "\n", __FILE__, __LINE__, \ + __FUNCTION__, ##__VA_ARGS__); \ + } \ } while (0) -#define TILING_LOG_DEBUG(format, ...) \ - do { \ - if (AlogRecord == nullptr) { \ - dlog_debug(ASCENDC_MODULE_NAME, "[%s] " format "\n", __FUNCTION__, \ - ##__VA_ARGS__); \ - } else { \ - if (AlogCheckDebugLevel(ASCENDC_MODULE_NAME, DLOG_DEBUG) == 1) { \ - AlogRecord(ASCENDC_MODULE_NAME, DLOG_TYPE_DEBUG, DLOG_DEBUG, \ - "[%s:%d][%s] " format "\n", __FILE__, __LINE__, \ - __FUNCTION__, ##__VA_ARGS__); \ - } \ - } \ +#define TILING_LOG_DEBUG(format, ...) \ + do { \ + if (AscendC::logInstance->CheckLogLevel(ASCENDC_MODULE_NAME, DLOG_DEBUG) == 1) { \ + AscendC::logInstance->DlogRecord(ASCENDC_MODULE_NAME | DEBUG_LOG_MASK, DLOG_DEBUG, \ + "[%s:%d][%s] " format "\n", __FILE__, __LINE__, \ + __FUNCTION__, ##__VA_ARGS__); \ + } \ } while (0) -#endif // IMPL_HOST_LOG_H +#endif // IMPL_HOST_LOG_H \ No newline at end of file diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index dfbdcdad..639ae2e4 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -15,7 +15,7 @@ cmake_minimum_required(VERSION 3.16.0) get_filename_component(ASCENDC_TESTS_DIR "${CMAKE_CURRENT_SOURCE_DIR}" ABSOLUTE) set(PRODUCT_TYPE_LIST ascend610 ascend310p ascend910B1_AIC ascend910B1_AIV ascend310B1) -add_compile_definitions(__CCE_KT_TEST__=1 ASCENDC_CPU_DEBUG=1 ASCENDC_DUMP=0 LOG_CPP) +add_compile_definitions(__CCE_KT_TEST__=1 ASCENDC_CPU_DEBUG=1 ASCENDC_DUMP=0) if(BUILD_OPEN_PROJECT) include(cmake/config.cmake) @@ -333,7 +333,7 @@ foreach(product_type ${PRODUCT_TYPE_LIST}) $<$:pem_davinci> $<$:pem_davinci> $<$:pem_davinci> - ascendalog + unified_dlog c_sec mmpa error_manager @@ -414,6 +414,7 @@ file(GLOB ASCENDC_TILING_SRC_FILES ${ASCENDC_API_DIR}/impl/sort/topk/*.cpp ${ASCENDC_API_DIR}/impl/reduce/reduce_tiling.cpp ${ASCENDC_API_DIR}/impl/normalization/layernormV2/*.cpp + ${ASCENDC_API_DIR}/impl/host_log.cpp ) # ascendc_tiling_utest @@ -486,7 +487,7 @@ foreach(product_type ${PRODUCT_TYPE_LIST}) platform -Wl,--no-as-needed ascend_protobuf - ascendalog + unified_dlog c_sec mmpa graph diff --git a/tests/tiling/test_tiling.cpp b/tests/tiling/test_tiling.cpp index 8e9782c0..9e2a80db 100644 --- a/tests/tiling/test_tiling.cpp +++ b/tests/tiling/test_tiling.cpp @@ -10,6 +10,7 @@ #include #include "graph/tensor.h" #include +#include #define private public #define protected public #include "lib/activation/softmax_tiling.h" @@ -17,6 +18,7 @@ #include "platform_stub.h" #include "impl/matmul/tiling/math_util.h" #include "impl/matmul/tiling/matmul_tiling_algorithm.h" +#include "impl/host_log.h" #include "tiling/platform/platform_ascendc.h" #include "lib/reduce/reduce_tiling.h" using namespace AscendC; @@ -6811,3 +6813,14 @@ TEST_F(TestTiling, MatmulApiTilingCheckUsedCoreNum) EXPECT_EQ(ret, 0); EXPECT_EQ(tilingData.get_usedCoreNum(), 24); } + +TEST_F(TestTiling, TestTilingHostLog) +{ + EXPECT_NE(logInstance->logHandle, nullptr); + EXPECT_NE(logInstance->CheckLogLevel, nullptr); + EXPECT_NE(logInstance->DlogRecord, nullptr); + signal(SIGABRT, SIG_IGN); + logInstance->CheckLogLibFuncApi(nullptr, nullptr); + signal(SIGABRT, SIG_DFL); + UnifiedLog::LoggingSingleton logInstanceOnce; +} \ No newline at end of file -- Gitee