Skip to content

CI: run the gpu_octree tests on a simulated GPU - #6485

Open
saqibkh wants to merge 1 commit into
PointCloudLibrary:masterfrom
saqibkh:ci-simulated-gpu
Open

saqibkh wants to merge 1 commit into
PointCloudLibrary:masterfrom
saqibkh:ci-simulated-gpu

Conversation

@saqibkh

@saqibkh saqibkh commented Sep 30, 2026

Copy link
Copy Markdown

The Azure pipelines build the GPU modules but configure with PCL_DISABLE_GPU_TESTS=ON, because their agents have no GPU, so the gpu_octree tests never run in CI. This adds a GitHub Actions job that runs them on a simulated NVIDIA T4.

How: PantheonSim, via pantheongpu/setup-pantheonsim, installs the CUDA toolkit and simulates the GPU on the runner's CPU. The kernels run from their PTX (CUDA_ARCH_BIN=75 embeds it), so the results are real. There is no timing model, so this checks correctness, not performance.

Changes: one new workflow, .github/workflows/gpu-tests.yml, on a plain ubuntu-24.04 runner:

  • set up CUDA 12.8 and a simulated T4;
  • configure with only the modules the tests need (common, octree, gpu_containers, gpu_utils, gpu_octree), CUDA_ARCH_BIN=75 and the shared CUDA runtime, since the simulator stands in for libcudart;
  • build the five test programs and run them with ctest.

gpu_octree_performance is left out: it is a timing benchmark, and on a simulated GPU it runs for over 50 minutes. The workflow only runs when the GPU octree code, its dependencies, the CMake files or the workflow itself change. The Azure pipelines are unchanged.

What it can touch: the action is pinned by commit (v0.1.1), not by a tag, and it pins the simulator it builds by commit too, so nothing in the job changes until you move the pin. The workflow's token is read-only (permissions: contents: read), and the action uses no token or secrets; it installs packages only from Ubuntu's and NVIDIA's repositories. The job isn't a required check, so a red run never blocks a merge unless you decide it should.

What it gives, from a run on my fork:

  • gpu_octree_approx_nearest, bfrs, host_radius, knn_search and radius_search all pass, in about 3 minutes.
  • The job takes about 7 minutes. The action caches the simulator it builds, per pinned version, so only the first run in the repository builds it (about 20 minutes that time).

Would it have caught past bugs? I undid two earlier fixes on current master and ran the same job (run):

Disclosure: I maintain PantheonSim. If the job is ever flaky or wrong, please open an issue at pantheongpu/pantheonsim and I'll fix it on our side.

🤖 Generated with Claude Code

The Azure pipelines configure with PCL_DISABLE_GPU_TESTS=ON because their
agents have no GPU. This adds a GitHub Actions job that builds only the
modules the gpu_octree tests need and runs them on a simulated NVIDIA T4.
The performance test is left out: the simulator has no timing model.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

1 participant