63775f241a
* 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>
121 خطوط
4.6 KiB
C
121 خطوط
4.6 KiB
C
// MIT License
|
|
//
|
|
// Copyright (c) 2023 ROCm Developer Tools
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// of this software and associated documentation files (the "Software"), to deal
|
|
// in the Software without restriction, including without limitation the rights
|
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
// copies of the Software, and to permit persons to whom the Software is
|
|
// furnished to do so, subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included in all
|
|
// copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
// SOFTWARE.
|
|
|
|
#pragma once
|
|
|
|
#include <rocprofiler/agent.h>
|
|
#include <rocprofiler/defines.h>
|
|
#include <rocprofiler/fwd.h>
|
|
|
|
ROCPROFILER_EXTERN_C_INIT
|
|
|
|
/**
|
|
* @defgroup COUNTERS Hardware counters Information
|
|
* @brief Query functions related to hardware counters
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @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.
|
|
*
|
|
* @param [in] counter_id
|
|
* @param [out] name returns a pointer to the name of the counter
|
|
* @param [out] size returns the size of the name returned
|
|
* @return ::rocprofiler_status_t
|
|
*/
|
|
rocprofiler_status_t ROCPROFILER_API
|
|
rocprofiler_query_counter_name(rocprofiler_counter_id_t counter_id, const char** name, size_t* size)
|
|
ROCPROFILER_NONNULL(2, 3);
|
|
|
|
/**
|
|
* @brief Query Counter Instances Count.
|
|
*
|
|
* @param [in] agent rocprofiler agent
|
|
* @param [in] counter_id counter id (obtained from iterate_agent_supported_counters)
|
|
* @param [out] instance_count number of instances the counter has
|
|
* @return ::rocprofiler_status_t
|
|
*/
|
|
rocprofiler_status_t ROCPROFILER_API
|
|
rocprofiler_query_counter_instance_count(rocprofiler_agent_t agent,
|
|
rocprofiler_counter_id_t counter_id,
|
|
size_t* instance_count) ROCPROFILER_NONNULL(3);
|
|
|
|
typedef rocprofiler_status_t (*rocprofiler_available_counters_cb_t)(
|
|
rocprofiler_counter_id_t* counters,
|
|
size_t num_counters,
|
|
void* user_data);
|
|
|
|
/**
|
|
* @brief Query Agent Counters Availability.
|
|
*
|
|
* @param [in] agent
|
|
* @param [in] cb callback to caller to get counters
|
|
* @param [in] user_data data to pass into the callback
|
|
* @return ::rocprofiler_status_t
|
|
*/
|
|
rocprofiler_status_t ROCPROFILER_API
|
|
rocprofiler_iterate_agent_supported_counters(rocprofiler_agent_t agent,
|
|
rocprofiler_available_counters_cb_t cb,
|
|
void* user_data) ROCPROFILER_NONNULL(2);
|
|
|
|
/** @} */
|
|
|
|
ROCPROFILER_EXTERN_C_FINI
|