Module: Ignis::LinAlg::CuBLASBindings

Extended by:
FFI::Library
Defined in:
lib/nvruby/linalg/cublas_bindings.rb

Overview

cuBLAS library FFI bindings

Constant Summary collapse

CUBLAS_OP_N =

cuBLAS operation types

0
CUBLAS_OP_T =

No transpose

1
CUBLAS_OP_C =

Transpose

2
CUBLAS_FILL_MODE_LOWER =

cuBLAS fill modes

0
CUBLAS_FILL_MODE_UPPER =
1
CUBLAS_FILL_MODE_FULL =
2
CUBLAS_DIAG_NON_UNIT =

cuBLAS diagonal types

0
CUBLAS_DIAG_UNIT =
1
CUBLAS_SIDE_LEFT =

cuBLAS side modes

0
CUBLAS_SIDE_RIGHT =
1
CUBLAS_POINTER_MODE_HOST =

cuBLAS pointer modes

0
CUBLAS_POINTER_MODE_DEVICE =
1
CUBLAS_ATOMICS_NOT_ALLOWED =

cuBLAS atomics modes

0
CUBLAS_ATOMICS_ALLOWED =
1
CUBLAS_COMPUTE_16F =

cuBLAS compute types

64
CUBLAS_COMPUTE_16F_PEDANTIC =
65
CUBLAS_COMPUTE_32F =
68
CUBLAS_COMPUTE_32F_PEDANTIC =
69
CUBLAS_COMPUTE_32F_FAST_16F =
74
CUBLAS_COMPUTE_32F_FAST_16BF =
75
CUBLAS_COMPUTE_32F_FAST_TF32 =
77
CUBLAS_COMPUTE_64F =
70
CUBLAS_COMPUTE_64F_PEDANTIC =
71
CUBLAS_COMPUTE_32I =
72
CUBLAS_COMPUTE_32I_PEDANTIC =
73
CUBLASLT_EPILOGUE_DEFAULT =

cuBLASLt epilogue types

1
CUBLASLT_EPILOGUE_RELU =
2
CUBLASLT_EPILOGUE_RELU_AUX =
258
CUBLASLT_EPILOGUE_BIAS =
4
CUBLASLT_EPILOGUE_RELU_BIAS =
6
CUBLASLT_EPILOGUE_RELU_AUX_BIAS =
262
CUBLASLT_EPILOGUE_DRELU =
520
CUBLASLT_EPILOGUE_DRELU_BGRAD =
536
CUBLASLT_EPILOGUE_GELU =
32
CUBLASLT_EPILOGUE_GELU_AUX =
288
CUBLASLT_EPILOGUE_GELU_BIAS =
36
CUBLASLT_EPILOGUE_GELU_AUX_BIAS =
292
CUBLASLT_EPILOGUE_DGELU =
544
CUBLASLT_EPILOGUE_DGELU_BGRAD =
560
CUBLASLT_EPILOGUE_BGRADA =
576
CUBLASLT_EPILOGUE_BGRADB =
592
CUBLAS_DEFAULT_MATH =

cuBLAS Math Modes for Tensor Core control

0
CUBLAS_TENSOR_OP_MATH =
1
CUBLAS_PEDANTIC_MATH =
2
CUBLAS_TF32_TENSOR_OP_MATH =
3
CUBLAS_MATH_DISALLOW_REDUCED_PRECISION_REDUCTION =
16

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.handleFFI::Pointer?

Returns cuBLAS handle.

Returns:

  • (FFI::Pointer, nil)

    cuBLAS handle



81
82
83
# File 'lib/nvruby/linalg/cublas_bindings.rb', line 81

def handle
  @handle
end

.lt_handleFFI::Pointer?

Returns cuBLASLt handle.

Returns:

  • (FFI::Pointer, nil)

    cuBLASLt handle



84
85
86
# File 'lib/nvruby/linalg/cublas_bindings.rb', line 84

def lt_handle
  @lt_handle
end

Class Method Details

.check_status!(status, context = "cuBLAS operation") ⇒ void

This method returns an undefined value.

Check cuBLAS status and raise error if not success

Parameters:

  • status (Integer)

    cuBLAS status code

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

    Context for error message

Raises:



288
289
290
291
292
# File 'lib/nvruby/linalg/cublas_bindings.rb', line 288

def self.check_status!(status, context = "cuBLAS operation")
  return if status.zero?

  raise CuBLASError, status
end

.ensure_loaded!void

This method returns an undefined value.

Ensure cuBLAS is loaded



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/nvruby/linalg/cublas_bindings.rb', line 88

def ensure_loaded!
  return if @loaded

  CUDA::LibraryLoader.load_library(:cublas)

  cuda_bin = Ignis.configuration.cuda_bin_path
  if cuda_bin
    ffi_lib Dir.glob(File.join(cuda_bin, "cublas64_*.dll")).max
  else
    ffi_lib "cublas64_12"
  end

  attach_cublas_functions!
  initialize_cublas!

  @loaded = true
end

.finalize!void

This method returns an undefined value.

Finalize cuBLAS



115
116
117
118
119
120
121
# File 'lib/nvruby/linalg/cublas_bindings.rb', line 115

def finalize!
  return unless @handle

  cublasDestroy_v2(@handle)
  @handle = nil
  @loaded = false
end

.get_handleFFI::Pointer

Get or create cuBLAS handle

Returns:

  • (FFI::Pointer)


108
109
110
111
# File 'lib/nvruby/linalg/cublas_bindings.rb', line 108

def get_handle
  ensure_loaded!
  @handle
end