Skip to content

Feature Request: Introduce cuda_compute_capabilities (and related) options for AMD GPU architectures #4829

Open
@Thyre

Description

@Thyre

For quite some time now, EasyBuild has easy to use options to set the CUDA capabilities for installations in EasyConfigs, its config files and even on the command line when installing software.
This is extremely useful, since it does not necessarily require changing EasyConfigs just to build software for additional architectures.
The same could be applied to AMD GPU architectures.

The base situation is a bit more complicated, as there are way more GPU targets (e.g. gfx1100, gfx1101, gfx1102, gfx1103 for RX 7000 / RX 700M), and additional options can be passed to some of them, e.g. gfx90a:xnack+ and gfx90a:xnack- to enable/disable page migration.

Additionally, similar to NVIDIA GPU support, the question arises on how to enforce selected architectures, and have a well defined behavior. This question came up in #4770. Similar to nvcc, one can use HIPCC_PREPEND_FLAGS and HIPCC_APPEND_FLAGS. However, this will not work once we're dealing with other accelerator frameworks like OpenACC or (parts of) OpenMP, where each compiler handles flags differently.


Right now, there are a few EasyBlocks having the option to set AMD GPU architectures or enable building for AMD GPUs, partially with different naming:

Each EasyBlock has their own list of "supported" architectures. As they are not regularly updated, all of them are outdated for recent compiler releases (e.g. gfx1200, gfx1201 which exist in Clang 19). We probably do not want to parse CMake files for all those packages, but unifying the options in some common place might be worthwhile, or move them to the EasyConfigs.

Thinking beyond compilers, this effort will come in handy when dealing with ROCm components, as they all define a large set of architectures built by default. However, systems commonly have only a limited set of them available. Building all of them is therefore just wasted space.
It might also be helpful when adding support for AMD GPUs in EESSI (see GitLab: Building for AMD GPUs (ROCm))


As to why this might be helpful:

Personally, I'm dealing with several different systems with both NVIDIA and AMD GPUs. Having the option to use a common set of EasyConfigs with only slight changes to accommodate for the GPU architectures helps significantly. This certainly will not work for everything, especially once ROCm & CUDA as packages are involved. However, even in the scale of compilers this saves a lot of hassle when building multiple different compilers.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions