diff --git a/projects/roctracer/README.md b/projects/roctracer/README.md index 11e8bf79ae..d98665f5aa 100644 --- a/projects/roctracer/README.md +++ b/projects/roctracer/README.md @@ -34,15 +34,18 @@ The library source tree: - Set environment: export HIP_PATH=/HIP export HCC_PATH=/hcc - export HCC_HOME=/hcc/lib + export HCC_HOME=/hcc/build export CMAKE_PREFIX_PATH=/opt/rocm/lib:/opt/rocm/include/hsa - Build HCC: - cd /hcc - mkdir build && cd build && cmake -DUSE_PROF_API=1 .. && make -j + cd /hcc && mkdir build && cd build + cmake -DUSE_PROF_API=1 -DPROF_API_HEADER_PATH=/roctracer/inc/roctracer .. + make -j - Build HIP: - cd /HIP && mkdir build && cd build && cmake -DUSE_PROF_API=1 .. && make -j + cd /HIP && mkdir build && cd build + cmake -DUSE_PROF_API=1 -DPROF_API_HEADER_PATH=/roctracer/inc/roctracer .. + make -j ln -s HIP/build HIP/lib - Build ROCtracer diff --git a/projects/roctracer/inc/roctracer.h b/projects/roctracer/inc/roctracer.h index 006fa96ada..89911f2f01 100644 --- a/projects/roctracer/inc/roctracer.h +++ b/projects/roctracer/inc/roctracer.h @@ -80,7 +80,8 @@ typedef activity_domain_t roctracer_domain_t; // NULL returned on the error and the library errno is set const char* roctracer_id_string( const uint32_t& domain, // tracing domain - const uint32_t& id); // activity ID + const uint32_t& id, // activity ID + const uint32_t& kind); // activity kind //////////////////////////////////////////////////////////////////////////////// // Callback API @@ -93,17 +94,15 @@ const char* roctracer_id_string( typedef activity_rtapi_callback_t roctracer_rtapi_callback_t; // Enable runtime API callbacks -roctracer_status_t roctracer_enable_api_callback( +roctracer_status_t roctracer_enable_callback( activity_domain_t domain, // runtime API domain - uint32_t kind, // API kind uint32_t id, // API call ID activity_rtapi_callback_t callback, // callback function pointer void* arg); // [in/out] callback arg // Disable runtime API callbacks -roctracer_status_t roctracer_disable_api_callback( +roctracer_status_t roctracer_disable_callback( activity_domain_t domain, // runtime API domain - uint32_t kind, // API kind uint32_t id); // API call ID //////////////////////////////////////////////////////////////////////////////// @@ -170,20 +169,18 @@ roctracer_pool_t* roctracer_default_pool( roctracer_pool_t* pool = NULL); // [in] new default pool if not NULL // Enable activity records logging -roctracer_status_t roctracer_enable_api_activity( +roctracer_status_t roctracer_enable_activity( activity_domain_t domain, // runtime API domain - uint32_t kind, // activity kind uint32_t id, // activity ID roctracer_pool_t* pool = NULL); // memory pool, NULL is a default one // Disable activity records logging -roctracer_status_t roctracer_disable_api_activity( +roctracer_status_t roctracer_disable_activity( activity_domain_t domain, // runtime API domain - uint32_t kind, // activity kind uint32_t id); // activity ID // Flush available activity records -roctracer_status_t roctracer_flush_api_activity( +roctracer_status_t roctracer_flush_activity( roctracer_pool_t* pool = NULL); // memory pool, NULL is a default one #ifdef __cplusplus diff --git a/projects/roctracer/src/core/roctracer.cpp b/projects/roctracer/src/core/roctracer.cpp index 77913082e4..91990730d0 100644 --- a/projects/roctracer/src/core/roctracer.cpp +++ b/projects/roctracer/src/core/roctracer.cpp @@ -347,11 +347,11 @@ PUBLIC_API const char* roctracer_error_string() { // Return ID string by given domain and activity/API ID // NULL returned on the error and the library errno is set -PUBLIC_API const char* roctracer_id_string(const uint32_t& domain, const uint32_t& id) { +PUBLIC_API const char* roctracer_id_string(const uint32_t& domain, const uint32_t& id, const uint32_t& kind) { API_METHOD_PREFIX switch (domain) { case ACTIVITY_DOMAIN_HCC_OPS: { - return Kalmar::CLAMP::GetCmdName(id); + return Kalmar::CLAMP::GetCmdName(kind); break; } case ACTIVITY_DOMAIN_HIP_API: { @@ -365,9 +365,8 @@ PUBLIC_API const char* roctracer_id_string(const uint32_t& domain, const uint32_ } // Enable runtime API callbacks -PUBLIC_API roctracer_status_t roctracer_enable_api_callback( +PUBLIC_API roctracer_status_t roctracer_enable_callback( roctracer_domain_t domain, - uint32_t kind, uint32_t id, roctracer_rtapi_callback_t callback, void* user_data) @@ -378,7 +377,6 @@ PUBLIC_API roctracer_status_t roctracer_enable_api_callback( if (id != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_ANY: id != 0"); id = HIP_API_ID_ANY; case ACTIVITY_DOMAIN_HIP_API: { - if (kind != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_HIP_API: kind != 0, not supported"); hipError_t hip_err = hipRegisterApiCallback(id, (void*)callback, user_data); if (hip_err != hipSuccess) HIP_EXC_RAISING(ROCTRACER_STATUS_HIP_API_ERR, "hipRegisterApiCallback error(" << hip_err << ")"); break; @@ -390,9 +388,8 @@ PUBLIC_API roctracer_status_t roctracer_enable_api_callback( } // Enable runtime API callbacks -PUBLIC_API roctracer_status_t roctracer_disable_api_callback( +PUBLIC_API roctracer_status_t roctracer_disable_callback( roctracer_domain_t domain, - uint32_t kind, uint32_t id) { API_METHOD_PREFIX @@ -401,7 +398,6 @@ PUBLIC_API roctracer_status_t roctracer_disable_api_callback( if (id != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_ANY: id != 0"); id = HIP_API_ID_ANY; case ACTIVITY_DOMAIN_HIP_API: { - if (kind != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_HIP_API: kind != 0, not supported"); hipError_t hip_err = hipRemoveApiCallback(id); if (hip_err != hipSuccess) HIP_EXC_RAISING(ROCTRACER_STATUS_HIP_API_ERR, "hipRemoveApiCallback error(" << hip_err << ")"); break; @@ -450,9 +446,8 @@ PUBLIC_API roctracer_status_t roctracer_close_pool(roctracer_pool_t* pool) { } // Enable activity records logging -PUBLIC_API roctracer_status_t roctracer_enable_api_activity( +PUBLIC_API roctracer_status_t roctracer_enable_activity( roctracer_domain_t domain, - uint32_t kind, uint32_t id, roctracer_pool_t* pool) { @@ -460,19 +455,16 @@ PUBLIC_API roctracer_status_t roctracer_enable_api_activity( if (pool == NULL) pool = roctracer_default_pool(); switch (domain) { case ACTIVITY_DOMAIN_ANY: - if (kind != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_ANY: kind != 0"); if (id != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_ANY: id != 0"); - roctracer_enable_api_activity(ACTIVITY_DOMAIN_HCC_OPS, hc::HSA_OP_ID_ANY, 0, pool); - roctracer_enable_api_activity(ACTIVITY_DOMAIN_HIP_API, 0, HIP_API_ID_ANY, pool); + roctracer_enable_activity(ACTIVITY_DOMAIN_HCC_OPS, hc::HSA_OP_ID_ANY, pool); + roctracer_enable_activity(ACTIVITY_DOMAIN_HIP_API, HIP_API_ID_ANY, pool); break; case ACTIVITY_DOMAIN_HCC_OPS: { - if (id != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_HCC_OPS: id != 0, not supported"); - const bool err = Kalmar::CLAMP::SetActivityCallback(kind, (void*)roctracer::AsyncActivityCallback, (void*)pool); + const bool err = Kalmar::CLAMP::SetActivityCallback(id, (void*)roctracer::AsyncActivityCallback, (void*)pool); if (err == true) HCC_EXC_RAISING(ROCTRACER_STATUS_HCC_OPS_ERR, "Kalmar::CLAMP::SetActivityCallback error"); break; } case ACTIVITY_DOMAIN_HIP_API: { - if (kind != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_HIP_API: kind != 0, not supported"); const hipError_t hip_err = hipRegisterActivityCallback(id, (void*)roctracer::SyncActivityCallback, (void*)pool); if (hip_err != hipSuccess) HIP_EXC_RAISING(ROCTRACER_STATUS_HIP_API_ERR, "hipRegisterActivityCallback error(" << hip_err << ")"); break; @@ -484,27 +476,23 @@ PUBLIC_API roctracer_status_t roctracer_enable_api_activity( } // Disable activity records logging -PUBLIC_API roctracer_status_t roctracer_disable_api_activity( +PUBLIC_API roctracer_status_t roctracer_disable_activity( roctracer_domain_t domain, - uint32_t kind, uint32_t id) { API_METHOD_PREFIX switch (domain) { case ACTIVITY_DOMAIN_ANY: - if (kind != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_ANY: kind != 0"); if (id != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_ANY: id != 0"); - roctracer_disable_api_activity(ACTIVITY_DOMAIN_HCC_OPS, hc::HSA_OP_ID_ANY, 0); - roctracer_disable_api_activity(ACTIVITY_DOMAIN_HIP_API, 0, HIP_API_ID_ANY); + roctracer_disable_activity(ACTIVITY_DOMAIN_HCC_OPS, hc::HSA_OP_ID_ANY); + roctracer_disable_activity(ACTIVITY_DOMAIN_HIP_API, HIP_API_ID_ANY); break; case ACTIVITY_DOMAIN_HCC_OPS: { - if (id != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_HCC_OPS: id != 0, not supported"); - const bool err = Kalmar::CLAMP::SetActivityCallback(kind, NULL, NULL); + const bool err = Kalmar::CLAMP::SetActivityCallback(id, NULL, NULL); if (err == true) HCC_EXC_RAISING(ROCTRACER_STATUS_HCC_OPS_ERR, "Kalmar::CLAMP::SetActivityCallback(NULL) error"); break; } case ACTIVITY_DOMAIN_HIP_API: { - if (kind != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_HIP_API: kind != 0, not supported"); const hipError_t hip_err = hipRemoveActivityCallback(id); if (hip_err != hipSuccess) HIP_EXC_RAISING(ROCTRACER_STATUS_HIP_API_ERR, "hipRemoveActivityCallback error(" << hip_err << ")"); break; @@ -516,7 +504,7 @@ PUBLIC_API roctracer_status_t roctracer_disable_api_activity( } // Flush available activity records -PUBLIC_API roctracer_status_t roctracer_flush_api_activity(roctracer_pool_t* pool) { +PUBLIC_API roctracer_status_t roctracer_flush_activity(roctracer_pool_t* pool) { API_METHOD_PREFIX if (pool == NULL) pool = roctracer_default_pool(); roctracer::MemoryPool* memory_pool = reinterpret_cast(pool); diff --git a/projects/roctracer/test/MatrixTranspose/MatrixTranspose.cpp b/projects/roctracer/test/MatrixTranspose/MatrixTranspose.cpp index 52350d67e9..707aaa885a 100644 --- a/projects/roctracer/test/MatrixTranspose/MatrixTranspose.cpp +++ b/projects/roctracer/test/MatrixTranspose/MatrixTranspose.cpp @@ -161,7 +161,7 @@ void hip_api_callback( (void)arg; const hip_api_data_t* data = reinterpret_cast(callback_data); fprintf(stdout, "<%s id(%u)\tcorrelation_id(%lu) %s> ", - roctracer_id_string(ACTIVITY_DOMAIN_HIP_API, cid), + roctracer_id_string(ACTIVITY_DOMAIN_HIP_API, cid, 0), cid, data->correlation_id, (data->phase == ACTIVITY_API_PHASE_ENTER) ? "on-enter" : "on-exit"); @@ -211,7 +211,7 @@ void activity_callback(const char* begin, const char* end, void* arg) { const roctracer_record_t* end_record = reinterpret_cast(end); fprintf(stdout, "\tActivity records:\n"); fflush(stdout); while (record < end_record) { - const char * name = roctracer_id_string(record->domain, record->activity_id); + 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)", name, record->correlation_id, @@ -220,7 +220,7 @@ void activity_callback(const char* begin, const char* end, void* arg) { record->device_id, record->stream_id ); - if (record->kind == hc::HSA_OP_ID_COPY) fprintf(stdout, " bytes(0x%zx)", record->bytes); + if (record->activity_id == hc::HSA_OP_ID_COPY) fprintf(stdout, " bytes(0x%zx)", record->bytes); fprintf(stdout, "\n"); fflush(stdout); ROCTRACER_CALL(roctracer_next_record(record, &record)); @@ -236,15 +236,15 @@ void start_tracing() { properties.buffer_callback_fun = activity_callback; ROCTRACER_CALL(roctracer_open_pool(&properties)); // Enable HIP API callbacks - ROCTRACER_CALL(roctracer_enable_api_callback(ACTIVITY_DOMAIN_ANY, 0, 0, hip_api_callback, NULL)); + ROCTRACER_CALL(roctracer_enable_callback(ACTIVITY_DOMAIN_ANY, 0, hip_api_callback, NULL)); // Enable HIP activity tracing - ROCTRACER_CALL(roctracer_enable_api_activity(ACTIVITY_DOMAIN_ANY, 0, 0)); + ROCTRACER_CALL(roctracer_enable_activity(ACTIVITY_DOMAIN_ANY, 0)); } // Stop tracing routine void stop_tracing() { - ROCTRACER_CALL(roctracer_disable_api_callback(ACTIVITY_DOMAIN_ANY, 0, 0)); - ROCTRACER_CALL(roctracer_disable_api_activity(ACTIVITY_DOMAIN_ANY, 0, 0)); + ROCTRACER_CALL(roctracer_disable_callback(ACTIVITY_DOMAIN_ANY, 0)); + ROCTRACER_CALL(roctracer_disable_activity(ACTIVITY_DOMAIN_ANY, 0)); ROCTRACER_CALL(roctracer_close_pool()); std::cout << "# STOP #############################" << std::endl << std::flush; }