Update correlation id definition + status strings + const active contexts (#127)

* Update include/rocprofiler

- remove rocprofiler_external_correlation_id_t
- redefine rocprofiler_correlation_id_t to include internal id and external user data
- associate rocprofiler_push_external_correlation_id and rocprofiler_pop_external_correlation_id with a context

* Update include/rocprofiler/rocprofiler.h

- rocprofiler_get_status_name
- rocprofiler_get_status_string

* Update lib/rocprofiler/rocprofiler.cpp

- implement rocprofiler_get_status_name and rocprofiler_get_status_string

* Update lib/rocprofiler/tests/status.cpp

- unit test for status string and name

* Update lib/rocprofiler/tests/registration.cpp

- update to new rocprofiler_correlation_id_t

* Update samples

- update to new rocprofiler_correlation_id_t

* Add lib/rocprofiler/external_correlation.cpp

- placeholder for external correlation push/pop

* Update lib/rocprofiler/hsa/agent_cache.cpp

- slight tweak to when HSA_AMD_AGENT_INFO_NEAREST_CPU is defined

* Update context implementation and hsa.cpp

- get_active_contexts is array of const context pointers
- update hsa_api_impl<Idx>::functor to new rocprofiler_correlation_id_t

* Update include/rocprofiler/fwd.h

- add ROCPROFILER_STATUS_ERROR_INVALID_ARGUMENT
- reorder enum for consistency

* Update include/rocprofiler/external_correlation.h

- doxygen comments
- thread id parameter

* Update include/rocprofiler/rocprofiler.h

- add rocprofiler_get_thread_id function (needed for external corr id)

* Update lib/common/synchronized.hpp

- explicit LockedType
- define all copy/move ctor and assignment
- update rlock/wlock/ulock to support arguments and return values
- Support additional template parameter for special case of synchronized instance which is the mapped type of a sychronized map

* Update lib/rocprofiler/external_correlation.cpp

- implement rocprofiler_{push,pop}_external_correlation_id

* Update lib/rocprofiler/CMakeLists.txt

- external_correlation.hpp

* Update lib/rocprofiler/rocprofiler.cpp

- status string for ROCPROFILER_STATUS_ERROR_INVALID_ARGUMENT
- implement rocprofiler_get_thread_id

* Update lib/rocprofiler/tests (external correlation)

- add external_correlation unit tests

* Update include/rocprofiler/callback_tracing.h

- doxygen comments
- callback invoked in callback tracing has user_data pointer passed to it

* Update samples/api_callback_tracing/client.cpp

- add rocprofiler_user_data_t* to tool_tracing_callback

* Update lib/rocprofiler/tests/registration.cpp

- add rocprofiler_user_data_t* to tool_tracing_callback

* Update lib/rocprofiler/context/context.{hpp,cpp}

- update correlation_tracing_service
  - external_correlation instance
  - rename get_unique_record_id to get_unique_internal_id

* Update lib/tests/common/demangling.cpp

- tweak mangled definitions due to changing function get_unique_record_id to get_unique_internal_id

* Update lib/rocprofiler/hsa/hsa.cpp

- handle updates to external correlation id
- handle updates to callback signature in callback tracing

* Update CMakeLists.txt

- CMAKE_BUILD_TYPE=Coverage defines CODECOV=1

* Update samples/api_callback_tracing/client.cpp

[ROCm/rocprofiler-sdk commit: 6a3f79e626]
This commit is contained in:
Jonathan R. Madsen authored and GitHub committed 2023-10-18 13:59:41 -05:00
1 orang tua 343f8679e7
melakukan 267954fdd3
24 files changed
+1106 -124

No files matched your search

@@ -61,7 +61,7 @@ get_client_index()
} // namespace
uint64_t
correlation_tracing_service::get_unique_record_id()
correlation_tracing_service::get_unique_internal_id()
{
static auto _v = std::atomic<uint64_t>{};
return _v++;
@@ -181,7 +181,7 @@ start_context(rocprofiler_context_id_t context_id)
// try to find a nullptr slot first
for(size_t i = 0; i < get_active_contexts().size(); ++i)
{
auto* itr = get_active_contexts().at(i).load(std::memory_order_relaxed);
const auto* itr = get_active_contexts().at(i).load(std::memory_order_relaxed);
if(itr == nullptr)
{
idx = i;
@@ -201,8 +201,8 @@ start_context(rocprofiler_context_id_t context_id)
}
// atomic swap the pointer into the "active" array used internally
context* _expected = nullptr;
bool success = get_active_contexts().at(idx).compare_exchange_strong(
const context* _expected = nullptr;
bool success = get_active_contexts().at(idx).compare_exchange_strong(
_expected, get_registered_contexts().at(context_id.handle).get());
if(!success) return ROCPROFILER_STATUS_ERROR_CONTEXT_NOT_STARTED;
@@ -219,7 +219,7 @@ stop_context(rocprofiler_context_id_t idx)
// callbacks
for(auto& itr : get_active_contexts())
{
auto* _expected = itr.load(std::memory_order_relaxed);
const auto* _expected = itr.load(std::memory_order_relaxed);
if(_expected && _expected->context_idx == idx.handle)
{
bool success = itr.compare_exchange_strong(_expected, nullptr);
@@ -237,7 +237,7 @@ deactivate_client_contexts(rocprofiler_client_id_t client_id)
{
for(auto& itr : get_active_contexts())
{
auto* itr_v = itr.load();
const auto* itr_v = itr.load();
if(itr_v->client_idx == client_id.handle)
{
itr.store(nullptr);