SWDEV-492607: Adding ATT wrapper (#40)
* Adding att parser wrapper
* Adding ATT tests as optional
* Adding decoder API for query capability
* Removed samples
* Formatting
* adding new line
* Removed perfetto and moved to static library
* using default search for lib
* Updated to SDK
* Namespace changes
* Added tests
* Small refactor
* Updated API to receive agent_id
* Fixing tests
* Tidy fixes
* Not write to file
* Switch to filesystem.hpp
* Compilation fixes
* Formatting
* Tidy fix
* Removed likely
* Adding tests
* Added gfx9 test
* Adding gfx12 tests
* Formatting
* Enable tidy
* Fix tests
* Fix deadlock on agent test
* Workaround ASAN
* Moving query outside class.
* Fix standalone tool
* Addressing comments
* Formatting
* Change query name
* Fixed some tests. Updated PR comments.
* Formatting
* Improved coverage
* Formatting
* Fix for comments
* Formatting
* Adding some description. Fix error type.
---------
Co-authored-by: Giovanni Baraldi <gbaraldi@amd.com>
[ROCm/rocprofiler-sdk commit: 2c8e88a76b]
This commit is contained in:
committed by
GitHub
parent
b2aa29eb0a
commit
f8442415f8
+8
-2
@@ -48,7 +48,13 @@ ROCPROFILER_EXTERN_C_INIT
|
||||
* @param [in] num_parameters Number of parameters. Zero is allowed.
|
||||
* @param [in] agent_id agent to configure profiling on.
|
||||
* @param [in] shader_callback Callback fn where the collected data will be sent to.
|
||||
* @param [in] callback_userdata Passed back to user.
|
||||
* @param [in] callback_userdata Passed back to user in shader_callback.
|
||||
* @return ::rocprofiler_status_t
|
||||
* @retval ROCPROFILER_STATUS_SUCCESS on success
|
||||
* @retval ROCPROFILER_STATUS_ERROR_CONFIGURATION_LOCKED for configuration locked
|
||||
* @retval ROCPROFILER_STATUS_ERROR_CONTEXT_INVALID for conflicting configurations in the same ctx
|
||||
* @retval ROCPROFILER_STATUS_ERROR_CONTEXT_NOT_FOUND for invalid context id
|
||||
* @retval ROCPROFILER_STATUS_ERROR_INVALID_ARGUMENT for invalid rocprofiler_att_parameter_t
|
||||
*/
|
||||
rocprofiler_status_t
|
||||
rocprofiler_configure_agent_thread_trace_service(
|
||||
@@ -57,7 +63,7 @@ rocprofiler_configure_agent_thread_trace_service(
|
||||
size_t num_parameters,
|
||||
rocprofiler_agent_id_t agent_id,
|
||||
rocprofiler_att_shader_data_callback_t shader_callback,
|
||||
void* callback_userdata) ROCPROFILER_API;
|
||||
rocprofiler_user_data_t callback_userdata) ROCPROFILER_API;
|
||||
|
||||
/** @} */
|
||||
|
||||
|
||||
+2
-94
@@ -68,104 +68,12 @@ typedef struct
|
||||
* @param [in] data_size Number of bytes in "data"
|
||||
* @param [in] userdata Passed back to user from rocprofiler_att_dispatch_callback_t()
|
||||
*/
|
||||
typedef void (*rocprofiler_att_shader_data_callback_t)(int64_t shader_engine_id,
|
||||
typedef void (*rocprofiler_att_shader_data_callback_t)(rocprofiler_agent_id_t agent,
|
||||
int64_t shader_engine_id,
|
||||
void* data,
|
||||
size_t data_size,
|
||||
rocprofiler_user_data_t userdata);
|
||||
|
||||
/**
|
||||
* @brief Callback for rocprofiler to parsed ATT data.
|
||||
* The caller must copy a desired instruction on isa_instruction and source_reference,
|
||||
* while obeying the max length passed by the caller.
|
||||
* If the caller's length is insufficient, then this function writes the minimum sizes to isa_size
|
||||
* and source_size and returns ROCPROFILER_STATUS_ERROR_OUT_OF_RESOURCES.
|
||||
* If call returns ROCPROFILER_STATUS_SUCCESS, isa_size and source_size are written with bytes used.
|
||||
* @param[out] isa_instruction Where to copy the ISA line to.
|
||||
* @param[out] isa_memory_size (Auto) The number of bytes to next instruction. 0 for custom ISA.
|
||||
* @param[inout] isa_size Size of returned ISA string.
|
||||
* @param[in] marker_id The generated ATT marker for given codeobject ID.
|
||||
* @param[in] offset The offset from base vaddr for given codeobj ID.
|
||||
* If marker_id == 0, this parameter is raw virtual address with no codeobj ID information.
|
||||
* @param[in] userdata Arbitrary data pointer to be sent back to the user via callback.
|
||||
* @retval ROCPROFILER_STATUS_SUCCESS on success.
|
||||
* @retval ROCPROFILER_STATUS_ERROR on generic error.
|
||||
* @retval ROCPROFILER_STATUS_ERROR_INVALID_ARGUMENT for invalid offset or invalid marker_id.
|
||||
* @retval ROCPROFILER_STATUS_ERROR_OUT_OF_RESOURCES for insufficient isa_size or source_size.
|
||||
*/
|
||||
typedef rocprofiler_status_t (*rocprofiler_att_parser_isa_callback_t)(char* isa_instruction,
|
||||
uint64_t* isa_memory_size,
|
||||
uint64_t* isa_size,
|
||||
uint64_t marker_id,
|
||||
uint64_t offset,
|
||||
void* userdata);
|
||||
|
||||
/**
|
||||
* @brief Callback for the ATT parser to retrieve Shader Engine data.
|
||||
* Returns the amount of data filled. If no more data is available, then callback return 0
|
||||
* If the space available in the buffer is less than required for parsing the full data,
|
||||
* the full data is transfered over multiple calls.
|
||||
* When all data has been transfered from current shader_engine_id, the caller has the option to
|
||||
* 1) Return -1 on shader_engine ID and parsing terminates
|
||||
* 2) Move to the next shader engine.
|
||||
* @param[out] shader_engine_id The ID of given shader engine.
|
||||
* @param[out] buffer The buffer to fill up with SE data.
|
||||
* @param[out] buffer_size The space available in the buffer.
|
||||
* @param[in] userdata Arbitrary data pointer to be sent back to the user via callback.
|
||||
* @returns Number of bytes remaining in shader engine.
|
||||
* @retval 0 if no more SE data is available. Parsing will stop.
|
||||
* @retval ret Where 0 > ret > buffer_size for partially filled buffer, and caller moves over to
|
||||
* next SE.
|
||||
* @retval buffer_size if the buffer does not hold enough data for the current shader engine.
|
||||
*/
|
||||
typedef uint64_t (*rocprofiler_att_parser_se_data_callback_t)(int* shader_engine_id,
|
||||
uint8_t** buffer,
|
||||
uint64_t* buffer_size,
|
||||
void* userdata);
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ROCPROFILER_ATT_PARSER_DATA_TYPE_ISA = 0,
|
||||
ROCPROFILER_ATT_PARSER_DATA_TYPE_OCCUPANCY,
|
||||
} rocprofiler_att_parser_data_type_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint64_t marker_id;
|
||||
uint64_t offset;
|
||||
uint64_t hitcount;
|
||||
uint64_t latency;
|
||||
} rocprofiler_att_data_type_isa_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint64_t marker_id;
|
||||
uint64_t offset;
|
||||
uint64_t timestamp : 63;
|
||||
uint64_t enabled : 1;
|
||||
} rocprofiler_att_data_type_occupancy_t;
|
||||
|
||||
/**
|
||||
* @brief Callback for rocprofiler to return traces back to rocprofiler.
|
||||
* @param[in] att_data A datapoint retrieved from thread_trace
|
||||
* @param[in] userdata Arbitrary data pointer to be sent back to the user via callback.
|
||||
*/
|
||||
typedef void (*rocprofiler_att_parser_trace_callback_t)(rocprofiler_att_parser_data_type_t type,
|
||||
void* att_data,
|
||||
void* userdata);
|
||||
|
||||
/**
|
||||
* @brief Iterate over all event coordinates for a given agent_t and event_t.
|
||||
* @param[in] se_data_callback Callback to return shader engine data from.
|
||||
* @param[in] trace_callback Callback where the trace data is returned to.
|
||||
* @param[in] isa_callback Callback to return ISA lines.
|
||||
* @param[in] userdata Userdata passed back to caller via callback.
|
||||
*/
|
||||
rocprofiler_status_t
|
||||
rocprofiler_att_parse_data(rocprofiler_att_parser_se_data_callback_t se_data_callback,
|
||||
rocprofiler_att_parser_trace_callback_t trace_callback,
|
||||
rocprofiler_att_parser_isa_callback_t isa_callback,
|
||||
void* userdata) ROCPROFILER_API;
|
||||
|
||||
/** @} */
|
||||
|
||||
ROCPROFILER_EXTERN_C_FINI
|
||||
|
||||
+19
-4
@@ -45,15 +45,23 @@ typedef enum
|
||||
|
||||
/**
|
||||
* @brief Callback to be triggered every kernel dispatch, indicating to start and/or stop ATT
|
||||
* @param [in] agent_id agent_id.
|
||||
* @param [in] queue_id queue_id.
|
||||
* @param [in] correlation_id internal correlation id.
|
||||
* @param [in] kernel_id kernel_id.
|
||||
* @param [in] dispatch_id dispatch_id.
|
||||
* @param [in] userdata_config Userdata passed back from
|
||||
* rocprofiler_configure_dispatch_thread_trace_service.
|
||||
* @param [out] userdata_shader Userdata to be passed in shader_callback
|
||||
*/
|
||||
typedef rocprofiler_att_control_flags_t (*rocprofiler_att_dispatch_callback_t)(
|
||||
rocprofiler_agent_id_t agent_id,
|
||||
rocprofiler_queue_id_t queue_id,
|
||||
const rocprofiler_agent_t* agent,
|
||||
rocprofiler_correlation_id_t correlation_id,
|
||||
rocprofiler_kernel_id_t kernel_id,
|
||||
rocprofiler_dispatch_id_t dispatch_id,
|
||||
rocprofiler_user_data_t* userdata_shader,
|
||||
void* userdata_config);
|
||||
void* userdata_config,
|
||||
rocprofiler_user_data_t* userdata_shader);
|
||||
|
||||
/**
|
||||
* @brief Enables the advanced thread trace service for dispatch-based tracing.
|
||||
@@ -64,7 +72,14 @@ typedef rocprofiler_att_control_flags_t (*rocprofiler_att_dispatch_callback_t)(
|
||||
* @param [in] num_parameters Number of parameters. Zero is allowed.
|
||||
* @param [in] dispatch_callback Control fn which decides when ATT starts/stop collecting.
|
||||
* @param [in] shader_callback Callback fn where the collected data will be sent to.
|
||||
* @param [in] callback_userdata Passed back to user.
|
||||
* @param [in] callback_userdata Passed back to user in dispatch_callback.
|
||||
* @return ::rocprofiler_status_t
|
||||
* @retval ROCPROFILER_STATUS_SUCCESS on success
|
||||
* @retval ROCPROFILER_STATUS_ERROR_CONFIGURATION_LOCKED for configuration locked
|
||||
* @retval ROCPROFILER_STATUS_ERROR_CONTEXT_INVALID for conflicting configurations in the same ctx
|
||||
* @retval ROCPROFILER_STATUS_ERROR_CONTEXT_NOT_FOUND for invalid context id
|
||||
* @retval ROCPROFILER_STATUS_ERROR_INVALID_ARGUMENT for invalid rocprofiler_att_parameter_t
|
||||
* @retval ROCPROFILER_STATUS_ERROR_SERVICE_ALREADY_CONFIGURED if already configured
|
||||
*/
|
||||
rocprofiler_status_t
|
||||
rocprofiler_configure_dispatch_thread_trace_service(
|
||||
|
||||
Reference in New Issue
Block a user