Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add rocprofiler-sdk support #1050

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions libkineto/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,9 @@ if(NOT LIBKINETO_NOROCTRACER)
find_library(ROCTRACER_LIBRARY NAMES libroctracer64.so HINTS
${ROCM_SOURCE_DIR}/lib)
target_link_libraries(kineto "${ROCTRACER_LIBRARY}")
find_library(ROCPROF_LIBRARY NAMES librocprofiler-sdk.so HINTS
${ROCM_SOURCE_DIR}/lib)
target_link_libraries(kineto "${ROCPROF_LIBRARY}")
find_library(KINETO_HIP_LIBRARY NAMES libamdhip64.so HINTS
${ROCM_SOURCE_DIR}/lib)
target_link_libraries(kineto "${KINETO_HIP_LIBRARY}")
Expand Down
5 changes: 3 additions & 2 deletions libkineto/libkineto_defs.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,9 @@ def get_libkineto_cupti_srcs(with_api = True):

def get_libkineto_roctracer_srcs(with_api = True):
return [
"src/RoctracerActivityApi.cpp",
"src/RoctracerLogger.cpp",
"src/RocprofActivityApi.cpp",
"src/RocprofLogger.cpp",
"src/RocLogger.cpp",
] + (get_libkineto_cpu_only_srcs(with_api))

def get_libkineto_xpupti_srcs(with_api = True):
Expand Down
4 changes: 2 additions & 2 deletions libkineto/src/ActivityProfilerController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

#include "CuptiActivityApi.h"
#ifdef HAS_ROCTRACER
#include "RoctracerActivityApi.h"
#include "RocprofActivityApi.h"
#endif

#include "ThreadUtil.h"
Expand Down Expand Up @@ -67,7 +67,7 @@ ActivityProfilerController::ActivityProfilerController(

#ifdef HAS_ROCTRACER
profiler_ = std::make_unique<CuptiActivityProfiler>(
RoctracerActivityApi::singleton(), cpuOnly);
RocprofActivityApi::singleton(), cpuOnly);
#else
profiler_ = std::make_unique<CuptiActivityProfiler>(
CuptiActivityApi::singleton(), cpuOnly);
Expand Down
61 changes: 31 additions & 30 deletions libkineto/src/CuptiActivityProfiler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
#ifdef HAS_CUPTI
#include <cupti.h>
#elif defined(HAS_ROCTRACER)
#include <roctracer.h>
#include <rocprofiler-sdk/version.h>
#endif

#include "Config.h"
Expand All @@ -37,9 +37,10 @@
#include "CuptiActivityApi.h"
#endif // HAS_CUPTI
#ifdef HAS_ROCTRACER
#include "RoctracerActivity.h"
#include "RoctracerActivityApi.h"
#include "RoctracerLogger.h"
#include "RocLogger.h"
#include "RocprofActivity.h"
#include "RocprofActivityApi.h"

