From b71675077a4554074b75c3fe3ff20f19cf443cc0 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Mon, 18 Jun 2018 12:58:08 -0500 Subject: [PATCH] deleting consumer thread on pool destruction --- inc/roctracer.h | 22 +++++++++++----------- src/core/roctracer.cpp | 6 ++++++ test/MatrixTranspose/MatrixTranspose.cpp | 24 +++++++++++++----------- 3 files changed, 30 insertions(+), 22 deletions(-) diff --git a/inc/roctracer.h b/inc/roctracer.h index 87ec3fb5f8..fcd1aaf79c 100644 --- a/inc/roctracer.h +++ b/inc/roctracer.h @@ -99,9 +99,9 @@ const char* roctracer_error_string(); // Traced API domains typedef enum { - ROCTRACER_DOMAIN_ANY = 0, // Any domain - ROCTRACER_DOMAIN_HIP_API = 1, // HIP domain - ROCTRACER_DOMAIN_HCC_OPS = 2, // HCC domain + ROCTRACER_DOMAIN_ANY = 0, // Any domain + ROCTRACER_DOMAIN_HIP_API = 1, // HIP domain + ROCTRACER_DOMAIN_HCC_OPS = 2, // HCC domain ROCTRACER_DOMAIN_NUMBER } roctracer_domain_t; @@ -140,15 +140,15 @@ typedef hip_cb_fun_t roctracer_api_callback_t; // Enable runtime API callbacks roctracer_status_t roctracer_enable_api_callback( - roctracer_domain_t domain, // runtime API domain - uint32_t cid, // API call ID - roctracer_api_callback_t callback, // callback function pointer - void* arg); // [in/out] callback arg + roctracer_domain_t domain, // runtime API domain + uint32_t cid, // API call ID + roctracer_api_callback_t callback, // callback function pointer + void* arg); // [in/out] callback arg // Disable runtime API callbacks roctracer_status_t roctracer_disable_api_callback( - roctracer_domain_t domain, // runtime API domain - uint32_t cid); // API call ID + roctracer_domain_t domain, // runtime API domain + uint32_t cid); // API call ID //////////////////////////////////////////////////////////////////////////////// // Activity API @@ -218,13 +218,13 @@ roctracer_pool_t* roctracer_default_pool( // Enable activity records logging roctracer_status_t roctracer_enable_api_activity( - roctracer_domain_t domain, // runtime API domain + roctracer_domain_t domain, // runtime API domain uint32_t activity_kind, // activity kind roctracer_pool_t* pool = NULL); // memory pool, NULL is a default one // Disable activity records logging roctracer_status_t roctracer_disable_api_activity( - roctracer_domain_t domain, // runtime API domain + roctracer_domain_t domain, // runtime API domain uint32_t activity_kind); // activity kind // Flush available activity records diff --git a/src/core/roctracer.cpp b/src/core/roctracer.cpp index cdd68bb993..a80e323934 100644 --- a/src/core/roctracer.cpp +++ b/src/core/roctracer.cpp @@ -143,7 +143,13 @@ class MemoryPool { } ~MemoryPool() { + std::lock_guard lock(write_mutex_); + Flush(); + PTHREAD_CALL(pthread_cancel(consumer_thread_)); + void *res; + PTHREAD_CALL(pthread_join(consumer_thread_, &res)); + if (res != PTHREAD_CANCELED) EXC_ABORT(ROCTRACER_STATUS_ERROR, "consumer thread wasn't stopped correctly"); allocator_default(&pool_begin_, 0, alloc_arg_); } diff --git a/test/MatrixTranspose/MatrixTranspose.cpp b/test/MatrixTranspose/MatrixTranspose.cpp index 4ba2fac9f3..9819efe4f3 100644 --- a/test/MatrixTranspose/MatrixTranspose.cpp +++ b/test/MatrixTranspose/MatrixTranspose.cpp @@ -232,20 +232,22 @@ void activity_callback(const char* begin, const char* end, void* arg) { // Initialize function void init_tracing() { - // Check tracer domains consitency - ROCTRACER_CALL(roctracer_validate_domains()); - // Enable HIP API callbacks - ROCTRACER_CALL(roctracer_enable_api_callback(ROCTRACER_DOMAIN_ANY, 0, hip_api_callback, NULL)); - // Enable HIP activity tracing - roctracer_properties_t properties{}; - properties.buffer_size = 12; - properties.buffer_callback_fun = activity_callback; - ROCTRACER_CALL(roctracer_open_pool(&properties)); - ROCTRACER_CALL(roctracer_enable_api_activity(ROCTRACER_DOMAIN_ANY, 0)); + // Check tracer domains consitency + ROCTRACER_CALL(roctracer_validate_domains()); + // Enable HIP API callbacks + ROCTRACER_CALL(roctracer_enable_api_callback(ROCTRACER_DOMAIN_ANY, 0, hip_api_callback, NULL)); + // Enable HIP activity tracing + roctracer_properties_t properties{}; + properties.buffer_size = 12; + properties.buffer_callback_fun = activity_callback; + ROCTRACER_CALL(roctracer_open_pool(&properties)); + ROCTRACER_CALL(roctracer_enable_api_activity(ROCTRACER_DOMAIN_ANY, 0)); } void finish_tracing() { - ROCTRACER_CALL(roctracer_close_pool()); + ROCTRACER_CALL(roctracer_disable_api_callback(ROCTRACER_DOMAIN_ANY, 0)); + ROCTRACER_CALL(roctracer_disable_api_activity(ROCTRACER_DOMAIN_ANY, 0)); + ROCTRACER_CALL(roctracer_close_pool()); } #else void init_tracing() {}