| @@ -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) { | |||
| @@ -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); | |||
| @@ -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() { | |||
| @@ -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()); | |||