Evaluation portion for metrics (#123)
* EvaluateAST and validation of RawAST
* Adding MetricDimension class and concepts
* set_dimensions() and improved ValidateRawAST()
* source formatting (clang-format v11) (#124)
Co-authored-by: bwelton <bwelton@users.noreply.github.com>
* Addressing 1st round of review comments
* Modified the parser production rules to support the right syntax for REDUCE and SELECT derived metric expressions
* changes to raw_ast.hpp and fmt::format()
* Parser tests updated to support corrected REDUCE and SELECT syntax
* changes to EvaluateAST::set_dimensions() and other dimension related code changes
* Added a test for EvaluateAST::evaluate() to test basic arithmetic on EvaluateAST
* Format source code (via clang-format v11) on sauverma/evaluate-ast (#146)
* source formatting (clang-format v11)
* Add dimension information to counter record
Restructures counter records to have the following design:
rocprofiler_record_id_t which is an int64_t that encodes
both the counter id and dimension information for the
record. The first 16 bits are reserved for the counter id while
the last 48 are split among the dimensions specified in
rocprofiler_dimension_t (currently 8 bits per dimension).
Each of the 8 bits for the dimension stores the dimension
value for that dimension for this record (i.e. a value of 8
on dimension XCC would denote XCC[8] for the counter). The
split among the dimensions will automatically adjust as
dimensions are added or removed.
The record also contains a union of {int64_t hw_counter, double
derived_counter} to specify the value of the record at
rocprofiler_record_id_t. int64_t denotes a physical hardware
counter that has integer types while the double is used for derived
counters (which type this counters values are needs to be queried
separately).
* Integration of new id type + other fixes
---------
Co-authored-by: sauverma93 <sauverma93@users.noreply.github.com>
Co-authored-by: Benjamin Welton <bewelton@amd.com>
* Fixed sissues with reduce() implementation and added a test for reduce()
* Updated parser syntax for reduce() and updated the parser test. Disabled the test for select()
* Build warning fixes
* Modifications to support fetching xcc/etc info from agent
* Initial plumbing working for single counters, cleanup+tests still needed
* Remove string comparison from reduce ops
* source formatting (clang-format v11) (#163)
Co-authored-by: bwelton <bwelton@users.noreply.github.com>
* cmake formatting (cmake-format) (#164)
Co-authored-by: bwelton <bwelton@users.noreply.github.com>
* source formatting (clang-format v11) (#171)
Co-authored-by: bwelton <bwelton@users.noreply.github.com>
* Merged with master
* source formatting (clang-format v11) (#172)
Co-authored-by: bwelton <bwelton@users.noreply.github.com>
* source formatting (clang-format v11) (#173)
Co-authored-by: bwelton <bwelton@users.noreply.github.com>
* Test fix
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: bwelton <bwelton@users.noreply.github.com>
Co-authored-by: sauverma93 <sauverma93@users.noreply.github.com>
Co-authored-by: Benjamin Welton <bewelton@amd.com>
[ROCm/rocprofiler-sdk commit: 63775f241a]
This commit is contained in:
zatwierdzone przez
GitHub
rodzic
370a86830b
commit
e8fa4d3873
@@ -34,6 +34,44 @@ ROCPROFILER_EXTERN_C_INIT
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Query counter id information from record_id
|
||||
*
|
||||
* @param [in] id record id from rocprofiler_record_counter_t
|
||||
* @param [out] counter_id counter id associated with the record
|
||||
* @return ::rocprofiler_status_t
|
||||
*/
|
||||
rocprofiler_status_t ROCPROFILER_API
|
||||
rocprofiler_query_record_counter_id(rocprofiler_counter_instance_id_t id,
|
||||
rocprofiler_counter_id_t* counter_id) ROCPROFILER_NONNULL(2);
|
||||
|
||||
/**
|
||||
* @brief Query dimension position from record_id
|
||||
*
|
||||
* @param [in] id record id from rocprofiler_record_counter_t
|
||||
* @param [in] dim dimension for which positional info is requested
|
||||
* @param [out] pos value of the dimension in id.
|
||||
* @return ::rocprofiler_status_t
|
||||
*/
|
||||
rocprofiler_status_t ROCPROFILER_API
|
||||
rocprofiler_query_record_dimension_position(rocprofiler_counter_instance_id_t id,
|
||||
rocprofiler_counter_dimension_id_t dim,
|
||||
size_t* pos) ROCPROFILER_NONNULL(3);
|
||||
|
||||
/**
|
||||
* @brief Return information about the dimension for a specified counter
|
||||
*
|
||||
* @param [in] id counter id to query dimension info for.
|
||||
* @param [in] dim dimension
|
||||
* @param [out] info info on the dimension (name, instance_size)
|
||||
* @return ::rocprofiler_status_t
|
||||
*/
|
||||
rocprofiler_status_t ROCPROFILER_API
|
||||
rocprofiler_query_record_dimension_info(rocprofiler_counter_id_t id,
|
||||
rocprofiler_counter_dimension_id_t dim,
|
||||
rocprofiler_record_dimension_info_t* info)
|
||||
ROCPROFILER_NONNULL(3);
|
||||
|
||||
/**
|
||||
* @brief Query Counter name.
|
||||
*
|
||||
|
||||
@@ -69,14 +69,14 @@ typedef struct
|
||||
* @param [in] config
|
||||
*/
|
||||
typedef void (*rocprofiler_profile_counting_dispatch_callback_t)(
|
||||
rocprofiler_queue_id_t queue_id,
|
||||
rocprofiler_agent_t agent_id,
|
||||
rocprofiler_correlation_id_t correlation_id,
|
||||
const hsa_kernel_dispatch_packet_t* dispatch_packet,
|
||||
void* callback_data_args,
|
||||
rocprofiler_dispatch_profile_counting_record_t** records,
|
||||
size_t record_count,
|
||||
rocprofiler_profile_config_id_t config);
|
||||
rocprofiler_queue_id_t queue_id,
|
||||
rocprofiler_agent_t agent_id,
|
||||
rocprofiler_correlation_id_t correlation_id,
|
||||
const hsa_kernel_dispatch_packet_t* dispatch_packet,
|
||||
void* callback_data_args,
|
||||
rocprofiler_record_counter_t* records,
|
||||
size_t record_count,
|
||||
rocprofiler_profile_config_id_t config);
|
||||
|
||||
/**
|
||||
* @brief Configure Dispatch Profile Counting Service.
|
||||
|
||||
@@ -251,14 +251,23 @@ typedef uint64_t rocprofiler_thread_id_t;
|
||||
*/
|
||||
typedef uint32_t rocprofiler_tracing_operation_t;
|
||||
|
||||
/**
|
||||
* @brief Needs non-typedef specification?
|
||||
*/
|
||||
typedef uint32_t rocprofiler_counter_instance_id_t;
|
||||
|
||||
// forward declaration of struct
|
||||
typedef struct rocprofiler_pc_sampling_configuration_s rocprofiler_pc_sampling_configuration_t;
|
||||
|
||||
/**
|
||||
* @brief Unique record id encoding both the counter
|
||||
* and dimensional values (positions) for the record.
|
||||
*/
|
||||
typedef uint64_t rocprofiler_counter_instance_id_t;
|
||||
|
||||
/**
|
||||
* @brief A dimension for counter instances. Some example
|
||||
* dimensions include XCC, SM (Shader), etc. This
|
||||
* value represents the dimension beind described
|
||||
* or queried about.
|
||||
*/
|
||||
typedef uint64_t rocprofiler_counter_dimension_id_t;
|
||||
|
||||
//--------------------------------------------------------------------------------------//
|
||||
//
|
||||
// UNIONS
|
||||
@@ -415,14 +424,26 @@ rocprofiler_record_header_compute_hash(uint32_t category, uint32_t kind)
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Details for the dimension, including its size, for a counter.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
const char* name;
|
||||
size_t instance_size;
|
||||
} rocprofiler_record_dimension_info_t;
|
||||
|
||||
/**
|
||||
* @brief ROCProfiler Profile Counting Counter per instance.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
rocprofiler_counter_id_t counter_id;
|
||||
rocprofiler_counter_instance_id_t instance_id;
|
||||
double counter_value;
|
||||
rocprofiler_counter_instance_id_t id;
|
||||
union
|
||||
{
|
||||
int64_t hw_counter; //<< physical hardware counter
|
||||
double derived_counter; //<< derived counter value
|
||||
};
|
||||
} rocprofiler_record_counter_t;
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user