Files
TheRock/rocm-systems/projects/rccl/test/ir-device/README.md
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

89 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# RCCL IR Device Tests (`librccl_device.bc`)
## Description
This directory contains a pytest harness that builds and runs the GoogleTest
binary defined in `bindings/ir/test/IR_test.cpp`. That test exercises every
active API exported by `nccl_device_wrapper__impl.h` on real GPU hardware:
| Group | API |
|-------|-----|
| A | `ncclGetPeerPointerTeam` |
| B1–B5 | `ncclCoopAnyInit{Thread,Warp,Lanes,WarpSpan,Cta}` + `ncclCoopSize/ThreadRank/NumThreads` |
| B6 | `ncclCoopSync` (all five coop types) |
| B7 | `ncclLsaBarrierSession_C` structural check (runtime calls skipped) |
Unlike the rest of `rccl-UnitTests`, this test cannot be built by the default
RCCL CMake invocation: it links `librccl_device.bc` into the AMDGPU device-side
LTO and must be compiled by `hipcc` at `-O0` with special offload-linker flags.
The bitcode itself only exists when RCCL is configured with `-DEMIT_LLVM_IR=ON`.
The harness follows the same pattern as `test/ext-plugins`: the test artifact
is built on demand from a session fixture, and the suite is **skipped with a
clear reason** (rather than failing) when its prerequisites are missing.
The session fixture builds **both** layers on demand:
1. If `librccl_device.bc` is absent, it is emitted via the standalone
`bindings/ir` Makefile (`make EMIT_LLVM_IR=1 …`) — the equivalent of a
`-DEMIT_LLVM_IR=ON` build, but reusing the hipify-staged headers from an
earlier RCCL build instead of recompiling RCCL.
2. The GoogleTest binary is then compiled against that bitcode.
## Prerequisites
You only need RCCL to have been built **once** so the hipify-staged
`nccl_device` headers and generated `nccl.h`/`rccl.h` exist (a normal
`-DBUILD_TESTS=ON` build is enough — `EMIT_LLVM_IR` is **not** required at
configure time because the harness emits the bitcode itself):
```bash
cmake -B build/release -DBUILD_TESTS=ON .
cmake --build build/release --target rccl
```
If you prefer, configuring with `-DEMIT_LLVM_IR=ON -DBITCODE_LIB_ARCH=gfx942`
and building the `llvm_ir` target pre-produces the bitcode, and the harness
will reuse it. GoogleTest is taken from `GTEST_ROOT` (the RCCL build installs
it under `build/release/gtest`, or point at a system install such as `/usr`).
## Configuration (environment variables)
| Variable | Default | Description |
|----------|---------|-------------|
| `RCCL_DIR` | repo root (derived) | RCCL source root |
| `RCCL_BUILD` | `$RCCL_DIR/build/release` | RCCL CMake build dir |
| `ROCM_PATH` | `/opt/rocm` | ROCm install root |
| `ARCH` | `gfx942` | offload / bitcode architecture |
| `GTEST_ROOT` | `$RCCL_BUILD/gtest` | GoogleTest install prefix |
| `IR_OUTDIR` | `<cwd>/ir_test_build` | output dir for the compiled binary |
## Running
```bash
cd test/ir-device
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
# Build + run all IR device tests
pytest -v --cache-clear
# Run a single group
pytest -v -m peer_pointer
pytest -v -m coop
pytest -v -m lsa_barrier
```
Build and per-test logs are written to `logs/`.
## CI integration
This suite is intended to be run the same way `test/ext-plugins` is — a
`pytest` step in the test workflow, on a runner that built RCCL with
`-DEMIT_LLVM_IR=ON`. On runners that did not, every case auto-skips, so the
step is safe to add unconditionally.
Alternatively, because the `EMIT_LLVM_IR` flag can be passed through the
`test_runner` build configuration (`cmake_options`), the compiled binary can
be registered in a `test_runner` JSON config as an `is_gtest: true` test with
`binary: IR_test.exe` and `test_filter: IRDeviceTest.*`.