mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-07 12:21:27 +01:00
Summary: When building, my log was being spammed with: ``` warning: attribute "__visibility__" does not apply here ``` Which, at least on gcc 7.4 isn't covered by silencing `-Wattribute`. The warning suggests `enum`s don't need to be exported on linux, so I just `ifdef` it out instead. Pull Request resolved: https://github.com/pytorch/pytorch/pull/38988 Differential Revision: D21722032 Pulled By: ezyang fbshipit-source-id: ed4cfebc187dceaa9e748d85f756611fd7eda4b4
83 lines
2.3 KiB
C++
83 lines
2.3 KiB
C++
#pragma once
|
|
|
|
#include <c10/macros/Export.h>
|
|
#include <c10/util/Exception.h>
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
#include <unordered_map>
|
|
|
|
namespace c10 {
|
|
|
|
enum class C10_API_ENUM DebugInfoKind : uint8_t {
|
|
PRODUCER_INFO = 0,
|
|
MOBILE_RUNTIME_INFO,
|
|
PROFILER_STATE,
|
|
|
|
TEST_INFO, // used only in tests
|
|
TEST_INFO_2, // used only in tests
|
|
};
|
|
|
|
class C10_API DebugInfoBase {
|
|
public:
|
|
DebugInfoBase() {}
|
|
virtual ~DebugInfoBase() {}
|
|
};
|
|
|
|
// Thread local debug information is propagated across the forward
|
|
// (including async fork tasks) and backward passes and is supposed
|
|
// to be utilized by the user's code to pass extra information from
|
|
// the higher layers (e.g. model id) down to the lower levels
|
|
// (e.g. to the operator observers used for debugging, logging,
|
|
// profiling, etc)
|
|
class C10_API ThreadLocalDebugInfo {
|
|
public:
|
|
static std::shared_ptr<DebugInfoBase> get(DebugInfoKind kind);
|
|
|
|
// Get current ThreadLocalDebugInfo
|
|
static std::shared_ptr<ThreadLocalDebugInfo> current();
|
|
|
|
// Internal, use DebugInfoGuard/ThreadLocalStateGuard
|
|
static void _forceCurrentDebugInfo(
|
|
const std::shared_ptr<ThreadLocalDebugInfo>& info);
|
|
|
|
// Push debug info struct of a given kind
|
|
static void _push(DebugInfoKind kind, std::shared_ptr<DebugInfoBase> info);
|
|
// Pop debug info, throws in case the last pushed
|
|
// debug info is not of a given kind
|
|
static std::shared_ptr<DebugInfoBase> _pop(DebugInfoKind kind);
|
|
|
|
private:
|
|
std::shared_ptr<DebugInfoBase> info_;
|
|
DebugInfoKind kind_;
|
|
std::shared_ptr<ThreadLocalDebugInfo> parent_info_;
|
|
|
|
friend class DebugInfoGuard;
|
|
};
|
|
|
|
// DebugInfoGuard is used to set debug information,
|
|
// ThreadLocalDebugInfo is semantically immutable, the values are set
|
|
// through the scope-based guard object.
|
|
// Nested DebugInfoGuard adds/overrides existing values in the scope,
|
|
// restoring the original values after exiting the scope.
|
|
// Users can access the values through the ThreadLocalDebugInfo::get() call;
|
|
class C10_API DebugInfoGuard {
|
|
public:
|
|
DebugInfoGuard(
|
|
DebugInfoKind kind, std::shared_ptr<DebugInfoBase> info);
|
|
|
|
explicit DebugInfoGuard(
|
|
std::shared_ptr<ThreadLocalDebugInfo> info);
|
|
|
|
~DebugInfoGuard();
|
|
|
|
DebugInfoGuard(const DebugInfoGuard&) = delete;
|
|
DebugInfoGuard(DebugInfoGuard&&) = delete;
|
|
|
|
private:
|
|
bool active_ = false;
|
|
std::shared_ptr<ThreadLocalDebugInfo> prev_info_ = nullptr;
|
|
};
|
|
|
|
} // namespace c10
|