Class: Ignis::Collective::NetworkDirect::CompletionQueue

Inherits:
Object
  • Object
show all
Defined in:
lib/nvruby/collective/net/nd_adapter.rb

Overview

Completion Queue for RDMA operation completions

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(adapter, depth) ⇒ CompletionQueue

Returns a new instance of CompletionQueue.



133
134
135
136
137
138
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 133

def initialize(adapter, depth)
  @adapter = adapter
  @depth = depth
  @handle = nil
  @created = false
end

Instance Attribute Details

#adapterAdapter (readonly)

Returns Parent adapter.

Returns:



125
126
127
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 125

def adapter
  @adapter
end

#depthInteger (readonly)

Returns Queue depth.

Returns:

  • (Integer)

    Queue depth



128
129
130
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 128

def depth
  @depth
end

#handleFFI::Pointer (readonly)

Returns Native CQ handle.

Returns:

  • (FFI::Pointer)

    Native CQ handle



131
132
133
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 131

def handle
  @handle
end

Instance Method Details

#close!void

This method returns an undefined value.

Close the completion queue



191
192
193
194
195
196
197
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 191

def close!
  return unless @created

  # In real implementation: IND2CompletionQueue::Release
  @handle = nil
  @created = false
end

#create!void

This method returns an undefined value.

Create the completion queue



142
143
144
145
146
147
148
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 142

def create!
  return if @created

  # In real implementation: IND2Adapter::CreateCompletionQueue
  @handle = FFI::Pointer.new(:void, 0x12345678)  # Placeholder
  @created = true
end

#poll(max_results: 16) ⇒ Array<Hash>

Poll for completions

Parameters:

  • max_results (Integer) (defaults to: 16)

    Max completions to retrieve

Returns:

  • (Array<Hash>)

    Completion results



153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 153

def poll(max_results: 16)
  return [] unless @created

  # Allocate result buffer
  results_ptr = FFI::MemoryPointer.new(Bindings::ND2Result, max_results)
  count_ptr = FFI::MemoryPointer.new(:uint32)

  # In real implementation: IND2CompletionQueue::GetResults
  # Returns array of completion results

  # Parse results
  results = []
  count = count_ptr.read_uint32
  count.times do |i|
    result = Bindings::ND2Result.new(results_ptr + i * Bindings::ND2Result.size)
    results << {
      status: result[:Status],
      bytes_transferred: result[:BytesTransferred],
      context: result[:RequestContext],
      type: result[:RequestType]
    }
  end

  results
end

#wait(timeout_ms: 1000) ⇒ Boolean

Wait for completion with timeout

Parameters:

  • timeout_ms (Integer) (defaults to: 1000)

    Timeout in milliseconds

Returns:

  • (Boolean)

    True if completion available



182
183
184
185
186
187
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 182

def wait(timeout_ms: 1000)
  return false unless @created

  # In real implementation: IND2CompletionQueue::Notify with INFINITE or timeout
  true
end