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
89 lines
3.5 KiB
Markdown
89 lines
3.5 KiB
Markdown
# 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.*`.
|