From 5a2cf2fea81bc7c2975c231d0caf9e39798234c2 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Fri, 23 Nov 2018 00:08:36 -0600 Subject: [PATCH] process/thread IDs in API records [ROCm/roctracer commit: 65d8c3be396aa991cc1453e62a837cd755e17444] --- projects/roctracer/inc/ext/prof_protocol.h | 18 ++++++++++++----- projects/roctracer/src/core/roctracer.cpp | 13 +++++++----- .../test/MatrixTranspose/MatrixTranspose.cpp | 20 +++++++++++++++---- 3 files changed, 37 insertions(+), 14 deletions(-) diff --git a/projects/roctracer/inc/ext/prof_protocol.h b/projects/roctracer/inc/ext/prof_protocol.h index 42501f7355..c31027e404 100644 --- a/projects/roctracer/inc/ext/prof_protocol.h +++ b/projects/roctracer/inc/ext/prof_protocol.h @@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#ifndef INC_ROCTRACER_PROF_PROTOCOL_H_ -#define INC_ROCTRACER_PROF_PROTOCOL_H_ +#ifndef INC_EXT_PROF_PROTOCOL_H_ +#define INC_EXT_PROF_PROTOCOL_H_ // Traced API domains typedef enum { @@ -52,8 +52,16 @@ struct activity_record_t { activity_correlation_id_t correlation_id; // activity correlation ID uint64_t begin_ns; // host begin timestamp uint64_t end_ns; // host end timestamp - int device_id; // device id - uint64_t stream_id; // stream id + union { + struct { + int device_id; // device id + uint64_t queue_id; // queue id + }; + struct { + uint32_t process_id; // device id + uint32_t thread_id; // thread id + }; + }; size_t bytes; // data size bytes }; @@ -62,4 +70,4 @@ typedef activity_record_t* (*activity_sync_callback_t)(uint32_t cid, activity_re // Activity async calback type typedef void (*activity_async_callback_t)(uint32_t op, void* record, void* arg); -#endif // INC_ROCTRACER_PROF_PROTOCOL_H_ +#endif // INC_EXT_PROF_PROTOCOL_H_ diff --git a/projects/roctracer/src/core/roctracer.cpp b/projects/roctracer/src/core/roctracer.cpp index 1f4c887ff2..2c22e3d84a 100644 --- a/projects/roctracer/src/core/roctracer.cpp +++ b/projects/roctracer/src/core/roctracer.cpp @@ -29,6 +29,8 @@ THE SOFTWARE. #include #include #include +#include +#include #include "ext/hsa_rt_utils.hpp" #include "util/exception.h" @@ -276,7 +278,7 @@ DESTRUCTOR_API void destructor() { util::Logger::Destroy(); } -roctracer_record_t* SyncActivityCallback( +roctracer_record_t* HIP_SyncActivityCallback( uint32_t activity_id, roctracer_record_t* record, const void* callback_data, @@ -303,7 +305,8 @@ roctracer_record_t* SyncActivityCallback( return record; } else { record->end_ns = timer.timestamp_ns(); - Kalmar::CLAMP::GetActivityCoord(&(record->device_id), &(record->stream_id)); + record->process_id = syscall(__NR_getpid); + record->thread_id = syscall(__NR_gettid); pool->Write(*record); // Clearing record in HCC Kalmar::CLAMP::SetActivityRecord(0); @@ -311,7 +314,7 @@ roctracer_record_t* SyncActivityCallback( } } -void AsyncActivityCallback( +void HCC_AsyncActivityCallback( uint32_t op_id, void* record, void* arg) @@ -460,12 +463,12 @@ PUBLIC_API roctracer_status_t roctracer_enable_activity( roctracer_enable_activity(ACTIVITY_DOMAIN_HIP_API, HIP_API_ID_ANY, pool); break; case ACTIVITY_DOMAIN_HCC_OPS: { - const bool err = Kalmar::CLAMP::SetActivityCallback(id, (void*)roctracer::AsyncActivityCallback, (void*)pool); + const bool err = Kalmar::CLAMP::SetActivityCallback(id, (void*)roctracer::HCC_AsyncActivityCallback, (void*)pool); if (err == true) HCC_EXC_RAISING(ROCTRACER_STATUS_HCC_OPS_ERR, "Kalmar::CLAMP::SetActivityCallback error"); break; } case ACTIVITY_DOMAIN_HIP_API: { - const hipError_t hip_err = hipRegisterActivityCallback(id, (void*)roctracer::SyncActivityCallback, (void*)pool); + const hipError_t hip_err = hipRegisterActivityCallback(id, (void*)roctracer::HIP_SyncActivityCallback, (void*)pool); if (hip_err != hipSuccess) HIP_EXC_RAISING(ROCTRACER_STATUS_HIP_API_ERR, "hipRegisterActivityCallback error(" << hip_err << ")"); break; } diff --git a/projects/roctracer/test/MatrixTranspose/MatrixTranspose.cpp b/projects/roctracer/test/MatrixTranspose/MatrixTranspose.cpp index 707aaa885a..7dadf38cc6 100644 --- a/projects/roctracer/test/MatrixTranspose/MatrixTranspose.cpp +++ b/projects/roctracer/test/MatrixTranspose/MatrixTranspose.cpp @@ -212,14 +212,26 @@ void activity_callback(const char* begin, const char* end, void* arg) { fprintf(stdout, "\tActivity records:\n"); fflush(stdout); while (record < end_record) { const char * name = roctracer_id_string(record->domain, record->activity_id, record->kind); - fprintf(stdout, "\t%s\tcorrelation_id(%lu) time_ns(%lu:%lu) device_id(%d) stream_id(%lu)", + fprintf(stdout, "\t%s\tcorrelation_id(%lu) time_ns(%lu:%lu)", name, record->correlation_id, record->begin_ns, - record->end_ns, - record->device_id, - record->stream_id + record->end_ns ); + if (record->domain == ACTIVITY_DOMAIN_HIP_API) { + fprintf(stdout, " process_id(%u) thread_id(%u)", + record->process_id, + record->thread_id + ); + } else if (record->domain == ACTIVITY_DOMAIN_HCC_OPS) { + fprintf(stdout, " device_id(%d) queue_id(%lu)", + record->device_id, + record->queue_id + ); + } else { + fprintf(stderr, "Bad domain %d\n", record->domain); + abort(); + } if (record->activity_id == hc::HSA_OP_ID_COPY) fprintf(stdout, " bytes(0x%zx)", record->bytes); fprintf(stdout, "\n"); fflush(stdout);