Skip to content

[BUG] conda-cpp-tests on gb300: routing PDP test hits illegal memory access, set_shmem_of_kernel fails after it #2212

Open

Description

@ramakrishnap-nv

Describe the bug
In nightly run 40167716943 (2026-10-25, b5ad4d07), conda-cpp-tests / 13.3.0, 3.14, arm64, ubuntu26.04, gb300, latest-driver, latest-deps fails (job 121092087617). 3 routing tests fail, in every retry:

  • cost_boundary_initialization.pdp_set_route_data_resets_cost_boundaries: C++ exception from cuda/__driver/driver_api.h:662, an illegal memory access was encountered
  • set_shmem_of_kernel.zero_request: cudaGetLastError() returns 700 (cudaErrorIllegalAddress), expected cudaSuccess (set_shmem_of_kernel.cu:32)
  • set_shmem_of_kernel.normal_request: set_shmem_of_kernel(kernel_normal, 4096) returns false (set_shmem_of_kernel.cu:38)

The two set_shmem_of_kernel failures look like fallout of the illegal access in the preceding PDP test: the sticky error 700 is still set when they run. Within the routing test binary, the other 57 tests pass.

Expected behavior
cost_boundary_initialization.pdp_set_route_data_resets_cost_boundaries passes on gb300 as on the other GPUs.

Environment details

  • Environment location: CI, gb300 arm64, CUDA 13.3.0, Python 3.14, ubuntu26.04, latest driver
  • Method of cuOpt install: conda build from source (rattler-build)

Additional context
Related: #2176 (other gb300-only C++ test failures).

Activity

  1. 0z5a commented on Nov 3, 2026

    @0z5a

    On an x86_64 B300 (sm_103, same sm_100f device code as GB300) with 26.12.00a58, cost_boundary_initialization.* and set_shmem_of_kernel.* passed 200/200, and compute-sanitizer memcheck reports no memory errors. So the GPU alone does not reproduce it.

    I think the cause is in the test itself. In test_cost_boundaries_reset, only the PDP branch does

    if constexpr (is_pdp) {
      const int pickup   = 0;
      const int delivery = 1;
      raft::copy(d_pickups.data(), &pickup, 1, stream);
      raft::copy(d_deliveries.data(), &delivery, 1, stream);
      ...
    }  // pickup and delivery end here, nothing has synced the stream

    raft::copy is a cudaMemcpyAsync from pageable memory. Where the driver reads that source when the stream reaches the copy instead of at the call (the same class as #1756, #2200, #2202, and NVIDIA/cudf#23517 on GB300/GH200), d_pickups/d_deliveries receive whatever is on the stack by then, set_route_data reads out of bounds, and the sticky error 700 then fails the two set_shmem_of_kernel tests that follow. That matches the gb300 runs on 10-25 and 11-01: the PDP variant fails and the VRP variant next to it passes. On the B300 a small probe shows pageable cudaMemcpyAsync reads the source at call time, which is why it does not reproduce there.

    #2260 keeps the host sources alive (device_copy from function-scope vectors, the way the test already handles cost_matrix and order_locations) and fixes two src sites with the same pattern.

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

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions