Browse Source

fix(build): fix linkage on ubuntu1604

GitOrigin-RevId: ee2a8360b0
tags/v1.3.0
Megvii Engine Team 4 years ago
parent
commit
fc8d13cda3
4 changed files with 20 additions and 20 deletions
  1. +1
    -1
      imperative/src/impl/interpreter/commands.h
  2. +4
    -4
      imperative/src/impl/interpreter/interpreter_impl.cpp
  3. +7
    -7
      imperative/src/impl/interpreter/profiler.cpp
  4. +8
    -8
      imperative/src/include/megbrain/imperative/profiler.h

+ 1
- 1
imperative/src/impl/interpreter/commands.h View File

@@ -213,7 +213,7 @@ using IdentifiedCommand = std::pair<uint64_t, Command>;
template <>
struct ToStringTrait<interpreter::intl::Command>{
std::string operator()(const interpreter::intl::Command& cmd) const {
return std::visit([](auto& cmd){
return std::visit([](const auto& cmd){
std::string result = cmd.get_name();
result += "{";
cmd.get_props([&](const char* key, auto&& value) {


+ 4
- 4
imperative/src/impl/interpreter/interpreter_impl.cpp View File

@@ -481,8 +481,8 @@ void ChannelImpl::process_one_task(IdentifiedCommand& icmd) {
finished = true;
};
//TODO: remove std::visit for support osx 10.12
auto cmd_visitor = [&](auto& cmd) {
using T = std::remove_reference_t<decltype(cmd)>;
auto cmd_visitor = [&](const auto& cmd) {
using T = std::decay_t<decltype(cmd)>;
if constexpr (std::is_same_v<T, Put>) {
auto value = cmd.no_cache ? std::make_shared<Tensor>(cmd.value) : Tensor::make(cmd.value);
produce_tensor(cmd.dest, std::move(value));
@@ -598,10 +598,10 @@ void ChannelImpl::process_one_task(IdentifiedCommand& icmd) {
do_finish_command();
m_worker_state.profiler->record_host<WorkerEndScope>(cmd.scope_name);
} else {
static_assert(std::is_same_v<T, T>);
static_assert(!std::is_same_v<T, T>);
}
};
std::visit([&](auto& cmd){
std::visit([&](const auto& cmd){
using T = std::decay_t<decltype(cmd)>;
if (!m_worker_state.options.catch_worker_execption) {
cmd_visitor(cmd);


+ 7
- 7
imperative/src/impl/interpreter/profiler.cpp View File

@@ -97,7 +97,7 @@ struct InterpreterProfilerDumpChromeTimelineContext {
};

// convert Command to json object. Has to be an callable object
static auto constexpr cmd_to_args = [](auto&& cmd) {
static auto constexpr cmd_to_args = [](const auto& cmd) {
auto args = json::Object::make();
cmd.get_props([&](const char* key, auto&& value){
(*args)[key] = json::String::make(to_string(value));
@@ -108,14 +108,14 @@ struct InterpreterProfilerDumpChromeTimelineContext {

void process() {
// enumerate and process each record
for (auto&& record: profile_data.records) {
std::visit([this](auto& record){
for (auto& record: profile_data.records) {
std::visit([this](const auto& record){
using TEvent = std::decay_t<decltype(record.data)>;
Session<TEvent>(*this, record).process();
}, record);
}
for (size_t tid = 0; tid < thread_list.size(); ++tid) {
auto tname = std::visit([&](auto& host_or_device) -> std::string{
auto tname = std::visit([&](auto host_or_device) -> std::string{
using T = std::decay_t<decltype(host_or_device)>;
if constexpr (std::is_same_v<T, std::thread::id>) {
// take name from host_map
@@ -142,11 +142,11 @@ struct InterpreterProfilerDumpChromeTimelineContext {
template <typename TEvent>
struct Session {
InterpreterProfilerDumpChromeTimelineContext& ctx;
ProfilerBase::EventRecord<TEvent>& record;
TEvent& data;
const ProfilerBase::EventRecord<TEvent>& record;
const TEvent& data;

Session(InterpreterProfilerDumpChromeTimelineContext& ctx,
ProfilerBase::EventRecord<TEvent>& record)
const ProfilerBase::EventRecord<TEvent>& record)
: ctx{ctx}, record{record}, data{record.data} {}

uint64_t get_host_tid() {


+ 8
- 8
imperative/src/include/megbrain/imperative/profiler.h View File

@@ -57,7 +57,7 @@ public:
Host tid;
double time;

void wait() {}
void wait() const {}
};

struct DeviceInstant {
@@ -65,7 +65,7 @@ public:
std::shared_ptr<CompNode::Event> event;
double after;

void wait() {
void wait() const {
event->host_wait();
}
};
@@ -77,16 +77,16 @@ public:
Instant instant;
TEvent data;

HostInstant& host() {
const HostInstant& host() const {
return std::get<HostInstant>(instant);
}

DeviceInstant device() {
const DeviceInstant& device() const {
return std::get<DeviceInstant>(instant);
}

void wait() {
std::visit([&](auto& instant){ instant.wait(); }, instant);
void wait() const {
std::visit([&](const auto& instant){ instant.wait(); }, instant);
}
};
protected:
@@ -173,7 +173,7 @@ public:
mgb_assert(m_status == Profiling, "profiler not active");
m_status = Stopped;
for (auto&& record: m_record_list) {
std::visit([&](auto& record){
std::visit([&](const auto& record){
record.wait();
}, record);
}
@@ -312,7 +312,7 @@ public:
return m_content.back();
}

std::shared_ptr<json::Array> to_json() {
std::shared_ptr<json::Array> to_json() const {
auto result = json::Array::make();
for (auto&& event: m_content) {
result->add(event.to_json());


Loading…
Cancel
Save