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

Class Method Details

.check_status!(status, context = "cuDSS operation") ⇒ Object

Check status and raise error if not success

Parameters:

  • status (Integer)

    status code

  • context (String) (defaults to: "cuDSS operation")

    Context for error message

Raises:



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