External Correlation IDs

External Correlation IDs#

Rocprofiler SDK Developer API: External Correlation IDs
Rocprofiler SDK Developer API 0.4.0
ROCm Profiling API and tools
External Correlation IDs

User-defined correlation identifiers to supplement rocprofiler generated correlation ids. More...

Typedefs

typedef int(* rocprofiler_external_correlation_id_request_cb_t) (rocprofiler_thread_id_t thread_id, rocprofiler_context_id_t context_id, rocprofiler_external_correlation_id_request_kind_t kind, uint32_t operation, uint64_t internal_corr_id_value, rocprofiler_user_data_t *external_corr_id_value, void *data)
 Callback requesting a value for the external correlation id.
 

Enumerations

enum  rocprofiler_external_correlation_id_request_kind_t {
  ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_NONE = 0 ,
  ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_HSA_CORE_API ,
  ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_HSA_AMD_EXT_API ,
  ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_HSA_IMAGE_EXT_API ,
  ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_HSA_FINALIZE_EXT_API ,
  ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_HIP_RUNTIME_API ,
  ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_HIP_COMPILER_API ,
  ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_MARKER_CORE_API ,
  ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_MARKER_CONTROL_API ,
  ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_MARKER_NAME_API ,
  ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_MEMORY_COPY ,
  ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_KERNEL_DISPATCH ,
  ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_SCRATCH_MEMORY ,
  ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_LAST
}
 ROCProfiler External Correlation ID Operations. More...
 

Functions

rocprofiler_status_t rocprofiler_configure_external_correlation_id_request_service (rocprofiler_context_id_t context_id, rocprofiler_external_correlation_id_request_kind_t *kinds, unsigned long kinds_count, rocprofiler_external_correlation_id_request_cb_t callback, void *callback_args)
 Configure External Correlation ID Request Service.
 
rocprofiler_status_t rocprofiler_push_external_correlation_id (rocprofiler_context_id_t context, rocprofiler_thread_id_t tid, rocprofiler_user_data_t external_correlation_id)
 Push default value for external field in rocprofiler_correlation_id_t onto stack.
 
rocprofiler_status_t rocprofiler_pop_external_correlation_id (rocprofiler_context_id_t context, rocprofiler_thread_id_t tid, rocprofiler_user_data_t *external_correlation_id)
 Pop default value for external field in rocprofiler_correlation_id_t off of stack.
 

Detailed Description

User-defined correlation identifiers to supplement rocprofiler generated correlation ids.

Typedef Documentation

◆ rocprofiler_external_correlation_id_request_cb_t

typedef int(* rocprofiler_external_correlation_id_request_cb_t) (rocprofiler_thread_id_t thread_id, rocprofiler_context_id_t context_id, rocprofiler_external_correlation_id_request_kind_t kind, uint32_t operation, uint64_t internal_corr_id_value, rocprofiler_user_data_t *external_corr_id_value, void *data)

Callback requesting a value for the external correlation id.

Parameters
[in]thread_idId of the thread making the request
[in]context_idId of the context making the request
[in]kindOrigin of the external correlation id request
[in]operationRegardless of whether callback or buffer tracing is being used, the operation value will be the same, i.e., regardless of whether callback kind is ROCPROFILER_CALLBACK_TRACING_HSA_CORE_API or the buffer record kind is ROCPROFILER_BUFFER_TRACING_HSA_CORE_API, the data/record for hsa_init will have an operation value of ROCPROFILER_HSA_CORE_API_ID_hsa_init.
[in]internal_corr_id_valueCurrent internal correlation ID value for the request
[out]external_corr_id_valueSet this value to the desired external correlation ID value
[in]dataThe callback_args value passed to rocprofiler_configure_external_correlation_id_request_service.
Returns
int
Return values
0Used to indicate the tool had zero issues setting the external correlation ID field
1(or any other non-zero number) Used to indicate the callback did not set an external correlation ID value and the thread-local value for the most recently pushed external correlation ID should be used instead

Definition at line 93 of file external_correlation.h.

Enumeration Type Documentation

◆ rocprofiler_external_correlation_id_request_kind_t

ROCProfiler External Correlation ID Operations.

These kinds correspond to callback and buffered tracing kinds (

See also
rocprofiler_callback_tracing_kind_t and rocprofiler_buffer_tracing_kind_t) which generate correlation IDs. Typically, rocprofiler-sdk uses the most recent external correlation ID on the current thread set via rocprofiler_push_external_correlation_id; however, this approach can be problematic if a new external correlation ID should be set before the ROCPROFILER_CALLBACK_PHASE_ENTER callback or if relevant external correlation IDs are desired when the buffered tracing is used. Thus, rocprofiler-sdk provides a way for tools to get a callback whenever an external correlation ID is needed. However, this can add significant overhead for those who only need these callbacks for, say, kernel dispatches while the HSA API is being traced (i.e. lots of callbacks for HSA API functions). The enumeration below is provided to ensure that tools can default to using the external correlation IDs set via the push/pop methods where the external correlation ID value is not important while also getting a request for an external correlation ID for other tracing kinds.
Enumerator
ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_NONE 

