diff --git a/libkineto/include/ActivityType.h b/libkineto/include/ActivityType.h index 6a377d29e..729f2d5b2 100644 --- a/libkineto/include/ActivityType.h +++ b/libkineto/include/ActivityType.h @@ -10,12 +10,13 @@ namespace libkineto { enum class ActivityType { - CPU_OP, + CPU_OP = 0, // cpu side ops GPU_MEMCPY, GPU_MEMSET, - CONCURRENT_KERNEL, + CONCURRENT_KERNEL, // on-device kernels EXTERNAL_CORRELATION, - CUDA_RUNTIME + CUDA_RUNTIME, // host side cuda runtime events + CPU_INSTANT_EVENT, // host side point-like events }; } // namespace libkineto diff --git a/libkineto/include/GenericTraceActivity.h b/libkineto/include/GenericTraceActivity.h index d759241be..a6c367c92 100644 --- a/libkineto/include/GenericTraceActivity.h +++ b/libkineto/include/GenericTraceActivity.h @@ -65,6 +65,8 @@ struct GenericTraceActivity : TraceActivity { return fmt::format("{}", fmt::join(metadata_, ", ")); } + virtual ~GenericTraceActivity() {}; + int64_t startTime{0}; int64_t endTime{0}; int64_t correlation{0}; diff --git a/libkineto/src/ActivityTrace.h b/libkineto/src/ActivityTrace.h index a10a25cfc..37cc89525 100644 --- a/libkineto/src/ActivityTrace.h +++ b/libkineto/src/ActivityTrace.h @@ -30,7 +30,7 @@ class ActivityTrace : public ActivityTraceInterface { void save(const std::string& path) override { ChromeTraceLogger chrome_logger(path, cuptiActivities_.smCount()); - return logger_->log(chrome_logger); + logger_->log(chrome_logger); }; private: diff --git a/libkineto/src/output_json.cpp b/libkineto/src/output_json.cpp index f424b9e23..50577329e 100644 --- a/libkineto/src/output_json.cpp +++ b/libkineto/src/output_json.cpp @@ -184,6 +184,25 @@ static std::string traceActivityJson(const TraceActivity& activity, std::string // clang-format on } +void ChromeTraceLogger::handleGenericInstantEvent( + const libkineto::GenericTraceActivity& op) { + if (!traceOf_) { + return; + } + + traceOf_ << fmt::format(R"JSON( + {{ + "ph": "i", "s": "t", "name": "{}", + "pid": {}, "tid": {}, + "ts": {}, + "args": {{ + {} + }} + }},)JSON", + op.name(), op.deviceId(), op.resourceId(), + op.timestamp(), op.getMetadata()); +} + void ChromeTraceLogger::handleCpuActivity( const libkineto::GenericTraceActivity& op, const TraceSpan& span) { @@ -191,6 +210,11 @@ void ChromeTraceLogger::handleCpuActivity( return; } + if (op.activityType == ActivityType::CPU_INSTANT_EVENT) { + handleGenericInstantEvent(op); + return; + } + auto op_metadata = op.getMetadata(); std::string separator = ""; if (op_metadata.find_first_not_of(" \t\n") != std::string::npos) { @@ -201,9 +225,9 @@ void ChromeTraceLogger::handleCpuActivity( {{ "ph": "X", "cat": "Operator", {}, "args": {{ - "Device": {}, "External id": {}, - "Trace name": "{}", "Trace iteration": {} {} - {} + "Device": {}, "External id": {}, + "Trace name": "{}", "Trace iteration": {} {} + {} }} }},)JSON", traceActivityJson(op, ""), @@ -216,8 +240,8 @@ void ChromeTraceLogger::handleCpuActivity( } void ChromeTraceLogger::handleGenericActivity( - const GenericTraceActivity& op) { - if (!traceOf_) { + const GenericTraceActivity& op) { + if (!traceOf_) { return; } diff --git a/libkineto/src/output_json.h b/libkineto/src/output_json.h index 7aa0934ea..ba7c1e48d 100644 --- a/libkineto/src/output_json.h +++ b/libkineto/src/output_json.h @@ -78,6 +78,8 @@ class ChromeTraceLogger : public libkineto::ActivityLogger { void openTraceFile(); + void handleGenericInstantEvent(const GenericTraceActivity& op); + std::string fileName_; std::ofstream traceOf_;