// MIT License // // Copyright (c) 2023-2025 Advanced Micro Devices, Inc. All rights reserved. // // 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. #include #include #include #include #include #include "lib/common/utility.hpp" #include "lib/rocprofiler-sdk/hip/hip.hpp" #include "lib/rocprofiler-sdk/hsa/hsa.hpp" #include "lib/rocprofiler-sdk/marker/marker.hpp" #include "lib/rocprofiler-sdk/tests/common.hpp" #include TEST(rocprofiler_lib, api_id_names) { auto callback_names = get_callback_tracing_names(); auto buffered_names = get_buffer_tracing_names(); EXPECT_EQ(callback_names.kind_names.size(), ROCPROFILER_CALLBACK_TRACING_LAST); EXPECT_EQ(buffered_names.kind_names.size(), ROCPROFILER_BUFFER_TRACING_LAST); // HSA callback EXPECT_EQ(callback_names.operation_names.at(ROCPROFILER_CALLBACK_TRACING_HSA_CORE_API).size(), ROCPROFILER_HSA_CORE_API_ID_LAST); EXPECT_EQ( callback_names.operation_names.at(ROCPROFILER_CALLBACK_TRACING_HSA_AMD_EXT_API).size(), ROCPROFILER_HSA_AMD_EXT_API_ID_LAST); EXPECT_EQ( callback_names.operation_names.at(ROCPROFILER_CALLBACK_TRACING_HSA_IMAGE_EXT_API).size(), ROCPROFILER_HSA_IMAGE_EXT_API_ID_LAST); EXPECT_EQ( callback_names.operation_names.at(ROCPROFILER_CALLBACK_TRACING_HSA_FINALIZE_EXT_API).size(), ROCPROFILER_HSA_FINALIZE_EXT_API_ID_LAST); // HSA buffer EXPECT_EQ(buffered_names.operation_names.at(ROCPROFILER_BUFFER_TRACING_HSA_CORE_API).size(), ROCPROFILER_HSA_CORE_API_ID_LAST); EXPECT_EQ(buffered_names.operation_names.at(ROCPROFILER_BUFFER_TRACING_HSA_AMD_EXT_API).size(), ROCPROFILER_HSA_AMD_EXT_API_ID_LAST); EXPECT_EQ( buffered_names.operation_names.at(ROCPROFILER_BUFFER_TRACING_HSA_IMAGE_EXT_API).size(), ROCPROFILER_HSA_IMAGE_EXT_API_ID_LAST); EXPECT_EQ( buffered_names.operation_names.at(ROCPROFILER_BUFFER_TRACING_HSA_FINALIZE_EXT_API).size(), ROCPROFILER_HSA_FINALIZE_EXT_API_ID_LAST); // HIP callback EXPECT_EQ( callback_names.operation_names.at(ROCPROFILER_CALLBACK_TRACING_HIP_RUNTIME_API).size(), ROCPROFILER_HIP_RUNTIME_API_ID_LAST); EXPECT_EQ( callback_names.operation_names.at(ROCPROFILER_CALLBACK_TRACING_HIP_COMPILER_API).size(), ROCPROFILER_HIP_COMPILER_API_ID_LAST); // HIP buffer EXPECT_EQ(buffered_names.operation_names.at(ROCPROFILER_BUFFER_TRACING_HIP_RUNTIME_API).size(), ROCPROFILER_HIP_RUNTIME_API_ID_LAST); EXPECT_EQ(buffered_names.operation_names.at(ROCPROFILER_BUFFER_TRACING_HIP_COMPILER_API).size(), ROCPROFILER_HIP_COMPILER_API_ID_LAST); // Marker callback EXPECT_EQ( callback_names.operation_names.at(ROCPROFILER_CALLBACK_TRACING_MARKER_CORE_API).size(), ROCPROFILER_MARKER_CORE_API_ID_LAST); EXPECT_EQ( callback_names.operation_names.at(ROCPROFILER_CALLBACK_TRACING_MARKER_CONTROL_API).size(), ROCPROFILER_MARKER_CONTROL_API_ID_LAST); EXPECT_EQ( callback_names.operation_names.at(ROCPROFILER_CALLBACK_TRACING_MARKER_NAME_API).size(), ROCPROFILER_MARKER_NAME_API_ID_LAST); // Marker buffer EXPECT_EQ(buffered_names.operation_names.at(ROCPROFILER_BUFFER_TRACING_MARKER_CORE_API).size(), ROCPROFILER_MARKER_CORE_API_ID_LAST); EXPECT_EQ( buffered_names.operation_names.at(ROCPROFILER_BUFFER_TRACING_MARKER_CONTROL_API).size(), ROCPROFILER_MARKER_CONTROL_API_ID_LAST); EXPECT_EQ(buffered_names.operation_names.at(ROCPROFILER_BUFFER_TRACING_MARKER_NAME_API).size(), ROCPROFILER_MARKER_NAME_API_ID_LAST); // Code object callback EXPECT_EQ(callback_names.operation_names.at(ROCPROFILER_CALLBACK_TRACING_CODE_OBJECT).size(), ROCPROFILER_CODE_OBJECT_LAST); { auto hsa_core_ids = ::rocprofiler::hsa::get_ids(); auto hsa_amd_ext_ids = ::rocprofiler::hsa::get_ids(); auto hsa_img_ext_ids = ::rocprofiler::hsa::get_ids(); auto hsa_fini_ext_ids = ::rocprofiler::hsa::get_ids(); auto hsa_core_names = ::rocprofiler::hsa::get_names(); auto hsa_amd_ext_names = ::rocprofiler::hsa::get_names(); auto hsa_img_ext_names = ::rocprofiler::hsa::get_names(); auto hsa_fini_ext_names = ::rocprofiler::hsa::get_names(); ASSERT_EQ(hsa_core_ids.size(), hsa_core_names.size()); ASSERT_EQ(hsa_amd_ext_ids.size(), hsa_amd_ext_names.size()); ASSERT_EQ(hsa_img_ext_ids.size(), hsa_img_ext_names.size()); ASSERT_EQ(hsa_fini_ext_ids.size(), hsa_fini_ext_names.size()); for(auto itr : hsa_core_ids) { EXPECT_EQ(std::string_view{hsa_core_names.at(itr)}, callback_names.operation_names.at(ROCPROFILER_CALLBACK_TRACING_HSA_CORE_API) .at(itr)); EXPECT_EQ(itr, ::rocprofiler::hsa::id_by_name( hsa_core_names.at(itr))); EXPECT_EQ( std::string_view{ ::rocprofiler::hsa::name_by_id(itr)}, std::string_view{hsa_core_names.at(itr)}); } for(auto itr : hsa_amd_ext_ids) { EXPECT_EQ( std::string_view{hsa_amd_ext_names.at(itr)}, callback_names.operation_names.at(ROCPROFILER_CALLBACK_TRACING_HSA_AMD_EXT_API) .at(itr)); EXPECT_EQ(itr, ::rocprofiler::hsa::id_by_name( hsa_amd_ext_names.at(itr))); EXPECT_EQ( std::string_view{ ::rocprofiler::hsa::name_by_id(itr)}, std::string_view{hsa_amd_ext_names.at(itr)}); } for(auto itr : hsa_img_ext_ids) { EXPECT_EQ( std::string_view{hsa_img_ext_names.at(itr)}, callback_names.operation_names.at(ROCPROFILER_CALLBACK_TRACING_HSA_IMAGE_EXT_API) .at(itr)); EXPECT_EQ(itr, ::rocprofiler::hsa::id_by_name( hsa_img_ext_names.at(itr))); EXPECT_EQ( std::string_view{ ::rocprofiler::hsa::name_by_id(itr)}, std::string_view{hsa_img_ext_names.at(itr)}); } for(auto itr : hsa_fini_ext_ids) { EXPECT_EQ( std::string_view{hsa_fini_ext_names.at(itr)}, callback_names.operation_names.at(ROCPROFILER_CALLBACK_TRACING_HSA_FINALIZE_EXT_API) .at(itr)); EXPECT_EQ(itr, ::rocprofiler::hsa::id_by_name( hsa_fini_ext_names.at(itr))); EXPECT_EQ( std::string_view{ ::rocprofiler::hsa::name_by_id(itr)}, std::string_view{hsa_fini_ext_names.at(itr)}); } } { auto hip_comp_ids = ::rocprofiler::hip::get_ids(); auto hip_run_ids = ::rocprofiler::hip::get_ids(); auto hip_comp_names = ::rocprofiler::hip::get_names(); auto hip_run_names = ::rocprofiler::hip::get_names(); ASSERT_EQ(hip_comp_ids.size(), hip_comp_names.size()); ASSERT_EQ(hip_run_ids.size(), hip_run_names.size()); for(auto itr : hip_comp_ids) { EXPECT_EQ( std::string_view{hip_comp_names.at(itr)}, callback_names.operation_names.at(ROCPROFILER_CALLBACK_TRACING_HIP_COMPILER_API) .at(itr)); EXPECT_EQ(itr, ::rocprofiler::hip::id_by_name( hip_comp_names.at(itr))); EXPECT_EQ( std::string_view{ ::rocprofiler::hip::name_by_id(itr)}, std::string_view{hip_comp_names.at(itr)}); } for(auto itr : hip_run_ids) { EXPECT_EQ( std::string_view{hip_run_names.at(itr)}, callback_names.operation_names.at(ROCPROFILER_CALLBACK_TRACING_HIP_RUNTIME_API) .at(itr)); EXPECT_EQ(itr, ::rocprofiler::hip::id_by_name( hip_run_names.at(itr))); EXPECT_EQ( std::string_view{ ::rocprofiler::hip::name_by_id(itr)}, std::string_view{hip_run_names.at(itr)}); } } { auto marker_core_ids = ::rocprofiler::marker::get_ids(); auto marker_ctrl_ids = ::rocprofiler::marker::get_ids(); auto marker_name_ids = ::rocprofiler::marker::get_ids(); auto marker_core_names = ::rocprofiler::marker::get_names(); auto marker_ctrl_names = ::rocprofiler::marker::get_names(); auto marker_name_names = ::rocprofiler::marker::get_names(); ASSERT_EQ(marker_core_ids.size(), marker_core_names.size()); ASSERT_EQ(marker_ctrl_ids.size(), marker_ctrl_names.size()); ASSERT_EQ(marker_name_ids.size(), marker_name_names.size()); for(auto itr : marker_core_ids) { EXPECT_EQ( std::string_view{marker_core_names.at(itr)}, callback_names.operation_names.at(ROCPROFILER_CALLBACK_TRACING_MARKER_CORE_API) .at(itr)); EXPECT_EQ(itr, ::rocprofiler::marker::id_by_name( marker_core_names.at(itr))); EXPECT_EQ( std::string_view{ ::rocprofiler::marker::name_by_id(itr)}, std::string_view{marker_core_names.at(itr)}); } for(auto itr : marker_ctrl_ids) { EXPECT_EQ( std::string_view{marker_ctrl_names.at(itr)}, callback_names.operation_names.at(ROCPROFILER_CALLBACK_TRACING_MARKER_CONTROL_API) .at(itr)); EXPECT_EQ(itr, ::rocprofiler::marker::id_by_name( marker_ctrl_names.at(itr))); EXPECT_EQ( std::string_view{ ::rocprofiler::marker::name_by_id( itr)}, std::string_view{marker_ctrl_names.at(itr)}); } for(auto itr : marker_name_ids) { EXPECT_EQ( std::string_view{marker_name_names.at(itr)}, callback_names.operation_names.at(ROCPROFILER_CALLBACK_TRACING_MARKER_NAME_API) .at(itr)); EXPECT_EQ(itr, ::rocprofiler::marker::id_by_name( marker_name_names.at(itr))); EXPECT_EQ( std::string_view{ ::rocprofiler::marker::name_by_id(itr)}, std::string_view{marker_name_names.at(itr)}); } } }