#endif
#include "ActivityBuffers.h"
#include "output_base.h"
Expand Down Expand Up @@ -236,7 +237,7 @@ void CuptiActivityProfiler::transferCpuTrace(

#ifdef HAS_ROCTRACER
CuptiActivityProfiler::CuptiActivityProfiler(
RoctracerActivityApi& cupti,
RocprofActivityApi& cupti,
bool cpuOnly)
#else
CuptiActivityProfiler::CuptiActivityProfiler(
Expand Down Expand Up @@ -277,23 +278,23 @@ void CuptiActivityProfiler::logGpuVersions() {
addVersionMetadata("cuda_driver_version", std::to_string(cudaDriverVersion));

#elif defined(HAS_ROCTRACER)
uint32_t majorVersion = roctracer_version_major();
uint32_t minorVersion = roctracer_version_minor();
uint32_t majorVersion = ROCPROFILER_VERSION_MAJOR;
uint32_t minorVersion = ROCPROFILER_VERSION_MINOR;
std::string roctracerVersion =
std::to_string(majorVersion) + "." + std::to_string(minorVersion);
int hipRuntimeVersion = 0, hipDriverVersion = 0;
CUDA_CALL(hipRuntimeGetVersion(&hipRuntimeVersion));
CUDA_CALL(hipDriverGetVersion(&hipDriverVersion));
LOG(INFO) << "HIP versions. Roctracer: " << roctracerVersion
LOG(INFO) << "HIP versions. Rocprofiler-sdk: " << roctracerVersion
<< "; Runtime: " << hipRuntimeVersion
<< "; Driver: " << hipDriverVersion;

LOGGER_OBSERVER_ADD_METADATA("roctracer_version", roctracerVersion);
LOGGER_OBSERVER_ADD_METADATA("rocprofiler-sdk_version", roctracerVersion);
LOGGER_OBSERVER_ADD_METADATA(
"hip_runtime_version", std::to_string(hipRuntimeVersion));
LOGGER_OBSERVER_ADD_METADATA(
"hip_driver_version", std::to_string(hipDriverVersion));
addVersionMetadata("roctracer_version", roctracerVersion);
addVersionMetadata("rocprofiler-sdk_version", roctracerVersion);
addVersionMetadata("hip_runtime_version", std::to_string(hipRuntimeVersion));
addVersionMetadata("hip_driver_version", std::to_string(hipDriverVersion));

Expand Down Expand Up @@ -392,7 +393,7 @@ void CuptiActivityProfiler::processTraceInternal(ActivityLogger& logger) {
cupti_.setTimeOffset(offset);
const int count = cupti_.processActivities(
std::bind(
&CuptiActivityProfiler::handleRoctracerActivity,
&CuptiActivityProfiler::handleRocprofActivity,
this,
std::placeholders::_1,
&logger),
Expand Down Expand Up @@ -495,10 +496,10 @@ inline void CuptiActivityProfiler::handleCorrelationActivity(
inline void CuptiActivityProfiler::handleCorrelationActivity(
uint64_t correlationId,
uint64_t externalId,
RoctracerLogger::CorrelationDomain externalKind) {
if (externalKind == RoctracerLogger::CorrelationDomain::Domain0) {
RocLogger::CorrelationDomain externalKind) {
if (externalKind == RocLogger::CorrelationDomain::Domain0) {
cpuCorrelationMap_[correlationId] = externalId;
} else if (externalKind == RoctracerLogger::CorrelationDomain::Domain1) {
} else if (externalKind == RocLogger::CorrelationDomain::Domain1) {
userCorrelationMap_[correlationId] = externalId;
} else {
LOG(WARNING)
Expand Down Expand Up @@ -962,37 +963,37 @@ void CuptiActivityProfiler::handleRuntimeActivity(
}

inline void CuptiActivityProfiler::handleGpuActivity(
const roctracerAsyncRow* act,
const rocprofAsyncRow* act,
ActivityLogger* logger) {
const ITraceActivity* linked = linkedActivity(act->id, cpuCorrelationMap_);
const auto& gpu_activity =
traceBuffers_->addActivityWrapper(GpuActivity(act, linked));
handleGpuActivity(gpu_activity, logger);
}

void CuptiActivityProfiler::handleRoctracerActivity(
const roctracerBase* record,
void CuptiActivityProfiler::handleRocprofActivity(
const rocprofBase* record,
ActivityLogger* logger) {
switch (record->type) {
case ROCTRACER_ACTIVITY_DEFAULT:
handleRuntimeActivity(
reinterpret_cast<const roctracerRow*>(record), logger);
reinterpret_cast<const rocprofRow*>(record), logger);
break;
case ROCTRACER_ACTIVITY_KERNEL:
handleRuntimeActivity(
reinterpret_cast<const roctracerKernelRow*>(record), logger);
reinterpret_cast<const rocprofKernelRow*>(record), logger);
break;
case ROCTRACER_ACTIVITY_COPY:
handleRuntimeActivity(
reinterpret_cast<const roctracerCopyRow*>(record), logger);
reinterpret_cast<const rocprofCopyRow*>(record), logger);
break;
case ROCTRACER_ACTIVITY_MALLOC:
handleRuntimeActivity(
reinterpret_cast<const roctracerMallocRow*>(record), logger);
reinterpret_cast<const rocprofMallocRow*>(record), logger);
break;
case ROCTRACER_ACTIVITY_ASYNC:
handleGpuActivity(
reinterpret_cast<const roctracerAsyncRow*>(record), logger);
reinterpret_cast<const rocprofAsyncRow*>(record), logger);
break;
case ROCTRACER_ACTIVITY_NONE:
default:
Expand Down Expand Up @@ -1522,8 +1523,8 @@ void CuptiActivityProfiler::pushCorrelationId(uint64_t id) {
id, CuptiActivityApi::CorrelationFlowType::Default);
#endif // HAS_CUPTI
#ifdef HAS_ROCTRACER
RoctracerActivityApi::pushCorrelationID(
id, RoctracerActivityApi::CorrelationFlowType::Default);
RocprofActivityApi::pushCorrelationID(
id, RocprofActivityApi::CorrelationFlowType::Default);
#endif
for (auto& session : sessions_) {
session->pushCorrelationId(id);
Expand All @@ -1536,8 +1537,8 @@ void CuptiActivityProfiler::popCorrelationId() {
CuptiActivityApi::CorrelationFlowType::Default);
#endif // HAS_CUPTI
#ifdef HAS_ROCTRACER
RoctracerActivityApi::popCorrelationID(
RoctracerActivityApi::CorrelationFlowType::Default);
RocprofActivityApi::popCorrelationID(
RocprofActivityApi::CorrelationFlowType::Default);
#endif
for (auto& session : sessions_) {
session->popCorrelationId();
Expand All @@ -1550,8 +1551,8 @@ void CuptiActivityProfiler::pushUserCorrelationId(uint64_t id) {
id, CuptiActivityApi::CorrelationFlowType::User);
#endif // HAS_CUPTI
#ifdef HAS_ROCTRACER
RoctracerActivityApi::pushCorrelationID(
id, RoctracerActivityApi::CorrelationFlowType::User);
RocprofActivityApi::pushCorrelationID(
id, RocprofActivityApi::CorrelationFlowType::User);
#endif
for (auto& session : sessions_) {
session->pushUserCorrelationId(id);
Expand All @@ -1564,8 +1565,8 @@ void CuptiActivityProfiler::popUserCorrelationId() {
CuptiActivityApi::CorrelationFlowType::User);
#endif // HAS_CUPTI
#ifdef HAS_ROCTRACER
RoctracerActivityApi::popCorrelationID(
RoctracerActivityApi::CorrelationFlowType::User);
RocprofActivityApi::popCorrelationID(
RocprofActivityApi::CorrelationFlowType::User);
#endif
for (auto& session : sessions_) {
session->popUserCorrelationId();
Expand Down
18 changes: 7 additions & 11 deletions libkineto/src/CuptiActivityProfiler.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
#endif // HAS_CUPTI

#ifdef HAS_ROCTRACER
#include "RoctracerLogger.h"
#include "RocprofLogger.h"
#endif // HAS_ROCTRACER

#include "GenericTraceActivity.h"
Expand All @@ -46,7 +46,7 @@ namespace KINETO_NAMESPACE {

class Config;
class CuptiActivityApi;
class RoctracerActivityApi;
class RocprofActivityApi;

// This struct is a derived snapshot of the Config. And should not
// be mutable after construction.
Expand Down Expand Up @@ -122,7 +122,7 @@ inline size_t hash_combine(size_t seed, size_t value) {
class CuptiActivityProfiler {
public:
CuptiActivityProfiler(CuptiActivityApi& cupti, bool cpuOnly);
CuptiActivityProfiler(RoctracerActivityApi& rai, bool cpuOnly);
CuptiActivityProfiler(RocprofActivityApi& rai, bool cpuOnly);
CuptiActivityProfiler(const CuptiActivityProfiler&) = delete;
CuptiActivityProfiler& operator=(const CuptiActivityProfiler&) = delete;
~CuptiActivityProfiler();
Expand Down Expand Up @@ -404,19 +404,15 @@ class CuptiActivityProfiler {

#ifdef HAS_ROCTRACER
// Process generic RocTracer activity
void handleRoctracerActivity(
const roctracerBase* record,
ActivityLogger* logger);
void handleRocprofActivity(const rocprofBase* record, ActivityLogger* logger);
void handleCorrelationActivity(
uint64_t correlationId,
uint64_t externalId,
RoctracerLogger::CorrelationDomain externalKind);
RocLogger::CorrelationDomain externalKind);
// Process specific GPU activity types
template <class T>
void handleRuntimeActivity(const T* activity, ActivityLogger* logger);
void handleGpuActivity(
const roctracerAsyncRow* record,
ActivityLogger* logger);
void handleGpuActivity(const rocprofAsyncRow* record, ActivityLogger* logger);
#endif // HAS_ROCTRACER

void resetTraceData();
Expand Down Expand Up @@ -449,7 +445,7 @@ class CuptiActivityProfiler {

// Calls to CUPTI is encapsulated behind this interface
#ifdef HAS_ROCTRACER
RoctracerActivityApi& cupti_; // Design failure here
RocprofActivityApi& cupti_; // Design failure here
#else
CuptiActivityApi& cupti_;
#endif
Expand Down
1 change: 0 additions & 1 deletion libkineto/src/DeviceUtil.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@

#elif defined(HAS_ROCTRACER)
#include <hip/hip_runtime.h>
#include <roctracer.h>

#define CUDA_CALL(call) \
{ \
Expand Down
32 changes: 32 additions & 0 deletions libkineto/src/RocLogger.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree.
*/

#include "RocLogger.h"

ApiIdList::ApiIdList() : invert_(true) {}

void ApiIdList::add(const std::string& apiName) {
uint32_t cid = mapName(apiName);
if (cid > 0)
filter_[cid] = 1;
}

void ApiIdList::remove(const std::string& apiName) {
uint32_t cid = mapName(apiName);
if (cid > 0)
filter_.erase(cid);
}

bool ApiIdList::loadUserPrefs() {
// FIXME: check an ENV variable that points to an exclude file
return false;
}

bool ApiIdList::contains(uint32_t apiId) {
return (filter_.find(apiId) != filter_.end()) ? !invert_ : invert_; // XOR
}
Loading
Loading