Fixing Timestamps for Tracing for the trace buffer results

Change-Id: I89b36daacb6531840ac334ba4629c73a7b8f1e79
This commit is contained in:
Ammar ELWazir
2023-05-23 19:01:16 +00:00
rodzic 1bba393b1b
commit 6b07b139c4
15 zmienionych plików z 489 dodań i 586 usunięć
+97 -87
Wyświetl plik
@@ -350,7 +350,8 @@ typedef enum {
*
* @retval Return the error string.
*/
ROCPROFILER_API const char* rocprofiler_error_str(rocprofiler_status_t status) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API const char* rocprofiler_error_str(rocprofiler_status_t status)
ROCPROFILER_VERSION_9_0;
/** @} */
@@ -426,7 +427,8 @@ typedef struct {
* failed to get the timestamp using HSA Function.
*
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_get_timestamp(rocprofiler_timestamp_t* timestamp) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t rocprofiler_get_timestamp(rocprofiler_timestamp_t* timestamp)
ROCPROFILER_VERSION_9_0;
/**
* Timestamps (start & end), it will be used for kernel dispatch tracing as
@@ -565,9 +567,9 @@ typedef enum {
* @retval ::ROCPROFILER_STATUS_ERROR_AGENT_INFORMATION_MISSING, if the agent
* was found in the saved agents but the required information is missing
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_query_agent_info_size(rocprofiler_agent_info_kind_t kind,
rocprofiler_agent_id_t agent_id,
size_t* data_size) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t rocprofiler_query_agent_info_size(
rocprofiler_agent_info_kind_t kind, rocprofiler_agent_id_t agent_id,
size_t* data_size) ROCPROFILER_VERSION_9_0;
/**
* Query Agent Information Data using an allocated data pointer by the user,
@@ -586,9 +588,9 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_query_agent_info_size(rocprofil
* @retval ::ROCPROFILER_STATUS_ERROR_AGENT_INFORMATION_MISSING, if the agent
* was found in the saved agents but the required information is missing
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_query_agent_info(rocprofiler_agent_info_kind_t kind,
rocprofiler_agent_id_t descriptor,
const char** name) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t
rocprofiler_query_agent_info(rocprofiler_agent_info_kind_t kind, rocprofiler_agent_id_t descriptor,
const char** name) ROCPROFILER_VERSION_9_0;
/** @} */
@@ -638,9 +640,9 @@ typedef enum {
* @retval ::ROCPROFILER_STATUS_ERROR_QUEUE_INFORMATION_MISSING, if the queue
* was found in the saved queues but the required information is missing
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_query_queue_info_size(rocprofiler_queue_info_kind_t kind,
rocprofiler_queue_id_t agent_id,
size_t* data_size) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t rocprofiler_query_queue_info_size(
rocprofiler_queue_info_kind_t kind, rocprofiler_queue_id_t agent_id,
size_t* data_size) ROCPROFILER_VERSION_9_0;
/**
* Query Queue Information Data using an allocated data pointer by the user,
@@ -659,9 +661,9 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_query_queue_info_size(rocprofil
* @retval ::ROCPROFILER_STATUS_ERROR_QUEUE_INFORMATION_MISSING, if the queue
* was found in the saved agents but the required information is missing
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_query_queue_info(rocprofiler_queue_info_kind_t kind,
rocprofiler_queue_id_t descriptor,
const char** name) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t
rocprofiler_query_queue_info(rocprofiler_queue_info_kind_t kind, rocprofiler_queue_id_t descriptor,
const char** name) ROCPROFILER_VERSION_9_0;
/** @} */
@@ -709,9 +711,9 @@ typedef enum {
* @retval ::ROCPROFILER_STATUS_ERROR_KERNEL_INFORMATION_MISSING, if the kernel
* was found in the saved counters but the required information is missing
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_query_kernel_info_size(rocprofiler_kernel_info_kind_t kind,
rocprofiler_kernel_id_t kernel_id,
size_t* data_size) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t rocprofiler_query_kernel_info_size(
rocprofiler_kernel_info_kind_t kind, rocprofiler_kernel_id_t kernel_id,
size_t* data_size) ROCPROFILER_VERSION_9_0;
/**
* Query Kernel Information Data using an allocated data pointer by the user,
@@ -730,9 +732,9 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_query_kernel_info_size(rocprofi
* @retval ::ROCPROFILER_STATUS_ERROR_KERNEL_INFORMATION_MISSING, if the kernel
* was found in the saved kernels but the required information is missing
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_query_kernel_info(rocprofiler_kernel_info_kind_t kind,
rocprofiler_kernel_id_t kernel_id,
const char** data) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t rocprofiler_query_kernel_info(
rocprofiler_kernel_info_kind_t kind, rocprofiler_kernel_id_t kernel_id,
const char** data) ROCPROFILER_VERSION_9_0;
/** @} */
@@ -775,10 +777,11 @@ typedef struct {
} rocprofiler_counter_info_t;
typedef int (*rocprofiler_counters_info_callback_t)(rocprofiler_counter_info_t counter,
const char* gpu_name, uint32_t gpu_index) ROCPROFILER_VERSION_9_0;
const char* gpu_name,
uint32_t gpu_index) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t
rocprofiler_iterate_counters(rocprofiler_counters_info_callback_t counters_info_callback) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t rocprofiler_iterate_counters(
rocprofiler_counters_info_callback_t counters_info_callback) ROCPROFILER_VERSION_9_0;
/**
* Counter ID to be used to query counter information using
@@ -852,10 +855,9 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_query_counter_info_size(
* @retval ::ROCPROFILER_STATUS_ERROR_COUNTER_INFORMATION_MISSING, if the counter
* was found in the saved counters but the required information is missing
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_query_counter_info(rocprofiler_session_id_t session_id,
rocprofiler_counter_info_kind_t kind,
rocprofiler_counter_id_t counter_id,
const char** data) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t rocprofiler_query_counter_info(
rocprofiler_session_id_t session_id, rocprofiler_counter_info_kind_t kind,
rocprofiler_counter_id_t counter_id, const char** data) ROCPROFILER_VERSION_9_0;
typedef struct {
/**
@@ -1056,7 +1058,7 @@ typedef struct {
uint32_t buffer_size;
} rocprofiler_record_se_att_data_t;
/**
/**
* ATT tracing record structure.
* This will represent all the information reported by the
* ATT tracer such as the kernel and its thread trace data.
@@ -1108,7 +1110,6 @@ typedef struct {
} rocprofiler_record_att_tracer_t;
/** @} */
/** \defgroup tracing_api_group Tracer Part Handling
@@ -1233,8 +1234,8 @@ typedef enum {
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_query_roctx_tracer_api_data_info_size(
rocprofiler_session_id_t session_id, rocprofiler_tracer_roctx_api_data_info_t kind,
rocprofiler_tracer_api_data_handle_t api_data_id, rocprofiler_tracer_operation_id_t operation_id,
size_t* data_size) ROCPROFILER_VERSION_9_0;
rocprofiler_tracer_api_data_handle_t api_data_id,
rocprofiler_tracer_operation_id_t operation_id, size_t* data_size) ROCPROFILER_VERSION_9_0;
/**
* Query API Data Information using an allocated data pointer by the user,
@@ -1261,8 +1262,8 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_query_roctx_tracer_api_data_inf
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_query_roctx_tracer_api_data_info(
rocprofiler_session_id_t session_id, rocprofiler_tracer_roctx_api_data_info_t kind,
rocprofiler_tracer_api_data_handle_t api_data_id, rocprofiler_tracer_operation_id_t operation_id,
char** data) ROCPROFILER_VERSION_9_0;
rocprofiler_tracer_api_data_handle_t api_data_id,
rocprofiler_tracer_operation_id_t operation_id, char** data) ROCPROFILER_VERSION_9_0;
/** @} */
@@ -1322,8 +1323,8 @@ typedef enum {
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_query_hsa_tracer_api_data_info_size(
rocprofiler_session_id_t session_id, rocprofiler_tracer_hsa_api_data_info_t kind,
rocprofiler_tracer_api_data_handle_t api_data_id, rocprofiler_tracer_operation_id_t operation_id,
size_t* data_size) ROCPROFILER_VERSION_9_0;
rocprofiler_tracer_api_data_handle_t api_data_id,
rocprofiler_tracer_operation_id_t operation_id, size_t* data_size) ROCPROFILER_VERSION_9_0;
/**
* Query API Data Information using an allocated data pointer by the user,
@@ -1350,8 +1351,8 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_query_hsa_tracer_api_data_info_
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_query_hsa_tracer_api_data_info(
rocprofiler_session_id_t session_id, rocprofiler_tracer_hsa_api_data_info_t kind,
rocprofiler_tracer_api_data_handle_t api_data_id, rocprofiler_tracer_operation_id_t operation_id,
char** data) ROCPROFILER_VERSION_9_0;
rocprofiler_tracer_api_data_handle_t api_data_id,
rocprofiler_tracer_operation_id_t operation_id, char** data) ROCPROFILER_VERSION_9_0;
/** @} */
@@ -1435,8 +1436,8 @@ typedef enum {
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_query_hip_tracer_api_data_info_size(
rocprofiler_session_id_t session_id, rocprofiler_tracer_hip_api_data_info_t kind,
rocprofiler_tracer_api_data_handle_t api_data_id, rocprofiler_tracer_operation_id_t operation_id,
size_t* data_size) ROCPROFILER_VERSION_9_0;
rocprofiler_tracer_api_data_handle_t api_data_id,
rocprofiler_tracer_operation_id_t operation_id, size_t* data_size) ROCPROFILER_VERSION_9_0;
/**
* Query API Data Information using an allocated data pointer by the user,
@@ -1462,8 +1463,8 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_query_hip_tracer_api_data_info_
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_query_hip_tracer_api_data_info(
rocprofiler_session_id_t session_id, rocprofiler_tracer_hip_api_data_info_t kind,
rocprofiler_tracer_api_data_handle_t api_data_id, rocprofiler_tracer_operation_id_t operation_id,
char** data) ROCPROFILER_VERSION_9_0;
rocprofiler_tracer_api_data_handle_t api_data_id,
rocprofiler_tracer_operation_id_t operation_id, char** data) ROCPROFILER_VERSION_9_0;
/** @} */
@@ -1545,8 +1546,12 @@ typedef struct {
rocprofiler_thread_id_t thread_id;
/**
* API Tracing phase (Enter/Exit/None(Activity Records/Asynchronous Output Records))
*/
*/
rocprofiler_api_tracing_phase_t phase;
/**
* Kernel Name for HIP API calls that launches kernels or ROCTx message for ROCTx api calls
*/
const char* name;
} rocprofiler_record_tracer_t;
/**
@@ -1656,9 +1661,9 @@ typedef struct {
* @param[in] buffer_id The buffer id associated with that record
*/
typedef void (*rocprofiler_buffer_callback_t)(const rocprofiler_record_header_t* begin,
const rocprofiler_record_header_t* end,
rocprofiler_session_id_t session_id,
rocprofiler_buffer_id_t buffer_id);
const rocprofiler_record_header_t* end,
rocprofiler_session_id_t session_id,
rocprofiler_buffer_id_t buffer_id);
/**
* Flush specific Buffer
@@ -1674,8 +1679,8 @@ typedef void (*rocprofiler_buffer_callback_t)(const rocprofiler_record_header_t*
* @retval ::ROCPROFILER_STATUS_ERROR_CORRUPTED_SESSION_BUFFER may return if
* the session buffer is corrupted
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_flush_data(rocprofiler_session_id_t session_id,
rocprofiler_buffer_id_t buffer_id) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t rocprofiler_flush_data(
rocprofiler_session_id_t session_id, rocprofiler_buffer_id_t buffer_id) ROCPROFILER_VERSION_9_0;
/**
* Get a pointer to the next profiling record.
@@ -1696,10 +1701,9 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_flush_data(rocprofiler_session_
* get the next record because of corrupted data reported by the previous
* record
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_next_record(const rocprofiler_record_header_t* record,
const rocprofiler_record_header_t** next,
rocprofiler_session_id_t session_id,
rocprofiler_buffer_id_t buffer_id) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t rocprofiler_next_record(
const rocprofiler_record_header_t* record, const rocprofiler_record_header_t** next,
rocprofiler_session_id_t session_id, rocprofiler_buffer_id_t buffer_id) ROCPROFILER_VERSION_9_0;
/** @} */
@@ -1761,8 +1765,9 @@ typedef enum {
* @retval ::ROCPROFILER_STATUS_ERROR_NOT_INITIALIZED, if rocprofiler_initialize
* wasn't called before or if rocprofiler_finalize is called
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_create_session(rocprofiler_replay_mode_t replay_mode,
rocprofiler_session_id_t* session_id) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t
rocprofiler_create_session(rocprofiler_replay_mode_t replay_mode,
rocprofiler_session_id_t* session_id) ROCPROFILER_VERSION_9_0;
/**
* Destroy Session
@@ -1779,7 +1784,8 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_create_session(rocprofiler_repl
* @retval ::ROCPROFILER_STATUS_ERROR_SESSION_NOT_FOUND may return if
* the session is not found
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_destroy_session(rocprofiler_session_id_t session_id) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t
rocprofiler_destroy_session(rocprofiler_session_id_t session_id) ROCPROFILER_VERSION_9_0;
/** \defgroup session_filter_group Session Filters Handling
* \ingroup sessions_handling_group
@@ -1920,22 +1926,22 @@ typedef struct {
} rocprofiler_spm_parameter_t;
typedef enum{
typedef enum {
ROCPROFILER_COUNTERS_SAMPLER_PCIE_COUNTERS = 0,
ROCPROFILER_COUNTERS_SAMPLER_XGMI_COUNTERS = 1
} rocprofiler_counters_sampler_counter_type_t;
typedef struct{
typedef struct {
char* name;
rocprofiler_counters_sampler_counter_type_t type;
} rocprofiler_counters_sampler_counter_input_t;
typedef struct{
typedef struct {
rocprofiler_counters_sampler_counter_type_t type;
rocprofiler_record_counter_value_t value;
} rocprofiler_counters_sampler_counter_output_t;
typedef struct{
typedef struct {
/**
* Counters to profile
*/
@@ -1960,9 +1966,9 @@ typedef struct{
* Preferred agents to collect counters from
*/
int gpu_agent_index;
}rocprofiler_counters_sampler_parameters_t;
} rocprofiler_counters_sampler_parameters_t;
typedef struct{
typedef struct {
/**
* ROCMtool General Record base header to identify the id and kind of every
* record
@@ -1982,7 +1988,7 @@ typedef struct{
* Number of counter values
*/
uint32_t num_counters;
}rocprofiler_record_counters_sampler_t;
} rocprofiler_record_counters_sampler_t;
/**
* Filter Kind Data
@@ -2033,12 +2039,10 @@ typedef union {
* @retval ::ROCPROFILER_STATUS_ERROR_FILTER_DATA_CORRUPTED Data can't be read or
* corrupted
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_create_filter(rocprofiler_session_id_t session_id,
rocprofiler_filter_kind_t filter_kind,
rocprofiler_filter_data_t data,
uint64_t data_count,
rocprofiler_filter_id_t* filter_id,
rocprofiler_filter_property_t property) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t rocprofiler_create_filter(
rocprofiler_session_id_t session_id, rocprofiler_filter_kind_t filter_kind,
rocprofiler_filter_data_t data, uint64_t data_count, rocprofiler_filter_id_t* filter_id,
rocprofiler_filter_property_t property) ROCPROFILER_VERSION_9_0;
/**
* Set Session Filter Buffer
@@ -2057,9 +2061,9 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_create_filter(rocprofiler_sessi
* @retval ::ROCPROFILER_STATUS_SESSION_NOT_FOUND Couldn't find session
* associated with the given session identifier
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_set_filter_buffer(rocprofiler_session_id_t session_id,
rocprofiler_filter_id_t filter_id,
rocprofiler_buffer_id_t buffer_id) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t rocprofiler_set_filter_buffer(
rocprofiler_session_id_t session_id, rocprofiler_filter_id_t filter_id,
rocprofiler_buffer_id_t buffer_id) ROCPROFILER_VERSION_9_0;
/**
* Synchronous Callback
@@ -2070,7 +2074,7 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_set_filter_buffer(rocprofiler_s
* @param[in] session_id The session id associated with that record
*/
typedef void (*rocprofiler_sync_callback_t)(rocprofiler_record_tracer_t record,
rocprofiler_session_id_t session_id);
rocprofiler_session_id_t session_id);
/**
* Set Session API Tracing Filter Synchronous Callback
@@ -2111,8 +2115,8 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_set_api_trace_sync_callback(
* associated with the given session identifier
* @retval ::ROCPROFILER_STATUS_FILTER_NOT_FOUND Couldn't find session filter
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_destroy_filter(rocprofiler_session_id_t session_id,
rocprofiler_filter_id_t filter_id) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t rocprofiler_destroy_filter(
rocprofiler_session_id_t session_id, rocprofiler_filter_id_t filter_id) ROCPROFILER_VERSION_9_0;
/**
* Create Buffer
@@ -2166,7 +2170,8 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_create_buffer(
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_set_buffer_properties(
rocprofiler_session_id_t session_id, rocprofiler_buffer_id_t buffer_id,
rocprofiler_buffer_property_t* buffer_properties, uint32_t buffer_properties_count) ROCPROFILER_VERSION_9_0;
rocprofiler_buffer_property_t* buffer_properties,
uint32_t buffer_properties_count) ROCPROFILER_VERSION_9_0;
/**
* Destroy Buffer
@@ -2187,8 +2192,8 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_set_buffer_properties(
* @retval ::ROCPROFILER_STATUS_ERROR_PROPERTY_DATA_CORRUPTED Data can't be read
* or corrupted
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_destroy_buffer(rocprofiler_session_id_t session_id,
rocprofiler_buffer_id_t buffer_id) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t rocprofiler_destroy_buffer(
rocprofiler_session_id_t session_id, rocprofiler_buffer_id_t buffer_id) ROCPROFILER_VERSION_9_0;
/** @} */
@@ -2242,7 +2247,8 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_create_ready_session(
rocprofiler_replay_mode_t replay_mode, rocprofiler_filter_kind_t filter_kind,
rocprofiler_filter_data_t data, uint64_t data_count, size_t buffer_size,
rocprofiler_buffer_callback_t buffer_callback, rocprofiler_session_id_t* session_id,
rocprofiler_filter_property_t property, rocprofiler_sync_callback_t callback) ROCPROFILER_VERSION_9_0;
rocprofiler_filter_property_t property,
rocprofiler_sync_callback_t callback) ROCPROFILER_VERSION_9_0;
// TODO(aelwazir): Multiple sessions activate for different set of filters
/**
@@ -2264,7 +2270,8 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_create_ready_session(
* @retval ::ROCPROFILER_STATUS_ERROR_HAS_ACTIVE_SESSION if there is already
* active session
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_start_session(rocprofiler_session_id_t session_id) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t rocprofiler_start_session(rocprofiler_session_id_t session_id)
ROCPROFILER_VERSION_9_0;
/**
* Deactivate Session
@@ -2280,7 +2287,8 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_start_session(rocprofiler_sessi
* active
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_terminate_session(rocprofiler_session_id_t session_id) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t
rocprofiler_terminate_session(rocprofiler_session_id_t session_id) ROCPROFILER_VERSION_9_0;
/** \defgroup session_range_group Session Range Labeling
* \ingroup sessions_handling_group
@@ -2300,7 +2308,8 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_terminate_session(rocprofiler_s
* @retval ::ROCPROFILER_STATUS_ERROR_CORRUPTED_LABEL_DATA may return if
* the label pointer can't be read by the API
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_push_range(const char* label) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t rocprofiler_push_range(const char* label)
ROCPROFILER_VERSION_9_0;
/**
* Setting an endpoint for a range
@@ -2396,8 +2405,8 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_device_profiling_session_create
* @retval ::ROCPROFILER_STATUS_SUCCESS The function has been executed
* successfully.
*/
ROCPROFILER_API rocprofiler_status_t
rocprofiler_device_profiling_session_start(rocprofiler_session_id_t session_id) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t rocprofiler_device_profiling_session_start(
rocprofiler_session_id_t session_id) ROCPROFILER_VERSION_9_0;
/**
* Poll the device profiling session to read counters from the GPU device.
@@ -2412,7 +2421,8 @@ rocprofiler_device_profiling_session_start(rocprofiler_session_id_t session_id)
* successfully.
*/
ROCPROFILER_API rocprofiler_status_t rocprofiler_device_profiling_session_poll(
rocprofiler_session_id_t session_id, rocprofiler_device_profile_metric_t* data) ROCPROFILER_VERSION_9_0;
rocprofiler_session_id_t session_id,
rocprofiler_device_profile_metric_t* data) ROCPROFILER_VERSION_9_0;
/**
* Stop the device profiling session that was created previously.
@@ -2422,8 +2432,8 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_device_profiling_session_poll(
* @retval ::ROCPROFILER_STATUS_SUCCESS The function has been executed
* successfully.
*/
ROCPROFILER_API rocprofiler_status_t
rocprofiler_device_profiling_session_stop(rocprofiler_session_id_t session_id) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t rocprofiler_device_profiling_session_stop(
rocprofiler_session_id_t session_id) ROCPROFILER_VERSION_9_0;
/**
* Destroy the device profiling session that was created previously.
@@ -2432,8 +2442,8 @@ rocprofiler_device_profiling_session_stop(rocprofiler_session_id_t session_id) R
* @retval ::ROCPROFILER_STATUS_SUCCESS The function has been executed
* successfully.
*/
ROCPROFILER_API rocprofiler_status_t
rocprofiler_device_profiling_session_destroy(rocprofiler_session_id_t session_id) ROCPROFILER_VERSION_9_0;
ROCPROFILER_API rocprofiler_status_t rocprofiler_device_profiling_session_destroy(
rocprofiler_session_id_t session_id) ROCPROFILER_VERSION_9_0;
/** @} */
@@ -80,7 +80,7 @@ extern "C" {
* @return Returns 0 on success and -1 on error.
*/
ROCPROFILER_EXPORT int rocprofiler_plugin_initialize(uint32_t rocprofiler_major_version,
uint32_t rocprofiler_minor_version);
uint32_t rocprofiler_minor_version);
/**
* Finalize plugin.
@@ -109,31 +109,9 @@ ROCPROFILER_EXPORT void rocprofiler_plugin_finalize();
* @param[in] buffer_id Buffer ID
* @return Returns 0 on success and -1 on error.
*/
ROCPROFILER_EXPORT int rocprofiler_plugin_write_buffer_records(const rocprofiler_record_header_t* begin,
const rocprofiler_record_header_t* end,
rocprofiler_session_id_t session_id,
rocprofiler_buffer_id_t buffer_id);
typedef struct {
/**
* @brief tracer extra data
*
* This is applicable only if ::ACTIVITY_DOMAIN_HSA or ACTIVITY_DOMAIN_HIP is the domain of the tracer record
*/
const char* function_name;
/**
* @brief tracer extra data
*
* This is applicable only if ::ACTIVITY_DOMAIN_HIP is the domain of the tracer record
*/
union {
const char* kernel_name;
};
} rocprofiler_plugin_tracer_extra_data_t;
ROCPROFILER_EXPORT int rocprofiler_plugin_write_buffer_records(
const rocprofiler_record_header_t* begin, const rocprofiler_record_header_t* end,
rocprofiler_session_id_t session_id, rocprofiler_buffer_id_t buffer_id);
/**
* Report Synchronous Record.
@@ -144,8 +122,7 @@ typedef struct {
* @return Returns 0 on success and -1 on error.
*/
ROCPROFILER_EXPORT int rocprofiler_plugin_write_record(rocprofiler_record_tracer_t record,
rocprofiler_plugin_tracer_extra_data_t tracer_extra_data);
ROCPROFILER_EXPORT int rocprofiler_plugin_write_record(rocprofiler_record_tracer_t record);
/** @} */
+16 -17
Wyświetl plik
@@ -62,7 +62,7 @@ class att_plugin_t {
bool IsValid() const { return is_valid_; }
void FlushATTRecord(const rocprofiler_record_att_tracer_t* att_tracer_record,
rocprofiler_session_id_t session_id, rocprofiler_buffer_id_t buffer_id) {
rocprofiler_session_id_t session_id, rocprofiler_buffer_id_t buffer_id) {
std::lock_guard<std::mutex> lock(writing_lock);
if (!att_tracer_record) {
@@ -71,11 +71,11 @@ class att_plugin_t {
}
size_t name_length;
CHECK_ROCPROFILER(rocprofiler_query_kernel_info_size(ROCPROFILER_KERNEL_NAME,
att_tracer_record->kernel_id, &name_length));
CHECK_ROCPROFILER(rocprofiler_query_kernel_info_size(
ROCPROFILER_KERNEL_NAME, att_tracer_record->kernel_id, &name_length));
const char* kernel_name_c = static_cast<const char*>(malloc(name_length * sizeof(char)));
CHECK_ROCPROFILER(rocprofiler_query_kernel_info(ROCPROFILER_KERNEL_NAME,
att_tracer_record->kernel_id, &kernel_name_c));
att_tracer_record->kernel_id, &kernel_name_c));
std::string name_demangled = rocmtools::truncate_name(rocmtools::cxx_demangle(kernel_name_c));
@@ -99,7 +99,8 @@ class att_plugin_t {
auto dispatch_id = att_tracer_record->header.id.handle;
std::string fname =
outpath + name_demangled + "_v" + std::to_string(file_iteration) + "_kernel.txt";
std::ofstream(fname.c_str()) << name_demangled << " [" << dispatch_id << "]: " << kernel_name_c << '\n';
std::ofstream(fname.c_str()) << name_demangled << " [" << dispatch_id << "]: " << kernel_name_c
<< '\n';
// iterate over each shader engine att trace
for (int i = 0; i < se_num; i++) {
@@ -125,8 +126,8 @@ class att_plugin_t {
}
int WriteBufferRecords(const rocprofiler_record_header_t* begin,
const rocprofiler_record_header_t* end, rocprofiler_session_id_t session_id,
rocprofiler_buffer_id_t buffer_id) {
const rocprofiler_record_header_t* end,
rocprofiler_session_id_t session_id, rocprofiler_buffer_id_t buffer_id) {
while (begin < end) {
if (!begin) return 0;
switch (begin->kind) {
@@ -139,8 +140,9 @@ class att_plugin_t {
break;
case ROCPROFILER_ATT_TRACER_RECORD: {
rocprofiler_record_att_tracer_t* att_record = const_cast<rocprofiler_record_att_tracer_t*>(
reinterpret_cast<const rocprofiler_record_att_tracer_t*>(begin));
rocprofiler_record_att_tracer_t* att_record =
const_cast<rocprofiler_record_att_tracer_t*>(
reinterpret_cast<const rocprofiler_record_att_tracer_t*>(begin));
FlushATTRecord(att_record, session_id, buffer_id);
break;
}
@@ -159,7 +161,7 @@ att_plugin_t* att_plugin = nullptr;
} // namespace
ROCPROFILER_EXPORT int rocprofiler_plugin_initialize(uint32_t rocprofiler_major_version,
uint32_t rocprofiler_minor_version) {
uint32_t rocprofiler_minor_version) {
if (rocprofiler_major_version != ROCPROFILER_VERSION_MAJOR ||
rocprofiler_minor_version < ROCPROFILER_VERSION_MINOR)
return -1;
@@ -181,17 +183,14 @@ ROCPROFILER_EXPORT void rocprofiler_plugin_finalize() {
att_plugin = nullptr;
}
ROCPROFILER_EXPORT int rocprofiler_plugin_write_buffer_records(const rocprofiler_record_header_t* begin,
const rocprofiler_record_header_t* end,
rocprofiler_session_id_t session_id,
rocprofiler_buffer_id_t buffer_id) {
ROCPROFILER_EXPORT int rocprofiler_plugin_write_buffer_records(
const rocprofiler_record_header_t* begin, const rocprofiler_record_header_t* end,
rocprofiler_session_id_t session_id, rocprofiler_buffer_id_t buffer_id) {
if (!att_plugin || !att_plugin->IsValid()) return -1;
return att_plugin->WriteBufferRecords(begin, end, session_id, buffer_id);
}
ROCPROFILER_EXPORT int rocprofiler_plugin_write_record(
rocprofiler_record_tracer_t record,
rocprofiler_plugin_tracer_extra_data_t tracer_extra_data) {
ROCPROFILER_EXPORT int rocprofiler_plugin_write_record(rocprofiler_record_tracer_t record) {
if (!att_plugin || !att_plugin->IsValid()) return -1;
if (record.header.id.handle == 0) return 0;
return 0;
+2 -3
Wyświetl plik
@@ -88,8 +88,7 @@ ROCPROFILER_EXPORT int rocprofiler_plugin_write_buffer_records(
return 0;
}
ROCPROFILER_EXPORT int rocprofiler_plugin_write_record(
const rocprofiler_record_tracer_t record, rocprofiler_plugin_tracer_extra_data_t tracer_data) {
ROCPROFILER_EXPORT int rocprofiler_plugin_write_record(const rocprofiler_record_tracer_t record) {
assert(the_plugin);
if (record.header.id.handle == 0) {
@@ -97,7 +96,7 @@ ROCPROFILER_EXPORT int rocprofiler_plugin_write_record(
}
try {
the_plugin->HandleTracerRecord(record, rocprofiler_session_id_t{0}, tracer_data);
the_plugin->HandleTracerRecord(record, rocprofiler_session_id_t{0});
} catch (const std::exception& exc) {
std::cerr << "rocprofiler_plugin_write_record(): " << exc.what() << std::endl;
return -1;
+4 -7
Wyświetl plik
@@ -630,8 +630,7 @@ Plugin::Plugin(const std::size_t packet_size, const fs::path& trace_dir,
}
void Plugin::HandleTracerRecord(const rocprofiler_record_tracer_t& record,
const rocprofiler_session_id_t session_id,
rocprofiler_plugin_tracer_extra_data_t tracer_data) {
const rocprofiler_session_id_t session_id) {
std::lock_guard<std::mutex> lock{lock_};
// Depending on the domain, create and add an event record to the
@@ -668,8 +667,8 @@ void Plugin::HandleTracerRecord(const rocprofiler_record_tracer_t& record,
std::string kernel_name;
hip_api_data_t hip_api_data =
*reinterpret_cast<const hip_api_data_t*>(record.api_data_handle.handle);
if (tracer_data.kernel_name != nullptr)
kernel_name = rocmtools::cxx_demangle(std::string(tracer_data.kernel_name));
if (record.name != nullptr)
kernel_name = rocmtools::cxx_demangle(std::string(record.name));
else
kernel_name = "";
hip_api_tracer_.AddEventRecord(
@@ -708,9 +707,7 @@ void Plugin::HandleBufferRecords(const rocprofiler_record_header_t* begin,
const rocprofiler_buffer_id_t buffer_id) {
while (begin && begin < end) {
if (begin->kind == ROCPROFILER_TRACER_RECORD) {
rocprofiler_plugin_tracer_extra_data_t tracer_data = {};
HandleTracerRecord(*reinterpret_cast<const rocprofiler_record_tracer_t*>(begin), session_id,
tracer_data);
HandleTracerRecord(*reinterpret_cast<const rocprofiler_record_tracer_t*>(begin), session_id);
} else {
assert(begin->kind == ROCPROFILER_PROFILER_RECORD);
HandleProfilerRecord(*reinterpret_cast<const rocprofiler_record_profiler_t*>(begin),
+3 -4
Wyświetl plik
@@ -54,8 +54,7 @@ class Plugin final {
// Handles a tracer record.
void HandleTracerRecord(const rocprofiler_record_tracer_t& record,
rocprofiler_session_id_t session_id,
rocprofiler_plugin_tracer_extra_data_t tracer_data);
rocprofiler_session_id_t session_id);
// Handles a profiler record.
@@ -65,8 +64,8 @@ class Plugin final {
// Handles tracer or profiler records from `begin` to `end`
// (excluded).
void HandleBufferRecords(const rocprofiler_record_header_t* begin,
const rocprofiler_record_header_t* end, rocprofiler_session_id_t session_id,
rocprofiler_buffer_id_t buffer_id);
const rocprofiler_record_header_t* end,
rocprofiler_session_id_t session_id, rocprofiler_buffer_id_t buffer_id);
private:
// rocTX barectf platform descriptor.
+49 -60
Wyświetl plik
@@ -198,46 +198,53 @@ class file_plugin_t {
void FlushTracerRecord(rocprofiler_record_tracer_t tracer_record,
rocprofiler_session_id_t session_id,
rocprofiler_plugin_tracer_extra_data_t tracer_extra_data,
rocprofiler_buffer_id_t buffer_id = rocprofiler_buffer_id_t{0}){
rocprofiler_buffer_id_t buffer_id = rocprofiler_buffer_id_t{0}) {
std::lock_guard<std::mutex> lock(writing_lock);
if (tracer_record.timestamps.end.value <= 0 && tracer_record.domain != ACTIVITY_DOMAIN_ROCTX)
return;
std::string kernel_name;
std::string function_name;
std::string roctx_message;
uint64_t roctx_id;
if ((tracer_record.operation_id.id == 0 && tracer_record.domain == ACTIVITY_DOMAIN_HIP_OPS)) {
if (tracer_record.api_data_handle.handle &&
strlen(reinterpret_cast<const char*>(tracer_record.api_data_handle.handle)) > 1)
kernel_name = rocmtools::cxx_demangle(
reinterpret_cast<const char*>(tracer_record.api_data_handle.handle));
if (tracer_record.name) {
if (tracer_record.domain == ACTIVITY_DOMAIN_HIP_API)
kernel_name = rocmtools::cxx_demangle(tracer_record.name);
if (tracer_record.domain == ACTIVITY_DOMAIN_ROCTX) roctx_message = tracer_record.name;
}
size_t function_name_size = 0;
char* function_name_c = nullptr;
if (tracer_record.domain == ACTIVITY_DOMAIN_HSA_API) {
if (tracer_extra_data.function_name)
function_name = std::string(tracer_extra_data.function_name);
CHECK_ROCPROFILER(rocprofiler_query_hsa_tracer_api_data_info_size(
rocprofiler_session_id_t{0}, ROCPROFILER_HSA_FUNCTION_NAME, tracer_record.api_data_handle,
tracer_record.operation_id, &function_name_size));
function_name_c = new char[function_name_size];
if (function_name_size > 1) {
CHECK_ROCPROFILER(rocprofiler_query_hsa_tracer_api_data_info(
rocprofiler_session_id_t{0}, ROCPROFILER_HSA_FUNCTION_NAME,
tracer_record.api_data_handle, tracer_record.operation_id, &function_name_c));
}
}
if (tracer_record.domain == ACTIVITY_DOMAIN_HIP_API) {
if (tracer_extra_data.kernel_name)
kernel_name = rocmtools::cxx_demangle(std::string(tracer_extra_data.kernel_name));
if(tracer_extra_data.function_name)
function_name = std::string(tracer_extra_data.function_name);
CHECK_ROCPROFILER(rocprofiler_query_hip_tracer_api_data_info_size(
rocprofiler_session_id_t{0}, ROCPROFILER_HIP_FUNCTION_NAME, tracer_record.api_data_handle,
tracer_record.operation_id, &function_name_size));
if (function_name_size > 1) {
CHECK_ROCPROFILER(rocprofiler_query_hip_tracer_api_data_info(
rocprofiler_session_id_t{0}, ROCPROFILER_HIP_FUNCTION_NAME,
tracer_record.api_data_handle, tracer_record.operation_id, &function_name_c));
}
}
if (tracer_record.domain == ACTIVITY_DOMAIN_ROCTX) {
const char* roctx_msg = reinterpret_cast<const char*>(tracer_record.api_data_handle.handle);
if(roctx_msg)
roctx_message = rocmtools::cxx_demangle(std::string(roctx_msg));
roctx_id = tracer_record.operation_id.id;
}
// return;
output_file_t* output_file = get_output_file(output_type_t::TRACER, tracer_record.domain);
*output_file << "Record(" << tracer_record.header.id.handle << "), Domain("
<< GetDomainName(tracer_record.domain) << "),";
if (tracer_record.domain == ACTIVITY_DOMAIN_ROCTX && roctx_id >= 0)
*output_file << " ROCTX_ID(" << roctx_id << "),";
if (tracer_record.domain == ACTIVITY_DOMAIN_ROCTX && roctx_message.size() > 1)
*output_file << " ROCTX_Message(" << roctx_message << "),";
if (function_name.size() > 1) *output_file << " Function(" << function_name << "),";
*output_file << " ROCTX_ID(" << tracer_record.operation_id.id << "),";
if (tracer_record.domain == ACTIVITY_DOMAIN_ROCTX && tracer_record.name)
*output_file << " ROCTX_Message(" << reinterpret_cast<const char*>(tracer_record.name)
<< "),";
if (function_name_c) *output_file << " Function(" << function_name_c << "),";
if (kernel_name.size() > 1) *output_file << " Kernel_Name(" << kernel_name.c_str() << "),";
if (tracer_record.domain == ACTIVITY_DOMAIN_HSA_OPS || tracer_record.domain == ACTIVITY_DOMAIN_HIP_OPS) {
if (tracer_record.domain == ACTIVITY_DOMAIN_HSA_OPS ||
tracer_record.domain == ACTIVITY_DOMAIN_HIP_OPS) {
switch (tracer_record.operation_id.id) {
case 0:
*output_file << " Operation(DISPATCH_OP),";
@@ -252,27 +259,12 @@ class file_plugin_t {
break;
}
}
if (tracer_record.phase == ROCPROFILER_PHASE_NONE) {
if (tracer_record.domain == ACTIVITY_DOMAIN_ROCTX) {
*output_file << " timestamp(" << tracer_record.timestamps.begin.value << "),";
} else if (tracer_record.phase == ROCPROFILER_PHASE_EXIT ||
tracer_record.phase == ROCPROFILER_PHASE_NONE) {
*output_file << " Begin(" << tracer_record.timestamps.begin.value << "), End("
<< tracer_record.timestamps.end.value << "),";
} else {
if (tracer_record.phase == ROCPROFILER_PHASE_ENTER &&
tracer_record.domain != ACTIVITY_DOMAIN_ROCTX) {
rocprofiler_timestamp_t timestamp;
rocprofiler_get_timestamp(&timestamp);
*output_file << " Begin(" << timestamp.value << "),";
}
if (tracer_record.phase == ROCPROFILER_PHASE_ENTER &&
tracer_record.domain == ACTIVITY_DOMAIN_ROCTX) {
rocprofiler_timestamp_t timestamp;
rocprofiler_get_timestamp(&timestamp);
*output_file << " timestamp(" << timestamp.value << "),";
}
if (tracer_record.phase == ROCPROFILER_PHASE_EXIT) {
rocprofiler_timestamp_t timestamp;
rocprofiler_get_timestamp(&timestamp);
*output_file << " End(" << timestamp.value << "),";
}
}
*output_file << " Correlation_ID(" << tracer_record.correlation_id.value << ")";
*output_file << std::endl;
@@ -382,11 +374,9 @@ class file_plugin_t {
break;
}
case ROCPROFILER_TRACER_RECORD: {
rocprofiler_plugin_tracer_extra_data_t tracer_extra_data;
tracer_extra_data.function_name = nullptr;
rocprofiler_record_tracer_t* tracer_record = const_cast<rocprofiler_record_tracer_t*>(
reinterpret_cast<const rocprofiler_record_tracer_t*>(begin));
FlushTracerRecord(*tracer_record, session_id, tracer_extra_data, buffer_id);
FlushTracerRecord(*tracer_record, session_id, buffer_id);
break;
}
case ROCPROFILER_ATT_TRACER_RECORD: {
@@ -406,16 +396,16 @@ class file_plugin_t {
return 0;
}
bool is_valid() const { return valid_; }
bool is_valid() const { return valid_; }
private:
bool valid_{false};
private:
bool valid_{false};
output_file_t roctx_file_{"roctx_trace.txt"}, hsa_api_file_{"hsa_api_trace.txt"},
hip_api_file_{"hip_api_trace.txt"}, hip_activity_file_{"hcc_ops_trace.txt"},
hsa_async_copy_file_{"async_copy_trace.txt"}, pc_sample_file_{"pcs_trace.txt"},
output_file_{"results.txt"};
};
output_file_t roctx_file_{"roctx_trace.txt"}, hsa_api_file_{"hsa_api_trace.txt"},
hip_api_file_{"hip_api_trace.txt"}, hip_activity_file_{"hcc_ops_trace.txt"},
hsa_async_copy_file_{"async_copy_trace.txt"}, pc_sample_file_{"pcs_trace.txt"},
output_file_{"results.txt"};
};
file_plugin_t* file_plugin = nullptr;
@@ -432,7 +422,7 @@ ROCPROFILER_EXPORT int rocprofiler_plugin_initialize(uint32_t rocprofiler_major_
file_plugin = new file_plugin_t();
if (file_plugin->is_valid()) return 0;
// The plugin failed to initialied, destroy it and return an error.
// The plugin failed to initialized, destroy it and return an error.
delete file_plugin;
file_plugin = nullptr;
return -1;
@@ -451,10 +441,9 @@ ROCPROFILER_EXPORT int rocprofiler_plugin_write_buffer_records(
return file_plugin->WriteBufferRecords(begin, end, session_id, buffer_id);
}
ROCPROFILER_EXPORT int rocprofiler_plugin_write_record(rocprofiler_record_tracer_t record,
rocprofiler_plugin_tracer_extra_data_t tracer_extra_data){
ROCPROFILER_EXPORT int rocprofiler_plugin_write_record(rocprofiler_record_tracer_t record) {
if (!file_plugin || !file_plugin->is_valid()) return -1;
if (record.header.id.handle == 0) return 0;
file_plugin->FlushTracerRecord(record, rocprofiler_session_id_t{0}, tracer_extra_data, rocprofiler_buffer_id_t{0});
file_plugin->FlushTracerRecord(record, rocprofiler_session_id_t{0}, rocprofiler_buffer_id_t{0});
return 0;
}
+68 -83
Wyświetl plik
@@ -73,15 +73,15 @@ static std::string output_file_name;
std::string get_kernel_name(rocprofiler_record_profiler_t& profiler_record) {
std::string kernel_name = "";
size_t name_length = 1;
CHECK_ROCPROFILER(rocprofiler_query_kernel_info_size(ROCPROFILER_KERNEL_NAME, profiler_record.kernel_id,
&name_length));
CHECK_ROCPROFILER(rocprofiler_query_kernel_info_size(ROCPROFILER_KERNEL_NAME,
profiler_record.kernel_id, &name_length));
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#pragma GCC diagnostic ignored "-Wstringop-overread"
if (name_length > 1) {
const char* kernel_name_c = nullptr;
CHECK_ROCPROFILER(rocprofiler_query_kernel_info(ROCPROFILER_KERNEL_NAME, profiler_record.kernel_id,
&kernel_name_c));
CHECK_ROCPROFILER(rocprofiler_query_kernel_info(ROCPROFILER_KERNEL_NAME,
profiler_record.kernel_id, &kernel_name_c));
if (kernel_name_c && strlen(kernel_name_c) > 1)
kernel_name = rocmtools::cxx_demangle(strdup(kernel_name_c));
}
@@ -323,9 +323,9 @@ class perfetto_plugin_t {
&name_length));
if (name_length > 1) {
const char* name_c = nullptr;
CHECK_ROCPROFILER(
rocprofiler_query_counter_info(session_id, ROCPROFILER_COUNTER_NAME,
profiler_record.counters[i].counter_handler, &name_c));
CHECK_ROCPROFILER(rocprofiler_query_counter_info(
session_id, ROCPROFILER_COUNTER_NAME, profiler_record.counters[i].counter_handler,
&name_c));
perfetto::CounterTrack counters_track = get_counter_track_fn(std::string(name_c));
TRACE_COUNTER("COUNTERS", counters_track, profiler_record.timestamps.begin.value,
@@ -340,9 +340,8 @@ class perfetto_plugin_t {
return 0;
}
int FlushTracerRecord(rocprofiler_record_tracer_t tracer_record,
rocprofiler_session_id_t session_id,
rocprofiler_plugin_tracer_extra_data_t tracer_extra_data) {
int FlushTracerRecord(rocprofiler_record_tracer_t tracer_record,
rocprofiler_session_id_t session_id) {
std::lock_guard<std::mutex> lock(writing_lock);
if (!tracing_session_) rocmtools::warning("Tracing session is deleted!\n");
std::string kernel_name;
@@ -426,34 +425,17 @@ int FlushTracerRecord(rocprofiler_record_tracer_t tracer_record,
}
auto& roctx_track = roctx_track_it->second;
roctx_id = tracer_record.operation_id.id;
if (reinterpret_cast<const char*>(tracer_record.api_data_handle.handle))
roctx_message = std::string(reinterpret_cast<const char*>(tracer_record.api_data_handle.handle));
if (tracer_record.phase == ROCPROFILER_PHASE_NONE) {
if (tracer_record.operation_id.id == 1) {
perfetto::StaticString roctx_message_pft(
(!roctx_message.empty() ? roctx_message.c_str() : ""));
TRACE_EVENT_BEGIN("ROCTX_API", roctx_message_pft, roctx_track,
tracer_record.timestamps.begin.value, "Timestamp(ns)",
tracer_record.timestamps.begin.value, "RocTx ID", roctx_id);
roctx_track_entries_++;
} else {
TRACE_EVENT_END("ROCTX_API", roctx_track, tracer_record.timestamps.begin.value);
roctx_track_entries_--;
}
roctx_message = std::string(reinterpret_cast<const char*>(tracer_record.name));
if (tracer_record.operation_id.id == 1) {
perfetto::StaticString roctx_message_pft(
(!roctx_message.empty() ? roctx_message.c_str() : ""));
TRACE_EVENT_BEGIN("ROCTX_API", roctx_message_pft, roctx_track,
tracer_record.timestamps.begin.value, "Timestamp(ns)",
tracer_record.timestamps.begin.value, "RocTx ID", roctx_id);
roctx_track_entries_++;
} else {
rocprofiler_timestamp_t timestamp;
rocprofiler_get_timestamp(&timestamp);
if (tracer_record.operation_id.id == 1) {
perfetto::StaticString roctx_message_pft(
(!roctx_message.empty() ? roctx_message.c_str() : ""));
TRACE_EVENT_BEGIN("ROCTX_API", roctx_message_pft, roctx_track, timestamp.value,
"Timestamp(ns)", timestamp.value, "RocTx ID", roctx_id);
roctx_track_entries_++;
} else {
TRACE_EVENT_END("ROCTX_API", roctx_track, timestamp.value);
roctx_track_entries_--;
}
TRACE_EVENT_END("ROCTX_API", roctx_track, tracer_record.timestamps.begin.value);
roctx_track_entries_--;
}
break;
}
@@ -481,16 +463,31 @@ int FlushTracerRecord(rocprofiler_record_tracer_t tracer_record,
}
}
auto& hsa_track = hsa_track_it->second;
function_name = tracer_extra_data.function_name;
rocprofiler_timestamp_t timestamp;
rocprofiler_get_timestamp(&timestamp);
size_t function_name_size;
CHECK_ROCPROFILER(rocprofiler_query_hsa_tracer_api_data_info_size(
rocprofiler_session_id_t{0}, ROCPROFILER_HSA_FUNCTION_NAME,
tracer_record.api_data_handle, tracer_record.operation_id, &function_name_size));
if (function_name_size > 1) {
char* function_name_str = new char[function_name_size];
CHECK_ROCPROFILER(rocprofiler_query_hsa_tracer_api_data_info(
rocprofiler_session_id_t{0}, ROCPROFILER_HSA_FUNCTION_NAME,
tracer_record.api_data_handle, tracer_record.operation_id, &function_name_str));
function_name = function_name_str;
} else {
function_name = "Unknown";
}
if (tracer_record.phase == ROCPROFILER_PHASE_ENTER)
TRACE_EVENT_BEGIN("HSA_API", perfetto::StaticString(function_name), hsa_track,
timestamp.value,
tracer_record.timestamps.begin.value,
perfetto::Flow::ProcessScoped(tracer_record.correlation_id.value));
if (tracer_record.phase == ROCPROFILER_PHASE_EXIT)
TRACE_EVENT_END("HSA_API", hsa_track, timestamp.value);
TRACE_EVENT_END("HSA_API", hsa_track, tracer_record.timestamps.end.value);
if (tracer_record.phase == ROCPROFILER_PHASE_NONE) {
TRACE_EVENT_BEGIN("HSA_API", perfetto::StaticString(function_name), hsa_track,
tracer_record.timestamps.begin.value,
perfetto::Flow::ProcessScoped(tracer_record.correlation_id.value));
TRACE_EVENT_END("HSA_API", hsa_track, tracer_record.timestamps.end.value);
}
break;
}
case ACTIVITY_DOMAIN_HIP_API: {
@@ -518,25 +515,32 @@ int FlushTracerRecord(rocprofiler_record_tracer_t tracer_record,
}
}
auto& hip_track = hip_track_it->second;
function_name = tracer_extra_data.function_name;
if (tracer_extra_data.kernel_name != nullptr)
kernel_name = std::string(tracer_extra_data.kernel_name);
rocprofiler_timestamp_t timestamp;
rocprofiler_get_timestamp(&timestamp);
size_t function_name_size;
CHECK_ROCPROFILER(rocprofiler_query_hip_tracer_api_data_info_size(
rocprofiler_session_id_t{0}, ROCPROFILER_HIP_FUNCTION_NAME,
tracer_record.api_data_handle, tracer_record.operation_id, &function_name_size));
if (function_name_size > 1) {
char* function_name_str = new char[function_name_size];
CHECK_ROCPROFILER(rocprofiler_query_hip_tracer_api_data_info(
rocprofiler_session_id_t{0}, ROCPROFILER_HIP_FUNCTION_NAME,
tracer_record.api_data_handle, tracer_record.operation_id, &function_name_str));
function_name = function_name_str;
} else {
function_name = "Unknown";
}
if (tracer_record.phase == ROCPROFILER_PHASE_ENTER) {
if (kernel_name.size() > 0) {
TRACE_EVENT_BEGIN("HIP_API", perfetto::StaticString(function_name), hip_track,
timestamp.value, "Kernel Name", kernel_name,
tracer_record.timestamps.begin.value, "Kernel Name", kernel_name,
perfetto::Flow::ProcessScoped(tracer_record.correlation_id.value));
} else {
TRACE_EVENT_BEGIN("HIP_API", perfetto::StaticString(function_name), hip_track,
timestamp.value,
tracer_record.timestamps.begin.value,
perfetto::Flow::ProcessScoped(tracer_record.correlation_id.value));
}
}
if (tracer_record.phase == ROCPROFILER_PHASE_EXIT) {
TRACE_EVENT_END("HIP_API", hip_track, timestamp.value);
TRACE_EVENT_END("HIP_API", hip_track, tracer_record.timestamps.end.value);
}
if (tracer_record.phase == ROCPROFILER_PHASE_NONE) {
if (kernel_name.size() > 0) {
@@ -560,21 +564,6 @@ int FlushTracerRecord(rocprofiler_record_tracer_t tracer_record,
// TODO(aelwazir): Stream ID is removed from the API processing.
// Waiting for better implementation to get the stream id.
uint64_t stream_id = 0;
// size_t stream_id_str_size = 0;
// char* stream_id_str;
// CHECK_ROCPROFILER(rocprofiler_query_hip_tracer_api_data_info_size(
// session_id, ROCPROFILER_HIP_STREAM_ID, rocprofiler_tracer_api_data_handle_t{nullptr,
// 0}, rocprofiler_tracer_operation_id_t{(uint32_t)tracer_record.correlation_id.value},
// &stream_id_str_size));
// if (stream_id_str_size > 1) {
// stream_id_str = static_cast<char*>(malloc(stream_id_str_size * sizeof(char)));
// CHECK_ROCPROFILER(rocprofiler_query_hip_tracer_api_data_info(
// session_id, ROCPROFILER_HIP_STREAM_ID,
// rocprofiler_tracer_api_data_handle_t{nullptr, 0},
// rocprofiler_tracer_operation_id_t{(uint32_t)tracer_record.correlation_id.value},
// &stream_id_str));
// if (stream_id_str != nullptr) stream_id = std::stoll(stream_id_str);
// }
std::unordered_map<int, perfetto::Track>::iterator stream_track_it;
{
std::lock_guard<std::mutex> lock(stream_tracks_lock_);
@@ -689,24 +678,23 @@ int FlushTracerRecord(rocprofiler_record_tracer_t tracer_record,
}
int WriteBufferRecords(const rocprofiler_record_header_t* begin,
const rocprofiler_record_header_t* end, rocprofiler_session_id_t session_id,
rocprofiler_buffer_id_t buffer_id) {
const rocprofiler_record_header_t* end,
rocprofiler_session_id_t session_id, rocprofiler_buffer_id_t buffer_id) {
if (!tracing_session_) rocmtools::warning("Tracing session is deleted!\n");
while (begin < end) {
if (!begin) return 0;
switch (begin->kind) {
case ROCPROFILER_PROFILER_RECORD: {
rocprofiler_record_profiler_t* profiler_record = const_cast<rocprofiler_record_profiler_t*>(
reinterpret_cast<const rocprofiler_record_profiler_t*>(begin));
rocprofiler_record_profiler_t* profiler_record =
const_cast<rocprofiler_record_profiler_t*>(
reinterpret_cast<const rocprofiler_record_profiler_t*>(begin));
FlushProfilerRecord(*profiler_record, session_id);
break;
}
case ROCPROFILER_TRACER_RECORD: {
rocprofiler_plugin_tracer_extra_data_t tracer_extra_data;
tracer_extra_data.function_name = nullptr;
rocprofiler_record_tracer_t* tracer_record = const_cast<rocprofiler_record_tracer_t*>(
reinterpret_cast<const rocprofiler_record_tracer_t*>(begin));
FlushTracerRecord(*tracer_record, session_id, tracer_extra_data);
FlushTracerRecord(*tracer_record, session_id);
break;
}
default:
@@ -758,7 +746,7 @@ perfetto_plugin_t* perfetto_plugin = nullptr;
} // namespace
int rocprofiler_plugin_initialize(uint32_t rocprofiler_major_version,
uint32_t rocprofiler_minor_version) {
uint32_t rocprofiler_minor_version) {
if (rocprofiler_major_version != ROCPROFILER_VERSION_MAJOR ||
rocprofiler_minor_version > ROCPROFILER_VERSION_MINOR)
return -1;
@@ -779,19 +767,16 @@ void rocprofiler_plugin_finalize() {
perfetto_plugin = nullptr;
}
ROCPROFILER_EXPORT int rocprofiler_plugin_write_buffer_records(const rocprofiler_record_header_t* begin,
const rocprofiler_record_header_t* end,
rocprofiler_session_id_t session_id,
rocprofiler_buffer_id_t buffer_id) {
ROCPROFILER_EXPORT int rocprofiler_plugin_write_buffer_records(
const rocprofiler_record_header_t* begin, const rocprofiler_record_header_t* end,
rocprofiler_session_id_t session_id, rocprofiler_buffer_id_t buffer_id) {
if (!perfetto_plugin || !perfetto_plugin->IsValid()) return -1;
return perfetto_plugin->WriteBufferRecords(begin, end, session_id, buffer_id);
}
ROCPROFILER_EXPORT int rocprofiler_plugin_write_record(
rocprofiler_record_tracer_t record,
rocprofiler_plugin_tracer_extra_data_t tracer_extra_data) {
ROCPROFILER_EXPORT int rocprofiler_plugin_write_record(rocprofiler_record_tracer_t record) {
if (!perfetto_plugin || !perfetto_plugin->IsValid()) return -1;
if (record.header.id.handle == 0) return 0;
perfetto_plugin->FlushTracerRecord(record, rocprofiler_session_id_t{0}, tracer_extra_data);
perfetto_plugin->FlushTracerRecord(record, rocprofiler_session_id_t{0});
return 0;
}
+13 -5
Wyświetl plik
@@ -323,10 +323,12 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_query_hsa_tracer_api_data_info_
// throw rocmtools::Exception(ROCPROFILER_STATUS_ERROR_TRACER_API_DATA_NOT_FOUND);
// }
// }
*data_size = rocmtools::GetROCMToolObj()
*data_size = ((kind == ROCPROFILER_HSA_FUNCTION_NAME)
? rocmtools::tracer::GetApiCallFunctionNameSize(ACTIVITY_DOMAIN_HSA_API, operation_id)
: rocmtools::GetROCMToolObj()
->GetSession(session_id)
->GetTracer()
->GetHSAApiDataInfoSize(kind, api_data_id, operation_id);
->GetHSAApiDataInfoSize(kind, api_data_id, operation_id));
if (*data_size <= 0)
throw rocmtools::Exception(ROCPROFILER_STATUS_ERROR_TRACER_API_DATA_INFORMATION_MISSING);
API_METHOD_SUFFIX
@@ -355,7 +357,9 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_query_hsa_tracer_api_data_info(
// throw rocmtools::Exception(ROCPROFILER_STATUS_ERROR_TRACER_API_DATA_NOT_FOUND);
// }
// }
if (!(*data = rocmtools::GetROCMToolObj()
if (!(*data = (kind == ROCPROFILER_HSA_FUNCTION_NAME)
? rocmtools::tracer::GetApiCallFunctionName(ACTIVITY_DOMAIN_HSA_API, operation_id)
: rocmtools::GetROCMToolObj()
->GetSession(session_id)
->GetTracer()
->GetHSAApiDataInfo(kind, api_data_id, operation_id)))
@@ -386,7 +390,9 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_query_hip_tracer_api_data_info_
// throw rocmtools::Exception(ROCPROFILER_STATUS_ERROR_TRACER_API_DATA_NOT_FOUND);
// }
// }
*data_size = rocmtools::GetROCMToolObj()
*data_size = (kind == ROCPROFILER_HIP_FUNCTION_NAME)
? rocmtools::tracer::GetApiCallFunctionNameSize(ACTIVITY_DOMAIN_HIP_API, operation_id)
: rocmtools::GetROCMToolObj()
->GetSession(session_id)
->GetTracer()
->GetHIPApiDataInfoSize(kind, api_data_id, operation_id);
@@ -419,7 +425,9 @@ ROCPROFILER_API rocprofiler_status_t rocprofiler_query_hip_tracer_api_data_info(
// }
// }
// if (!(
*data = rocmtools::GetROCMToolObj()
*data = (kind == ROCPROFILER_HIP_FUNCTION_NAME)
? rocmtools::tracer::GetApiCallFunctionName(ACTIVITY_DOMAIN_HIP_API, operation_id)
: rocmtools::GetROCMToolObj()
->GetSession(session_id)
->GetTracer()
->GetHIPApiDataInfo(kind, api_data_id, operation_id);
+32 -20
Wyświetl plik
@@ -19,6 +19,16 @@
namespace rocmtools {
namespace tracer {
char* GetApiCallFunctionName(rocprofiler_tracer_activity_domain_t domain,
rocprofiler_tracer_operation_id_t operation_id) {
return const_cast<char*>(roctracer_op_string(domain, operation_id.id));
}
size_t GetApiCallFunctionNameSize(rocprofiler_tracer_activity_domain_t domain,
rocprofiler_tracer_operation_id_t operation_id) {
return std::string(const_cast<char*>(roctracer_op_string(domain, operation_id.id))).size();
}
std::mutex stream_ids_map_lock;
std::map<uint64_t, std::pair<uint64_t, uint64_t>> stream_ids;
std::map<uint64_t, uint64_t> used_stream_ids;
@@ -236,6 +246,7 @@ char* Tracer::GetHSAApiDataInfo(rocprofiler_tracer_hsa_api_data_info_t kind,
}
return nullptr;
}
char* Tracer::GetHIPApiDataInfo(rocprofiler_tracer_hip_api_data_info_t kind,
rocprofiler_tracer_api_data_handle_t api_data_id,
rocprofiler_tracer_operation_id_t operation_id) {
@@ -294,7 +305,7 @@ void api_callback(activity_domain_t domain, uint32_t cid, const void* callback_d
rocprofiler_tracer_api_data_handle_t{callback_data, sizeof(*data)},
rocprofiler_tracer_activity_correlation_id_t{0},
rocprofiler_record_header_timestamp_t{roctracer::hsa_support::timestamp_ns(),
rocprofiler_timestamp_t{0}},
rocprofiler_timestamp_t{0}},
0, 0, GetTid(), ROCPROFILER_PHASE_ENTER},
args_data->session_id);
break;
@@ -312,7 +323,8 @@ void api_callback(activity_domain_t domain, uint32_t cid, const void* callback_d
rocprofiler_tracer_operation_id_t{cid},
rocprofiler_tracer_api_data_handle_t{callback_data, sizeof(*data)},
rocprofiler_tracer_activity_correlation_id_t{data->correlation_id},
rocprofiler_record_header_timestamp_t{rocprofiler_timestamp_t{0}, rocprofiler_timestamp_t{0}},
rocprofiler_record_header_timestamp_t{rocprofiler_timestamp_t{0},
rocprofiler_timestamp_t{0}},
0, 0, GetTid(), ROCPROFILER_PHASE_ENTER},
args_data->session_id);
} else {
@@ -326,7 +338,7 @@ void api_callback(activity_domain_t domain, uint32_t cid, const void* callback_d
rocprofiler_tracer_api_data_handle_t{callback_data, sizeof(*data)},
rocprofiler_tracer_activity_correlation_id_t{data->correlation_id},
rocprofiler_record_header_timestamp_t{rocprofiler_timestamp_t{0},
rocprofiler_timestamp_t{0}},
rocprofiler_timestamp_t{0}},
0, 0, GetTid(), ROCPROFILER_PHASE_EXIT},
args_data->session_id);
}
@@ -346,7 +358,7 @@ void api_callback(activity_domain_t domain, uint32_t cid, const void* callback_d
rocprofiler_tracer_api_data_handle_t{callback_data, sizeof(*data)},
rocprofiler_tracer_activity_correlation_id_t{data->correlation_id},
rocprofiler_record_header_timestamp_t{rocprofiler_timestamp_t{0},
rocprofiler_timestamp_t{0}},
rocprofiler_timestamp_t{0}},
0, 0, GetTid(), ROCPROFILER_PHASE_ENTER},
args_data->session_id);
} else {
@@ -358,17 +370,15 @@ void api_callback(activity_domain_t domain, uint32_t cid, const void* callback_d
// uint64_t stream_id = 0;
// if (start >= 0) {
// int end = hip_api_data_string.find(",", start);
// std::string stream_id_str = hip_api_data_string.substr(start + start_str.length(), end);
// std::stringstream ss;
// ss << std::hex << stream_id_str;
// ss >> stream_id;
// std::string stream_id_str = hip_api_data_string.substr(start + start_str.length(),
// end); std::stringstream ss; ss << std::hex << stream_id_str; ss >> stream_id;
// }
// {
// std::lock_guard<std::mutex> lock(stream_ids_map_lock);
// if (used_stream_ids.find(stream_id) == used_stream_ids.end()) {
// uint64_t stream_generated_id = stream_count.fetch_add(1, std::memory_order_release);
// used_stream_ids.emplace(stream_id, stream_generated_id);
// stream_ids.emplace(data->correlation_id,
// uint64_t stream_generated_id = stream_count.fetch_add(1,
// std::memory_order_release); used_stream_ids.emplace(stream_id,
// stream_generated_id); stream_ids.emplace(data->correlation_id,
// std::make_pair(stream_id, stream_generated_id));
// } else {
// stream_ids.emplace(data->correlation_id,
@@ -385,7 +395,7 @@ void api_callback(activity_domain_t domain, uint32_t cid, const void* callback_d
rocprofiler_tracer_api_data_handle_t{callback_data, sizeof(*data)},
rocprofiler_tracer_activity_correlation_id_t{data->correlation_id},
rocprofiler_record_header_timestamp_t{rocprofiler_timestamp_t{0},
rocprofiler_timestamp_t{0}},
rocprofiler_timestamp_t{0}},
0, 0, GetTid(), ROCPROFILER_PHASE_EXIT},
args_data->session_id);
}
@@ -404,20 +414,21 @@ void Tracer::InitRoctracer(
switch (domain.first) {
case ACTIVITY_DOMAIN_ROCTX: {
assert(!domain.second && "Error: ROCTX API can't be filtered!");
if(callback_data_.user_sync_callback)
if (callback_data_.user_sync_callback)
roctracer_enable_domain_callback(ACTIVITY_DOMAIN_ROCTX, api_callback, &callback_data_);
else
roctracer_enable_domain_activity(ACTIVITY_DOMAIN_ROCTX,
session_buffer_id_t{session_id_, buffer_id_});
session_buffer_id_t{session_id_, buffer_id_});
break;
}
case ACTIVITY_DOMAIN_HSA_API: {
if (!domain.second) {
if(callback_data_.user_sync_callback)
roctracer_enable_domain_callback(ACTIVITY_DOMAIN_HSA_API, api_callback, &callback_data_);
if (callback_data_.user_sync_callback)
roctracer_enable_domain_callback(ACTIVITY_DOMAIN_HSA_API, api_callback,
&callback_data_);
else
roctracer_enable_domain_activity(ACTIVITY_DOMAIN_HSA_API,
session_buffer_id_t{session_id_, buffer_id_});
session_buffer_id_t{session_id_, buffer_id_});
} else {
assert(!api_filter_data_vector.empty() &&
"Error: HSA API calls filter data is empty and domain "
@@ -427,11 +438,12 @@ void Tracer::InitRoctracer(
}
case ACTIVITY_DOMAIN_HIP_API: {
if (!domain.second) {
if(callback_data_.user_sync_callback)
roctracer_enable_domain_callback(ACTIVITY_DOMAIN_HIP_API, api_callback, &callback_data_);
if (callback_data_.user_sync_callback)
roctracer_enable_domain_callback(ACTIVITY_DOMAIN_HIP_API, api_callback,
&callback_data_);
else
roctracer_enable_domain_activity(ACTIVITY_DOMAIN_HIP_API,
session_buffer_id_t{session_id_, buffer_id_});
session_buffer_id_t{session_id_, buffer_id_});
} else {
assert(!api_filter_data_vector.empty() &&
"Error: HIP API calls filter data is empty and domain "
+10 -2
Wyświetl plik
@@ -40,11 +40,18 @@ typedef struct {
namespace rocmtools {
namespace tracer {
char* GetApiCallFunctionName(rocprofiler_tracer_activity_domain_t domain,
rocprofiler_tracer_operation_id_t operation_id);
size_t GetApiCallFunctionNameSize(rocprofiler_tracer_activity_domain_t domain,
rocprofiler_tracer_operation_id_t operation_id);
class Tracer {
public:
// Getting Buffer and/or sync callback
Tracer(rocprofiler_session_id_t session_id, rocprofiler_sync_callback_t callback,
rocprofiler_buffer_id_t buffer_id, std::vector<rocprofiler_tracer_activity_domain_t> domains);
rocprofiler_buffer_id_t buffer_id,
std::vector<rocprofiler_tracer_activity_domain_t> domains);
~Tracer();
rocprofiler_tracer_api_data_handle_t AddROCTxApiData(std::string api_data);
@@ -87,7 +94,8 @@ class Tracer {
private:
std::atomic<bool> is_active_{false};
std::atomic<bool> roctracer_initiated_{false};
std::atomic<int (*)(rocprofiler_tracer_activity_domain_t domain, uint32_t operation_id, void* data)>
std::atomic<int (*)(rocprofiler_tracer_activity_domain_t domain, uint32_t operation_id,
void* data)>
roctx_report_activity_;
std::vector<rocprofiler_tracer_activity_domain_t> domains_;
+116 -132
Wyświetl plik
@@ -62,9 +62,10 @@
namespace fs = std::experimental::filesystem;
// Macro to check ROCProfiler calls status
#define CHECK_ROCPROFILER(call) \
#define CHECK_ROCPROFILER(call) \
do { \
if ((call) != ROCPROFILER_STATUS_SUCCESS) rocmtools::fatal("Error: ROCProfiler API Call Error!"); \
if ((call) != ROCPROFILER_STATUS_SUCCESS) \
rocmtools::fatal("Error: ROCProfiler API Call Error!"); \
} while (false)
TRACE_BUFFER_INSTANTIATE();
namespace {
@@ -126,7 +127,8 @@ class rocprofiler_plugin_t {
assert(is_valid());
return rocprofiler_plugin_write_buffer_records_(std::forward<Args>(args)...);
}
private:
private:
bool valid_{false};
void* plugin_handle_;
@@ -140,83 +142,68 @@ std::optional<rocprofiler_plugin_t> plugin;
struct hsa_api_trace_entry_t {
std::atomic<uint32_t> valid;
rocprofiler_record_tracer_t record;
hsa_api_data_t* api_data;
const char* function_name;
hsa_api_trace_entry_t(rocprofiler_record_tracer_t tracer_record, const char* function_name_str,
const hsa_api_data_t* data)
hsa_api_data_t api_data;
hsa_api_trace_entry_t(rocprofiler_record_tracer_t tracer_record, const hsa_api_data_t* data)
: valid(rocprofiler::TRACE_ENTRY_INIT) {
record = tracer_record;
function_name = function_name_str ? strdup(function_name_str) : nullptr;
api_data = reinterpret_cast<hsa_api_data_t*>(malloc(sizeof(hsa_api_data_t)));
memcpy(api_data, data, sizeof(hsa_api_data_t));
record.api_data_handle.handle = api_data;
}
~hsa_api_trace_entry_t() {
if (function_name != nullptr) free(const_cast<char*>(function_name));
if (api_data != nullptr) free(const_cast<hsa_api_data_t*>(api_data));
api_data = *data;
record.api_data_handle.handle = &api_data;
}
~hsa_api_trace_entry_t() {}
};
struct roctx_trace_entry_t {
std::atomic<rocprofiler::TraceEntryState> valid;
const char* roctx_message;
rocprofiler_record_tracer_t record;
roctx_trace_entry_t(rocprofiler_record_tracer_t tracer_record, const char* roctx_message_str)
: valid(rocprofiler::TRACE_ENTRY_INIT) {
record = tracer_record;
roctx_message = roctx_message_str ? strdup(roctx_message_str) : nullptr;
record.api_data_handle.handle = roctx_message;
record.name = roctx_message_str ? strdup(roctx_message_str) : nullptr;
record.api_data_handle.handle = roctx_message_str;
}
~roctx_trace_entry_t() {
if (roctx_message != nullptr) free(const_cast<char*>(roctx_message));
if (record.name != nullptr) free(const_cast<char*>(record.name));
}
};
struct hip_api_trace_entry_t {
std::atomic<uint32_t> valid;
hip_api_data_t* api_data;
rocprofiler_record_tracer_t record;
const char* function_name;
const char* kernel_name;
union {
hip_api_data_t api_data;
};
hip_api_trace_entry_t(rocprofiler_record_tracer_t tracer_record, const char* kernel_name_str,
const char* function_name_str, const hip_api_data_t* data)
const hip_api_data_t* data)
: valid(rocprofiler::TRACE_ENTRY_INIT) {
record = tracer_record;
kernel_name = kernel_name_str ? strdup(kernel_name_str) : nullptr;
function_name = function_name_str ? strdup(function_name_str) : nullptr;
api_data = reinterpret_cast<hip_api_data_t*>(malloc(sizeof(hip_api_data_t)));
memcpy(api_data, data, sizeof(hip_api_data_t));
record.api_data_handle.handle = api_data;
api_data = *data;
record.api_data_handle.handle = &api_data;
record.name = kernel_name_str ? strdup(kernel_name_str) : nullptr;
}
~hip_api_trace_entry_t() {
if (function_name != nullptr) free(const_cast<char*>(function_name));
if (kernel_name != nullptr) free(const_cast<char*>(kernel_name));
if (api_data != nullptr) free(const_cast<hip_api_data_t*>(api_data));
if (record.name != nullptr) free(const_cast<char*>(record.name));
}
};
rocprofiler::TraceBuffer<hip_api_trace_entry_t> hip_api_buffer(
"HIP API", 0x200000, [](hip_api_trace_entry_t* entry) {
assert(plugin && "plugin is not initialized");
plugin->write_callback_record(
entry->record,
rocprofiler_plugin_tracer_extra_data_t{.function_name = entry->function_name,
.kernel_name = entry->kernel_name});
plugin->write_callback_record(entry->record);
});
rocprofiler::TraceBuffer<hsa_api_trace_entry_t> hsa_api_buffer(
"HSA API", 0x200000, [](hsa_api_trace_entry_t* entry) {
assert(plugin && "plugin is not initialized");
plugin->write_callback_record(
entry->record,
rocprofiler_plugin_tracer_extra_data_t{.function_name = entry->function_name});
plugin->write_callback_record(entry->record);
});
rocprofiler::TraceBuffer<roctx_trace_entry_t> roctx_trace_buffer(
"rocTX API", 0x200000, [](roctx_trace_entry_t* entry) {
assert(plugin && "plugin is not initialized");
plugin->write_callback_record(entry->record, rocprofiler_plugin_tracer_extra_data_t{});
plugin->write_callback_record(entry->record);
});
} // namespace
@@ -232,7 +219,7 @@ std::vector<std::string> GetCounterNames() {
const char* line_c_str = getenv("ROCPROFILER_COUNTERS");
if (line_c_str) {
std::string line = line_c_str;
//skip commented lines
// skip commented lines
auto found = line.find_first_not_of(" \t");
if (found != std::string::npos) {
if (line[found] == '#') return {};
@@ -257,10 +244,9 @@ std::vector<std::string> GetCounterNames() {
return counters;
}
typedef std::tuple<
std::vector<std::pair<rocprofiler_att_parameter_name_t, uint32_t>>,
std::vector<std::string>, std::vector<std::string>
> att_parsed_input_t;
typedef std::tuple<std::vector<std::pair<rocprofiler_att_parameter_name_t, uint32_t>>,
std::vector<std::string>, std::vector<std::string>>
att_parsed_input_t;
att_parsed_input_t GetATTParams() {
std::vector<std::pair<rocprofiler_att_parameter_name_t, uint32_t>> parameters;
@@ -282,10 +268,7 @@ att_parsed_input_t GetATTParams() {
// Default values used for token generation.
std::unordered_map<std::string, uint32_t> default_params = {
{"ATT_MASK", 0x3F01},
{"TOKEN_MASK", 0x344B},
{"TOKEN_MASK2", 0xFFFFFFF}
};
{"ATT_MASK", 0x3F01}, {"TOKEN_MASK", 0x344B}, {"TOKEN_MASK2", 0xFFFFFFF}};
bool started_att_counters = false;
@@ -300,11 +283,10 @@ att_parsed_input_t GetATTParams() {
while (getline(trace_file, line)) {
if (line.find("//") != std::string::npos)
line = line.substr(0, line.find("//")); // Remove comments
line = line.substr(0, line.find("//")); // Remove comments
auto pos = line.find('=');
if (pos == std::string::npos)
continue;
if (pos == std::string::npos) continue;
std::string param_name = line.substr(0, pos);
uint32_t param_value;
@@ -313,21 +295,21 @@ att_parsed_input_t GetATTParams() {
if (!started_att_counters) continue;
if (param_name == "KERNEL") {
kernel_names.push_back(line.substr(pos+1));
kernel_names.push_back(line.substr(pos + 1));
continue;
} else if (param_name == "PERFCOUNTER") {
counters_names.push_back(line.substr(pos+1));
counters_names.push_back(line.substr(pos + 1));
continue;
} else { // param_value is a number
} else { // param_value is a number
try {
auto hexa_pos = line.find("0x", pos); // Is it hex?
auto hexa_pos = line.find("0x", pos); // Is it hex?
if (hexa_pos != std::string::npos)
param_value = stoi(line.substr(hexa_pos+2), 0, 16); // hexadecimal
param_value = stoi(line.substr(hexa_pos + 2), 0, 16); // hexadecimal
else
param_value = stoi(line.substr(pos+1), 0, 10); // decimal
} catch(...) {
param_value = stoi(line.substr(pos + 1), 0, 10); // decimal
} catch (...) {
printf("Error: Invalid parameter value %s - (%s)\n",
line.substr(pos+1, line.size()).c_str(), line.c_str());
line.substr(pos + 1, line.size()).c_str(), line.c_str());
exit(1);
}
}
@@ -339,13 +321,13 @@ att_parsed_input_t GetATTParams() {
continue;
} else if (param_name == "SIMD_MASK") {
default_params["ATT_MASK"] &= ~0xF00;
default_params["ATT_MASK"] |= (param_value<<8) & 0xF00;
default_params["ATT_MASK"] |= (param_value << 8) & 0xF00;
continue;
} else if (param_name == "att: TARGET_CU") {
default_params["ATT_MASK"] &= ~0xF;
default_params["ATT_MASK"] |= param_value & 0xF;
} else if (param_name == "PERFCOUNTER_ID") {
param_value = param_value | (param_value ? (0xF<<24) : 0);
param_value = param_value | (param_value ? (0xF << 24) : 0);
} else if (param_name == "REDUCED_MEMORY") {
default_params["TOKEN_MASK2"] = 0;
continue;
@@ -353,11 +335,14 @@ att_parsed_input_t GetATTParams() {
if (ATT_PARAM_NAMES.find(param_name) != ATT_PARAM_NAMES.end()) {
parameters.push_back(std::make_pair(ATT_PARAM_NAMES[param_name], param_value));
try { default_params.erase(param_name); } catch(...) {};
try {
default_params.erase(param_name);
} catch (...) {
};
} else {
printf("Error: Invalid parameter name: %s - (%s)\nList of available params:\n",
param_name.c_str(), line.c_str());
for (auto& name : ATT_PARAM_NAMES) printf("%s\n", name.first.c_str());
printf("Error: Invalid parameter name: %s - (%s)\nList of available params:\n",
param_name.c_str(), line.c_str());
for (auto& name : ATT_PARAM_NAMES) printf("%s\n", name.first.c_str());
}
}
trace_file.close();
@@ -400,7 +385,7 @@ void plugins_load() {
if (Dl_info dl_info; dladdr((void*)plugins_load, &dl_info) != 0) {
const char* plugin_name = getenv("ROCPROFILER_PLUGIN_LIB");
if (plugin_name == nullptr) {
plugin_name = "libfile_plugin.so";
plugin_name = "libfile_plugin.so";
}
if (!plugin.emplace(fs::path(dl_info.dli_fname).replace_filename(plugin_name)).is_valid()) {
plugin.reset();
@@ -408,23 +393,15 @@ void plugins_load() {
}
}
/*
* A callback function for synchronous trace records.
* This function queries the api infoemation and populates the
* api_trace buffer and adds it to the trace buffer.
*/
void sync_api_trace_callback(rocprofiler_record_tracer_t tracer_record, rocprofiler_session_id_t session_id) {
* A callback function for synchronous trace records.
* This function queries the api infoemation and populates the
* api_trace buffer and adds it to the trace buffer.
*/
void sync_api_trace_callback(rocprofiler_record_tracer_t tracer_record,
rocprofiler_session_id_t session_id) {
if (tracer_record.domain == ACTIVITY_DOMAIN_HIP_API) {
size_t kernel_name_size = 0, function_name_size = 0;
char *function_name_c = nullptr, *kernel_name_c = nullptr;
CHECK_ROCPROFILER(rocprofiler_query_hip_tracer_api_data_info_size(
session_id, ROCPROFILER_HIP_FUNCTION_NAME, tracer_record.api_data_handle,
tracer_record.operation_id, &function_name_size));
if (function_name_size > 1) {
//function_name_c = (char*)malloc(function_name_size);
CHECK_ROCPROFILER(rocprofiler_query_hip_tracer_api_data_info(
session_id, ROCPROFILER_HIP_FUNCTION_NAME, tracer_record.api_data_handle,
tracer_record.operation_id, &function_name_c));
}
size_t kernel_name_size = 0;
char* kernel_name_c = nullptr;
CHECK_ROCPROFILER(rocprofiler_query_hip_tracer_api_data_info_size(
session_id, ROCPROFILER_HIP_KERNEL_NAME, tracer_record.api_data_handle,
tracer_record.operation_id, &kernel_name_size));
@@ -443,35 +420,45 @@ void sync_api_trace_callback(rocprofiler_record_tracer_t tracer_record, rocprof
session_id, ROCPROFILER_HIP_API_DATA, tracer_record.api_data_handle,
tracer_record.operation_id, &data));
hip_api_data_t* hip_api_data = reinterpret_cast<hip_api_data_t*>(data);
if (tracer_record.phase == ROCPROFILER_PHASE_ENTER) {
rocprofiler_timestamp_t timestamp;
CHECK_ROCPROFILER(rocprofiler_get_timestamp(&timestamp));
*hip_api_data->phase_data = timestamp.value;
tracer_record.timestamps = rocprofiler_record_header_timestamp_t{.begin = timestamp};
} else {
rocprofiler_timestamp_t timestamp;
CHECK_ROCPROFILER(rocprofiler_get_timestamp(&timestamp));
tracer_record.timestamps = rocprofiler_record_header_timestamp_t{
.begin = rocprofiler_timestamp_t{reinterpret_cast<uint64_t>(hip_api_data->phase_data)},
.end = timestamp};
}
hip_api_trace_entry_t& entry = hip_api_buffer.Emplace(
tracer_record,
(const char*)kernel_name_c ? strdup(kernel_name_c) : nullptr,
(const char*)(function_name_c) ? strdup(function_name_c):nullptr,
hip_api_data);
tracer_record, (const char*)kernel_name_c ? strdup(kernel_name_c) : nullptr, hip_api_data);
entry.valid.store(rocprofiler::TRACE_ENTRY_COMPLETE, std::memory_order_release);
}
if (tracer_record.domain == ACTIVITY_DOMAIN_HSA_API) {
size_t function_name_size = 0;
char *function_name_c = nullptr;
CHECK_ROCPROFILER(rocprofiler_query_hsa_tracer_api_data_info_size(
session_id, ROCPROFILER_HSA_FUNCTION_NAME, tracer_record.api_data_handle,
tracer_record.operation_id, &function_name_size));
if (function_name_size > 1) {
CHECK_ROCPROFILER(rocprofiler_query_hsa_tracer_api_data_info(
session_id, ROCPROFILER_HSA_FUNCTION_NAME, tracer_record.api_data_handle,
tracer_record.operation_id, &function_name_c));
}
char* data = nullptr;
size_t size=0;
size_t size = 0;
CHECK_ROCPROFILER(rocprofiler_query_hip_tracer_api_data_info_size(
session_id, ROCPROFILER_HIP_API_DATA, tracer_record.api_data_handle, tracer_record.operation_id, &size));
session_id, ROCPROFILER_HIP_API_DATA, tracer_record.api_data_handle,
tracer_record.operation_id, &size));
CHECK_ROCPROFILER(rocprofiler_query_hip_tracer_api_data_info(
session_id, ROCPROFILER_HIP_API_DATA, tracer_record.api_data_handle,
tracer_record.operation_id, &data));
hsa_api_data_t* hsa_api_data = reinterpret_cast<hsa_api_data_t*>(data);
hsa_api_trace_entry_t& entry =
hsa_api_buffer.Emplace(tracer_record, (const char*)(function_name_c), hsa_api_data);
if (tracer_record.phase == ROCPROFILER_PHASE_ENTER) {
rocprofiler_timestamp_t timestamp;
CHECK_ROCPROFILER(rocprofiler_get_timestamp(&timestamp));
*hsa_api_data->phase_data = timestamp.value;
tracer_record.timestamps = rocprofiler_record_header_timestamp_t{.begin = timestamp};
} else {
rocprofiler_timestamp_t timestamp;
CHECK_ROCPROFILER(rocprofiler_get_timestamp(&timestamp));
tracer_record.timestamps = rocprofiler_record_header_timestamp_t{
.begin = rocprofiler_timestamp_t{reinterpret_cast<uint64_t>(hsa_api_data->phase_data)},
.end = timestamp};
}
hsa_api_trace_entry_t& entry = hsa_api_buffer.Emplace(tracer_record, hsa_api_data);
entry.valid.store(rocprofiler::TRACE_ENTRY_COMPLETE, std::memory_order_release);
}
if (tracer_record.domain == ACTIVITY_DOMAIN_ROCTX) {
@@ -484,21 +471,17 @@ void sync_api_trace_callback(rocprofiler_record_tracer_t tracer_record, rocprof
roctx_message_str = (char*)malloc(roctx_message_size * sizeof(char));
CHECK_ROCPROFILER(rocprofiler_query_roctx_tracer_api_data_info(
session_id, ROCPROFILER_ROCTX_MESSAGE, tracer_record.api_data_handle,
tracer_record.operation_id, &roctx_message_size));
if (roctx_message_size > 1) {
roctx_message_str =(char*)malloc(roctx_message_size * sizeof(char));
CHECK_ROCPROFILER(rocprofiler_query_roctx_tracer_api_data_info(
session_id, ROCPROFILER_ROCTX_MESSAGE, tracer_record.api_data_handle,
tracer_record.operation_id, &roctx_message_str));
if (roctx_message_str)
roctx_message_str ? rocmtools::cxx_demangle(std::string(strdup(roctx_message_str))).c_str() : nullptr;
}
roctx_trace_entry_t& entry = roctx_trace_buffer.Emplace(
tracer_record,
roctx_message_str);
entry.valid.store(rocprofiler::TRACE_ENTRY_COMPLETE, std::memory_order_release);
tracer_record.operation_id, &roctx_message_str));
if (roctx_message_str)
roctx_message_str ? std::string(strdup(roctx_message_str)).c_str() : nullptr;
}
rocprofiler_timestamp_t timestamp;
CHECK_ROCPROFILER(rocprofiler_get_timestamp(&timestamp));
tracer_record.timestamps = rocprofiler_record_header_timestamp_t{.begin = timestamp};
roctx_trace_entry_t& entry = roctx_trace_buffer.Emplace(tracer_record, roctx_message_str);
entry.valid.store(rocprofiler::TRACE_ENTRY_COMPLETE, std::memory_order_release);
}
}
void wait_for_amdsys() {
while (amd_sys_handler.load(std::memory_order_relaxed)) {
@@ -577,8 +560,8 @@ ROCPROFILER_EXPORT extern const uint32_t HSA_AMD_TOOL_PRIORITY = 1025;
The function updates the core api table function pointers to point to the
interceptor functions in this file.
*/
ROCPROFILER_EXPORT bool OnLoad(void* table, uint64_t runtime_version,
uint64_t failed_tool_count, const char* const* failed_tool_names) {
ROCPROFILER_EXPORT bool OnLoad(void* table, uint64_t runtime_version, uint64_t failed_tool_count,
const char* const* failed_tool_names) {
if (rocprofiler_version_major() != ROCPROFILER_VERSION_MAJOR ||
rocprofiler_version_minor() < ROCPROFILER_VERSION_MINOR) {
warning("the ROCProfiler API version is not compatible with this tool");
@@ -614,9 +597,11 @@ ROCPROFILER_EXPORT bool OnLoad(void* table, uint64_t runtime_version,
std::vector<rocprofiler_tracer_activity_domain_t> apis_requested;
if (getenv("ROCPROFILER_HIP_API_TRACE")) apis_requested.emplace_back(ACTIVITY_DOMAIN_HIP_API);
if (getenv("ROCPROFILER_HIP_ACTIVITY_TRACE")) apis_requested.emplace_back(ACTIVITY_DOMAIN_HIP_OPS);
if (getenv("ROCPROFILER_HIP_ACTIVITY_TRACE"))
apis_requested.emplace_back(ACTIVITY_DOMAIN_HIP_OPS);
if (getenv("ROCPROFILER_HSA_API_TRACE")) apis_requested.emplace_back(ACTIVITY_DOMAIN_HSA_API);
if (getenv("ROCPROFILER_HSA_ACTIVITY_TRACE")) apis_requested.emplace_back(ACTIVITY_DOMAIN_HSA_OPS);
if (getenv("ROCPROFILER_HSA_ACTIVITY_TRACE"))
apis_requested.emplace_back(ACTIVITY_DOMAIN_HSA_OPS);
if (getenv("ROCPROFILER_ROCTX_TRACE")) apis_requested.emplace_back(ACTIVITY_DOMAIN_ROCTX);
std::vector<std::string> counters = GetCounterNames();
@@ -668,7 +653,7 @@ ROCPROFILER_EXPORT bool OnLoad(void* table, uint64_t runtime_version,
rocprofiler_session_id_t session_id, rocprofiler_buffer_id_t buffer_id) {
if (plugin) plugin->write_buffer_records(record, end_record, session_id, buffer_id);
},
1<<20, &buffer_id));
1 << 20, &buffer_id));
buffer_ids.emplace_back(buffer_id);
rocprofiler_buffer_id_t buffer_id_1;
@@ -678,7 +663,7 @@ ROCPROFILER_EXPORT bool OnLoad(void* table, uint64_t runtime_version,
rocprofiler_session_id_t session_id, rocprofiler_buffer_id_t buffer_id_1) {
if (plugin) plugin->write_buffer_records(record, end_record, session_id, buffer_id_1);
},
1<<20, &buffer_id_1));
1 << 20, &buffer_id_1));
buffer_ids.emplace_back(buffer_id_1);
for (rocprofiler_filter_kind_t filter_kind : filters_requested) {
@@ -697,8 +682,8 @@ ROCPROFILER_EXPORT bool OnLoad(void* table, uint64_t runtime_version,
case ROCPROFILER_DISPATCH_TIMESTAMPS_COLLECTION: {
rocprofiler_filter_id_t filter_id;
[[maybe_unused]] rocprofiler_filter_property_t property = {};
CHECK_ROCPROFILER(rocprofiler_create_filter(session_id, filter_kind, rocprofiler_filter_data_t{},
0, &filter_id, property));
CHECK_ROCPROFILER(rocprofiler_create_filter(
session_id, filter_kind, rocprofiler_filter_data_t{}, 0, &filter_id, property));
CHECK_ROCPROFILER(rocprofiler_set_filter_buffer(session_id, filter_id, buffer_id_1));
filter_ids.emplace_back(filter_id);
break;
@@ -708,11 +693,11 @@ ROCPROFILER_EXPORT bool OnLoad(void* table, uint64_t runtime_version,
rocprofiler_filter_id_t filter_id;
[[maybe_unused]] rocprofiler_filter_property_t property = {};
CHECK_ROCPROFILER(rocprofiler_create_filter(session_id, filter_kind,
rocprofiler_filter_data_t{&apis_requested[0]},
apis_requested.size(), &filter_id, property));
rocprofiler_filter_data_t{&apis_requested[0]},
apis_requested.size(), &filter_id, property));
CHECK_ROCPROFILER(rocprofiler_set_filter_buffer(session_id, filter_id, buffer_id));
CHECK_ROCPROFILER(
rocprofiler_set_api_trace_sync_callback(session_id, filter_id, sync_api_trace_callback));
CHECK_ROCPROFILER(rocprofiler_set_api_trace_sync_callback(session_id, filter_id,
sync_api_trace_callback));
filter_ids.emplace_back(filter_id);
break;
}
@@ -730,8 +715,8 @@ ROCPROFILER_EXPORT bool OnLoad(void* table, uint64_t runtime_version,
CHECK_ROCPROFILER(
rocprofiler_create_filter(session_id, ROCPROFILER_ATT_TRACE_COLLECTION,
rocprofiler_filter_data_t{.att_parameters = &parameters[0]},
parameters.size(), &filter_id, property));
rocprofiler_filter_data_t{.att_parameters = &parameters[0]},
parameters.size(), &filter_id, property));
CHECK_ROCPROFILER(rocprofiler_set_filter_buffer(session_id, filter_id, buffer_id_1));
filter_ids.emplace_back(filter_id);
break;
@@ -740,9 +725,8 @@ ROCPROFILER_EXPORT bool OnLoad(void* table, uint64_t runtime_version,
puts("Enabling PC sampling");
rocprofiler_filter_id_t filter_id;
[[maybe_unused]] rocprofiler_filter_property_t property = {};
CHECK_ROCPROFILER(rocprofiler_create_filter(session_id, filter_kind,
rocprofiler_filter_data_t{},
0, &filter_id, property));
CHECK_ROCPROFILER(rocprofiler_create_filter(
session_id, filter_kind, rocprofiler_filter_data_t{}, 0, &filter_id, property));
CHECK_ROCPROFILER(rocprofiler_set_filter_buffer(session_id, filter_id, buffer_id));
filter_ids.emplace_back(filter_id);
break;
@@ -1,6 +1,6 @@
Record(72), Domain(HSA_OPS_DOMAIN), Operation(COPY_OP), Begin(5115054311770460), End(5115054311778300), Correlation_ID(33)
Record(89), Domain(HSA_OPS_DOMAIN), Operation(COPY_OP), Begin(5115054311895420), End(5115054311898940), Correlation_ID(42)
Record(94), Domain(HSA_OPS_DOMAIN), Operation(COPY_OP), Begin(5115054311904540), End(5115054311907420), Correlation_ID(44)
Record(99), Domain(HSA_OPS_DOMAIN), Operation(COPY_OP), Begin(5115054311919580), End(5115054311923260), Correlation_ID(47)
Record(118), Domain(HSA_OPS_DOMAIN), Operation(COPY_OP), Begin(5115054317507438), End(5115054317767919), Correlation_ID(54)
Record(127), Domain(HSA_OPS_DOMAIN), Operation(COPY_OP), Begin(5115054319444270), End(5115054319450670), Correlation_ID(60)
Record(72), Domain(HSA_OPS_DOMAIN), Operation(COPY_OP), Begin(5316428231297878), End(5316428231305398), Correlation_ID(33)
Record(91), Domain(HSA_OPS_DOMAIN), Operation(COPY_OP), Begin(5316428231394036), End(5316428231397876), Correlation_ID(42)
Record(98), Domain(HSA_OPS_DOMAIN), Operation(COPY_OP), Begin(5316428231402676), End(5316428231405716), Correlation_ID(44)
Record(101), Domain(HSA_OPS_DOMAIN), Operation(COPY_OP), Begin(5316428231408596), End(5316428231412276), Correlation_ID(47)
Record(118), Domain(HSA_OPS_DOMAIN), Operation(COPY_OP), Begin(5316428236868407), End(5316428237125368), Correlation_ID(54)
Record(127), Domain(HSA_OPS_DOMAIN), Operation(COPY_OP), Begin(5316428238643909), End(5316428238650629), Correlation_ID(60)
@@ -1,128 +1,64 @@
Record(1), Domain(HSA_API_DOMAIN), Function(hsa_iterate_agents), Begin(5115096884176020), Correlation_ID(1)
Record(2), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), Begin(5115096884186641), Correlation_ID(2)
Record(3), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), End(5115096884189857), Correlation_ID(2)
Record(4), Domain(HSA_API_DOMAIN), Function(hsa_amd_agent_iterate_memory_pools), Begin(5115096884194446), Correlation_ID(3)
Record(5), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), Begin(5115096884197832), Correlation_ID(4)
Record(6), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), End(5115096884199916), Correlation_ID(4)
Record(7), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), Begin(5115096884201790), Correlation_ID(5)
Record(8), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), End(5115096884203593), Correlation_ID(5)
Record(9), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), Begin(5115096884205517), Correlation_ID(6)
Record(10), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), End(5115096884207381), Correlation_ID(6)
Record(11), Domain(HSA_API_DOMAIN), Function(hsa_amd_agent_iterate_memory_pools), End(5115096884209274), Correlation_ID(3)
Record(12), Domain(HSA_API_DOMAIN), Function(hsa_iterate_agents), End(5115096884211198), Correlation_ID(1)
Record(13), Domain(HSA_API_DOMAIN), Function(hsa_iterate_agents), Begin(5115096884213132), Correlation_ID(7)
Record(14), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), Begin(5115096884215026), Correlation_ID(8)
Record(15), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), End(5115096884216829), Correlation_ID(8)
Record(16), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), Begin(5115096884218763), Correlation_ID(9)
Record(17), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), End(5115096884220616), Correlation_ID(9)
Record(18), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), Begin(5115096884222500), Correlation_ID(10)
Record(19), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), End(5115096884224324), Correlation_ID(10)
Record(20), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), Begin(5115096884226217), Correlation_ID(11)
Record(21), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), End(5115096884228001), Correlation_ID(11)
Record(22), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), Begin(5115096884229874), Correlation_ID(12)
Record(23), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), End(5115096884231768), Correlation_ID(12)
Record(24), Domain(HSA_API_DOMAIN), Function(hsa_amd_agent_iterate_memory_pools), Begin(5115096884233662), Correlation_ID(13)
Record(25), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), Begin(5115096884235756), Correlation_ID(14)
Record(26), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), End(5115096884237589), Correlation_ID(14)
Record(27), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), Begin(5115096884239393), Correlation_ID(15)
Record(28), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), End(5115096884241186), Correlation_ID(15)
Record(29), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), Begin(5115096884243030), Correlation_ID(16)
Record(30), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), End(5115096884244813), Correlation_ID(16)
Record(31), Domain(HSA_API_DOMAIN), Function(hsa_amd_agent_iterate_memory_pools), End(5115096884246707), Correlation_ID(13)
Record(32), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), Begin(5115096884248641), Correlation_ID(17)
Record(33), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), End(5115096884250434), Correlation_ID(17)
Record(34), Domain(HSA_API_DOMAIN), Function(hsa_amd_agent_iterate_memory_pools), Begin(5115096884252288), Correlation_ID(18)
Record(35), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), Begin(5115096884254181), Correlation_ID(19)
Record(36), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), End(5115096884256005), Correlation_ID(19)
Record(37), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), Begin(5115096884260343), Correlation_ID(20)
Record(38), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), End(5115096884262267), Correlation_ID(20)
Record(39), Domain(HSA_API_DOMAIN), Function(hsa_amd_agent_memory_pool_get_info), Begin(5115096884264852), Correlation_ID(21)
Record(40), Domain(HSA_API_DOMAIN), Function(hsa_amd_agent_memory_pool_get_info), End(5115096884266866), Correlation_ID(21)
Record(41), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), Begin(5115096884268729), Correlation_ID(22)
Record(42), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), End(5115096884270543), Correlation_ID(22)
Record(43), Domain(HSA_API_DOMAIN), Function(hsa_amd_agent_iterate_memory_pools), End(5115096884272366), Correlation_ID(18)
Record(44), Domain(HSA_API_DOMAIN), Function(hsa_iterate_agents), End(5115096884274230), Correlation_ID(7)
Record(45), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_allocate), Begin(5115096884276635), Correlation_ID(23)
Record(46), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_allocate), End(5115096884310390), Correlation_ID(23)
Record(47), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_allocate), Begin(5115096884313646), Correlation_ID(24)
Record(48), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_allocate), End(5115096884333014), Correlation_ID(24)
Record(49), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_allocate), Begin(5115096884335599), Correlation_ID(25)
Record(50), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_allocate), End(5115096884358102), Correlation_ID(25)
Record(51), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), Begin(5115096884361018), Correlation_ID(26)
Record(52), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), End(5115096884363092), Correlation_ID(26)
Record(53), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), Begin(5115096884370506), Correlation_ID(27)
Record(54), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), End(5115096884373121), Correlation_ID(27)
Record(55), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), Begin(5115096884376157), Correlation_ID(28)
Record(56), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), End(5115096884378151), Correlation_ID(28)
Record(57), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), Begin(5115096884382920), Correlation_ID(29)
Record(58), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), End(5115096884386377), Correlation_ID(29)
Record(59), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), Begin(5115096884388401), Correlation_ID(30)
Record(60), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), End(5115096889272284), Correlation_ID(30)
Record(61), Domain(HSA_API_DOMAIN), Function(hsa_amd_agents_allow_access), Begin(5115096889280340), Correlation_ID(31)
Record(62), Domain(HSA_API_DOMAIN), Function(hsa_amd_agents_allow_access), End(5115096889288926), Correlation_ID(31)
Record(63), Domain(HSA_API_DOMAIN), Function(hsa_signal_create), Begin(5115096889293335), Correlation_ID(32)
Record(64), Domain(HSA_API_DOMAIN), Function(hsa_signal_create), End(5115096889296531), Correlation_ID(32)
Record(65), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy), Begin(5115096889298986), Correlation_ID(33)
Record(66), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy), End(5115096890712729), Correlation_ID(33)
Record(67), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_copy_engine_status), Begin(5115096890719692), Correlation_ID(34)
Record(68), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_copy_engine_status), End(5115096890722227), Correlation_ID(34)
Record(69), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy_on_engine), Begin(5115096890724722), Correlation_ID(35)
Record(70), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy_on_engine), End(5115096890732507), Correlation_ID(35)
Record(71), Domain(HSA_API_DOMAIN), Function(hsa_signal_wait_relaxed), Begin(5115096890735633), Correlation_ID(36)
Record(73), Domain(HSA_API_DOMAIN), Function(hsa_signal_wait_relaxed), End(5115096890749200), Correlation_ID(36)
Record(74), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), Begin(5115096890767926), Correlation_ID(37)
Record(75), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), End(5115096890793295), Correlation_ID(37)
Record(76), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), Begin(5115096890795269), Correlation_ID(38)
Record(77), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), End(5115096890811570), Correlation_ID(38)
Record(78), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), Begin(5115096890813474), Correlation_ID(39)
Record(79), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), End(5115096890829355), Correlation_ID(39)
Record(80), Domain(HSA_API_DOMAIN), Function(hsa_amd_agents_allow_access), Begin(5115096890831308), Correlation_ID(40)
Record(81), Domain(HSA_API_DOMAIN), Function(hsa_amd_agents_allow_access), End(5115096890834985), Correlation_ID(40)
Record(82), Domain(HSA_API_DOMAIN), Function(hsa_signal_create), Begin(5115096890837009), Correlation_ID(41)
Record(83), Domain(HSA_API_DOMAIN), Function(hsa_signal_create), End(5115096890839464), Correlation_ID(41)
Record(84), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy), Begin(5115096890841448), Correlation_ID(42)
Record(85), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy), End(5115096890849734), Correlation_ID(42)
Record(87), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_copy_engine_status), Begin(5115096891464382), Correlation_ID(43)
Record(88), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_copy_engine_status), End(5115096891467067), Correlation_ID(43)
Record(89), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy_on_engine), Begin(5115096891468981), Correlation_ID(44)
Record(90), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy_on_engine), End(5115096891475063), Correlation_ID(44)
Record(91), Domain(HSA_API_DOMAIN), Function(hsa_signal_wait_relaxed), Begin(5115096891477848), Correlation_ID(45)
Record(92), Domain(HSA_API_DOMAIN), Function(hsa_signal_wait_relaxed), End(5115096891480283), Correlation_ID(45)
Record(94), Domain(HSA_API_DOMAIN), Function(hsa_signal_store_screlease), Begin(5115096891483068), Correlation_ID(46)
Record(95), Domain(HSA_API_DOMAIN), Function(hsa_signal_store_screlease), End(5115096891485183), Correlation_ID(46)
Record(96), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy), Begin(5115096891487036), Correlation_ID(47)
Record(97), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy), End(5115096891492867), Correlation_ID(47)
Record(98), Domain(HSA_API_DOMAIN), Function(hsa_signal_wait_relaxed), Begin(5115096891494851), Correlation_ID(48)
Record(100), Domain(HSA_API_DOMAIN), Function(hsa_signal_wait_relaxed), End(5115096891502145), Correlation_ID(48)
Record(101), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), Begin(5115096891509740), Correlation_ID(49)
Record(102), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), End(5115096891530510), Correlation_ID(49)
Record(103), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), Begin(5115096891532414), Correlation_ID(50)
Record(104), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), End(5115096896312957), Correlation_ID(50)
Record(105), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), Begin(5115096896322766), Correlation_ID(51)
Record(106), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), End(5115096896346953), Correlation_ID(51)
Record(107), Domain(HSA_API_DOMAIN), Function(hsa_amd_agents_allow_access), Begin(5115096896349558), Correlation_ID(52)
Record(108), Domain(HSA_API_DOMAIN), Function(hsa_amd_agents_allow_access), End(5115096896357814), Correlation_ID(52)
Record(109), Domain(HSA_API_DOMAIN), Function(hsa_signal_create), Begin(5115096896360048), Correlation_ID(53)
Record(110), Domain(HSA_API_DOMAIN), Function(hsa_signal_create), End(5115096896363705), Correlation_ID(53)
Record(111), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy), Begin(5115096896365759), Correlation_ID(54)
Record(112), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy), End(5115096897089148), Correlation_ID(54)
Record(113), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_copy_engine_status), Begin(5115096897094058), Correlation_ID(55)
Record(114), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_copy_engine_status), End(5115096897096312), Correlation_ID(55)
Record(115), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy_on_engine), Begin(5115096897098346), Correlation_ID(56)
Record(116), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy_on_engine), End(5115096897104648), Correlation_ID(56)
Record(117), Domain(HSA_API_DOMAIN), Function(hsa_signal_wait_relaxed), Begin(5115096897106862), Correlation_ID(57)
Record(119), Domain(HSA_API_DOMAIN), Function(hsa_signal_wait_relaxed), End(5115096897421701), Correlation_ID(57)
Record(120), Domain(HSA_API_DOMAIN), Function(hsa_amd_agents_allow_access), Begin(5115096897423725), Correlation_ID(58)
Record(121), Domain(HSA_API_DOMAIN), Function(hsa_amd_agents_allow_access), End(5115096897453593), Correlation_ID(58)
Record(122), Domain(HSA_API_DOMAIN), Function(hsa_signal_store_screlease), Begin(5115096897455977), Correlation_ID(59)
Record(123), Domain(HSA_API_DOMAIN), Function(hsa_signal_store_screlease), End(5115096897458061), Correlation_ID(59)
Record(124), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy), Begin(5115096897459985), Correlation_ID(60)
Record(125), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy), End(5115096898838931), Correlation_ID(60)
Record(126), Domain(HSA_API_DOMAIN), Function(hsa_signal_wait_relaxed), Begin(5115096898845454), Correlation_ID(61)
Record(128), Domain(HSA_API_DOMAIN), Function(hsa_signal_wait_relaxed), End(5115096898920479), Correlation_ID(61)
Record(129), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_free), Begin(5115096898928314), Correlation_ID(62)
Record(130), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_free), End(5115096898971067), Correlation_ID(62)
Record(131), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_free), Begin(5115096898973692), Correlation_ID(63)
Record(132), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_free), End(5115096898976397), Correlation_ID(63)
Record(133), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_free), Begin(5115096898978271), Correlation_ID(64)
Record(134), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_free), End(5115096898980906), Correlation_ID(64)
Record(3), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), Begin(140720869115504), End(5315914225499554), Correlation_ID(2)
Record(6), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), Begin(140720869115136), End(5315914225504413), Correlation_ID(4)
Record(8), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), Begin(140720869115136), End(5315914225504774), Correlation_ID(5)
Record(10), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), Begin(140720869115136), End(5315914225505215), Correlation_ID(6)
Record(11), Domain(HSA_API_DOMAIN), Function(hsa_amd_agent_iterate_memory_pools), Begin(140720869115504), End(5315914225505415), Correlation_ID(3)
Record(12), Domain(HSA_API_DOMAIN), Function(hsa_iterate_agents), Begin(140720869115904), End(5315914225505646), Correlation_ID(1)
Record(15), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), Begin(140720869115488), End(5315914225506197), Correlation_ID(8)
Record(17), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), Begin(140720869115488), End(5315914225506578), Correlation_ID(9)
Record(19), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), Begin(140720869115488), End(5315914225513100), Correlation_ID(10)
Record(21), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), Begin(140720869115488), End(5315914225513501), Correlation_ID(11)
Record(23), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), Begin(140720869115488), End(5315914225513962), Correlation_ID(12)
Record(26), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), Begin(140720869115104), End(5315914225514854), Correlation_ID(14)
Record(28), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), Begin(140720869115104), End(5315914225515154), Correlation_ID(15)
Record(30), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), Begin(140720869115104), End(5315914225515465), Correlation_ID(16)
Record(31), Domain(HSA_API_DOMAIN), Function(hsa_amd_agent_iterate_memory_pools), Begin(140720869115488), End(5315914225515655), Correlation_ID(13)
Record(33), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), Begin(140720869115488), End(5315914225515996), Correlation_ID(17)
Record(36), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), Begin(140720869115104), End(5315914225516527), Correlation_ID(19)
Record(38), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), Begin(140720869115104), End(5315914225519693), Correlation_ID(20)
Record(40), Domain(HSA_API_DOMAIN), Function(hsa_amd_agent_memory_pool_get_info), Begin(140720869115104), End(5315914225521106), Correlation_ID(21)
Record(42), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_get_info), Begin(140720869115104), End(5315914225521466), Correlation_ID(22)
Record(43), Domain(HSA_API_DOMAIN), Function(hsa_amd_agent_iterate_memory_pools), Begin(140720869115488), End(5315914225521617), Correlation_ID(18)
Record(44), Domain(HSA_API_DOMAIN), Function(hsa_iterate_agents), Begin(140720869115904), End(5315914225521827), Correlation_ID(7)
Record(46), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_allocate), Begin(140720869115888), End(5315914225569269), Correlation_ID(23)
Record(48), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_allocate), Begin(140720869115888), End(5315914225585270), Correlation_ID(24)
Record(50), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_allocate), Begin(140720869115888), End(5315914225606741), Correlation_ID(25)
Record(52), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), Begin(140720869115888), End(5315914225607413), Correlation_ID(26)
Record(54), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), Begin(140720869115888), End(5315914225616771), Correlation_ID(27)
Record(56), Domain(HSA_API_DOMAIN), Function(hsa_agent_get_info), Begin(140720869115888), End(5315914225618394), Correlation_ID(28)
Record(58), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), Begin(140720869115744), End(5315914225623213), Correlation_ID(29)
Record(60), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), Begin(140720869115744), End(5315914230550074), Correlation_ID(30)
Record(62), Domain(HSA_API_DOMAIN), Function(hsa_amd_agents_allow_access), Begin(140720869115744), End(5315914230557629), Correlation_ID(31)
Record(64), Domain(HSA_API_DOMAIN), Function(hsa_signal_create), Begin(140720869115744), End(5315914230562749), Correlation_ID(32)
Record(66), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy), Begin(140720869115712), End(5315914231881179), Correlation_ID(33)
Record(68), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_copy_engine_status), Begin(140720869115744), End(5315914231883243), Correlation_ID(34)
Record(70), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy_on_engine), Begin(140720869115696), End(5315914231885798), Correlation_ID(35)
Record(72), Domain(HSA_API_DOMAIN), Function(hsa_signal_wait_relaxed), Begin(140720869115728), End(5315914231903101), Correlation_ID(36)
Record(74), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), Begin(140720869115744), End(5315914231928801), Correlation_ID(37)
Record(76), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), Begin(140720869115744), End(5315914231943159), Correlation_ID(38)
Record(78), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), Begin(140720869115744), End(5315914231957747), Correlation_ID(39)
Record(80), Domain(HSA_API_DOMAIN), Function(hsa_amd_agents_allow_access), Begin(140720869115744), End(5315914231959621), Correlation_ID(40)
Record(82), Domain(HSA_API_DOMAIN), Function(hsa_signal_create), Begin(140720869115744), End(5315914231961585), Correlation_ID(41)
Record(84), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy), Begin(140720869115712), End(5315914231962847), Correlation_ID(42)
Record(86), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_copy_engine_status), Begin(140720869115744), End(5315914231963338), Correlation_ID(43)
Record(88), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy_on_engine), Begin(140720869115696), End(5315914231964250), Correlation_ID(44)
Record(90), Domain(HSA_API_DOMAIN), Function(hsa_signal_wait_relaxed), Begin(140720869115728), End(5315914231969420), Correlation_ID(45)
Record(92), Domain(HSA_API_DOMAIN), Function(hsa_signal_store_screlease), Begin(140720869115760), End(5315914231970702), Correlation_ID(46)
Record(94), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy), Begin(140720869115712), End(5315914231972275), Correlation_ID(47)
Record(96), Domain(HSA_API_DOMAIN), Function(hsa_signal_wait_relaxed), Begin(140720869115728), End(5315914231974489), Correlation_ID(48)
Record(98), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), Begin(140720869115744), End(5315914231995711), Correlation_ID(49)
Record(100), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), Begin(140720869115744), End(5315914236805535), Correlation_ID(50)
Record(102), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_fill), Begin(140720869115744), End(5315914236828650), Correlation_ID(51)
Record(104), Domain(HSA_API_DOMAIN), Function(hsa_amd_agents_allow_access), Begin(140720869115744), End(5315914236840402), Correlation_ID(52)
Record(106), Domain(HSA_API_DOMAIN), Function(hsa_signal_create), Begin(140720869115744), End(5315914236842176), Correlation_ID(53)
Record(108), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy), Begin(140720869115712), End(5315914237531439), Correlation_ID(54)
Record(110), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_copy_engine_status), Begin(140720869115744), End(5315914237532691), Correlation_ID(55)
Record(112), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy_on_engine), Begin(140720869115696), End(5315914237533733), Correlation_ID(56)
Record(114), Domain(HSA_API_DOMAIN), Function(hsa_signal_wait_relaxed), Begin(140720869115728), End(5315914237810318), Correlation_ID(57)
Record(116), Domain(HSA_API_DOMAIN), Function(hsa_amd_agents_allow_access), Begin(140720869115744), End(5315914237837451), Correlation_ID(58)
Record(118), Domain(HSA_API_DOMAIN), Function(hsa_signal_store_screlease), Begin(140720869115760), End(5315914237838152), Correlation_ID(59)
Record(120), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_async_copy), Begin(140720869115712), End(5315914239404572), Correlation_ID(60)
Record(122), Domain(HSA_API_DOMAIN), Function(hsa_signal_wait_relaxed), Begin(140720869115728), End(5315914239425423), Correlation_ID(61)
Record(124), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_free), Begin(140720869115904), End(5315914239465230), Correlation_ID(62)
Record(126), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_free), Begin(140720869115904), End(5315914239468175), Correlation_ID(63)
Record(128), Domain(HSA_API_DOMAIN), Function(hsa_amd_memory_pool_free), Begin(140720869115904), End(5315914239468937), Correlation_ID(64)
@@ -84,7 +84,7 @@ void ApplicationParser::GetKernelInfoForRunningApplication(
kinfo.function = sub;
}
// corealtion-ids
// corelation-ids
found = line.find("Correlation_ID");
if (found != std::string::npos) {
int spos = found;
@@ -287,16 +287,16 @@ TEST_F(AsyncCopyTest, WhenRunningTracerWithAppThenAsyncCorelationCountIsCorrect)
}
ASSERT_TRUE(corelation_pair.size());
uint32_t corealtion_count = 0;
uint32_t corelation_count = 0;
// check if corelation id appears more than twice
for (size_t i = 0; i < corelation_pair.size(); i++) {
for (const auto& itr : current_kernel_info) {
if ((itr.corelation_id == corelation_pair[i].second) &&
(itr.record_id != corelation_pair[i].first)) {
corealtion_count++;
corelation_count++;
}
}
}
EXPECT_GT(corealtion_count, corelation_pair.size());
EXPECT_GT(corelation_count, corelation_pair.size());
}