Skip to content

Draft: rocprofiler-sdk

John Mellor-Crummey requested to merge rocprofiler-sdk into develop
  • commit changes needed to build with latest afar

  • rocprofilerv3: restore binary processing.

  • Remove AMD debugging hotpatch

  • rocprofilerv3 changes with AMD

  • hpcrun-c: Fix crash when running with no path

If hpcrun-c is launched with no path, the command crashes attempting to canonicalize "hpcrun-c". Hackily fix this by using /proc/self/exe instead.

Consider #819

  • hpcrun: Convert the launch script to C++

(This commit is cherry-picked from e0e39d3f, but modified to retain the original hpcrun script instead of replacing it. The C++ launcher is built as hpcrun-c. Intended for debugging/experimentation only.)

As our initialization code gets more complex, we need earlier and earlier "hooks" to attach to with gdb. As it stands right now, you can't just gdb --args hpcrun -e REALTIME ./my_app, since hpcrun is a shell launch script and gdb only operates on (binary) executables. We have the hpcrun -d flag for this case which invokes a spin-wait for attachment, but for some initialization tasks this is still "too late" of an attachment point to observe everything going on.

Shell is also notorious for its many flaws (non-portability, inelegant and insufficient error handling, lack of first-class values, etc.) that make it unsuitable for large and robust applications. The hpcrun launch script is >850 lines of complex logic. Times need to change.

This commit converts the script to C++, as close to 1-to-1 as possible. A few difficult logic pieces that probe the application binary have been removed, most of these only generated early errors and so have little effect on users. The logic to find libmonitor has also been rewritten.

And yes, gdb --args hpcrun ... just works now. You're welcome.

Resolves #699 (closed) and #703 (closed)

  • devcontainers: Integrate with Clangd extension

Clangd requires a reference to the build directory to properly find the compile_commands.json. In devcontainers the expectation is that the Meson extension is being used, so add (default) configuration for the Clangd extension will use the Meson extension's build directory.

Note that this doesn't add Clangd as an extension, it only adds the configuration to make it work.

  • rocprofilerv3 preliminary implementation

  • update meson.build for hpcstruct to populate devenv

  • update container description for rocm on ubuntu 22.04

  • add rocm path into container

  • Devcontainer setup for rocm-rc

  • Revert changes to ROCprofiler find script

  • Refactor the build system to smoothly support different ROCm versions

Now meson setup completes successfully on ROCm 6.0 and ROCm AFAR. It doesn't build yet, but the dependencies are now in place.

  • Restore original ROCm Containerfile

This allows using the rocm5.x and 6.x devcontainers in addition to the custom rocm-afar one from the same branch.

  • Adjust container script to build from scratch

It does need a secret, which is present by default on our shared development machine.

  • setup for rocm afar container

To Demonstrate

Backward Compatibility

Additional Information

Checklist

  • I have run pre-commit run -a on my local checkout and fixed any reported issues.
  • I have confirmed that existing tests and/or the tests added by this MR cover the changes introduced by this MR.
  • I have confirmed that any added tests will be automatically run in CI.
  • I have updated all relevant documentation:
    • The --help text for the tools
    • The man page for the tools
    • The HPCToolkit User's Manual

Merge request reports