Unknown kind.

ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_HSA_CORE_API 
ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_HSA_AMD_EXT_API 
ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_HSA_IMAGE_EXT_API 
ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_HSA_FINALIZE_EXT_API 
ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_HIP_RUNTIME_API 
ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_HIP_COMPILER_API 
ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_MARKER_CORE_API 
ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_MARKER_CONTROL_API 
ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_MARKER_NAME_API 
ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_MEMORY_COPY 
ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_KERNEL_DISPATCH 
ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_SCRATCH_MEMORY 
ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_LAST 

Definition at line 54 of file external_correlation.h.

55{
rocprofiler_external_correlation_id_request_kind_t
ROCProfiler External Correlation ID Operations.
@ ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_LAST
@ ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_SCRATCH_MEMORY
@ ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_MARKER_NAME_API
@ ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_HSA_FINALIZE_EXT_API
@ ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_HIP_RUNTIME_API
@ ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_MEMORY_COPY
@ ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_MARKER_CORE_API
@ ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_NONE
Unknown kind.
@ ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_KERNEL_DISPATCH
@ ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_HSA_IMAGE_EXT_API
@ ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_MARKER_CONTROL_API
@ ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_HSA_CORE_API
@ ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_HIP_COMPILER_API
@ ROCPROFILER_EXTERNAL_CORRELATION_REQUEST_HSA_AMD_EXT_API

Function Documentation

◆ rocprofiler_configure_external_correlation_id_request_service()

rocprofiler_status_t rocprofiler_configure_external_correlation_id_request_service ( rocprofiler_context_id_t  context_id,
rocprofiler_external_correlation_id_request_kind_t kinds,
unsigned long  kinds_count,
rocprofiler_external_correlation_id_request_cb_t  callback,
void *  callback_args 
)

Configure External Correlation ID Request Service.

Parameters
[in]context_idContext to associate the service with
[in]kindsArray of rocprofiler_external_correlation_id_request_kind_t values. If this parameter is null, all tracing operations will invoke the callback to request an external correlation ID.
[in]kinds_countIf the kinds array is non-null, set this to the size of the array.
[in]callbackThe function to invoke for an external correlation ID request
[in]callback_argsData provided to every invocation of the callback function
Returns
rocprofiler_status_t
Return values
ROCPROFILER_STATUS_ERROR_CONFIGURATION_LOCKEDInvoked outside of the initialization function in rocprofiler_tool_configure_result_t provided to rocprofiler via rocprofiler_configure function
ROCPROFILER_STATUS_ERROR_CONTEXT_NOT_FOUNDThe provided context is not valid/registered
ROCPROFILER_STATUS_ERROR_SERVICE_ALREADY_CONFIGUREDif the same rocprofiler_callback_tracing_kind_t value is provided more than once (per context) – in other words, we do not support overriding or combining the kinds in separate function calls.

◆ rocprofiler_pop_external_correlation_id()

rocprofiler_status_t rocprofiler_pop_external_correlation_id ( rocprofiler_context_id_t  context,
rocprofiler_thread_id_t  tid,
rocprofiler_user_data_t external_correlation_id 
)

Pop default value for external field in rocprofiler_correlation_id_t off of stack.

Parameters
[in]contextAssociated context
[in]tidthread identifier.
See also
rocprofiler_get_thread_id
Parameters
[out]external_correlation_idCorrelation id data popped off the stack
Returns
rocprofiler_status_t
Return values
ROCPROFILER_STATUS_ERROR_CONTEXT_NOT_FOUNDContext does not exist
ROCPROFILER_STATUS_ERROR_INVALID_ARGUMENTThread id is not valid

◆ rocprofiler_push_external_correlation_id()

rocprofiler_status_t rocprofiler_push_external_correlation_id ( rocprofiler_context_id_t  context,
rocprofiler_thread_id_t  tid,
rocprofiler_user_data_t  external_correlation_id 
)

Push default value for external field in rocprofiler_correlation_id_t onto stack.

External correlation ids are thread-local values. However, if rocprofiler internally requests an external correlation id on a non-main thread and an external correlation id has not been pushed for this thread, the external correlation ID will default to the latest external correlation id on the main thread – this allows tools to push an external correlation id once on the main thread for, say, the MPI rank or process-wide UUID and this value will be used by all subsequent child threads.

Parameters
[in]contextAssociated context
[in]tidthread identifier.
See also
rocprofiler_get_thread_id
Parameters
[in]external_correlation_idUser data to place in external field in rocprofiler_correlation_id_t
Returns
rocprofiler_status_t
Return values
ROCPROFILER_STATUS_ERROR_CONTEXT_NOT_FOUNDContext does not exist
ROCPROFILER_STATUS_ERROR_INVALID_ARGUMENTThread id is not valid
Examples
api_buffered_tracing/client.cpp.