Class: Ignis::Collective::NetworkDirect::QueuePair

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

Overview

Queue Pair for RDMA send/receive operations

Constant Summary collapse

STATE_INIT =

States

:init
STATE_READY =
:ready
STATE_CONNECTED =
:connected
STATE_ERROR =
:error

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(adapter:, send_cq:, recv_cq:, send_depth:, recv_depth:, sge_count:) ⇒ QueuePair

Returns a new instance of QueuePair.



217
218
219
220
221
222
223
224
225
226
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 217

def initialize(adapter:, send_cq:, recv_cq:, send_depth:, recv_depth:, sge_count:)
  @adapter = adapter
  @send_cq = send_cq
  @recv_cq = recv_cq
  @send_depth = send_depth
  @recv_depth = recv_depth
  @sge_count = sge_count
  @handle = nil
  @state = STATE_INIT
end

Instance Attribute Details

#adapterAdapter (readonly)

Returns Parent adapter.

Returns:



209
210
211
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 209

def adapter
  @adapter
end

#handleFFI::Pointer (readonly)

Returns Native QP handle.

Returns:

  • (FFI::Pointer)

    Native QP handle



215
216
217
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 215

def handle
  @handle
end

#stateSymbol (readonly)

Returns Current state.

Returns:

  • (Symbol)

    Current state



212
213
214
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 212

def state
  @state
end

Instance Method Details

#close!void

This method returns an undefined value.

Close the queue pair



303
304
305
306
307
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 303

def close!
  # In real implementation: IND2QueuePair::Release
  @handle = nil
  @state = STATE_ERROR
end

#create!void

This method returns an undefined value.

Create the queue pair



230
231
232
233
234
235
236
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 230

def create!
  return if @state != STATE_INIT

  # In real implementation: IND2Adapter::CreateQueuePair
  @handle = FFI::Pointer.new(:void, 0x87654321)  # Placeholder
  @state = STATE_READY
end

#post_receive(sge_list:, context: nil) ⇒ void

This method returns an undefined value.

Post a receive work request

Parameters:

  • sge_list (Array<Hash>)

    Scatter-gather entries

  • context (FFI::Pointer) (defaults to: nil)

    User context

Raises:



264
265
266
267
268
269
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 264

def post_receive(sge_list:, context: nil)
  raise RDMAError, "QP not ready" unless @state == STATE_READY || @state == STATE_CONNECTED

  # Build SGE array (similar to post_send)
  # In real implementation: IND2QueuePair::Receive
end

#post_send(sge_list:, context: nil, flags: 0) ⇒ void

This method returns an undefined value.

Post a send work request

Parameters:

  • sge_list (Array<Hash>)

    Scatter-gather entries

  • context (FFI::Pointer) (defaults to: nil)

    User context

  • flags (Integer) (defaults to: 0)

    Send flags (inline, signaled, etc.)

Raises:



243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 243

def post_send(sge_list:, context: nil, flags: 0)
  raise RDMAError, "QP not ready" unless @state == STATE_CONNECTED

  # Build SGE array
  sge_count = sge_list.size
  sge_ptr = FFI::MemoryPointer.new(Bindings::ND2Sge, sge_count)

  sge_list.each_with_index do |sge, i|
    entry = Bindings::ND2Sge.new(sge_ptr + i * Bindings::ND2Sge.size)
    entry[:Buffer] = sge[:buffer]
    entry[:BufferLength] = sge[:length]
    entry[:MemoryRegionToken] = sge[:token]
  end

  # In real implementation: IND2QueuePair::Send
end

#rdma_read(remote_address:, remote_token:, sge_list:, context: nil) ⇒ void

This method returns an undefined value.

RDMA Read operation (one-sided)

Parameters:

  • remote_address (Integer)

    Remote buffer address

  • remote_token (Integer)

    Remote memory token

  • sge_list (Array<Hash>)

    Local scatter-gather entries

  • context (FFI::Pointer) (defaults to: nil)

    User context

Raises:



289
290
291
292
293
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 289

def rdma_read(remote_address:, remote_token:, sge_list:, context: nil)
  raise RDMAError, "QP not connected" unless @state == STATE_CONNECTED

  # In real implementation: IND2QueuePair::Read
end

#rdma_write(remote_address:, remote_token:, sge_list:, context: nil) ⇒ void

This method returns an undefined value.

RDMA Write operation (one-sided)

Parameters:

  • remote_address (Integer)

    Remote buffer address

  • remote_token (Integer)

    Remote memory token

  • sge_list (Array<Hash>)

    Local scatter-gather entries

  • context (FFI::Pointer) (defaults to: nil)

    User context

Raises:



277
278
279
280
281
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 277

def rdma_write(remote_address:, remote_token:, sge_list:, context: nil)
  raise RDMAError, "QP not connected" unless @state == STATE_CONNECTED

  # In real implementation: IND2QueuePair::Write
end

#set_connected!void

This method returns an undefined value.

Transition to connected state



297
298
299
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 297

def set_connected!
  @state = STATE_CONNECTED
end