Class: Ignis::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/nvruby/configuration.rb

Overview

Global configuration for Ignis Thread-safe configuration access using Mutex

Constant Summary collapse

DEFAULT_CUDA_PATHS =

Default CUDA installation paths — Windows and Linux

if RUBY_PLATFORM.match?(/mswin|mingw|cygwin/i)
  [
    'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.1',
    'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.0',
    'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.6',
    'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.5',
    'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4',
    'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.3',
    'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.2',
    'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1',
    'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.0',
    'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8'
  ].freeze
else
  [
    '/usr/local/cuda-13.1',
    '/usr/local/cuda-13.0',
    '/usr/local/cuda-12.6',
    '/usr/local/cuda-12.5',
    '/usr/local/cuda',
    '/opt/cuda'
  ].freeze
end

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Returns a new instance of Configuration.



68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/nvruby/configuration.rb', line 68

def initialize
  @mutex = Mutex.new
  @cuda_path = nil
  @default_device = 0
  @autotuning_enabled = true
  @autotuning_iterations = 10
  @logger = create_default_logger
  @log_level = :info
  @synchronous = false
  @default_workspace_size = 32 * 1024 * 1024 # 32 MB
  @memory_pooling = true
  @max_pool_size = 0
end

Instance Attribute Details

#autotuning_enabledBoolean

Returns Whether to enable autotuning by default.

Returns:

  • (Boolean)

    Whether to enable autotuning by default



41
42
43
# File 'lib/nvruby/configuration.rb', line 41

def autotuning_enabled
  @autotuning_enabled
end

#autotuning_iterationsInteger

Returns Default number of autotuning iterations.

Returns:

  • (Integer)

    Default number of autotuning iterations



44
45
46
# File 'lib/nvruby/configuration.rb', line 44

def autotuning_iterations
  @autotuning_iterations
end

#cuda_pathString?

Returns Custom CUDA installation path.

Returns:

  • (String, nil)

    Custom CUDA installation path



35
36
37
# File 'lib/nvruby/configuration.rb', line 35

def cuda_path
  @cuda_path
end

#default_deviceInteger

Returns Default device index to use.

Returns:

  • (Integer)

    Default device index to use



38
39
40
# File 'lib/nvruby/configuration.rb', line 38

def default_device
  @default_device
end

#default_workspace_sizeInteger

Returns Default workspace size in bytes for cuBLAS operations.

Returns:

  • (Integer)

    Default workspace size in bytes for cuBLAS operations



56
57
58
# File 'lib/nvruby/configuration.rb', line 56

def default_workspace_size
  @default_workspace_size
end

#log_levelSymbol

Returns Log level (:debug, :info, :warn, :error, :fatal).

Returns:

  • (Symbol)

    Log level (:debug, :info, :warn, :error, :fatal)



50
51
52
# File 'lib/nvruby/configuration.rb', line 50

def log_level
  @log_level
end

#loggerLogger

Returns Logger instance for Ignis operations.

Returns:

  • (Logger)

    Logger instance for Ignis operations



47
48
49
# File 'lib/nvruby/configuration.rb', line 47

def logger
  @logger
end

#max_pool_sizeInteger

Returns Maximum memory pool size in bytes (0 for unlimited).

Returns:

  • (Integer)

    Maximum memory pool size in bytes (0 for unlimited)



62
63
64
# File 'lib/nvruby/configuration.rb', line 62

def max_pool_size
  @max_pool_size
end

#memory_poolingBoolean Also known as: use_memory_pool

Returns Whether to enable memory pooling.

Returns:

  • (Boolean)

    Whether to enable memory pooling



59
60
61
# File 'lib/nvruby/configuration.rb', line 59

def memory_pooling
  @memory_pooling
end

#synchronousBoolean

Returns Whether to use synchronous execution by default.

Returns:

  • (Boolean)

    Whether to use synchronous execution by default



53
54
55
# File 'lib/nvruby/configuration.rb', line 53

def synchronous
  @synchronous
end

Instance Method Details

#cuda_bin_pathString?

Get the CUDA bin directory

Returns:

  • (String, nil)

    Path to CUDA bin/lib directory



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/nvruby/configuration.rb', line 109

def cuda_bin_path
  base = resolved_cuda_path
  return nil unless base

  # Use forward slashes for Ruby compatibility
  base_normalized = base.tr("\\", "/")

  if RUBY_PLATFORM.match?(/mswin|mingw|cygwin/i)
    # Windows: check bin/x64 first, then bin
    x64_path = File.join(base_normalized, "bin", "x64")
    if File.directory?(x64_path)
      dll_check = Dir.glob(File.join(x64_path, "*.dll"))
      return x64_path if dll_check.any?
    end
    File.join(base_normalized, "bin")
  else
    # Linux: use lib64
    lib64_path = File.join(base_normalized, "lib64")
    return lib64_path if File.directory?(lib64_path)
    File.join(base_normalized, "lib")
  end
end

#cuda_lib_pathString?

Get the CUDA lib directory

Returns:

  • (String, nil)

    Path to CUDA lib directory



134
135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/nvruby/configuration.rb', line 134

def cuda_lib_path
  base = resolved_cuda_path
  return nil unless base

  if RUBY_PLATFORM.match?(/mswin|mingw|cygwin/i)
    lib_path = File.join(base, "lib", "x64")
    return lib_path if File.directory?(lib_path)
    File.join(base, "lib")
  else
    lib_path = File.join(base, "lib64")
    return lib_path if File.directory?(lib_path)
    File.join(base, "lib")
  end
end

#reset!void

This method returns an undefined value.

Reset configuration to defaults



151
152
153
154
155
156
157
158
159
160
161
162
163
164
# File 'lib/nvruby/configuration.rb', line 151

def reset!
  @mutex.synchronize do
    @cuda_path = nil
    @default_device = 0
    @autotuning_enabled = true
    @autotuning_iterations = 10
    @logger = create_default_logger
    @log_level = :info
    @synchronous = false
    @default_workspace_size = 32 * 1024 * 1024
    @memory_pooling = true
    @max_pool_size = 0
  end
end

#resolved_cuda_pathString?

Get the resolved CUDA path

Returns:

  • (String, nil)

    The CUDA installation path or nil if not found



94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/nvruby/configuration.rb', line 94

def resolved_cuda_path
  @mutex.synchronize do
    return @cuda_path if @cuda_path && File.directory?(@cuda_path)

    # Check environment variable
    env_path = ENV["CUDA_PATH"]
    return env_path if env_path && File.directory?(env_path)

    # Search default paths
    DEFAULT_CUDA_PATHS.find { |path| File.directory?(path) }
  end
end

#with_lock { ... } ⇒ Object

Thread-safe read of configuration values

Yields:

  • Block with access to configuration

Returns:

  • (Object)

    Return value of the block



169
170
171
# File 'lib/nvruby/configuration.rb', line 169

def with_lock(&block)
  @mutex.synchronize(&block)
end