Module: Ignis::Solver::CuDSSBindings
- Extended by:
- FFI::Library
- Defined in:
- lib/nvruby/solver/cudss_bindings.rb
Overview
FFI bindings for NVIDIA cuDSS v0.7+ High-performance direct sparse solvers for CUDA
Constant Summary collapse
- CUDSS_STATUS_SUCCESS =
cuDSS status codes
0- CUDSS_STATUS_NOT_INITIALIZED =
1- CUDSS_STATUS_ALLOC_FAILED =
2- CUDSS_STATUS_INVALID_VALUE =
3- CUDSS_STATUS_ARCH_MISMATCH =
4- CUDSS_STATUS_MAPPING_ERROR =
5- CUDSS_STATUS_EXECUTION_FAILED =
6- CUDSS_STATUS_INTERNAL_ERROR =
7- CUDSS_STATUS_NOT_SUPPORTED =
8- CUDSS_PHASE_REORDERING =
cuDSS Phases (from cudss.h - these are bitmask values)
1- CUDSS_PHASE_SYMBOLIC_FACTORIZATION =
1 << 0
2- CUDSS_PHASE_ANALYSIS =
1 << 1
3- CUDSS_PHASE_FACTORIZATION =
REORDERING | SYMBOLIC_FACTORIZATION = 1 | 2 = 3
4- CUDSS_PHASE_REFACTORIZATION =
1 << 2
8- CUDSS_PHASE_SOLVE_FWD_PERM =
1 << 3
16- CUDSS_PHASE_SOLVE_FWD =
1 << 4
32- CUDSS_PHASE_SOLVE_DIAG =
1 << 5
64- CUDSS_PHASE_SOLVE_BWD =
1 << 6
128- CUDSS_PHASE_SOLVE_BWD_PERM =
1 << 7
256- CUDSS_PHASE_SOLVE_REFINEMENT =
1 << 8
512- CUDSS_PHASE_SOLVE =
1 << 9
1008
Class Method Summary collapse
-
.check_status!(status, context = "cuDSS operation") ⇒ Object
Check status and raise error if not success.
-
.ensure_loaded! ⇒ void
Ensure cuDSS library is loaded and functions attached.
Class Method Details
.check_status!(status, context = "cuDSS operation") ⇒ Object
Check status and raise error if not success
64 65 66 67 68 |
# File 'lib/nvruby/solver/cudss_bindings.rb', line 64 def check_status!(status, context = "cuDSS operation") return if status == CUDSS_STATUS_SUCCESS raise CuDSSError.new("#{context} failed", status_code: status) end |
.ensure_loaded! ⇒ void
This method returns an undefined value.
Ensure cuDSS library is loaded and functions attached
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/nvruby/solver/cudss_bindings.rb', line 43 def ensure_loaded! @mutex.synchronize do return if @loaded CUDA::LibraryLoader.load_library(:cudss) dll_path = CUDA::LibraryLoader.library_paths[:cudss] raise LibraryNotFoundError, "cudss" unless dll_path ffi_lib dll_path attach_functions! @loaded = true Ignis.logger.debug("cuDSS bindings loaded from #{dll_path}") end end |