[rocprofv3] Reorganize rocprofv3.avail python package (#175)

* Reorganize rocprofv3 python package

adding Python version candidates

review fix

fix test

fix

remove extra line

fix the exception handle

fix Lint fail

fix installation

adding checks to check version format

disable test for address sanitizer

* review comments

* Removing extra lines

* fix format

* Add lib/python3/site-packages to PYTHONPATH in setup-env.sh

* rocprof-compute update rocprofv3 avail lib path

* Make rocprofv3 python binding build commands consistent with other python bindings

* fix cmake

* fix rocprof-compute

* revert cmake changes

* fix rocprofv3 avail python library

* fix cmake

* fix cmake

---------

Co-authored-by: Jonathan R. Madsen <jonathanrmadsen@gmail.com>
Co-authored-by: Sriraksha Nagaraj <Sriraksha.Nagaraj@amd.com>
Co-authored-by: Jonathan R. Madsen <Jonathan.Madsen@amd.com>
Co-authored-by: systems-assistant[bot] <systems-assistant[bot]@users.noreply.github.com>
Co-authored-by: Jonathan R. Madsen <jrmadsen@users.noreply.github.com>
Co-authored-by: SrirakshaNag <104580803+SrirakshaNag@users.noreply.github.com>
Co-authored-by: Vignesh Edithal <Vignesh.Edithal@amd.com>
Этот коммит содержится в:
systems-assistant[bot]
2025-10-17 08:27:17 -07:00
коммит произвёл GitHub
родитель 02294e3852
Коммит 6b109c11c4
12 изменённых файлов: 108 добавлений и 74 удалений
+27 -27
Просмотреть файл
@@ -468,35 +468,35 @@ class OmniSoC_Base:
f"{get_submodules('rocprof_compute_profile')}"
)
# Point to counter definition
old_rocprofiler_metrics_path = os.environ.get("ROCPROFILER_METRICS_PATH")
os.environ["ROCPROFILER_METRICS_PATH"] = str(
config.rocprof_compute_home / "rocprof_compute_soc" / "profile_configs"
)
sys.path.append(
str(
Path(self.get_args().rocprofiler_sdk_library_path).parent.parent / "bin"
# Point to counter definition
old_rocprofiler_metrics_path = os.environ.get("ROCPROFILER_METRICS_PATH")
os.environ["ROCPROFILER_METRICS_PATH"] = str(
config.rocprof_compute_home / "rocprof_compute_soc" / "profile_configs"
)
)
from rocprofv3_avail_module import avail
sys.path.append(
str(
Path(self.get_args().rocprofiler_sdk_library_path).parent
/ "python3/site-packages"
)
)
from rocprofv3 import avail
avail.loadLibrary.libname = str(
Path(self.get_args().rocprofiler_sdk_library_path).parent.parent
/ "lib"
/ "rocprofiler-sdk"
/ "librocprofv3-list-avail.so"
)
counters = avail.get_counters()
rocprof_counters = {
counter.name
for counter in counters[list(counters.keys())[0]]
if hasattr(counter, "block") or hasattr(counter, "expression")
}
# Reset env. var.
if old_rocprofiler_metrics_path is None:
del os.environ["ROCPROFILER_METRICS_PATH"]
else:
os.environ["ROCPROFILER_METRICS_PATH"] = old_rocprofiler_metrics_path
avail.loadLibrary.libname = str(
Path(args.rocprofiler_sdk_library_path).parent
/ "rocprofiler-sdk"
/ "librocprofv3-list-avail.so"
)
counters = avail.get_counters()
rocprof_counters = {
counter.name
for counter in counters[list(counters.keys())[0]]
if hasattr(counter, "block") or hasattr(counter, "expression")
}
# Reset env. var.
if old_rocprofiler_metrics_path is None:
del os.environ["ROCPROFILER_METRICS_PATH"]
else:
os.environ["ROCPROFILER_METRICS_PATH"] = old_rocprofiler_metrics_path
return rocprof_counters
+1 -1
Просмотреть файл
@@ -12,5 +12,5 @@ setenv @PACKAGE_NAME_UNDERSCORED@_ROOT "${ROOT}"
prepend-path CMAKE_PREFIX_PATH "${ROOT}"
prepend-path PATH "${ROOT}/bin"
prepend-path LD_LIBRARY_PATH "${ROOT}/@CMAKE_INSTALL_LIBDIR@"
prepend-path PYTHONPATH "${ROOT}/@CMAKE_INSTALL_PYTHONDIR@"
prepend-path PYTHONPATH "${ROOT}/@CMAKE_INSTALL_LIBDIR@/python3/site-packages"
setenv @PACKAGE_NAME_UNDERSCORED@_DIR "${ROOT}/@CMAKE_INSTALL_LIBDIR@/cmake/@PACKAGE_NAME@"
+2 -2
Просмотреть файл
@@ -27,9 +27,9 @@ LD_LIBRARY_PATH=${BASEDIR}/@CMAKE_INSTALL_LIBDIR@:${LD_LIBRARY_PATH}
CMAKE_PREFIX_PATH=${BASEDIR}:${CMAKE_PREFIX_PATH}
if [ -z "@CMAKE_INSTALL_PYTHONDIR@" ]; then
PYTHONPATH=$(@PACKAGE_NAME_UNDERSCORED@_get_python3_path):${PYTHONPATH}
PYTHONPATH=$(@PACKAGE_NAME_UNDERSCORED@_get_python3_path):${BASEDIR}/@CMAKE_INSTALL_LIBDIR@/python3/site-packages:${PYTHONPATH}
else
PYTHONPATH=${BASEDIR}/@CMAKE_INSTALL_PYTHONDIR@:${PYTHONPATH}
PYTHONPATH=${BASEDIR}/@CMAKE_INSTALL_PYTHONDIR@:${BASEDIR}/@CMAKE_INSTALL_LIBDIR@/python3/site-packages:${PYTHONPATH}
fi
unset @PACKAGE_NAME_UNDERSCORED@_get_python3_path
-2
Просмотреть файл
@@ -4,8 +4,6 @@
rocprofiler_activate_clang_tidy()
add_subdirectory(rocprofv3_avail_module)
# Adding main rocprofv3
configure_file(rocprofv3.py ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}/rocprofv3 @ONLY)
+25 -2
Просмотреть файл
@@ -25,7 +25,6 @@
import os
import argparse
import sys
from rocprofv3_avail_module import avail
def format_help(formatter, w=120, h=40):
@@ -126,7 +125,7 @@ def parse_arguments(args=None):
# Create the parser
parser = argparse.ArgumentParser(
description="ROCProfilerV3-avail Run Script",
description="rocprofv3 query tool for agents, counters, pc-sampling, and more",
usage="%(prog)s [options] ",
epilog=usage_examples,
formatter_class=format_help(argparse.RawTextHelpFormatter),
@@ -196,6 +195,8 @@ def get_number_columns(max_name_len):
def list_basic_agent(args, list_counters):
from rocprofv3 import avail
def print_agent_counter(counters):
names_len = [len(counter.name) for counter in counters]
names = [
@@ -235,6 +236,8 @@ def list_basic_agent(args, list_counters):
def list_pc_sampling(args):
from rocprofv3 import avail
sampling_agents = avail.get_pc_sample_configs()
agent_info_map = avail.get_agent_info_map()
print("Agents supporting PC Sampling\n")
@@ -249,6 +252,8 @@ def list_pc_sampling(args):
def info_pc_sampling(args):
from rocprofv3 import avail
sampling_agents = avail.get_pc_sample_configs()
agent_info_map = avail.get_agent_info_map()
for agent, configs in dict(sorted(sampling_agents.items())).items():
@@ -267,6 +272,8 @@ def info_pc_sampling(args):
def listing(args):
from rocprofv3 import avail
def print_agent_counter(counters):
names_len = [len(counter.name) for counter in counters]
names = [
@@ -306,6 +313,8 @@ def listing(args):
def info_pmc(args):
from rocprofv3 import avail
agent_counters = avail.get_counters()
agent_info_map = avail.get_agent_info_map()
@@ -367,6 +376,8 @@ def process_list(args):
def process_pmc_check(args):
from rocprofv3 import avail
def get_device_agent(device_id):
for agent, info in agent_info_map.items():
if info["type"] == 2 and info["logical_node_type_id"] == device_id:
@@ -469,6 +480,18 @@ def main(argv=None):
f"{ROCM_DIR}/lib/rocprofiler-sdk/librocprofv3-list-avail.so"
)
os.environ["ROCPROFILER_METRICS_PATH"] = f"{ROCM_DIR}/share/rocprofiler-sdk"
try:
# try to import rocprofv3 normally
from rocprofv3 import avail
except (ImportError, ModuleNotFoundError):
# if failed, find the python package for this python version
ROCPROFV3_AVAIL_PACKAGE = (
f"{ROCM_DIR}/lib/python{sys.version_info[0]}/site-packages"
)
sys.path.append(ROCPROFV3_AVAIL_PACKAGE)
from rocprofv3 import avail
avail.loadLibrary.libname = os.environ.get(
"ROCPROF_LIST_AVAIL_TOOL_LIBRARY", ROCPROF_LIST_AVAIL_TOOL_LIBRARY
)
+1
Просмотреть файл
@@ -16,3 +16,4 @@ endif()
add_subdirectory(roctx)
add_subdirectory(rocpd)
add_subdirectory(rocprofv3)
@@ -20,18 +20,7 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
set(PACKAGE_OUTPUT_DIR
${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}/rocprofv3_avail_module)
set(rocprofv3_PYTHON_SOURCES __init__.py avail.py)
rocprofiler_rocprofv3_python(${rocprofv3_PYTHON_SOURCES})
set(ROCPROFV3_AVAIL_SOURCES __init__.py avail.py)
foreach(_FILE ${ROCPROFV3_AVAIL_SOURCES})
configure_file(${CMAKE_CURRENT_LIST_DIR}/${_FILE} ${PACKAGE_OUTPUT_DIR}/${_FILE}
COPYONLY)
install(
FILES ${PACKAGE_OUTPUT_DIR}/${_FILE}
DESTINATION ${CMAKE_INSTALL_BINDIR}/rocprofv3_avail_module
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE
COMPONENT tools)
endforeach()
rocprofiler_reset_python3_cache()
+20
Просмотреть файл
@@ -210,3 +210,23 @@ function(rocprofiler_rocpd_python_bindings _VERSION)
DESTINATION ${rocpd_PYTHON_INSTALL_DIRECTORY}
COMPONENT rocpd)
endfunction()
function(rocprofiler_rocprofv3_python)
set(rocprofv3_PYTHON_INSTALL_DIRECTORY
${CMAKE_INSTALL_LIBDIR}/python3/site-packages/rocprofv3)
set(rocprofv3_PYTHON_OUTPUT_DIRECTORY
${PROJECT_BINARY_DIR}/${rocprofv3_PYTHON_INSTALL_DIRECTORY})
set(rocprofv3_PYTHON_SOURCES ${ARGN})
if(NOT rocprofv3_PYTHON_SOURCES)
message(
FATAL_ERROR "rocprofiler_rocprofv3_python requires specifying source files")
endif()
foreach(_SOURCE ${rocprofv3_PYTHON_SOURCES})
configure_file(${CMAKE_CURRENT_LIST_DIR}/${_SOURCE}
${rocprofv3_PYTHON_OUTPUT_DIRECTORY}/${_SOURCE} COPYONLY)
install(
FILES ${rocprofv3_PYTHON_OUTPUT_DIRECTORY}/${_SOURCE}
DESTINATION ${rocprofv3_PYTHON_INSTALL_DIRECTORY}
COMPONENT tools)
endforeach()
endfunction()
+16 -24
Просмотреть файл
@@ -78,29 +78,21 @@ set_tests_properties(
PROPERTIES TIMEOUT 45 LABELS "integration-tests" ENVIRONMENT
"${test-rocprofv3-avail-env}" DISABLED "${IS_DISABLED}")
if(TARGET rocprofv3-list-avail)
add_test(NAME rocprofv3-avail-test-validate
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/validate.py
--rocm-path ${rocprofiler-sdk_ROOT_DIR})
add_test(NAME rocprofv3-avail-test-validate
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/validate.py
--rocm-path ${CMAKE_BINARY_DIR})
set(test-rocprofv3-avail-validate-env "${PRELOAD_ENV}" "PYTHONPATH=$ENV{PYTHONPATH}")
# for validate, explicitly set ROCPROF_LIST_AVAIL_TOOL_LIBRARY since we copy
# rocprofv3-avail to directory
set(test-rocprofv3-avail-validate-env
"${PRELOAD_ENV}" "PYTHONPATH=$ENV{PYTHONPATH}:${CMAKE_BINARY_DIR}/bin/")
set_tests_properties(
rocprofv3-avail-test-validate
PROPERTIES TIMEOUT
45
LABELS
"integration-tests"
ENVIRONMENT
"${test-rocprofv3-avail-validate-env}"
FAIL_REGULAR_EXPRESSION
"${ROCPROFILER_DEFAULT_FAIL_REGEX}"
DEPENDS
rocprofv3-avail-test-copy-module
DISABLED
"${IS_DISABLED}")
endif()
set_tests_properties(
rocprofv3-avail-test-validate
PROPERTIES TIMEOUT
45
LABELS
"integration-tests"
ENVIRONMENT
"${test-rocprofv3-avail-validate-env}"
FAIL_REGULAR_EXPRESSION
"${ROCPROFILER_DEFAULT_FAIL_REGEX}"
DISABLED
"${IS_DISABLED}")
+13 -2
Просмотреть файл
@@ -22,16 +22,17 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
import pandas as pd
import sys
import os
import pytest
from rocprofv3_avail_module import avail
import ctypes
def test_validate_metrics(rocm_path):
set_library(rocm_path)
from rocprofv3 import avail
lib = avail.get_library()
agent_counters_dict = avail.get_counters()
@@ -54,6 +55,9 @@ def test_validate_metrics(rocm_path):
def test_validate_list_pc_sample_config(rocm_path):
set_library(rocm_path)
from rocprofv3 import avail
lib = avail.get_library()
pc_sample_configs_dict = avail.get_pc_sample_configs()
@@ -73,6 +77,8 @@ def test_validate_list_pc_sample_config(rocm_path):
def test_counter_set(capsys, rocm_path):
set_library(rocm_path)
from rocprofv3 import avail
def get_counter_names(counter_ids):
counter_names = []
@@ -109,6 +115,11 @@ def test_counter_set(capsys, rocm_path):
def set_library(rocm_path):
ROCPROFV3_AVAIL_PACKAGE = f"{rocm_path}/lib/python{sys.version_info[0]}/site-packages"
sys.path.append(ROCPROFV3_AVAIL_PACKAGE)
from rocprofv3 import avail
ROCPROF_LIST_AVAIL_TOOL_LIBRARY = (
f"{rocm_path}/lib/rocprofiler-sdk/librocprofv3-list-avail.so"
)