Update documentation and add python API documentation
Change-Id: Ibccf5b6a5fba81cea42e04a022deac8a3207b9b8
[ROCm/rocm_smi_lib commit: 50a079af0f]
这个提交包含在:
@@ -3,12 +3,14 @@
|
||||
# any tracked files which get ignored after the change.
|
||||
|
||||
# VisualStudioCode
|
||||
.venv/
|
||||
.vscode/
|
||||
_build
|
||||
|
||||
# below files are generated via CMake
|
||||
include/rocm_smi/rocm_smi64Config.h
|
||||
oam/include/oam/oamConfig.h
|
||||
python_smi_tools/rsmiBindings.py
|
||||
python_smi_tools/rsmiBindingsInit.py
|
||||
|
||||
# Build directory
|
||||
build/
|
||||
@@ -28,3 +30,6 @@ README.html
|
||||
!.clang-format
|
||||
!.clang-tidy
|
||||
!.clangd
|
||||
|
||||
# avoid duplicating contributing.md due to conf.py
|
||||
docs/CHANGELOG.md
|
||||
@@ -0,0 +1,34 @@
|
||||
====================
|
||||
C++ Tutorials
|
||||
====================
|
||||
|
||||
This chapter contains the ROCm SMI C++ API tutorials.
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
#include <stdint.h>
|
||||
#include "rocm_smi/rocm_smi.h"
|
||||
int main() {
|
||||
|
||||
rsmi_status_t ret;
|
||||
uint32_t num_devices;
|
||||
uint16_t dev_id;
|
||||
|
||||
// We will skip return code checks for this example, but it
|
||||
// is recommended to always check this as some calls may not
|
||||
// apply for some devices or ROCm releases
|
||||
|
||||
ret = rsmi_init(0);
|
||||
ret = rsmi_num_monitor_devices(&num_devices);
|
||||
|
||||
for (int i=0; i < num_devices; ++i) {
|
||||
ret = rsmi_dev_id_get(i, &dev_id);
|
||||
// dev_id holds the device ID of device i, upon a
|
||||
// successful call
|
||||
}
|
||||
ret = rsmi_shut_down();
|
||||
return 0;
|
||||
}
|
||||
|
||||
For more examples please check the `C++ example <https://github.com/ROCm/rocm_smi_lib/blob/develop/rocm_smi/example/rocm_smi_example.cc>`_
|
||||
or `tests. <https://github.com/ROCm/rocm_smi_lib/tree/develop/tests/rocm_smi_test/functional>`_
|
||||
@@ -0,0 +1,2 @@
|
||||
```{include} ../README.md
|
||||
```
|
||||
@@ -5,9 +5,18 @@
|
||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html
|
||||
|
||||
import re
|
||||
import pathlib
|
||||
import shutil
|
||||
import sys
|
||||
|
||||
from rocm_docs import ROCmDocs
|
||||
|
||||
# We need to add the location of the rocrand Python module to the PATH
|
||||
# in order to build the documentation of that module
|
||||
docs_dir_path = pathlib.Path(__file__).parent
|
||||
python_dir_path = docs_dir_path.parent / 'python_smi_tools'
|
||||
sys.path.append(str(python_dir_path))
|
||||
|
||||
with open('../CMakeLists.txt', encoding='utf-8') as f:
|
||||
match = re.search(r'get_package_version_number\(\"?([0-9.]+)[^0-9.]+', f.read())
|
||||
if not match:
|
||||
@@ -15,6 +24,8 @@ with open('../CMakeLists.txt', encoding='utf-8') as f:
|
||||
version_number = match[1]
|
||||
left_nav_title = f"ROCm SMI LIB {version_number} Documentation"
|
||||
|
||||
shutil.copy2('../CHANGELOG.md','./CHANGELOG.md')
|
||||
|
||||
# for PDF output on Read the Docs
|
||||
project = "ROCm SMI LIB Documentation"
|
||||
author = "Advanced Micro Devices, Inc."
|
||||
@@ -31,5 +42,9 @@ docs_core.setup()
|
||||
|
||||
external_projects_current_project = "rocm_smi_lib"
|
||||
|
||||
suppress_warnings = ["etoc.toctree"]
|
||||
|
||||
for sphinx_var in ROCmDocs.SPHINX_VARS:
|
||||
globals()[sphinx_var] = getattr(docs_core, sphinx_var)
|
||||
|
||||
extensions += ['sphinx.ext.mathjax']
|
||||
@@ -81,17 +81,6 @@ OUTPUT_DIRECTORY = .
|
||||
|
||||
CREATE_SUBDIRS = NO
|
||||
|
||||
# Controls the number of sub-directories that will be created when
|
||||
# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every
|
||||
# level increment doubles the number of directories, resulting in 4096
|
||||
# directories at level 8 which is the default and also the maximum value. The
|
||||
# sub-directories are organized in 2 levels, the first level always has a fixed
|
||||
# number of 16 directories.
|
||||
# Minimum value: 0, maximum value: 8, default value: 8.
|
||||
# This tag requires that the tag CREATE_SUBDIRS is set to YES.
|
||||
|
||||
CREATE_SUBDIRS_LEVEL = 8
|
||||
|
||||
# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
|
||||
# characters to appear in the names of generated files. If set to NO, non-ASCII
|
||||
# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
|
||||
@@ -231,14 +220,6 @@ QT_AUTOBRIEF = NO
|
||||
|
||||
MULTILINE_CPP_IS_BRIEF = NO
|
||||
|
||||
# By default Python docstrings are displayed as preformatted text and doxygen's
|
||||
# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the
|
||||
# doxygen's special commands can be used and the contents of the docstring
|
||||
# documentation blocks is shown as doxygen documentation.
|
||||
# The default value is: YES.
|
||||
|
||||
PYTHON_DOCSTRING = YES
|
||||
|
||||
# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
|
||||
# documentation from any documented member that it re-implements.
|
||||
# The default value is: YES.
|
||||
@@ -464,19 +445,6 @@ TYPEDEF_HIDES_STRUCT = NO
|
||||
|
||||
LOOKUP_CACHE_SIZE = 0
|
||||
|
||||
# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use
|
||||
# during processing. When set to 0 doxygen will based this on the number of
|
||||
# cores available in the system. You can set it explicitly to a value larger
|
||||
# than 0 to get more control over the balance between CPU load and processing
|
||||
# speed. At this moment only the input processing can be done using multiple
|
||||
# threads. Since this is still an experimental feature the default is set to 1,
|
||||
# which effectively disables parallel processing. Please report any issues you
|
||||
# encounter. Generating dot graphs in parallel is controlled by the
|
||||
# DOT_NUM_THREADS setting.
|
||||
# Minimum value: 0, maximum value: 32, default value: 1.
|
||||
|
||||
NUM_PROC_THREADS = 1
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Build related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
@@ -540,12 +508,6 @@ EXTRACT_LOCAL_METHODS = NO
|
||||
|
||||
EXTRACT_ANON_NSPACES = NO
|
||||
|
||||
# If this flag is set to YES, the name of an unnamed parameter in a declaration
|
||||
# will be determined by the corresponding definition. By default unnamed
|
||||
# parameters remain unnamed in the output.
|
||||
# The default value is: YES.
|
||||
|
||||
RESOLVE_UNNAMED_PARAMS = YES
|
||||
|
||||
# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
|
||||
# undocumented members inside documented classes or files. If set to NO these
|
||||
@@ -616,12 +578,6 @@ HIDE_SCOPE_NAMES = NO
|
||||
|
||||
HIDE_COMPOUND_REFERENCE= NO
|
||||
|
||||
# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class
|
||||
# will show which file needs to be included to use the class.
|
||||
# The default value is: YES.
|
||||
|
||||
SHOW_HEADERFILE = YES
|
||||
|
||||
# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
|
||||
# the files that are included by a file in the documentation of that file.
|
||||
# The default value is: YES.
|
||||
@@ -833,13 +789,6 @@ WARN_IF_UNDOCUMENTED = YES
|
||||
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
|
||||
# If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete
|
||||
# function parameter documentation. If set to NO, doxygen will accept that some
|
||||
# parameters have no documentation without warning.
|
||||
# The default value is: YES.
|
||||
|
||||
WARN_IF_INCOMPLETE_DOC = YES
|
||||
|
||||
# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
|
||||
# are documented, but have no documentation for their parameters or return
|
||||
# value. If set to NO, doxygen will only warn about wrong parameter
|
||||
@@ -850,14 +799,6 @@ WARN_IF_INCOMPLETE_DOC = YES
|
||||
|
||||
WARN_NO_PARAMDOC = NO
|
||||
|
||||
# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, doxygen will warn about
|
||||
# undocumented enumeration values. If set to NO, doxygen will accept
|
||||
# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag
|
||||
# will automatically be disabled.
|
||||
# The default value is: NO.
|
||||
|
||||
WARN_IF_UNDOC_ENUM_VAL = NO
|
||||
|
||||
# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
|
||||
# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS
|
||||
# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but
|
||||
@@ -878,16 +819,6 @@ WARN_AS_ERROR = NO
|
||||
|
||||
WARN_FORMAT = "$file:$line: $text"
|
||||
|
||||
# In the $text part of the WARN_FORMAT command it is possible that a reference
|
||||
# to a more specific place is given. To make it easier to jump to this place
|
||||
# (outside of doxygen) the user can define a custom "cut" / "paste" string.
|
||||
# Example:
|
||||
# WARN_LINE_FORMAT = "'vi $file +$line'"
|
||||
# See also: WARN_FORMAT
|
||||
# The default value is: at line $line of file $file.
|
||||
|
||||
WARN_LINE_FORMAT = "at line $line of file $file"
|
||||
|
||||
# The WARN_LOGFILE tag can be used to specify a file to which warning and error
|
||||
# messages should be written. If left blank the output is written to standard
|
||||
# error (stderr). In case the file specified cannot be opened for writing the
|
||||
@@ -907,8 +838,7 @@ WARN_LOGFILE =
|
||||
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
|
||||
# Note: If this tag is empty the current directory is searched.
|
||||
|
||||
INPUT = ../../README.md \
|
||||
../../include/rocm_smi/rocm_smi.h
|
||||
INPUT = ../../include/rocm_smi/rocm_smi.h
|
||||
|
||||
# This tag can be used to specify the character encoding of the source files
|
||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
|
||||
@@ -920,16 +850,6 @@ INPUT = ../../README.md \
|
||||
|
||||
INPUT_ENCODING = UTF-8
|
||||
|
||||
# This tag can be used to specify the character encoding of the source files
|
||||
# that doxygen parses The INPUT_FILE_ENCODING tag can be used to specify
|
||||
# character encoding on a per file pattern basis. Doxygen will compare the file
|
||||
# name with each pattern and apply the encoding instead of the default
|
||||
# INPUT_ENCODING) if there is a match. The character encodings are a list of the
|
||||
# form: pattern=encoding (like *.php=ISO-8859-1). See cfg_input_encoding
|
||||
# "INPUT_ENCODING" for further information on supported encodings.
|
||||
|
||||
INPUT_FILE_ENCODING =
|
||||
|
||||
# If the value of the INPUT tag contains directories, you can use the
|
||||
# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
|
||||
# *.h) to filter out the source-files in the directories.
|
||||
@@ -1077,16 +997,7 @@ FILTER_SOURCE_PATTERNS =
|
||||
# (index.html). This can be useful if you have a project on for instance GitHub
|
||||
# and want to reuse the introduction page also for the doxygen output.
|
||||
|
||||
USE_MDFILE_AS_MAINPAGE = ../../README.md
|
||||
|
||||
# The Fortran standard specifies that for fixed formatted Fortran code all
|
||||
# characters from position 72 are to be considered as comment. A common
|
||||
# extension is to allow longer lines before the automatic comment starts. The
|
||||
# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can
|
||||
# be processed before the automatic comment starts.
|
||||
# Minimum value: 7, maximum value: 10000, default value: 72.
|
||||
|
||||
FORTRAN_COMMENT_AFTER = 72
|
||||
USE_MDFILE_AS_MAINPAGE =
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to source browsing
|
||||
@@ -1288,19 +1199,6 @@ HTML_EXTRA_STYLESHEET = ../_doxygen/extra_stylesheet.css
|
||||
|
||||
HTML_EXTRA_FILES =
|
||||
|
||||
# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output
|
||||
# should be rendered with a dark or light theme.
|
||||
# Possible values are: LIGHT always generate light mode output, DARK always
|
||||
# generate dark mode output, AUTO_LIGHT automatically set the mode according to
|
||||
# the user preference, use light mode if no preference is set (the default),
|
||||
# AUTO_DARK automatically set the mode according to the user preference, use
|
||||
# dark mode if no preference is set and TOGGLE allow to user to switch between
|
||||
# light and dark mode via a button.
|
||||
# The default value is: AUTO_LIGHT.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
HTML_COLORSTYLE = AUTO_LIGHT
|
||||
|
||||
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
|
||||
# will adjust the colors in the style sheet and background images according to
|
||||
# this color. Hue is specified as an angle on a color-wheel, see
|
||||
@@ -1395,13 +1293,6 @@ GENERATE_DOCSET = NO
|
||||
|
||||
DOCSET_FEEDNAME = "Doxygen generated docs"
|
||||
|
||||
# This tag determines the URL of the docset feed. A documentation feed provides
|
||||
# an umbrella under which multiple documentation sets from a single provider
|
||||
# (such as a company or product suite) can be grouped.
|
||||
# This tag requires that the tag GENERATE_DOCSET is set to YES.
|
||||
|
||||
DOCSET_FEEDURL =
|
||||
|
||||
# This tag specifies a string that should uniquely identify the documentation
|
||||
# set bundle. This should be a reverse domain-name style string, e.g.
|
||||
# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
|
||||
@@ -1601,18 +1492,6 @@ DISABLE_INDEX = NO
|
||||
|
||||
GENERATE_TREEVIEW = NO
|
||||
|
||||
# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the
|
||||
# FULL_SIDEBAR option determines if the side bar is limited to only the treeview
|
||||
# area (value NO) or if it should extend to the full height of the window (value
|
||||
# YES). Setting this to YES gives a layout similar to
|
||||
# https://docs.readthedocs.io with more room for contents, but less room for the
|
||||
# project logo, title, and description. If either GENERATE_TREEVIEW or
|
||||
# DISABLE_INDEX is set to NO, this option has no effect.
|
||||
# The default value is: NO.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
FULL_SIDEBAR = NO
|
||||
|
||||
# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
|
||||
# doxygen will group on one line in the generated HTML documentation.
|
||||
#
|
||||
@@ -1637,24 +1516,6 @@ TREEVIEW_WIDTH = 250
|
||||
|
||||
EXT_LINKS_IN_WINDOW = NO
|
||||
|
||||
# If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email
|
||||
# addresses.
|
||||
# The default value is: YES.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
OBFUSCATE_EMAILS = YES
|
||||
|
||||
# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg
|
||||
# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see
|
||||
# https://inkscape.org) to generate formulas as SVG images instead of PNGs for
|
||||
# the HTML output. These images will generally look nicer at scaled resolutions.
|
||||
# Possible values are: png (the default) and svg (looks nicer but requires the
|
||||
# pdf2svg or inkscape tool).
|
||||
# The default value is: png.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
HTML_FORMULA_FORMAT = png
|
||||
|
||||
# Use this tag to change the font size of LaTeX formulas included as images in
|
||||
# the HTML documentation. When you change the font size after a successful
|
||||
# doxygen run you need to manually remove any form_*.png images from the HTML
|
||||
@@ -1681,17 +1542,6 @@ FORMULA_MACROFILE =
|
||||
|
||||
USE_MATHJAX = NO
|
||||
|
||||
# With MATHJAX_VERSION it is possible to specify the MathJax version to be used.
|
||||
# Note that the different versions of MathJax have different requirements with
|
||||
# regards to the different settings, so it is possible that also other MathJax
|
||||
# settings have to be changed when switching between the different MathJax
|
||||
# versions.
|
||||
# Possible values are: MathJax_2 and MathJax_3.
|
||||
# The default value is: MathJax_2.
|
||||
# This tag requires that the tag USE_MATHJAX is set to YES.
|
||||
|
||||
MATHJAX_VERSION = MathJax_2
|
||||
|
||||
# When MathJax is enabled you can set the default output format to be used for
|
||||
# the MathJax output. For more details about the output format see MathJax
|
||||
# version 2 (see:
|
||||
@@ -2379,36 +2229,6 @@ HAVE_DOT = NO
|
||||
|
||||
DOT_NUM_THREADS = 0
|
||||
|
||||
# DOT_COMMON_ATTR is common attributes for nodes, edges and labels of
|
||||
# subgraphs. When you want a differently looking font in the dot files that
|
||||
# doxygen generates you can specify fontname, fontcolor and fontsize attributes.
|
||||
# For details please see <a href=https://graphviz.org/doc/info/attrs.html>Node,
|
||||
# Edge and Graph Attributes specification</a> You need to make sure dot is able
|
||||
# to find the font, which can be done by putting it in a standard location or by
|
||||
# setting the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
|
||||
# directory containing the font. Default graphviz fontsize is 14.
|
||||
# The default value is: fontname=Helvetica,fontsize=10.
|
||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||
|
||||
DOT_COMMON_ATTR = "fontname=Helvetica,fontsize=10"
|
||||
|
||||
# DOT_EDGE_ATTR is concatenated with DOT_COMMON_ATTR. For elegant style you can
|
||||
# add 'arrowhead=open, arrowtail=open, arrowsize=0.5'. <a
|
||||
# href=https://graphviz.org/doc/info/arrows.html>Complete documentation about
|
||||
# arrows shapes.</a>
|
||||
# The default value is: labelfontname=Helvetica,labelfontsize=10.
|
||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||
|
||||
DOT_EDGE_ATTR = "labelfontname=Helvetica,labelfontsize=10"
|
||||
|
||||
# DOT_NODE_ATTR is concatenated with DOT_COMMON_ATTR. For view without boxes
|
||||
# around nodes set 'shape=plain' or 'shape=plaintext' <a
|
||||
# href=https://www.graphviz.org/doc/info/shapes.html>Shapes specification</a>
|
||||
# The default value is: shape=box,height=0.2,width=0.4.
|
||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||
|
||||
DOT_NODE_ATTR = "shape=box,height=0.2,width=0.4"
|
||||
|
||||
# You can set the path where dot can find font specified with fontname in
|
||||
# DOT_COMMON_ATTR and others dot attributes.
|
||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||
@@ -2464,28 +2284,6 @@ UML_LOOK = NO
|
||||
|
||||
UML_LIMIT_NUM_FIELDS = 10
|
||||
|
||||
# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and
|
||||
# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS
|
||||
# tag is set to YES, doxygen will add type and arguments for attributes and
|
||||
# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen
|
||||
# will not generate fields with class member information in the UML graphs. The
|
||||
# class diagrams will look similar to the default class diagrams but using UML
|
||||
# notation for the relationships.
|
||||
# Possible values are: NO, YES and NONE.
|
||||
# The default value is: NO.
|
||||
# This tag requires that the tag UML_LOOK is set to YES.
|
||||
|
||||
DOT_UML_DETAILS = NO
|
||||
|
||||
# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters
|
||||
# to display on a single line. If the actual line length exceeds this threshold
|
||||
# significantly it will wrapped across multiple lines. Some heuristics are apply
|
||||
# to avoid ugly line breaks.
|
||||
# Minimum value: 0, maximum value: 1000, default value: 17.
|
||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||
|
||||
DOT_WRAP_THRESHOLD = 17
|
||||
|
||||
# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
|
||||
# collaboration graphs will show the relations between templates and their
|
||||
# instances.
|
||||
@@ -2552,13 +2350,6 @@ GRAPHICAL_HIERARCHY = YES
|
||||
|
||||
DIRECTORY_GRAPH = YES
|
||||
|
||||
# The DIR_GRAPH_MAX_DEPTH tag can be used to limit the maximum number of levels
|
||||
# of child directories generated in directory dependency graphs by dot.
|
||||
# Minimum value: 1, maximum value: 25, default value: 1.
|
||||
# This tag requires that the tag DIRECTORY_GRAPH is set to YES.
|
||||
|
||||
DIR_GRAPH_MAX_DEPTH = 1
|
||||
|
||||
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
|
||||
# generated by dot. For an explanation of the image formats see the section
|
||||
# output formats in the documentation of the dot tool (Graphviz (see:
|
||||
|
||||
@@ -0,0 +1,269 @@
|
||||
====================
|
||||
Python API Reference
|
||||
====================
|
||||
|
||||
This chapter describes the ROCm SMI Python module API.
|
||||
|
||||
.. default-domain:: py
|
||||
.. py:currentmodule:: rocm_smi
|
||||
|
||||
Functions
|
||||
---------
|
||||
|
||||
.. autofunction:: rocm_smi.driverInitialized
|
||||
|
||||
.. autofunction:: rocm_smi.formatJson
|
||||
|
||||
.. autofunction:: rocm_smi.formatCsv
|
||||
|
||||
.. autofunction:: rocm_smi.formatMatrixToJSON
|
||||
|
||||
.. autofunction:: rocm_smi.getBus
|
||||
|
||||
.. autofunction:: rocm_smi.getFanSpeed
|
||||
|
||||
.. autofunction:: rocm_smi.getGpuUse
|
||||
|
||||
.. autofunction:: rocm_smi.getDRMDeviceId
|
||||
|
||||
.. autofunction:: rocm_smi.getSubsystemId
|
||||
|
||||
.. autofunction:: rocm_smi.getVendor
|
||||
|
||||
.. autofunction:: rocm_smi.getGUID
|
||||
|
||||
.. autofunction:: rocm_smi.getTargetGfxVersion
|
||||
|
||||
.. autofunction:: rocm_smi.getNodeId
|
||||
|
||||
.. autofunction:: rocm_smi.getDeviceName
|
||||
|
||||
.. autofunction:: rocm_smi.getRev
|
||||
|
||||
.. autofunction:: rocm_smi.getMaxPower
|
||||
|
||||
.. autofunction:: rocm_smi.getMemInfo
|
||||
|
||||
.. autofunction:: rocm_smi.getProcessName
|
||||
|
||||
.. autofunction:: rocm_smi.getPerfLevel
|
||||
|
||||
.. autofunction:: rocm_smi.getPid
|
||||
|
||||
.. autofunction:: rocm_smi.getPidList
|
||||
|
||||
.. autofunction:: rocm_smi.getPower
|
||||
|
||||
.. autofunction:: rocm_smi.getRasEnablement
|
||||
|
||||
.. autofunction:: rocm_smi.getTemp
|
||||
|
||||
.. autofunction:: rocm_smi.findFirstAvailableTemp
|
||||
|
||||
.. autofunction:: rocm_smi.getTemperatureLabel
|
||||
|
||||
.. autofunction:: rocm_smi.getPowerLabel
|
||||
|
||||
.. autofunction:: rocm_smi.getVbiosVersion
|
||||
|
||||
.. autofunction:: rocm_smi.getVersion
|
||||
|
||||
.. autofunction:: rocm_smi.getComputePartition
|
||||
|
||||
.. autofunction:: rocm_smi.getMemoryPartition
|
||||
|
||||
.. autofunction:: rocm_smi.print2DArray
|
||||
|
||||
.. autofunction:: rocm_smi.printEmptyLine
|
||||
|
||||
.. autofunction:: rocm_smi.printErrLog
|
||||
|
||||
.. autofunction:: rocm_smi.printInfoLog
|
||||
|
||||
.. autofunction:: rocm_smi.printEventList
|
||||
|
||||
.. autofunction:: rocm_smi.printLog
|
||||
|
||||
.. autofunction:: rocm_smi.printListLog
|
||||
|
||||
.. autofunction:: rocm_smi.printLogSpacer
|
||||
|
||||
.. autofunction:: rocm_smi.printSysLog
|
||||
|
||||
.. autofunction:: rocm_smi.printTableLog
|
||||
|
||||
.. autofunction:: rocm_smi.printTableRow
|
||||
|
||||
.. autofunction:: rocm_smi.checkIfSecondaryDie
|
||||
|
||||
.. autofunction:: rocm_smi.resetClocks
|
||||
|
||||
.. autofunction:: rocm_smi.resetFans
|
||||
|
||||
.. autofunction:: rocm_smi.resetPowerOverDrive
|
||||
|
||||
.. autofunction:: rocm_smi.resetProfile
|
||||
|
||||
.. autofunction:: rocm_smi.resetXgmiErr
|
||||
|
||||
.. autofunction:: rocm_smi.resetPerfDeterminism
|
||||
|
||||
.. autofunction:: rocm_smi.resetComputePartition
|
||||
|
||||
.. autofunction:: rocm_smi.resetMemoryPartition
|
||||
|
||||
.. autofunction:: rocm_smi.setClockRange
|
||||
|
||||
.. autofunction:: rocm_smi.setClockExtremum
|
||||
|
||||
.. autofunction:: rocm_smi.setVoltageCurve
|
||||
|
||||
.. autofunction:: rocm_smi.setPowerPlayTableLevel
|
||||
|
||||
.. autofunction:: rocm_smi.setClockOverDrive
|
||||
|
||||
.. autofunction:: rocm_smi.setClocks
|
||||
|
||||
.. autofunction:: rocm_smi.setPerfDeterminism
|
||||
|
||||
.. autofunction:: rocm_smi.resetGpu
|
||||
|
||||
.. autofunction:: rocm_smi.isRasControlAvailable
|
||||
|
||||
.. autofunction:: rocm_smi.setRas
|
||||
|
||||
.. autofunction:: rocm_smi.setFanSpeed
|
||||
|
||||
.. autofunction:: rocm_smi.setPerformanceLevel
|
||||
|
||||
.. autofunction:: rocm_smi.setPowerOverDrive
|
||||
|
||||
.. autofunction:: rocm_smi.setProfile
|
||||
|
||||
.. autofunction:: rocm_smi.setComputePartition
|
||||
|
||||
.. autofunction:: rocm_smi.progressbar
|
||||
|
||||
.. autofunction:: rocm_smi.showProgressbar
|
||||
|
||||
.. autofunction:: rocm_smi.setMemoryPartition
|
||||
|
||||
.. autofunction:: rocm_smi.showVersion
|
||||
|
||||
.. autofunction:: rocm_smi.showAllConcise
|
||||
|
||||
.. autofunction:: rocm_smi.showAllConciseHw
|
||||
|
||||
.. autofunction:: rocm_smi.showBus
|
||||
|
||||
.. autofunction:: rocm_smi.showClocks
|
||||
|
||||
.. autofunction:: rocm_smi.showCurrentClocks
|
||||
|
||||
.. autofunction:: rocm_smi.showCurrentFans
|
||||
|
||||
.. autofunction:: rocm_smi.showCurrentTemps
|
||||
|
||||
.. autofunction:: rocm_smi.showFwInfo
|
||||
|
||||
.. autofunction:: rocm_smi.showGpusByPid
|
||||
|
||||
.. autofunction:: rocm_smi.getCoarseGrainUtil
|
||||
|
||||
.. autofunction:: rocm_smi.showGpuUse
|
||||
|
||||
.. autofunction:: rocm_smi.showEnergy
|
||||
|
||||
.. autofunction:: rocm_smi.showId
|
||||
|
||||
.. autofunction:: rocm_smi.showMaxPower
|
||||
|
||||
.. autofunction:: rocm_smi.showMemInfo
|
||||
|
||||
.. autofunction:: rocm_smi.showMemUse
|
||||
|
||||
.. autofunction:: rocm_smi.showMemVendor
|
||||
|
||||
.. autofunction:: rocm_smi.showOverDrive
|
||||
|
||||
.. autofunction:: rocm_smi.showPcieBw
|
||||
|
||||
.. autofunction:: rocm_smi.showPcieReplayCount
|
||||
|
||||
.. autofunction:: rocm_smi.showPerformanceLevel
|
||||
|
||||
.. autofunction:: rocm_smi.showPids
|
||||
|
||||
.. autofunction:: rocm_smi.showPower
|
||||
|
||||
.. autofunction:: rocm_smi.showPowerPlayTable
|
||||
|
||||
.. autofunction:: rocm_smi.showProduct
|
||||
|
||||
.. autofunction:: rocm_smi.showProfile
|
||||
|
||||
.. autofunction:: rocm_smi.showRange
|
||||
|
||||
.. autofunction:: rocm_smi.showRasInfo
|
||||
|
||||
.. autofunction:: rocm_smi.showRetiredPages
|
||||
|
||||
.. autofunction:: rocm_smi.showSerialNumber
|
||||
|
||||
.. autofunction:: rocm_smi.showUId
|
||||
|
||||
.. autofunction:: rocm_smi.showVbiosVersion
|
||||
|
||||
.. autofunction:: rocm_smi.showEvents
|
||||
|
||||
.. autofunction:: rocm_smi.showDriverVersion
|
||||
|
||||
.. autofunction:: rocm_smi.showVoltage
|
||||
|
||||
.. autofunction:: rocm_smi.showVoltageCurve
|
||||
|
||||
.. autofunction:: rocm_smi.showXgmiErr
|
||||
|
||||
.. autofunction:: rocm_smi.showAccessibleTopology
|
||||
|
||||
.. autofunction:: rocm_smi.showWeightTopology
|
||||
|
||||
.. autofunction:: rocm_smi.showHopsTopology
|
||||
|
||||
.. autofunction:: rocm_smi.showTypeTopology
|
||||
|
||||
.. autofunction:: rocm_smi.showNumaTopology
|
||||
|
||||
.. autofunction:: rocm_smi.showHwTopology
|
||||
|
||||
.. autofunction:: rocm_smi.showNodesBw
|
||||
|
||||
.. autofunction:: rocm_smi.showComputePartition
|
||||
|
||||
.. autofunction:: rocm_smi.showMemoryPartition
|
||||
|
||||
.. autofunction:: rocm_smi.checkAmdGpus
|
||||
|
||||
.. autofunction:: rocm_smi.component_str
|
||||
|
||||
.. autofunction:: rocm_smi.confirmOutOfSpecWarning
|
||||
|
||||
.. autofunction:: rocm_smi.doesDeviceExist
|
||||
|
||||
.. autofunction:: rocm_smi.initializeRsmi
|
||||
|
||||
.. autofunction:: rocm_smi.isAmdDevice
|
||||
|
||||
.. autofunction:: rocm_smi.listDevices
|
||||
|
||||
.. autofunction:: rocm_smi.load
|
||||
|
||||
.. autofunction:: rocm_smi.padHexValue
|
||||
|
||||
.. autofunction:: rocm_smi.profileString
|
||||
|
||||
.. autofunction:: rocm_smi.relaunchAsSudo
|
||||
|
||||
.. autofunction:: rocm_smi.rsmi_ret_ok
|
||||
|
||||
.. autofunction:: rocm_smi.save
|
||||
@@ -0,0 +1,29 @@
|
||||
====================
|
||||
Python Tutorials
|
||||
====================
|
||||
|
||||
This chapter is the rocm_smi Python api tutorials.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
import sys
|
||||
sys.path.append("/opt/rocm/libexec/rocm_smi/")
|
||||
try:
|
||||
import rocm_smi
|
||||
except ImportError:
|
||||
raise ImportError("Could not import /opt/rocm/libexec/rocm_smi/rocm_smi.py")
|
||||
|
||||
class prof_utils:
|
||||
def __init__(self, mode) -> None:
|
||||
rocm_smi.initializeRsmi()
|
||||
|
||||
def getPower(self, device):
|
||||
return rocm_smi.getPower(device)
|
||||
|
||||
def listDevices(self):
|
||||
return rocm_smi.listDevices()
|
||||
|
||||
def getMemInfo(self, device):
|
||||
(memUsed, memTotal) = rocm_smi.getMemInfo(device, "vram")
|
||||
return round(float(memUsed)/float(memTotal) * 100, 2)
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
```{include} ../python_smi_tools/README.md
|
||||
```
|
||||
@@ -5,9 +5,27 @@ defaults:
|
||||
maxdepth: 6
|
||||
root: index
|
||||
subtrees:
|
||||
- caption: API
|
||||
- caption: Tutorials
|
||||
entries:
|
||||
- file: doxygen/html/index
|
||||
- file: c++_tutorials
|
||||
title: C++ Tutorials
|
||||
- file: python_tutorials
|
||||
title: Python Tutorials
|
||||
- caption: How to Guide
|
||||
entries:
|
||||
- file: c++_usage
|
||||
title: C++ How to Guide
|
||||
- file: python_usage
|
||||
title: Python How to Guide
|
||||
- caption: Reference
|
||||
entries:
|
||||
- file: doxygen/html/index
|
||||
title: C++ Reference
|
||||
- file: python_api
|
||||
title: Python Reference
|
||||
- caption: About
|
||||
entries:
|
||||
- file: license
|
||||
title: License
|
||||
- file: CHANGELOG
|
||||
title: Changelog
|
||||
@@ -1 +1 @@
|
||||
rocm-docs-core[api_reference]>=0.30.3
|
||||
rocm-docs-core[api_reference]>=0.31.0
|
||||
|
||||
@@ -41,7 +41,7 @@ docutils==0.16
|
||||
# myst-parser
|
||||
# pydata-sphinx-theme
|
||||
# sphinx
|
||||
doxysphinx==3.3.4
|
||||
doxysphinx==3.3.7
|
||||
# via rocm-docs-core
|
||||
fastjsonschema==2.18.0
|
||||
# via rocm-docs-core
|
||||
@@ -116,7 +116,7 @@ requests==2.28.2
|
||||
# via
|
||||
# pygithub
|
||||
# sphinx
|
||||
rocm-docs-core[api_reference]>=0.30.3
|
||||
rocm-docs-core[api_reference]>=0.31.0
|
||||
# via -r requirements.in
|
||||
smmap==5.0.0
|
||||
# via gitdb
|
||||
|
||||
@@ -815,7 +815,7 @@ typedef rsmi_pcie_bandwidth_t rsmi_pcie_bandwidth;
|
||||
*/
|
||||
typedef struct {
|
||||
/* Utilization */
|
||||
uint16_t average_gfx_activity;
|
||||
uint16_t average_gfx_activity; //!< Average graphics activity
|
||||
uint16_t average_umc_activity; //!< memory controller
|
||||
uint16_t average_mm_activity; //!< UVD or VCN
|
||||
} rsmi_activity_metric_counter_t;
|
||||
@@ -1616,7 +1616,7 @@ rsmi_status_t rsmi_dev_unique_id_get(uint32_t dv_ind, uint64_t *id);
|
||||
*
|
||||
* @param[in] dv_ind a device index
|
||||
*
|
||||
* @param[inout] revision a pointer to uint32_t to which the XGMI physical id
|
||||
* @param[inout] id a pointer to uint32_t to which the XGMI physical id
|
||||
* will be written
|
||||
*
|
||||
* @retval ::RSMI_STATUS_SUCCESS is returned upon successful call.
|
||||
@@ -1634,7 +1634,7 @@ rsmi_status_t rsmi_dev_xgmi_physical_id_get(uint32_t dv_ind, uint16_t *id);
|
||||
*
|
||||
* @param[in] dv_ind a device index
|
||||
*
|
||||
* @param[inout] gpu_id a pointer to uint64_t to which the KFD gpu id will be
|
||||
* @param[inout] guid a pointer to uint64_t to which the KFD gpu id will be
|
||||
* written. If the @p guid parameter is nullptr, this function will return
|
||||
* ::RSMI_STATUS_INVALID_ARGS. If the GPU ID is not supported with
|
||||
* the device index queried, gpu_id will return MAX UINT64 value an
|
||||
@@ -4541,6 +4541,7 @@ rsmi_dev_metrics_xcd_counter_get(uint32_t dv_ind, uint16_t* xcd_counter_value);
|
||||
rsmi_status_t
|
||||
rsmi_dev_metrics_log_get(uint32_t dv_ind);
|
||||
|
||||
/** @} */ // end of DevMetricsHeaderInfoGet
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Radeon Open Compute (ROCm) - System Management Interface - Command Line Tool
|
||||
# Radeon Open Compute (ROCm) - System Management Interface - Command Line Tool
|
||||
|
||||
This tool acts as a command line interface for manipulating
|
||||
and monitoring the amdgpu kernel, and is intended to replace
|
||||
|
||||
文件差异内容过多而无法显示
加载差异
@@ -0,0 +1,642 @@
|
||||
#!/usr/bin/env python3
|
||||
"""ROCm_SMI_LIB CLI Tool Python Bindings"""
|
||||
# NOTE: You MUST call rsmiBindings.initRsmiBindings() when using this library!
|
||||
# TODO: Get most (or all) of these from rocm_smi.h to avoid mismatches and redundancy
|
||||
|
||||
from __future__ import print_function
|
||||
from ctypes import *
|
||||
from enum import Enum
|
||||
|
||||
import sys
|
||||
|
||||
if 'sphinx' in sys.modules:
|
||||
path_librocm = str()
|
||||
def initRsmiBindings(silent=False):
|
||||
# Empty function for document generation
|
||||
exit()
|
||||
|
||||
SMI_HASH = '@PKG_VERSION_HASH@'
|
||||
else:
|
||||
from rsmiBindingsInit import *
|
||||
|
||||
|
||||
# Device ID
|
||||
dv_id = c_uint64()
|
||||
# GPU ID
|
||||
gpu_id = c_uint32(0)
|
||||
|
||||
|
||||
# Policy enums
|
||||
RSMI_MAX_NUM_FREQUENCIES = 33
|
||||
RSMI_MAX_FAN_SPEED = 255
|
||||
RSMI_NUM_VOLTAGE_CURVE_POINTS = 3
|
||||
|
||||
|
||||
class rsmi_status_t(c_int):
|
||||
RSMI_STATUS_SUCCESS = 0x0
|
||||
RSMI_STATUS_INVALID_ARGS = 0x1
|
||||
RSMI_STATUS_NOT_SUPPORTED = 0x2
|
||||
RSMI_STATUS_FILE_ERROR = 0x3
|
||||
RSMI_STATUS_PERMISSION = 0x4
|
||||
RSMI_STATUS_OUT_OF_RESOURCES = 0x5
|
||||
RSMI_STATUS_INTERNAL_EXCEPTION = 0x6
|
||||
RSMI_STATUS_INPUT_OUT_OF_BOUNDS = 0x7
|
||||
RSMI_STATUS_INIT_ERROR = 0x8
|
||||
RSMI_INITIALIZATION_ERROR = RSMI_STATUS_INIT_ERROR
|
||||
RSMI_STATUS_NOT_YET_IMPLEMENTED = 0x9
|
||||
RSMI_STATUS_NOT_FOUND = 0xA
|
||||
RSMI_STATUS_INSUFFICIENT_SIZE = 0xB
|
||||
RSMI_STATUS_INTERRUPT = 0xC
|
||||
RSMI_STATUS_UNEXPECTED_SIZE = 0xD
|
||||
RSMI_STATUS_NO_DATA = 0xE
|
||||
RSMI_STATUS_UNEXPECTED_DATA = 0xF
|
||||
RSMI_STATUS_BUSY = 0x10
|
||||
RSMI_STATUS_REFCOUNT_OVERFLOW = 0x11
|
||||
RSMI_STATUS_SETTING_UNAVAILABLE = 0x12
|
||||
RSMI_STATUS_AMDGPU_RESTART_ERR = 0x13
|
||||
RSMI_STATUS_UNKNOWN_ERROR = 0xFFFFFFFF
|
||||
|
||||
|
||||
#Dictionary of rsmi ret codes and it's verbose output
|
||||
rsmi_status_verbose_err_out = {
|
||||
rsmi_status_t.RSMI_STATUS_SUCCESS: 'Operation was successful',
|
||||
rsmi_status_t.RSMI_STATUS_INVALID_ARGS: 'Invalid arguments provided',
|
||||
rsmi_status_t.RSMI_STATUS_NOT_SUPPORTED: 'Not supported on the given system',
|
||||
rsmi_status_t.RSMI_STATUS_FILE_ERROR: 'Problem accessing a file',
|
||||
rsmi_status_t.RSMI_STATUS_PERMISSION: 'Permission denied',
|
||||
rsmi_status_t.RSMI_STATUS_OUT_OF_RESOURCES: 'Unable to acquire memory or other resource',
|
||||
rsmi_status_t.RSMI_STATUS_INTERNAL_EXCEPTION: 'An internal exception was caught',
|
||||
rsmi_status_t.RSMI_STATUS_INPUT_OUT_OF_BOUNDS: 'Provided input is out of allowable or safe range',
|
||||
rsmi_status_t.RSMI_INITIALIZATION_ERROR: 'Error occured during rsmi initialization',
|
||||
rsmi_status_t.RSMI_STATUS_NOT_YET_IMPLEMENTED: 'Requested function is not implemented on this setup',
|
||||
rsmi_status_t.RSMI_STATUS_NOT_FOUND: 'Item searched for but not found',
|
||||
rsmi_status_t.RSMI_STATUS_INSUFFICIENT_SIZE: 'Insufficient resources available',
|
||||
rsmi_status_t.RSMI_STATUS_INTERRUPT: 'Interrupt occured during execution',
|
||||
rsmi_status_t.RSMI_STATUS_UNEXPECTED_SIZE: 'Unexpected amount of data read',
|
||||
rsmi_status_t.RSMI_STATUS_NO_DATA: 'No data found for the given input',
|
||||
rsmi_status_t.RSMI_STATUS_UNEXPECTED_DATA: 'Unexpected data received',
|
||||
rsmi_status_t.RSMI_STATUS_BUSY: 'Busy - resources are preventing call the ability to execute',
|
||||
rsmi_status_t.RSMI_STATUS_REFCOUNT_OVERFLOW: 'Data overflow - data exceeded INT32_MAX',
|
||||
rsmi_status_t.RSMI_STATUS_SETTING_UNAVAILABLE: 'Requested setting is unavailable for current device',
|
||||
rsmi_status_t.RSMI_STATUS_AMDGPU_RESTART_ERR: 'Could not successfully restart the amdgpu driver',
|
||||
rsmi_status_t.RSMI_STATUS_UNKNOWN_ERROR: 'Unknown error occured'
|
||||
}
|
||||
|
||||
|
||||
class rsmi_init_flags_t(c_int):
|
||||
RSMI_INIT_FLAG_ALL_GPUS = 0x1
|
||||
|
||||
|
||||
class rsmi_dev_perf_level_t(c_int):
|
||||
RSMI_DEV_PERF_LEVEL_AUTO = 0
|
||||
RSMI_DEV_PERF_LEVEL_FIRST = RSMI_DEV_PERF_LEVEL_AUTO
|
||||
RSMI_DEV_PERF_LEVEL_LOW = 1
|
||||
RSMI_DEV_PERF_LEVEL_HIGH = 2
|
||||
RSMI_DEV_PERF_LEVEL_MANUAL = 3
|
||||
RSMI_DEV_PERF_LEVEL_STABLE_STD = 4
|
||||
RSMI_DEV_PERF_LEVEL_STABLE_PEAK = 5
|
||||
RSMI_DEV_PERF_LEVEL_STABLE_MIN_MCLK = 6
|
||||
RSMI_DEV_PERF_LEVEL_STABLE_MIN_SCLK = 7
|
||||
RSMI_DEV_PERF_LEVEL_DETERMINISM = 8
|
||||
RSMI_DEV_PERF_LEVEL_LAST = RSMI_DEV_PERF_LEVEL_DETERMINISM
|
||||
RSMI_DEV_PERF_LEVEL_UNKNOWN = 0x100
|
||||
|
||||
|
||||
notification_type_names = ['VM_FAULT', 'THERMAL_THROTTLE', 'GPU_RESET']
|
||||
|
||||
|
||||
class rsmi_evt_notification_type_t(c_int):
|
||||
RSMI_EVT_NOTIF_VMFAULT = 0
|
||||
RSMI_EVT_NOTIF_FIRST = RSMI_EVT_NOTIF_VMFAULT
|
||||
RSMI_EVT_NOTIF_THERMAL_THROTTLE = 1
|
||||
RSMI_EVT_NOTIF_GPU_PRE_RESET = 2
|
||||
RSMI_EVT_NOTIF_GPU_POST_RESET = 3
|
||||
RSMI_EVT_NOTIF_LAST = RSMI_EVT_NOTIF_GPU_POST_RESET
|
||||
|
||||
|
||||
class rsmi_voltage_metric_t(c_int):
|
||||
RSMI_VOLT_CURRENT = 0
|
||||
RSMI_VOLT_FIRST = RSMI_VOLT_CURRENT
|
||||
RSMI_VOLT_MAX = 1
|
||||
RSMI_VOLT_MIN_CRIT = 2
|
||||
RSMI_VOLT_MIN = 3
|
||||
RSMI_VOLT_MAX_CRIT = 4
|
||||
RSMI_VOLT_AVERAGE = 5
|
||||
RSMI_VOLT_LOWEST = 6
|
||||
RSMI_VOLT_HIGHEST = 7
|
||||
RSMI_VOLT_LAST = RSMI_VOLT_HIGHEST
|
||||
RSMI_VOLT_UNKNOWN = 0x100
|
||||
|
||||
|
||||
class rsmi_voltage_type_t(c_int):
|
||||
RSMI_VOLT_TYPE_FIRST = 0
|
||||
RSMI_VOLT_TYPE_VDDGFX = RSMI_VOLT_TYPE_FIRST
|
||||
RSMI_VOLT_TYPE_LAST = RSMI_VOLT_TYPE_VDDGFX
|
||||
RSMI_VOLT_TYPE_INVALID = 0xFFFFFFFF
|
||||
|
||||
|
||||
# The perf_level_string is correlated to rsmi_dev_perf_level_t
|
||||
def perf_level_string(i):
|
||||
switcher = {
|
||||
0: 'AUTO',
|
||||
1: 'LOW',
|
||||
2: 'HIGH',
|
||||
3: 'MANUAL',
|
||||
4: 'STABLE_STD',
|
||||
5: 'STABLE_PEAK',
|
||||
6: 'STABLE_MIN_MCLK',
|
||||
7: 'STABLE_MIN_SCLK',
|
||||
8: 'PERF_DETERMINISM',
|
||||
}
|
||||
return switcher.get(i, 'UNKNOWN')
|
||||
|
||||
|
||||
rsmi_dev_perf_level = rsmi_dev_perf_level_t
|
||||
|
||||
|
||||
class rsmi_sw_component_t(c_int):
|
||||
RSMI_SW_COMP_FIRST = 0x0
|
||||
RSMI_SW_COMP_DRIVER = RSMI_SW_COMP_FIRST
|
||||
RSMI_SW_COMP_LAST = RSMI_SW_COMP_DRIVER
|
||||
|
||||
|
||||
|
||||
rsmi_event_handle_t = POINTER(c_uint)
|
||||
|
||||
|
||||
class rsmi_event_group_t(Enum):
|
||||
RSMI_EVNT_GRP_XGMI = 0
|
||||
RSMI_EVNT_GRP_XGMI_DATA_OUT = 10
|
||||
RSMI_EVNT_GRP_INVALID = 0xFFFFFFFF
|
||||
|
||||
|
||||
class rsmi_event_type_t(c_int):
|
||||
RSMI_EVNT_FIRST = rsmi_event_group_t.RSMI_EVNT_GRP_XGMI
|
||||
RSMI_EVNT_XGMI_FIRST = rsmi_event_group_t.RSMI_EVNT_GRP_XGMI
|
||||
RSMI_EVNT_XGMI_0_NOP_TX = RSMI_EVNT_XGMI_FIRST
|
||||
RSMI_EVNT_XGMI_0_REQUEST_TX = 1
|
||||
RSMI_EVNT_XGMI_0_RESPONSE_TX = 2
|
||||
RSMI_EVNT_XGMI_0_BEATS_TX = 3
|
||||
RSMI_EVNT_XGMI_1_NOP_TX = 4
|
||||
RSMI_EVNT_XGMI_1_REQUEST_TX = 5
|
||||
RSMI_EVNT_XGMI_1_RESPONSE_TX = 6
|
||||
RSMI_EVNT_XGMI_1_BEATS_TX = 7
|
||||
RSMI_EVNT_XGMI_LAST = RSMI_EVNT_XGMI_1_BEATS_TX
|
||||
|
||||
RSMI_EVNT_XGMI_DATA_OUT_FIRST = rsmi_event_group_t.RSMI_EVNT_GRP_XGMI_DATA_OUT
|
||||
RSMI_EVNT_XGMI_DATA_OUT_0 = RSMI_EVNT_XGMI_DATA_OUT_FIRST
|
||||
RSMI_EVNT_XGMI_DATA_OUT_1 = 11
|
||||
RSMI_EVNT_XGMI_DATA_OUT_2 = 12
|
||||
RSMI_EVNT_XGMI_DATA_OUT_3 = 13
|
||||
RSMI_EVNT_XGMI_DATA_OUT_4 = 14
|
||||
RSMI_EVNT_XGMI_DATA_OUT_5 = 15
|
||||
RSMI_EVNT_XGMI_DATA_OUT_LAST = RSMI_EVNT_XGMI_DATA_OUT_5
|
||||
|
||||
RSMI_EVNT_LAST = RSMI_EVNT_XGMI_DATA_OUT_LAST,
|
||||
|
||||
|
||||
class rsmi_counter_command_t(c_int):
|
||||
RSMI_CNTR_CMD_START = 0
|
||||
RSMI_CNTR_CMD_STOP = 1
|
||||
|
||||
|
||||
class rsmi_counter_value_t(Structure):
|
||||
_fields_ = [('value', c_uint64),
|
||||
('time_enabled', c_uint64),
|
||||
('time_running', c_uint64)]
|
||||
|
||||
|
||||
class rsmi_clk_type_t(c_int):
|
||||
RSMI_CLK_TYPE_SYS = 0x0
|
||||
RSMI_CLK_TYPE_FIRST = RSMI_CLK_TYPE_SYS
|
||||
RSMI_CLK_TYPE_DF = 0x1
|
||||
RSMI_CLK_TYPE_DCEF = 0x2
|
||||
RSMI_CLK_TYPE_SOC = 0x3
|
||||
RSMI_CLK_TYPE_MEM = 0x4
|
||||
RSMI_CLK_TYPE_LAST = RSMI_CLK_TYPE_MEM
|
||||
RSMI_CLK_INVALID = 0xFFFFFFFF
|
||||
|
||||
|
||||
# Clock names here are correlated to the rsmi_clk_type_t values above
|
||||
clk_type_names = ['sclk', 'sclk', 'fclk', 'dcefclk',\
|
||||
'socclk', 'mclk', 'mclk', 'invalid']
|
||||
rsmi_clk_type_dict = {'RSMI_CLK_TYPE_SYS': 0x0, 'RSMI_CLK_TYPE_FIRST': 0x0,\
|
||||
'RSMI_CLK_TYPE_DF': 0x1, 'RSMI_CLK_TYPE_DCEF': 0x2,\
|
||||
'RSMI_CLK_TYPE_SOC': 0x3, 'RSMI_CLK_TYPE_MEM': 0x4,\
|
||||
'RSMI_CLK_TYPE_LAST': 0X4, 'RSMI_CLK_INVALID': 0xFFFFFFFF}
|
||||
rsmi_clk_names_dict = {'sclk': 0x0, 'fclk': 0x1, 'dcefclk': 0x2,\
|
||||
'socclk': 0x3, 'mclk': 0x4}
|
||||
rsmi_clk_type = rsmi_clk_type_t
|
||||
|
||||
|
||||
class rsmi_temperature_metric_t(c_int):
|
||||
RSMI_TEMP_CURRENT = 0x0
|
||||
RSMI_TEMP_FIRST = RSMI_TEMP_CURRENT
|
||||
RSMI_TEMP_MAX = 0x1
|
||||
RSMI_TEMP_MIN = 0x2
|
||||
RSMI_TEMP_MAX_HYST = 0x3
|
||||
RSMI_TEMP_MIN_HYST = 0x4
|
||||
RSMI_TEMP_CRITICAL = 0x5
|
||||
RSMI_TEMP_CRITICAL_HYST = 0x6
|
||||
RSMI_TEMP_EMERGENCY = 0x7
|
||||
RSMI_TEMP_EMERGENCY_HYST = 0x8
|
||||
RSMI_TEMP_CRIT_MIN = 0x9
|
||||
RSMI_TEMP_CRIT_MIN_HYST = 0xA
|
||||
RSMI_TEMP_OFFSET = 0xB
|
||||
RSMI_TEMP_LOWEST = 0xC
|
||||
RSMI_TEMP_HIGHEST = 0xD
|
||||
RSMI_TEMP_LAST = RSMI_TEMP_HIGHEST
|
||||
|
||||
|
||||
rsmi_temperature_metric = rsmi_temperature_metric_t
|
||||
|
||||
|
||||
class rsmi_temperature_type_t(c_int):
|
||||
RSMI_TEMP_TYPE_FIRST = 0
|
||||
RSMI_TEMP_TYPE_EDGE = RSMI_TEMP_TYPE_FIRST
|
||||
RSMI_TEMP_TYPE_JUNCTION = 1
|
||||
RSMI_TEMP_TYPE_MEMORY = 2
|
||||
RSMI_TEMP_TYPE_HBM_0 = 3
|
||||
RSMI_TEMP_TYPE_HBM_1 = 4
|
||||
RSMI_TEMP_TYPE_HBM_2 = 5
|
||||
RSMI_TEMP_TYPE_HBM_3 = 6
|
||||
RSMI_TEMP_TYPE_LAST = RSMI_TEMP_TYPE_HBM_3
|
||||
|
||||
|
||||
# temp_type_lst list correlates to rsmi_temperature_type_t
|
||||
temp_type_lst = ['edge', 'junction', 'memory', 'HBM 0', 'HBM 1', 'HBM 2', 'HBM 3']
|
||||
|
||||
|
||||
class rsmi_power_profile_preset_masks_t(c_uint64):
|
||||
RSMI_PWR_PROF_PRST_CUSTOM_MASK = 0x1
|
||||
RSMI_PWR_PROF_PRST_VIDEO_MASK = 0x2
|
||||
RSMI_PWR_PROF_PRST_POWER_SAVING_MASK = 0x4
|
||||
RSMI_PWR_PROF_PRST_COMPUTE_MASK = 0x8
|
||||
RSMI_PWR_PROF_PRST_VR_MASK = 0x10
|
||||
RSMI_PWR_PROF_PRST_3D_FULL_SCR_MASK = 0x20
|
||||
RSMI_PWR_PROF_PRST_BOOTUP_DEFAULT = 0x40
|
||||
RSMI_PWR_PROF_PRST_LAST = RSMI_PWR_PROF_PRST_BOOTUP_DEFAULT
|
||||
RSMI_PWR_PROF_PRST_INVALID = 0xFFFFFFFFFFFFFFFF
|
||||
|
||||
|
||||
rsmi_power_profile_preset_masks = rsmi_power_profile_preset_masks_t
|
||||
|
||||
|
||||
class rsmi_gpu_block_t(c_int):
|
||||
RSMI_GPU_BLOCK_INVALID = 0x0000000000000000
|
||||
RSMI_GPU_BLOCK_FIRST = 0x0000000000000001
|
||||
RSMI_GPU_BLOCK_UMC = RSMI_GPU_BLOCK_FIRST
|
||||
RSMI_GPU_BLOCK_SDMA = 0x0000000000000002
|
||||
RSMI_GPU_BLOCK_GFX = 0x0000000000000004
|
||||
RSMI_GPU_BLOCK_MMHUB = 0x0000000000000008
|
||||
RSMI_GPU_BLOCK_ATHUB = 0x0000000000000010
|
||||
RSMI_GPU_BLOCK_PCIE_BIF = 0x0000000000000020
|
||||
RSMI_GPU_BLOCK_HDP = 0x0000000000000040
|
||||
RSMI_GPU_BLOCK_XGMI_WAFL = 0x0000000000000080
|
||||
RSMI_GPU_BLOCK_DF = 0x0000000000000100
|
||||
RSMI_GPU_BLOCK_SMN = 0x0000000000000200
|
||||
RSMI_GPU_BLOCK_SEM = 0x0000000000000400
|
||||
RSMI_GPU_BLOCK_MP0 = 0x0000000000000800
|
||||
RSMI_GPU_BLOCK_MP1 = 0x0000000000001000
|
||||
RSMI_GPU_BLOCK_FUSE = 0x0000000000002000
|
||||
RSMI_GPU_BLOCK_LAST = RSMI_GPU_BLOCK_FUSE
|
||||
RSMI_GPU_BLOCK_RESERVED = 0x8000000000000000
|
||||
|
||||
|
||||
rsmi_gpu_block = rsmi_gpu_block_t
|
||||
|
||||
|
||||
# The following dictionary correlates with rsmi_gpu_block_t enum
|
||||
rsmi_gpu_block_d = {
|
||||
'UMC' : 0x0000000000000001,
|
||||
'SDMA' : 0x0000000000000002,
|
||||
'GFX' : 0x0000000000000004,
|
||||
'MMHUB': 0x0000000000000008,
|
||||
'ATHUB': 0x0000000000000010,
|
||||
'PCIE_BIF': 0x0000000000000020,
|
||||
'HDP': 0x0000000000000040,
|
||||
'XGMI_WAFL': 0x0000000000000080,
|
||||
'DF': 0x0000000000000100,
|
||||
'SMN': 0x0000000000000200,
|
||||
'SEM': 0x0000000000000400,
|
||||
'MP0': 0x0000000000000800,
|
||||
'MP1': 0x0000000000001000,
|
||||
'FUSE': 0x0000000000002000
|
||||
}
|
||||
|
||||
|
||||
class rsmi_ras_err_state_t(c_int):
|
||||
RSMI_RAS_ERR_STATE_NONE = 0
|
||||
RSMI_RAS_ERR_STATE_DISABLED = 1
|
||||
RSMI_RAS_ERR_STATE_PARITY = 2
|
||||
RSMI_RAS_ERR_STATE_SING_C = 3
|
||||
RSMI_RAS_ERR_STATE_MULT_UC = 4
|
||||
RSMI_RAS_ERR_STATE_POISON = 5
|
||||
RSMI_RAS_ERR_STATE_ENABLED = 6
|
||||
RSMI_RAS_ERR_STATE_LAST = RSMI_RAS_ERR_STATE_ENABLED
|
||||
RSMI_RAS_ERR_STATE_INVALID = 0xFFFFFFFF
|
||||
|
||||
|
||||
# Error type list correlates to rsmi_ras_err_state_t
|
||||
rsmi_ras_err_stale_readable = ['no errors', 'ECC disabled',
|
||||
'unknown type err', 'single correctable err',
|
||||
'multiple uncorrectable err',
|
||||
'page isolated, treat as uncorrectable err',
|
||||
'ECC enabled', 'status invalid']
|
||||
rsmi_ras_err_stale_machine = ['none', 'disabled', 'unknown error',
|
||||
'sing', 'mult', 'position', 'enabled']
|
||||
|
||||
validRasTypes = ['ue', 'ce']
|
||||
|
||||
validRasActions = ['disable', 'enable', 'inject']
|
||||
|
||||
validRasBlocks = ['fuse', 'mp1', 'mp0', 'sem', 'smn', 'df', 'xgmi_wafl', 'hdp', 'pcie_bif',
|
||||
|
||||
'athub', 'mmhub', 'gfx', 'sdma', 'umc']
|
||||
|
||||
|
||||
class rsmi_memory_type_t(c_int):
|
||||
RSMI_MEM_TYPE_FIRST = 0
|
||||
RSMI_MEM_TYPE_VRAM = RSMI_MEM_TYPE_FIRST
|
||||
RSMI_MEM_TYPE_VIS_VRAM = 1
|
||||
RSMI_MEM_TYPE_GTT = 2
|
||||
RSMI_MEM_TYPE_LAST = RSMI_MEM_TYPE_GTT
|
||||
|
||||
|
||||
# memory_type_l includes names for with rsmi_memory_type_t
|
||||
# Usage example to get corresponding names:
|
||||
# memory_type_l[rsmi_memory_type_t.RSMI_MEM_TYPE_VRAM] will return string 'vram'
|
||||
memory_type_l = ['VRAM', 'VIS_VRAM', 'GTT']
|
||||
|
||||
|
||||
class rsmi_freq_ind_t(c_int):
|
||||
RSMI_FREQ_IND_MIN = 0
|
||||
RSMI_FREQ_IND_MAX = 1
|
||||
RSMI_FREQ_IND_INVALID = 0xFFFFFFFF
|
||||
|
||||
|
||||
rsmi_freq_ind = rsmi_freq_ind_t
|
||||
|
||||
|
||||
class rsmi_fw_block_t(c_int):
|
||||
RSMI_FW_BLOCK_FIRST = 0
|
||||
RSMI_FW_BLOCK_ASD = RSMI_FW_BLOCK_FIRST
|
||||
RSMI_FW_BLOCK_CE = 1
|
||||
RSMI_FW_BLOCK_DMCU = 2
|
||||
RSMI_FW_BLOCK_MC = 3
|
||||
RSMI_FW_BLOCK_ME = 4
|
||||
RSMI_FW_BLOCK_MEC = 5
|
||||
RSMI_FW_BLOCK_MEC2 = 6
|
||||
RSMI_FW_BLOCK_MES = 7
|
||||
RSMI_FW_BLOCK_MES_KIQ = 8
|
||||
RSMI_FW_BLOCK_PFP = 9
|
||||
RSMI_FW_BLOCK_RLC = 10
|
||||
RSMI_FW_BLOCK_RLC_SRLC = 11
|
||||
RSMI_FW_BLOCK_RLC_SRLG = 12
|
||||
RSMI_FW_BLOCK_RLC_SRLS = 13
|
||||
RSMI_FW_BLOCK_SDMA = 14
|
||||
RSMI_FW_BLOCK_SDMA2 = 15
|
||||
RSMI_FW_BLOCK_SMC = 16
|
||||
RSMI_FW_BLOCK_SOS = 17
|
||||
RSMI_FW_BLOCK_TA_RAS = 18
|
||||
RSMI_FW_BLOCK_TA_XGMI = 19
|
||||
RSMI_FW_BLOCK_UVD = 20
|
||||
RSMI_FW_BLOCK_VCE = 21
|
||||
RSMI_FW_BLOCK_VCN = 22
|
||||
RSMI_FW_BLOCK_LAST = RSMI_FW_BLOCK_VCN
|
||||
|
||||
|
||||
# The following list correlated to the rsmi_fw_block_t
|
||||
fw_block_names_l = ['ASD', 'CE', 'DMCU', 'MC', 'ME', 'MEC', 'MEC2', 'MES', 'MES KIQ', 'PFP',\
|
||||
'RLC', 'RLC SRLC', 'RLC SRLG', 'RLC SRLS', 'SDMA', 'SDMA2',\
|
||||
'SMC', 'SOS', 'TA RAS', 'TA XGMI', 'UVD', 'VCE', 'VCN']
|
||||
|
||||
|
||||
rsmi_bit_field_t = c_uint64()
|
||||
rsmi_bit_field = rsmi_bit_field_t
|
||||
|
||||
class rsmi_utilization_counter_type(c_int):
|
||||
RSMI_UTILIZATION_COUNTER_FIRST = 0
|
||||
RSMI_COARSE_GRAIN_GFX_ACTIVITY = RSMI_UTILIZATION_COUNTER_FIRST
|
||||
RSMI_COARSE_GRAIN_MEM_ACTIVITY = 1
|
||||
RSMI_UTILIZATION_COUNTER_LAST = RSMI_COARSE_GRAIN_MEM_ACTIVITY
|
||||
|
||||
utilization_counter_name = ['GFX Activity', 'Memory Activity']
|
||||
|
||||
class rsmi_utilization_counter_t(Structure):
|
||||
_fields_ = [('type', c_int),
|
||||
('val', c_uint64)]
|
||||
|
||||
|
||||
class rsmi_xgmi_status_t(c_int):
|
||||
RSMI_XGMI_STATUS_NO_ERRORS = 0
|
||||
RSMI_XGMI_STATUS_ERROR = 1
|
||||
RSMI_XGMI_STATUS_MULTIPLE_ERRORS = 2
|
||||
|
||||
|
||||
class rsmi_memory_page_status_t(c_int):
|
||||
RSMI_MEM_PAGE_STATUS_RESERVED = 0
|
||||
RSMI_MEM_PAGE_STATUS_PENDING = 1
|
||||
RSMI_MEM_PAGE_STATUS_UNRESERVABLE = 2
|
||||
|
||||
|
||||
memory_page_status_l = ['reserved', 'pending', 'unreservable']
|
||||
|
||||
|
||||
class rsmi_retired_page_record_t(Structure):
|
||||
_fields_ = [('page_address', c_uint64),
|
||||
('page_size', c_uint64),
|
||||
('status', c_int)]
|
||||
|
||||
|
||||
RSMI_MAX_NUM_POWER_PROFILES = (sizeof(rsmi_bit_field_t) * 8)
|
||||
|
||||
|
||||
class rsmi_power_profile_status_t(Structure):
|
||||
_fields_ = [('available_profiles', c_uint32),
|
||||
('current', c_uint64),
|
||||
('num_profiles', c_uint32)]
|
||||
|
||||
|
||||
rsmi_power_profile_status = rsmi_power_profile_status_t
|
||||
|
||||
|
||||
class rsmi_frequencies_t(Structure):
|
||||
_fields_ = [('has_deep_sleep', c_bool),
|
||||
('num_supported', c_int32),
|
||||
('current', c_uint32),
|
||||
('frequency', c_uint64 * RSMI_MAX_NUM_FREQUENCIES)]
|
||||
|
||||
|
||||
rsmi_frequencies = rsmi_frequencies_t
|
||||
|
||||
|
||||
class rsmi_pcie_bandwidth_t(Structure):
|
||||
_fields_ = [('transfer_rate', rsmi_frequencies_t),
|
||||
('lanes', c_uint32 * RSMI_MAX_NUM_FREQUENCIES)]
|
||||
|
||||
|
||||
rsmi_pcie_bandwidth = rsmi_pcie_bandwidth_t
|
||||
|
||||
|
||||
class rsmi_version_t(Structure):
|
||||
_fields_ = [('major', c_uint32),
|
||||
('minor', c_uint32),
|
||||
('patch', c_uint32),
|
||||
('build', c_char_p)]
|
||||
|
||||
|
||||
rsmi_version = rsmi_version_t
|
||||
|
||||
|
||||
class rsmi_range_t(Structure):
|
||||
_fields_ = [('lower_bound', c_uint64),
|
||||
('upper_bound', c_uint64)]
|
||||
|
||||
|
||||
rsmi_range = rsmi_range_t
|
||||
|
||||
|
||||
class rsmi_od_vddc_point_t(Structure):
|
||||
_fields_ = [('frequency', c_uint64),
|
||||
('voltage', c_uint64)]
|
||||
|
||||
|
||||
rsmi_od_vddc_point = rsmi_od_vddc_point_t
|
||||
|
||||
|
||||
class rsmi_freq_volt_region_t(Structure):
|
||||
_fields_ = [('freq_range', rsmi_range_t),
|
||||
('volt_range', rsmi_range_t)]
|
||||
|
||||
|
||||
rsmi_freq_volt_region = rsmi_freq_volt_region_t
|
||||
|
||||
|
||||
class rsmi_od_volt_curve_t(Structure):
|
||||
_fields_ = [('vc_points', rsmi_od_vddc_point_t *\
|
||||
RSMI_NUM_VOLTAGE_CURVE_POINTS)]
|
||||
|
||||
|
||||
rsmi_od_volt_curve = rsmi_od_volt_curve_t
|
||||
|
||||
|
||||
class rsmi_od_volt_freq_data_t(Structure):
|
||||
_fields_ = [('curr_sclk_range', rsmi_range_t),
|
||||
('curr_mclk_range', rsmi_range_t),
|
||||
('sclk_freq_limits', rsmi_range_t),
|
||||
('mclk_freq_limits', rsmi_range_t),
|
||||
('curve', rsmi_od_volt_curve_t),
|
||||
('num_regions', c_uint32)]
|
||||
|
||||
|
||||
rsmi_od_volt_freq_data = rsmi_od_volt_freq_data_t
|
||||
|
||||
|
||||
class rsmi_error_count_t(Structure):
|
||||
_fields_ = [('correctable_err', c_uint64),
|
||||
('uncorrectable_err', c_uint64)]
|
||||
|
||||
|
||||
class rsmi_evt_notification_data_t(Structure):
|
||||
_fields_ = [('dv_ind', c_uint32),
|
||||
('event', rsmi_evt_notification_type_t),
|
||||
('message', c_char*64)]
|
||||
|
||||
|
||||
class rsmi_process_info_t(Structure):
|
||||
_fields_ = [('process_id', c_uint32),
|
||||
('pasid', c_uint32),
|
||||
('vram_usage', c_uint64),
|
||||
('sdma_usage', c_uint64),
|
||||
('cu_occupancy', c_uint32)]
|
||||
|
||||
|
||||
class rsmi_func_id_iter_handle(Structure):
|
||||
_fields_ = [('func_id_iter', POINTER(c_uint)),
|
||||
('container_ptr', POINTER(c_uint)),
|
||||
('id_type', c_uint32)]
|
||||
|
||||
|
||||
rsmi_func_id_iter_handle_t = POINTER(rsmi_func_id_iter_handle)
|
||||
|
||||
|
||||
RSMI_DEFAULT_VARIANT = 0xFFFFFFFFFFFFFFFF
|
||||
|
||||
|
||||
class submodule_union(Union):
|
||||
_fields_ = [('memory_type', c_int), # rsmi_memory_type_t,
|
||||
('temp_metric', c_int), # rsmi_temperature_metric_t,
|
||||
('evnt_type', c_int), # rsmi_event_type_t,
|
||||
('evnt_group', c_int), # rsmi_event_group_t,
|
||||
('clk_type', c_int), # rsmi_clk_type_t,
|
||||
('fw_block', c_int), # rsmi_fw_block_t,
|
||||
('gpu_block_type', c_int)] # rsmi_gpu_block_t
|
||||
|
||||
|
||||
class rsmi_func_id_value_t(Union):
|
||||
_fields_ = [('id', c_uint64),
|
||||
('name', c_char_p),
|
||||
('submodule', submodule_union)]
|
||||
|
||||
class rsmi_compute_partition_type_t(c_int):
|
||||
RSMI_COMPUTE_PARTITION_INVALID = 0
|
||||
RSMI_COMPUTE_PARTITION_CPX = 1
|
||||
RSMI_COMPUTE_PARTITION_SPX = 2
|
||||
RSMI_COMPUTE_PARTITION_DPX = 3
|
||||
RSMI_COMPUTE_PARTITION_TPX = 4
|
||||
RSMI_COMPUTE_PARTITION_QPX = 5
|
||||
|
||||
rsmi_compute_partition_type_dict = {
|
||||
#'RSMI_COMPUTE_PARTITION_INVALID': 0,
|
||||
'CPX': 1,
|
||||
'SPX': 2,
|
||||
'DPX': 3,
|
||||
'TPX': 4,
|
||||
'QPX': 5
|
||||
}
|
||||
|
||||
rsmi_compute_partition_type = rsmi_compute_partition_type_t
|
||||
|
||||
# compute_partition_type_l includes string names for the rsmi_compute_partition_type_t
|
||||
# Usage example to get corresponding names:
|
||||
# compute_partition_type_l[rsmi_compute_partition_type_t.RSMI_COMPUTE_PARTITION_CPX]
|
||||
# will return string 'CPX'
|
||||
compute_partition_type_l = ['CPX', 'SPX', 'DPX', 'TPX', 'QPX']
|
||||
|
||||
class rsmi_memory_partition_type_t(c_int):
|
||||
RSMI_MEMORY_PARTITION_UNKNOWN = 0
|
||||
RSMI_MEMORY_PARTITION_NPS1 = 1
|
||||
RSMI_MEMORY_PARTITION_NPS2 = 2
|
||||
RSMI_MEMORY_PARTITION_NPS4 = 3
|
||||
RSMI_MEMORY_PARTITION_NPS8 = 4
|
||||
|
||||
rsmi_memory_partition_type_dict = {
|
||||
'NPS1': 1,
|
||||
'NPS2': 2,
|
||||
'NPS4': 3,
|
||||
'NPS8': 4
|
||||
}
|
||||
|
||||
rsmi_memory_partition_type = rsmi_memory_partition_type_t
|
||||
|
||||
# memory_partition_type_l includes string names for the rsmi_compute_partition_type_t
|
||||
# Usage example to get corresponding names:
|
||||
# memory_partition_type_l[rsmi_memory_partition_type_t.RSMI_MEMORY_PARTITION_NPS2]
|
||||
# will return string 'NPS2'
|
||||
memory_partition_type_l = ['NPS1', 'NPS2', 'NPS4', 'NPS8']
|
||||
|
||||
class rsmi_power_label(str, Enum):
|
||||
AVG_POWER = '(Avg)'
|
||||
CURRENT_SOCKET_POWER = '(Socket)'
|
||||
|
||||
class rsmi_power_type_t(c_int):
|
||||
RSMI_AVERAGE_POWER = 0,
|
||||
RSMI_CURRENT_POWER = 1,
|
||||
RSMI_INVALID_POWER = 0xFFFFFFFF
|
||||
|
||||
rsmi_power_type_dict = {
|
||||
0: 'AVERAGE',
|
||||
1: 'CURRENT SOCKET',
|
||||
0xFFFFFFFF: 'INVALID_POWER_TYPE'
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env python3
|
||||
"""ROCm_SMI_LIB CLI Tool Python Bindings"""
|
||||
# NOTE: You MUST call rsmiBindings.initRsmiBindings() when using this library!
|
||||
# TODO: Get most (or all) of these from rocm_smi.h to avoid mismatches and redundancy
|
||||
|
||||
from __future__ import print_function
|
||||
import ctypes.util
|
||||
from ctypes import *
|
||||
from enum import Enum
|
||||
|
||||
import os
|
||||
|
||||
# Use ROCm installation path if running from standard installation
|
||||
# With File Reorg rsmiBindings.py and rsmiBindingsInit.py will be installed in
|
||||
# /opt/rocm/libexec/rocm_smi. relative path changed accordingly.
|
||||
# if ROCM_SMI_LIB_PATH is set, we can load 'librocm_smi64.so' from that location
|
||||
#
|
||||
# Library load is wrapped in a function so prints can be hidden for PRINT_JSON mode.
|
||||
path_librocm = str()
|
||||
def initRsmiBindings(silent=False):
|
||||
def print_silent(*args):
|
||||
if not silent:
|
||||
print(args)
|
||||
|
||||
rocm_smi_lib_path = os.getenv('ROCM_SMI_LIB_PATH')
|
||||
if (rocm_smi_lib_path != None):
|
||||
path_librocm = rocm_smi_lib_path
|
||||
else:
|
||||
path_librocm = os.path.dirname(os.path.realpath(__file__)) + '/../../@CMAKE_INSTALL_LIBDIR@/librocm_smi64.so.@VERSION_MAJOR@'
|
||||
|
||||
if not os.path.isfile(path_librocm):
|
||||
print_silent('Unable to find %s . Trying /opt/rocm*' % path_librocm)
|
||||
for root, dirs, files in os.walk('/opt', followlinks=True):
|
||||
if 'librocm_smi64.so.@VERSION_MAJOR@' in files:
|
||||
path_librocm = os.path.join(os.path.realpath(root), 'librocm_smi64.so.@VERSION_MAJOR@')
|
||||
if os.path.isfile(path_librocm):
|
||||
print_silent('Using lib from %s' % path_librocm)
|
||||
else:
|
||||
print('Unable to find librocm_smi64.so.@VERSION_MAJOR@')
|
||||
|
||||
# ----------> TODO: Support static libs as well as SO
|
||||
try:
|
||||
cdll.LoadLibrary(path_librocm)
|
||||
return CDLL(path_librocm)
|
||||
except OSError:
|
||||
print('Unable to load the rocm_smi library.\n'\
|
||||
'Set LD_LIBRARY_PATH to the folder containing librocm_smi64.so.@VERSION_MAJOR@\n'\
|
||||
'{0}Please refer to https://github.com/'\
|
||||
'RadeonOpenCompute/rocm_smi_lib for the installation guide.{1}'\
|
||||
.format('\33[33m', '\033[0m'))
|
||||
exit()
|
||||
|
||||
SMI_HASH = '@PKG_VERSION_HASH@'
|
||||
@@ -55,10 +55,10 @@ set(${ROCM_SMI}_VERSION_BUILD "0")
|
||||
set(${ROCM_SMI}_VERSION_HASH "${PKG_VERSION_HASH}")
|
||||
message("SOVERSION: ${SO_VERSION_STRING}")
|
||||
|
||||
# Configure rsmiBindings.py.in with SO major version:
|
||||
# Configure rsmiBindingsInit.py.in with SO major version:
|
||||
configure_file(
|
||||
"${COMMON_SRC_ROOT}/python_smi_tools/rsmiBindings.py.in"
|
||||
"${COMMON_SRC_ROOT}/python_smi_tools/rsmiBindings.py")
|
||||
"${COMMON_SRC_ROOT}/python_smi_tools/rsmiBindingsInit.py.in"
|
||||
"${COMMON_SRC_ROOT}/python_smi_tools/rsmiBindingsInit.py")
|
||||
|
||||
# Create a configure file to get version info from within library
|
||||
configure_file(
|
||||
@@ -139,6 +139,9 @@ install(FILES ${COMMON_SRC_ROOT}/include/rocm_smi/${ROCM_SMI_TARGET}Config.h
|
||||
install(FILES ${COMMON_SRC_ROOT}/include/rocm_smi/kfd_ioctl.h
|
||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocm_smi
|
||||
COMPONENT dev)
|
||||
install(PROGRAMS ${COMMON_SRC_ROOT}/python_smi_tools/rsmiBindingsInit.py
|
||||
DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/${ROCM_SMI}
|
||||
COMPONENT dev)
|
||||
install(PROGRAMS ${COMMON_SRC_ROOT}/python_smi_tools/rsmiBindings.py
|
||||
DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/${ROCM_SMI}
|
||||
COMPONENT dev)
|
||||
|
||||
@@ -759,8 +759,7 @@ WARN_LOGFILE =
|
||||
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
|
||||
# Note: If this tag is empty the current directory is searched.
|
||||
|
||||
INPUT = @CMAKE_CURRENT_SOURCE_DIR@/../README.md \
|
||||
@CMAKE_CURRENT_SOURCE_DIR@/../include/rocm_smi/rocm_smi.h
|
||||
INPUT = @CMAKE_CURRENT_SOURCE_DIR@/../include/rocm_smi/rocm_smi.h
|
||||
|
||||
# This tag can be used to specify the character encoding of the source files
|
||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
|
||||
|
||||
在新工单中引用
屏蔽一个用户