dcgmproftester#
NAME#
dcgmproftester11, dcgmproftester12, dcgmproftester13 - generate CUDA loads for DCGM profiling fields and optionally compare the measured values
SYNOPSIS#
dcgmproftester<cuda-major> [-t <field-list>]
[-i <gpu-id-list>] [-d <seconds>]
[--no-dcgm-validation] [<options>]
dcgmproftester<cuda-major> --version
dcgmproftester<cuda-major> --help
<cuda-major> is 11, 12, or 13. <field-list> is a
comma-separated list of implemented profiling field IDs, nonvlink, or
nvlink. See WORKLOAD FIELD REFERENCE before using all.
DESCRIPTION#
dcgmproftester creates controlled CUDA activity for selected DCGM
profiling fields. It can report the load it generated, read the corresponding
field through an embedded DCGM host engine, and optionally compare the two.
The three executable variants have the same command-line interface.
Warning
This is an active workload generator. It consumes GPU compute, memory,
PCIe, or NVLink resources and can disturb applications and measurements on
the selected devices. Do not rely on the default all-GPU selection on a
shared system. Choose an idle physical GPU explicitly with -i and
coordinate use of profiling counters with other users.
The process always initializes DCGM in embedded mode to enumerate physical
GPUs, MIG instances, and GPU architecture. It has no --host option and
does not send its test request to the configured nv-hostengine.
Without --no-dcgm-validation, the embedded host engine creates temporary
entity and field groups and watches the requested profiling field. Profiling
counter access commonly requires root or the corresponding driver permission.
It can also fail with DCGM_ST_IN_USE when the system host engine, Nsight,
or another process owns the profiling resource.
See the Linux process-credentials note when validation succeeds under sudo but
fails for the invoking account.
To have the running host engine measure the workload, run dcgmproftester
with --no-dcgm-validation and observe the load with dcgmi dmon.
The option suppresses the embedded profiling watch and reads; it does not
prevent embedded DCGM initialization.
BINARY SELECTION#
The number at the end of the executable name is the CUDA major version
against which that executable was built and linked. It is not the
dcgmproftester application version. In DCGM 4.6, all three
--version commands report application version 2.0.0.
Choose the executable whose suffix matches the CUDA compatibility major
version reported by the active NVIDIA driver. The program checks the
driver through cuDriverGetVersion() before creating a workload and rejects
an ordinary mismatch. The CUDA toolkit selected in an interactive shell does
not override the executable’s linked major version.
The current selection rules are:
Use
dcgmproftester11when the driver reports CUDA major version 11.Use
dcgmproftester12when the driver reports CUDA major version 12.Use
dcgmproftester13when the driver reports CUDA major version 13.If a future driver reports a major version newer than the newest variant shipped by this DCGM release, use the newest shipped variant. DCGM 4.6 therefore permits
dcgmproftester13in that case.On a driver reporting CUDA 13.0, Maxwell, Pascal, and Volta GPUs (compute capability below 7.5) must use
dcgmproftester12because CUDA 13.0 removed those architectures. The program detects this case and directs the user to the CUDA 12 variant.
The CUDA version shown by nvidia-smi is the driver’s maximum supported
CUDA compatibility version and is the relevant starting point for this
choice. A version error from dcgmproftester reports both the expected and
detected major versions.
WORKLOAD FIELD REFERENCE#
The generator implements workloads for the following twelve field IDs. The
field tag is the name printed by dcgmi profile --list and used throughout
the DCGM profiling documentation.
ID |
Field tag |
Metric driven |
Workload and restrictions |
|---|---|---|---|
1001 |
|
Graphics/compute engine activity |
Varies engine activity. |
1002 |
|
SM activity |
Varies activity across streaming multiprocessors.
|
1003 |
|
SM occupancy |
Varies resident work and thread count. |
1004 |
|
Tensor-pipe activity |
Runs a tensor GEMM workload. |
1005 |
|
Device-memory activity |
Drives device-memory transfers. On MIG, one compute instance per GPU instance is used for this field. |
1006 |
|
FP64-pipe activity |
Runs FP64 arithmetic; |
1007 |
|
FP32-pipe activity |
Runs FP32 arithmetic; |
1008 |
|
FP16-pipe activity |
Runs FP16 arithmetic; |
1009 |
|
PCIe transmit bandwidth |
Drives host/device transfers. Testing is serialized across physical
GPUs regardless of |
1010 |
|
PCIe receive bandwidth |
Drives host/device transfers. Testing is serialized across physical
GPUs regardless of |
1011 |
|
NVLink transmit bandwidth |
Copies to the best connected GPU peer. Requires an NVLink peer, is not available in MIG mode, and is serialized across physical GPUs. |
1012 |
|
NVLink receive bandwidth |
Copies from the best connected GPU peer. Requires an NVLink peer, is not available in MIG mode, and is serialized across physical GPUs. |
Implementation and hardware support are separate tests. First select an ID from this table, then list the profiling fields supported by the target GPU:
$ dcgmi profile --list --entity-id gpu:0
The usable set is the intersection of this table and that command’s output. See Profiling for full metric definitions.
The parser also accepts every profiling field ID from 1001 through 1096. Most IDs after 1012 do not have a generator implementation. Selecting one of them reports that the test is not implemented and fails the run.
nonvlink expands to IDs 1001 through 1010, all of which are implemented.
nvlink expands to IDs 1011 and 1012. all expands to every profiling
ID from 1001 through 1096; omitting -t has the same effect. Consequently,
all and a no-argument invocation encounter unimplemented tests in DCGM
4.6 and are not useful defaults. Prefer explicit IDs.
OPTIONS#
Target and workload selection#
-t <fields>,--fieldId <fields>Select a comma-separated list of numeric profiling field IDs, or one of
nonvlink,nvlink, andall. The default isall. Option names are case-sensitive; the long spelling is--fieldId.A comma-separated numeric list applies one set of options to every listed field. Fields run sequentially. See MULTIPLE FIELD SETS for repeated
-tbehavior.-i <gpu-ids>,--gpuIds <gpu-ids>Select a comma-separated list of physical DCGM GPU IDs. Omission or
allselects every GPU returned by embedded DCGM. Obtain current IDs withdcgmi discovery --list. This option does not acceptgpu:0entity syntax, UUIDs, or individual MIG instance IDs.-d <seconds>,--duration <seconds>Set workload duration in seconds. The default is 30 and the minimum is 1. Multiple selected fields run sequentially, so their durations are additive; initialization, synchronization, and cleanup add elapsed time.
--max-processes <count>Limit the number of physical GPUs tested concurrently. The default is 4; 0 means all selected GPUs, and useful nonzero values are 1 through 255. Supply a whole number. PCIe and NVLink fields force a limit of 1.
--target-max-valueFor fields 1001, 1002, and 1003, run the maximum-target occupancy subtest instead of the normal stepped workload. It has no implemented effect for the other fields.
--cublasUse the cuBLAS-based workload for fields 1006, 1007, and 1008 instead of the default CUDA-kernel implementation. Field 1004 already uses its GEMM workload and is not switched by this option.
DCGM measurement and validation#
--no-dcgm-validationDo not create embedded DCGM profiling groups or watches, and do not read the selected profiling field. CUDA load generation still occurs, embedded DCGM is still initialized for inventory, and result files are still written. Use this mode when a standalone host engine observes the workload or when another process owns profiling counters.
--mode <tokens>Set a comma-separated operational mode. Each token enables a behavior; a
noprefix disables it. The recognized pairs aregenerateload/nogenerateload,report/noreport,validate/novalidate, andfast/nofast. Later tokens for the same behavior win. The default isgenerateload,report,novalidate,nofast.reportprints per-sample generated and DCGM values;noreportsuppresses those reports but not final status or result files.validatecompares DCGM samples with the generated target; the defaultnovalidatemerely reports samples.fastis meaningful withvalidateand stops a subtest after the first passing sample rather than completing the normal sequence.In DCGM 4.6, the parsed
generateloadsetting is not consulted by the workload implementation, sonogenerateloaddoes not disable the load. Unknown mode tokens are logged but do not make parsing fail. Use only the exact tokens above and do not use this option as a load-disable control.-w <percent>,--wait-to-check <percent>With
--mode validate, ignore comparison failures during the initial portion of a normal run. The default is 0. Supply a whole percentage from 0 through 99. Fast mode does not honor this waiting period.--percent-tolerance <percent>With
--mode validate, allow this percentage below the lower generated target and above the upper generated target. The default validation tolerance is 10 percent. Supply a value greater than or equal to 0 and less than 100. Specifying this option replaces an explicit absolute tolerance; if both appear, the later one wins.-a <value>,--absolute-tolerance <value>With
--mode validate, allow this absolute amount below and above the generated target interval. The value must be nonnegative. Specifying this option replaces an explicit percentage tolerance; if both appear, the later one wins.--min-value <value>,-m <value>,--match-value <value>,--max-value <value>Accepted by the DCGM 4.6 parser, which calculates an explicit comparison range from these values and the selected tolerance. A source defect leaves that range inactive, so the validator continues to compare against its generated target. Do not rely on these options in DCGM 4.6. On fields 1006 and 1008, specifying one also disables the built-in 0.5-through-1.0 range.
--sync-count <count>Set the number of retries used while synchronizing generated activity with a measurement before advancing. The default is 1 and the accepted range is 0 through 10. Zero disables synchronous advancement.
Reporting and compatibility output#
-r <seconds>,--report <seconds>Set the DCGM watch and report interval. The default is 1 second. Use a value greater than 0 and no greater than 10. This option is unrelated to the
report/noreportmode token.--dvsAdd DVS-style
&&&& RUNNING,&&&& PASSED, and&&&& FAILEDtags to standard output. Despite the generated help text, this switch enables rather than disables DVS output.
Logging and parser control#
--log-file <path>Write diagnostic logging to this file. The default is
dcgmproftester.login the current directory. Logging is initialized once, for the first field set; place a nondefault option before the first-twhen using repeated field sets.--log-level <level>Set file logging severity. Accepted values are
NONE,FATAL,ERROR,WARN,INFO,DEBUG, andVERB, without regard to case. The default isINFO. DCGM 4.6 does not reject an unknown string; it silently usesINFO, so use a listed value.--resetReset
--target-max-value,--no-dcgm-validation, and--dvsto false for the current and subsequent repeated field sets. It does not reset the other switches or value options despite its general help text.-c <path>,--config <path>Accepted but not used by the DCGM 4.6 implementation. The path is not opened and no YAML or JSON settings are loaded. Express settings on the command line.
--versionPrint the local
dcgmproftesterapplication version and exit before DCGM or CUDA initialization. The CUDA major remains part of the executable name, not this version string.-h,--helpPrint generated usage information and exit before DCGM or CUDA initialization.
--,--ignore_restStop parsing labeled options. This is an internal TCLAP compatibility feature and has no normal workload use.
MULTIPLE FIELD SETS#
A comma-separated -t value gives all fields the same settings. This is
the least surprising form and is recommended for most uses:
$ dcgmproftester13 -i 0 -t 1004,1005 -d 20 --no-dcgm-validation
Repeated -t options create stateful field sets. Options after one -t
and before the next apply when the preceding field set is committed; the last
set is committed at end of parsing. Settings persist into later sets until
changed. For example, this runs field 1004 for 10 seconds and field 1005 for
30 seconds:
$ dcgmproftester13 -i 0 --no-dcgm-validation \
-t 1004 -d 10 -t 1005 -d 30
Because logging is initialized from the first committed set and cannot move
to another file during the process, put --log-file before the first
-t. Prefer separate invocations when substantially different settings or
independent exit status are required.
GPU, MIG, AND PEER SCOPE#
-i selects physical DCGM GPU IDs. On a selected GPU in MIG mode, the tool
runs workers for all available compute instances; it has no command-line
selector for one GPU instance or compute instance. The DRAM workload uses one
compute instance from each GPU instance, and NVLink workloads reject MIG
mode.
When embedded validation is enabled for several GPUs, the selected group must
be homogeneous. Select same-SKU GPUs explicitly. --max-processes controls
ordinary compute fields, while PCIe and NVLink fields are always serialized
to avoid shared-fabric interference.
An NVLink workload chooses the peer with the greatest number of NVLink connections. A GPU with no NVLink-connected peer cannot run fields 1011 or 1012. Use dcgmi topo and dcgmi nvlink to inspect topology and link state before selecting those fields.
For an ordinary non-MIG, non-NVLink workload, a nonempty inherited
CUDA_VISIBLE_DEVICES value is preserved in each CUDA worker. MIG and
NVLink workers override it with the visibility set calculated from DCGM.
Align or unset an inherited value when it does not contain the physical GPU
selected with -i.
OUTPUT AND FILES#
With the default report mode, standard output contains periodic human-
readable worker reports with the generated target and DCGM value. Diagnostic
errors can appear on standard error, standard output, and in the log. There
is no JSON output mode.
Every started subtest attempts to write a result file in the current working
directory, even with --no-dcgm-validation or --mode noreport. Its name
is <subtest-tag>_<gpu-id>.results, for example
tensor_active_0.results. A later subtest with the same tag and GPU ID
truncates and replaces that file. The file contains generated/DCGM columns
and a final PASSED or FAILED line; a load-only run can have no DCGM
samples.
./dcgmproftester.logDefault log path, relative to the invocation’s working directory.
EXIT STATUS#
Zero means that the top-level run returned DCGM_ST_OK. A nonzero status
means parsing, initialization, a workload, validation, or cleanup failed. The
program returns raw dcgmReturn_t values for many failures, so negative
values wrap into the shell’s 0-through-255 range. Parser constraint failures
can instead exit 1. Automation should distinguish only zero from nonzero and
use the diagnostic text for the cause.
The shell conversion follows the conventions described in
EXIT STATUS; the status is not a signed dcgmReturn_t after the
shell has observed it.
DCGM 4.6 converts DCGM_ST_NOT_SUPPORTED from a field run to success. For
example, an NVLink test on a GPU with no peer can print a skip message,
All Tests Passed., and exit zero. Therefore, run one explicit field per
automation invocation and require its field-specific pass/report output in
addition to status zero. Do not treat All Tests Passed. alone as proof
that the requested workload ran.
EXAMPLES#
Discover physical GPU IDs and the profiling fields supported by GPU 0:
$ dcgmi discovery --list
$ dcgmi profile --list --entity-id gpu:0
Generate a tensor workload on GPU 0 for 30 seconds while the system host engine owns measurement. Choose the executable suffix as described in BINARY SELECTION:
$ dcgmproftester13 --gpuIds 0 --fieldId 1004 --duration 30 \
--no-dcgm-validation
In another terminal, observe that workload through the running host engine:
$ dcgmi dmon --field-id 1004 --entity-id gpu:0 --delay 1000
Run embedded comparison of tensor activity with a 5-percent tolerance. This form must be the sole profiling consumer and commonly requires elevated profiling permission:
$ sudo dcgmproftester13 -i 0 -t 1004 -d 30 \
--mode generateload,report,validate,nofast \
--percent-tolerance 5
Generate both PCIe directions on GPU 2 without acquiring profiling counters:
$ dcgmproftester12 -i 2 -t 1009,1010 -d 15 \
--no-dcgm-validation
SEE ALSO#
dcgmi profile, dcgmi dmon, dcgmi discovery, dcgmi topo, dcgmi nvlink, nv-hostengine, Profiling, Profiling, Field Identifiers