|
Uni20
Asynchronous tensor and runtime library.
|
Status: background provider and version survey for future CUDA backends, not current Tensor backend behavior.
These notes record how uni20 should handle CUDA-adjacent vendor libraries such as cuBLAS, cuSOLVER, cuTENSOR, cuTensorNet, cuStateVec, and cuDensityMat. See also `runtime_resolution.md` for the loader/rpath policy that determines which shared libraries are found before these runtime probes can run.
The main rule is that library discovery is not enough. A CUDA backend adapter must distinguish:
For example, a library can be a valid CUDA 12 library and still be unusable on GV100 because the current release has dropped sm_70 kernels. This happened locally with cuTENSOR 2.6 and cuQuantum 26.03 on Polaron.
Backend adapters should provide lightweight runtime probes. These probes should be explicit and cacheable; they should not run repeatedly on every operation.
Useful probe levels are:
Handle creation is a useful first filter but is not always sufficient. Some libraries may create a handle while rejecting a particular tensor contraction, factorization, precision mode, or JIT policy later.
The result should be represented as capabilities, not as a single boolean:
Operations should dispatch through these capabilities and fall back when the optimized backend is unavailable.
uni20 should allow multiple vendor library versions to coexist. This is needed for older but still useful GPU architectures such as Volta, where the newest library release may no longer support the device.
The preferred model is:
CUTENSOR_ROOT and CUQUANTUM_ROOT;Do not assume that the system default ldconfig result is the desired backend. For reproducible builds and benchmarks, explicit roots are better than ambient library search order.
These are empirical results from the dual GV100 Polaron machine. They are not a complete compatibility matrix.
Failed on Quadro GV100 sm_70:
cutensorCreate() returned CUTENSOR_STATUS_NOT_SUPPORTED.cutensornetCreate() returned CUTENSORNET_STATUS_NOT_SUPPORTED.Worked on Quadro GV100 sm_70:
cutensornetCreate(), custatevecCreate(), and cudensitymatCreate() all succeeded.Current local roots used for the working archived stack:
The backend-dispatch model should treat vendor libraries as optional capabilities. A public uni20 operation should not require cuTENSOR or cuTensorNet unless the operation explicitly promises that backend.
The normal path should be:
This keeps Volta-era systems viable while still allowing newer machines to use newer vendor libraries.