2023-03-20 10:30:33 +05:30
|
|
|
# Changelog for ROCprofiler
|
|
|
|
|
|
|
|
|
|
Full documentation for ROCprofiler is available at
|
|
|
|
|
[docs.amd.com](https://docs.amd.com/bundle/ROCm-Profiling-Tools-User-Guide-v5.3)
|
|
|
|
|
|
2023-04-20 22:04:46 +00:00
|
|
|
As of ROCm 5.5, the ROCm Profiler will not use terminologies like `rocmtools` or
|
|
|
|
|
`rocsight` to describe `rocrofiler` as was done in ROCm 5.4. To identify the
|
|
|
|
|
separation of the two versions of `rocprofiler`, the terms `rocprofilerV1` and
|
|
|
|
|
`rocprofilerV2` will be used. The `rocprofilerV2` API is currently considered a
|
|
|
|
|
beta release and subject to changes in future releases.
|
|
|
|
|
|
|
|
|
|
## ROCprofiler for rocm 5.4.4
|
|
|
|
|
|
|
|
|
|
In ROCm 5.4 the naming of the ROCm Profiler related files is:
|
|
|
|
|
|
|
|
|
|
| ROCm 5.4 | rocprofilerv1 | rocmtools |
|
|
|
|
|
|-----------------|-------------------------------------|---------------------------------|
|
|
|
|
|
| **Tool script** | `bin/rocprof` | `bin/rocsight` |
|
|
|
|
|
| **API include** | `include/rocprofiler/rocprofiler.h` | `include/rocmtools/rocmtools.h` |
|
|
|
|
|
| **API library** | `lib/librocprofiler64.so.1` | `lib/librocmtools.so.1` |
|
|
|
|
|
|
|
|
|
|
The ROCm Profiler Tool that uses `rocprofilerV1` can be invoked using the
|
|
|
|
|
following command:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
$ rocprof …
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
To write a custom tool based on the `rocprofilerV1` API do the following:
|
|
|
|
|
|
|
|
|
|
```C
|
|
|
|
|
main.c:
|
|
|
|
|
#include <rocprofiler/rocprofiler.h> // Use the rocprofilerV1 API
|
|
|
|
|
int main() {
|
|
|
|
|
// Use the rocprofilerV1 API
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
This can be built in the following manner:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
$ gcc main.c -I/opt/rocm-5.4.4/include -L/opt/rocm-5.4.4/lib -lrocprofiler64
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
The resulting `a.out` will depend on
|
|
|
|
|
`/opt/rocm-5.4.4/lib/librocprofiler64.so.1`.
|
|
|
|
|
|
|
|
|
|
The ROCm Profiler that uses `rocprofilerV2` API can be invoked using the
|
|
|
|
|
following command:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
$ rocsight …
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
To write a custom tool based on the `rocmtools` API do the following:
|
|
|
|
|
|
|
|
|
|
```C
|
|
|
|
|
main.c:
|
|
|
|
|
#include <rocmtools/rocmtools.h> // Use the rocmtools API
|
|
|
|
|
int main() {
|
|
|
|
|
// Use the rocmtools API
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
This can be built in the following manner:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
$ gcc main.c -I/opt/rocm-5.4.4/include -L/opt/rocm-5.4.4/lib -lrocmtools
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
The resulting `a.out` will depend on `/opt/rocm-5.4.4/lib/librocmtools.so.1`.
|
|
|
|
|
|
|
|
|
|
## ROCprofiler for rocm 5.5.0
|
|
|
|
|
|
|
|
|
|
In ROCm 5.5 the `rocprofilerv1` and `rocprofilerv2` include and library files
|
|
|
|
|
are merged into single files. The `rocmtools` available in ROCm 5.4 is also
|
|
|
|
|
available in ROCm 5.5 but is deprecated and will be removed in a future release.
|
|
|
|
|
|
|
|
|
|
| ROCm 5.5 | rocprofilerv1 | rocprofilerv2 | rocmtools *(deprecated)* |
|
|
|
|
|
|-----------------|-------------------------------------|-------------------------------------|---------------------------------|
|
|
|
|
|
| **Tool script** | `bin/rocprof` | `bin/rocprofv2` | `bin/rocsight` |
|
|
|
|
|
| **API include** | `include/rocprofiler/rocprofiler.h` | `include/rocprofiler/rocprofiler.h` | `include/rocmtools/rocmtools.h` |
|
|
|
|
|
| **API library** | `lib/librocprofiler64.so.1` | `lib/librocprofiler64.so.1` | `lib/librocmtools.so.1` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The ROCm Profiler Tool that uses `rocprofilerV1` can be invoked using the
|
|
|
|
|
following command:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
$ rocprof …
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
To write a custom tool based on the `rocprofilerV1` API it is necessary to
|
|
|
|
|
define the macro `ROCPROFILER_V1`:
|
|
|
|
|
|
|
|
|
|
```C
|
|
|
|
|
main.c:
|
|
|
|
|
#define ROCPROFILER_V1
|
|
|
|
|
#include <rocprofiler/rocprofiler.h>
|
|
|
|
|
int main() {
|
|
|
|
|
// Use the rocprofilerV1 API
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
This can be built in the following manner:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
$ gcc main.c -I/opt/rocm-5.5.0/include -L/opt/rocm-5.5.0/lib -lrocprofiler64
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
The resulting `a.out` will depend on
|
|
|
|
|
`/opt/rocm-5.5.0/lib/librocprofiler64.so.1`.
|
|
|
|
|
|
|
|
|
|
The ROCm Profiler that uses `rocprofilerV2` API can be invoked using the
|
|
|
|
|
following command:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
$ rocprofv2 …
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
To write a custom tool based on the `rocprofilerV2` API do the following:
|
|
|
|
|
|
|
|
|
|
```C
|
|
|
|
|
main.c:
|
|
|
|
|
#include <rocprofiler/rocprofiler.h>
|
|
|
|
|
int main() {
|
|
|
|
|
// Use the rocprofilerV2 API
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
This can be built in the following manner:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
$ gcc main.c -I/opt/rocm-5.5.0/include -L/opt/rocm-5.5.0/lib -lrocprofiler64
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
The resulting `a.out` will depend on
|
|
|
|
|
`/opt/rocm-5.5.0/lib/librocprofiler64.so.1`.
|
|
|
|
|
|
2023-03-20 10:30:33 +05:30
|
|
|
## ROCprofiler for rocm 5.6.0
|
2023-04-20 22:04:46 +00:00
|
|
|
|
|
|
|
|
In ROCm 5.6 the `rocprofilerv1` and `rocprofilerv2` include and library files of
|
|
|
|
|
ROCm 5.5 are split into separate files. The `rocmtools` files that were
|
|
|
|
|
deprecated in ROCm 5.5 have been removed.
|
|
|
|
|
|
|
|
|
|
| ROCm 5.6 | rocprofilerv1 | rocprofilerv2 |
|
|
|
|
|
|-----------------|-------------------------------------|----------------------------------------|
|
|
|
|
|
| **Tool script** | `bin/rocprof` | `bin/rocprofv2` |
|
|
|
|
|
| **API include** | `include/rocprofiler/rocprofiler.h` | `include/rocprofiler/v2/rocprofiler.h` |
|
|
|
|
|
| **API library** | `lib/librocprofiler.so.1` | `lib/librocprofiler.so.2` |
|
|
|
|
|
|
|
|
|
|
The ROCm Profiler Tool that uses `rocprofilerV1` can be invoked using the
|
|
|
|
|
following command:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
$ rocprof …
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
To write a custom tool based on the `rocprofilerV1` API do the following:
|
|
|
|
|
|
|
|
|
|
```C
|
|
|
|
|
main.c:
|
|
|
|
|
#include <rocprofiler/rocprofiler.h> // Use the rocprofilerV1 API
|
|
|
|
|
int main() {
|
|
|
|
|
// Use the rocprofilerV1 API
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
This can be built in the following manner:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
$ gcc main.c -I/opt/rocm-5.6.0/include -L/opt/rocm-5.6.0/lib -lrocprofiler64
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
The resulting `a.out` will depend on
|
|
|
|
|
`/opt/rocm-5.6.0/lib/librocprofiler64.so.1`.
|
|
|
|
|
|
|
|
|
|
The ROCm Profiler that uses `rocprofilerV2` API can be invoked using the
|
|
|
|
|
following command:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
$ rocprofv2 …
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
To write a custom tool based on the `rocprofilerV2` API do the following:
|
|
|
|
|
|
|
|
|
|
```C
|
|
|
|
|
main.c:
|
|
|
|
|
#include <rocprofiler/v2/rocprofiler.h> // Use the rocprofilerV2 API
|
|
|
|
|
int main() {
|
|
|
|
|
// Use the rocprofilerV2 API
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
This can be built in the following manner:
|
|
|
|
|
|
|
|
|
|
```sh
|
2023-05-17 18:36:03 +05:30
|
|
|
$ gcc main.c -I/opt/rocm-5.6.0/include -L/opt/rocm-5.6.0/lib -lrocprofiler64v2
|
2023-04-20 22:04:46 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
The resulting `a.out` will depend on
|
|
|
|
|
`/opt/rocm-5.6.0/lib/librocprofiler64.so.2`.
|
|
|
|
|
|
2023-03-20 10:30:33 +05:30
|
|
|
### Optimized
|
|
|
|
|
- Improved Test Suite
|
|
|
|
|
### Added
|
|
|
|
|
- 'end_time' need to be disabled in roctx_trace.txt
|
2023-05-15 19:01:07 +05:30
|
|
|
- support for hsa_amd_memory_async_copy_on_engine API function trace
|
2023-06-01 21:45:16 -03:00
|
|
|
|
2023-03-20 10:30:33 +05:30
|
|
|
### Fixed
|
|
|
|
|
- rocprof in ROcm/5.4.0 gpu selector broken.
|
|
|
|
|
- rocprof in ROCm/5.4.1 fails to generate kernel info.
|
|
|
|
|
- rocprof clobbers LD_PRELOAD.
|
2023-05-24 15:19:03 +05:30
|
|
|
|
|
|
|
|
## ROCprofiler for rocm 5.7.0
|
2023-06-01 21:45:16 -03:00
|
|
|
### Navi support
|
|
|
|
|
Rocprofiler for ROCm 5.7 added support for counter collection (PMC) and advanced thread tracing (ATT) for Navi21 and Navi31 GPUs.
|
|
|
|
|
- On Navi, specially Navi31, counter collection requires the GPU to be in a stable power state. See README.md for instructions.
|
|
|
|
|
- Navi does not support streaming SQ counters and ATT at the same time, unlike GFX9.
|
|
|
|
|
- On Navi ATT, "att: target_cu" indexes the WGP and the SIMD_MASK parameter is actually the SIMD_ID, in the range [0,3].
|
|
|
|
|
- HIP RT in ATT not yet supported.
|
|
|
|
|
### Changed
|
|
|
|
|
- ATT analysis will not run by default. For ATT to have the same behaviour as 5.5, use --plugin att <as.s> --mode network
|
2023-05-24 15:19:03 +05:30
|
|
|
### Optimized
|
2023-06-01 21:45:16 -03:00
|
|
|
- ATT json filesizes
|
2023-05-24 15:19:03 +05:30
|
|
|
### Added
|
|
|
|
|
- Every API trace in V2 reported synchronously will have two records, one for Enter phase and for Exit phase
|
|
|
|
|
- File Plugin now reports the HSA OPS operation kind as part of the output text
|
|
|
|
|
- MI300 counters support for rocprof v1 and v2.
|
|
|
|
|
- Limiting file name sizes for ATT plugin.
|
|
|
|
|
- Support for MI300 XCC modes for rocprof v2.
|
2023-05-24 15:54:44 -05:00
|
|
|
- MI300 individual XCC counters dumped per-xcc as separate records but with same record-id and kernel dispatch info
|
2023-05-18 00:14:23 -03:00
|
|
|
- Naming for MPI ranks. Filenames containing "%rank" are replaced by variables "MPI_RANK", "OMPI_COMM_WORLD_RANK" or "MV2_COMM_WORLD_RANK".
|
2023-05-31 19:58:42 -03:00
|
|
|
- MPI Rank will appear in perfetto track names.
|
2023-06-01 21:45:16 -03:00
|
|
|
- SE_MASK parameter in ATT, a binary mask specifying for which shader engines to run ATT.
|
|
|
|
|
On GFX9, SEs are masked out completely. On Navi only part of the data is masked.
|
|
|
|
|
The use of SE_MASK=0x1 is heavily encouraged to avoid packet lost events.
|
|
|
|
|
- "--mode file" option in ATT, which allows for parsed files to be stored. Run python3 httpserver.py from within ./UI/ to view files locally.
|
|
|
|
|
- "ROCPROFILER_MAX_ATT_PROFILES" environment variable can be set. Previously fixed at 16, now the default is 1.
|
|
|
|
|
- Increased ATT buffer size per collection to 1GB.
|
2023-05-24 15:19:03 +05:30
|
|
|
### Fixed
|
2023-05-12 19:19:24 +00:00
|
|
|
- Samples are fixed to show the new usage of phases.
|
2023-05-23 15:25:37 +05:30
|
|
|
- Plugin option validates the plugin names.
|
2023-05-25 04:17:29 +00:00
|
|
|
- Fixing rocsys, for rocsys options, rocsys -h can be called
|
2023-05-17 23:38:36 -03:00
|
|
|
- "--output-file" option ignored when no output folder was specified.
|
2023-05-31 19:58:42 -03:00
|
|
|
- Perfetto crash when using ROCTX and/or no output file specified.
|
2023-06-01 21:45:16 -03:00
|
|
|
- Parsing of the getpc, setpc and swappc instructions with registers loaded from scratch space.
|
|
|
|
|
- Some browsers caching ATT data from older kernels.
|