2
0

Update documentation and add python API documentation

Change-Id: Ibccf5b6a5fba81cea42e04a022deac8a3207b9b8


[ROCm/rocm_smi_lib commit: 50a079af0f]
Este cometimento está contido em:
Istvan Kiss
2024-03-06 20:55:02 +01:00
cometido por Charis Poag
ascendente 078f678c30
cometimento f0c16aa8a0
18 ficheiros modificados com 1359 adições e 493 eliminações
+6 -1
Ver ficheiro
@@ -3,12 +3,14 @@
# any tracked files which get ignored after the change. # any tracked files which get ignored after the change.
# VisualStudioCode # VisualStudioCode
.venv/
.vscode/ .vscode/
_build
# below files are generated via CMake # below files are generated via CMake
include/rocm_smi/rocm_smi64Config.h include/rocm_smi/rocm_smi64Config.h
oam/include/oam/oamConfig.h oam/include/oam/oamConfig.h
python_smi_tools/rsmiBindings.py python_smi_tools/rsmiBindingsInit.py
# Build directory # Build directory
build/ build/
@@ -28,3 +30,6 @@ README.html
!.clang-format !.clang-format
!.clang-tidy !.clang-tidy
!.clangd !.clangd
# avoid duplicating contributing.md due to conf.py
docs/CHANGELOG.md
+34
Ver ficheiro
@@ -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>`_
+2
Ver ficheiro
@@ -0,0 +1,2 @@
```{include} ../README.md
```
+15
Ver ficheiro
@@ -5,9 +5,18 @@
# https://www.sphinx-doc.org/en/master/usage/configuration.html # https://www.sphinx-doc.org/en/master/usage/configuration.html
import re import re
import pathlib
import shutil
import sys
from rocm_docs import ROCmDocs 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: with open('../CMakeLists.txt', encoding='utf-8') as f:
match = re.search(r'get_package_version_number\(\"?([0-9.]+)[^0-9.]+', f.read()) match = re.search(r'get_package_version_number\(\"?([0-9.]+)[^0-9.]+', f.read())
if not match: if not match:
@@ -15,6 +24,8 @@ with open('../CMakeLists.txt', encoding='utf-8') as f:
version_number = match[1] version_number = match[1]
left_nav_title = f"ROCm SMI LIB {version_number} Documentation" left_nav_title = f"ROCm SMI LIB {version_number} Documentation"
shutil.copy2('../CHANGELOG.md','./CHANGELOG.md')
# for PDF output on Read the Docs # for PDF output on Read the Docs
project = "ROCm SMI LIB Documentation" project = "ROCm SMI LIB Documentation"
author = "Advanced Micro Devices, Inc." author = "Advanced Micro Devices, Inc."
@@ -31,5 +42,9 @@ docs_core.setup()
external_projects_current_project = "rocm_smi_lib" external_projects_current_project = "rocm_smi_lib"
suppress_warnings = ["etoc.toctree"]
for sphinx_var in ROCmDocs.SPHINX_VARS: for sphinx_var in ROCmDocs.SPHINX_VARS:
globals()[sphinx_var] = getattr(docs_core, sphinx_var) globals()[sphinx_var] = getattr(docs_core, sphinx_var)
extensions += ['sphinx.ext.mathjax']
+2 -211
Ver ficheiro
@@ -81,17 +81,6 @@ OUTPUT_DIRECTORY = .
CREATE_SUBDIRS = NO 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 # 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 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 # 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 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 # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
# documentation from any documented member that it re-implements. # documentation from any documented member that it re-implements.
# The default value is: YES. # The default value is: YES.
@@ -464,19 +445,6 @@ TYPEDEF_HIDES_STRUCT = NO
LOOKUP_CACHE_SIZE = 0 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 # Build related configuration options
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
@@ -540,12 +508,6 @@ EXTRACT_LOCAL_METHODS = NO
EXTRACT_ANON_NSPACES = 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 # 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 # undocumented members inside documented classes or files. If set to NO these
@@ -616,12 +578,6 @@ HIDE_SCOPE_NAMES = NO
HIDE_COMPOUND_REFERENCE= 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 # 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 files that are included by a file in the documentation of that file.
# The default value is: YES. # The default value is: YES.
@@ -833,13 +789,6 @@ WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = 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 # 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 # are documented, but have no documentation for their parameters or return
# value. If set to NO, doxygen will only warn about wrong parameter # 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 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 # 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 # 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 # 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" 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 # 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 # 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 # 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 # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
# Note: If this tag is empty the current directory is searched. # Note: If this tag is empty the current directory is searched.
INPUT = ../../README.md \ INPUT = ../../include/rocm_smi/rocm_smi.h
../../include/rocm_smi/rocm_smi.h
# This tag can be used to specify the character encoding of the source files # 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 # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
@@ -920,16 +850,6 @@ INPUT = ../../README.md \
INPUT_ENCODING = UTF-8 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 # 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 # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
# *.h) to filter out the source-files in the directories. # *.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 # (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. # and want to reuse the introduction page also for the doxygen output.
USE_MDFILE_AS_MAINPAGE = ../../README.md USE_MDFILE_AS_MAINPAGE =
# 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
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to source browsing # Configuration options related to source browsing
@@ -1288,19 +1199,6 @@ HTML_EXTRA_STYLESHEET = ../_doxygen/extra_stylesheet.css
HTML_EXTRA_FILES = 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 # 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 # 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 # 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" 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 # This tag specifies a string that should uniquely identify the documentation
# set bundle. This should be a reverse domain-name style string, e.g. # set bundle. This should be a reverse domain-name style string, e.g.
# com.mycompany.MyDocSet. Doxygen will append .docset to the name. # com.mycompany.MyDocSet. Doxygen will append .docset to the name.
@@ -1601,18 +1492,6 @@ DISABLE_INDEX = NO
GENERATE_TREEVIEW = 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 # 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. # doxygen will group on one line in the generated HTML documentation.
# #
@@ -1637,24 +1516,6 @@ TREEVIEW_WIDTH = 250
EXT_LINKS_IN_WINDOW = NO 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 # 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 # 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 # doxygen run you need to manually remove any form_*.png images from the HTML
@@ -1681,17 +1542,6 @@ FORMULA_MACROFILE =
USE_MATHJAX = NO 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 # 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 # the MathJax output. For more details about the output format see MathJax
# version 2 (see: # version 2 (see:
@@ -2379,36 +2229,6 @@ HAVE_DOT = NO
DOT_NUM_THREADS = 0 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 # You can set the path where dot can find font specified with fontname in
# DOT_COMMON_ATTR and others dot attributes. # DOT_COMMON_ATTR and others dot attributes.
# This tag requires that the tag HAVE_DOT is set to YES. # This tag requires that the tag HAVE_DOT is set to YES.
@@ -2464,28 +2284,6 @@ UML_LOOK = NO
UML_LIMIT_NUM_FIELDS = 10 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 # If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
# collaboration graphs will show the relations between templates and their # collaboration graphs will show the relations between templates and their
# instances. # instances.
@@ -2552,13 +2350,6 @@ GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = 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 # 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 # generated by dot. For an explanation of the image formats see the section
# output formats in the documentation of the dot tool (Graphviz (see: # output formats in the documentation of the dot tool (Graphviz (see:
+269
Ver ficheiro
@@ -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
+29
Ver ficheiro
@@ -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)
+2
Ver ficheiro
@@ -0,0 +1,2 @@
```{include} ../python_smi_tools/README.md
```
+20 -2
Ver ficheiro
@@ -5,9 +5,27 @@ defaults:
maxdepth: 6 maxdepth: 6
root: index root: index
subtrees: subtrees:
- caption: API - caption: Tutorials
entries: 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 - caption: About
entries: entries:
- file: license - file: license
title: License
- file: CHANGELOG
title: Changelog
+1 -1
Ver ficheiro
@@ -1 +1 @@
rocm-docs-core[api_reference]>=0.30.3 rocm-docs-core[api_reference]>=0.31.0
+2 -2
Ver ficheiro
@@ -41,7 +41,7 @@ docutils==0.16
# myst-parser # myst-parser
# pydata-sphinx-theme # pydata-sphinx-theme
# sphinx # sphinx
doxysphinx==3.3.4 doxysphinx==3.3.7
# via rocm-docs-core # via rocm-docs-core
fastjsonschema==2.18.0 fastjsonschema==2.18.0
# via rocm-docs-core # via rocm-docs-core
@@ -116,7 +116,7 @@ requests==2.28.2
# via # via
# pygithub # pygithub
# sphinx # sphinx
rocm-docs-core[api_reference]>=0.30.3 rocm-docs-core[api_reference]>=0.31.0
# via -r requirements.in # via -r requirements.in
smmap==5.0.0 smmap==5.0.0
# via gitdb # via gitdb
+4 -3
Ver ficheiro
@@ -815,7 +815,7 @@ typedef rsmi_pcie_bandwidth_t rsmi_pcie_bandwidth;
*/ */
typedef struct { typedef struct {
/* Utilization */ /* Utilization */
uint16_t average_gfx_activity; uint16_t average_gfx_activity; //!< Average graphics activity
uint16_t average_umc_activity; //!< memory controller uint16_t average_umc_activity; //!< memory controller
uint16_t average_mm_activity; //!< UVD or VCN uint16_t average_mm_activity; //!< UVD or VCN
} rsmi_activity_metric_counter_t; } 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[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 * will be written
* *
* @retval ::RSMI_STATUS_SUCCESS is returned upon successful call. * @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[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 * written. If the @p guid parameter is nullptr, this function will return
* ::RSMI_STATUS_INVALID_ARGS. If the GPU ID is not supported with * ::RSMI_STATUS_INVALID_ARGS. If the GPU ID is not supported with
* the device index queried, gpu_id will return MAX UINT64 value an * 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_status_t
rsmi_dev_metrics_log_get(uint32_t dv_ind); rsmi_dev_metrics_log_get(uint32_t dv_ind);
/** @} */ // end of DevMetricsHeaderInfoGet
#ifdef __cplusplus #ifdef __cplusplus
} }
+1 -1
Ver ficheiro
@@ -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 This tool acts as a command line interface for manipulating
and monitoring the amdgpu kernel, and is intended to replace and monitoring the amdgpu kernel, and is intended to replace
A apresentação das diferenças no ficheiro foi suprimida por ser demasiado grande Carregar diff
+642
Ver ficheiro
@@ -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@'
+6 -3
Ver ficheiro
@@ -55,10 +55,10 @@ set(${ROCM_SMI}_VERSION_BUILD "0")
set(${ROCM_SMI}_VERSION_HASH "${PKG_VERSION_HASH}") set(${ROCM_SMI}_VERSION_HASH "${PKG_VERSION_HASH}")
message("SOVERSION: ${SO_VERSION_STRING}") message("SOVERSION: ${SO_VERSION_STRING}")
# Configure rsmiBindings.py.in with SO major version: # Configure rsmiBindingsInit.py.in with SO major version:
configure_file( configure_file(
"${COMMON_SRC_ROOT}/python_smi_tools/rsmiBindings.py.in" "${COMMON_SRC_ROOT}/python_smi_tools/rsmiBindingsInit.py.in"
"${COMMON_SRC_ROOT}/python_smi_tools/rsmiBindings.py") "${COMMON_SRC_ROOT}/python_smi_tools/rsmiBindingsInit.py")
# Create a configure file to get version info from within library # Create a configure file to get version info from within library
configure_file( 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 install(FILES ${COMMON_SRC_ROOT}/include/rocm_smi/kfd_ioctl.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocm_smi DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocm_smi
COMPONENT dev) 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 install(PROGRAMS ${COMMON_SRC_ROOT}/python_smi_tools/rsmiBindings.py
DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/${ROCM_SMI} DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/${ROCM_SMI}
COMPONENT dev) COMPONENT dev)
+1 -2
Ver ficheiro
@@ -759,8 +759,7 @@ WARN_LOGFILE =
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
# Note: If this tag is empty the current directory is searched. # Note: If this tag is empty the current directory is searched.
INPUT = @CMAKE_CURRENT_SOURCE_DIR@/../README.md \ INPUT = @CMAKE_CURRENT_SOURCE_DIR@/../include/rocm_smi/rocm_smi.h
@CMAKE_CURRENT_SOURCE_DIR@/../include/rocm_smi/rocm_smi.h
# This tag can be used to specify the character encoding of the source files # 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 # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses