From 6b07b139c46e24c2914901098a7335597d57254a Mon Sep 17 00:00:00 2001 From: Ammar ELWazir Date: Tue, 23 May 2023 19:01:16 +0000 Subject: [PATCH] Fixing Timestamps for Tracing for the trace buffer results Change-Id: I89b36daacb6531840ac334ba4629c73a7b8f1e79 --- include/rocprofiler/v2/rocprofiler.h | 184 +++++++------ include/rocprofiler/v2/rocprofiler_plugin.h | 33 +-- plugin/att/att.cpp | 33 ++- plugin/ctf/ctf.cpp | 5 +- plugin/ctf/plugin.cpp | 11 +- plugin/ctf/plugin.h | 7 +- plugin/file/file.cpp | 109 ++++---- plugin/perfetto/perfetto.cpp | 151 +++++------ src/api/rocmtools.cpp | 18 +- src/core/session/tracer/tracer.cpp | 52 ++-- src/core/session/tracer/tracer.h | 12 +- src/tools/tool.cpp | 248 ++++++++---------- .../apps/goldentraces/async_copy_trace.txt | 12 +- .../apps/goldentraces/hsa_api_trace.txt | 192 +++++--------- tests/featuretests/tracer/tracer_gtest.cpp | 8 +- 15 files changed, 489 insertions(+), 586 deletions(-) diff --git a/include/rocprofiler/v2/rocprofiler.h b/include/rocprofiler/v2/rocprofiler.h index da8643b059..097233836a 100644 --- a/include/rocprofiler/v2/rocprofiler.h +++ b/include/rocprofiler/v2/rocprofiler.h @@ -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; /** @} */ diff --git a/include/rocprofiler/v2/rocprofiler_plugin.h b/include/rocprofiler/v2/rocprofiler_plugin.h index 2beac6eade..882019c48b 100644 --- a/include/rocprofiler/v2/rocprofiler_plugin.h +++ b/include/rocprofiler/v2/rocprofiler_plugin.h @@ -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); /** @} */ diff --git a/plugin/att/att.cpp b/plugin/att/att.cpp index ed28ed1923..2a3a03c22a 100644 --- a/plugin/att/att.cpp +++ b/plugin/att/att.cpp @@ -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 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(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( - reinterpret_cast(begin)); + rocprofiler_record_att_tracer_t* att_record = + const_cast( + reinterpret_cast(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; diff --git a/plugin/ctf/ctf.cpp b/plugin/ctf/ctf.cpp index 606f07d153..916032f47e 100644 --- a/plugin/ctf/ctf.cpp +++ b/plugin/ctf/ctf.cpp @@ -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; diff --git a/plugin/ctf/plugin.cpp b/plugin/ctf/plugin.cpp index a8858035c2..6cf6411ea9 100644 --- a/plugin/ctf/plugin.cpp +++ b/plugin/ctf/plugin.cpp @@ -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 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(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(begin), session_id, - tracer_data); + HandleTracerRecord(*reinterpret_cast(begin), session_id); } else { assert(begin->kind == ROCPROFILER_PROFILER_RECORD); HandleProfilerRecord(*reinterpret_cast(begin), diff --git a/plugin/ctf/plugin.h b/plugin/ctf/plugin.h index 5a7ed9991d..e4fb5a2dd9 100644 --- a/plugin/ctf/plugin.h +++ b/plugin/ctf/plugin.h @@ -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. diff --git a/plugin/file/file.cpp b/plugin/file/file.cpp index e4cdffc4e7..d3a643199b 100644 --- a/plugin/file/file.cpp +++ b/plugin/file/file.cpp @@ -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 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(tracer_record.api_data_handle.handle)) > 1) - kernel_name = rocmtools::cxx_demangle( - reinterpret_cast(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(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(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(×tamp); - *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(×tamp); - *output_file << " timestamp(" << timestamp.value << "),"; - } - if (tracer_record.phase == ROCPROFILER_PHASE_EXIT) { - rocprofiler_timestamp_t timestamp; - rocprofiler_get_timestamp(×tamp); - *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( reinterpret_cast(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; } diff --git a/plugin/perfetto/perfetto.cpp b/plugin/perfetto/perfetto.cpp index fe2f5d0d70..9b248470d3 100644 --- a/plugin/perfetto/perfetto.cpp +++ b/plugin/perfetto/perfetto.cpp @@ -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 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(tracer_record.api_data_handle.handle)) - roctx_message = std::string(reinterpret_cast(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(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(×tamp); - 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(×tamp); + 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(×tamp); + 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(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::iterator stream_track_it; { std::lock_guard 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( - reinterpret_cast(begin)); + rocprofiler_record_profiler_t* profiler_record = + const_cast( + reinterpret_cast(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( reinterpret_cast(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; } diff --git a/src/api/rocmtools.cpp b/src/api/rocmtools.cpp index 7b4dfcf0a3..62d533bf08 100644 --- a/src/api/rocmtools.cpp +++ b/src/api/rocmtools.cpp @@ -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); diff --git a/src/core/session/tracer/tracer.cpp b/src/core/session/tracer/tracer.cpp index d922d7170b..c4ce75f8e1 100644 --- a/src/core/session/tracer/tracer.cpp +++ b/src/core/session/tracer/tracer.cpp @@ -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(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(roctracer_op_string(domain, operation_id.id))).size(); +} + std::mutex stream_ids_map_lock; std::map> stream_ids; std::map 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 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 " diff --git a/src/core/session/tracer/tracer.h b/src/core/session/tracer/tracer.h index 7fab2bef2d..bfafcc8940 100644 --- a/src/core/session/tracer/tracer.h +++ b/src/core/session/tracer/tracer.h @@ -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 domains); + rocprofiler_buffer_id_t buffer_id, + std::vector domains); ~Tracer(); rocprofiler_tracer_api_data_handle_t AddROCTxApiData(std::string api_data); @@ -87,7 +94,8 @@ class Tracer { private: std::atomic is_active_{false}; std::atomic roctracer_initiated_{false}; - std::atomic + std::atomic roctx_report_activity_; std::vector domains_; diff --git a/src/tools/tool.cpp b/src/tools/tool.cpp index 31b40cc061..56e284c272 100644 --- a/src/tools/tool.cpp +++ b/src/tools/tool.cpp @@ -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)...); } - private: + + private: bool valid_{false}; void* plugin_handle_; @@ -140,83 +142,68 @@ std::optional plugin; struct hsa_api_trace_entry_t { std::atomic 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(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(function_name)); - if (api_data != nullptr) free(const_cast(api_data)); + api_data = *data; + record.api_data_handle.handle = &api_data; } + ~hsa_api_trace_entry_t() {} }; struct roctx_trace_entry_t { std::atomic 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(roctx_message)); + if (record.name != nullptr) free(const_cast(record.name)); } }; struct hip_api_trace_entry_t { - std::atomic 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(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(function_name)); - if (kernel_name != nullptr) free(const_cast(kernel_name)); - if (api_data != nullptr) free(const_cast(api_data)); + if (record.name != nullptr) free(const_cast(record.name)); } }; rocprofiler::TraceBuffer 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_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_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 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 GetCounterNames() { return counters; } -typedef std::tuple< - std::vector>, - std::vector, std::vector -> att_parsed_input_t; +typedef std::tuple>, + std::vector, std::vector> + att_parsed_input_t; att_parsed_input_t GetATTParams() { std::vector> parameters; @@ -282,10 +268,7 @@ att_parsed_input_t GetATTParams() { // Default values used for token generation. std::unordered_map 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(data); + if (tracer_record.phase == ROCPROFILER_PHASE_ENTER) { + rocprofiler_timestamp_t timestamp; + CHECK_ROCPROFILER(rocprofiler_get_timestamp(×tamp)); + *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(×tamp)); + tracer_record.timestamps = rocprofiler_record_header_timestamp_t{ + .begin = rocprofiler_timestamp_t{reinterpret_cast(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(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(×tamp)); + *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(×tamp)); + tracer_record.timestamps = rocprofiler_record_header_timestamp_t{ + .begin = rocprofiler_timestamp_t{reinterpret_cast(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(×tamp)); + 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 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 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 = ¶meters[0]}, - parameters.size(), &filter_id, property)); + rocprofiler_filter_data_t{.att_parameters = ¶meters[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; diff --git a/tests/featuretests/tracer/apps/goldentraces/async_copy_trace.txt b/tests/featuretests/tracer/apps/goldentraces/async_copy_trace.txt index 4d49014a0a..095c2f292e 100644 --- a/tests/featuretests/tracer/apps/goldentraces/async_copy_trace.txt +++ b/tests/featuretests/tracer/apps/goldentraces/async_copy_trace.txt @@ -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) \ No newline at end of file +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) \ No newline at end of file diff --git a/tests/featuretests/tracer/apps/goldentraces/hsa_api_trace.txt b/tests/featuretests/tracer/apps/goldentraces/hsa_api_trace.txt index 502a46ab2b..d48076b574 100644 --- a/tests/featuretests/tracer/apps/goldentraces/hsa_api_trace.txt +++ b/tests/featuretests/tracer/apps/goldentraces/hsa_api_trace.txt @@ -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) \ No newline at end of file +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) \ No newline at end of file diff --git a/tests/featuretests/tracer/tracer_gtest.cpp b/tests/featuretests/tracer/tracer_gtest.cpp index 8377ac674c..f3307ff124 100644 --- a/tests/featuretests/tracer/tracer_gtest.cpp +++ b/tests/featuretests/tracer/tracer_gtest.cpp @@ -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()); } \ No newline at end of file