Class: Ignis::Collective::Transport::NetworkDirectTransport

Inherits:
Base
  • Object
show all
Defined in:
lib/nvruby/collective/transport/rdma_transports.rb

Overview

Note:

Requires NetworkDirect-capable NIC (RDMA NICs from Mellanox, Chelsio, etc.)

Note:

SKIP in most cases - requires specialized hardware

NetworkDirect RDMA Transport Interface Microsoft’s RDMA abstraction for Windows

NetworkDirect provides:

  • Kernel bypass

  • Zero-copy transfers

  • Low latency

Instance Attribute Summary

Attributes inherited from Base

#dst_device, #src_device

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#estimated_latency, #recv_async, #recv_sync, #send_async, #send_sync, #synchronize!

Constructor Details

#initialize(local_addr:, remote_addr:) ⇒ NetworkDirectTransport

Returns a new instance of NetworkDirectTransport.

Parameters:

  • local_addr (String)

    Local address

  • remote_addr (String)

    Remote address

Raises:



154
155
156
157
158
159
160
# File 'lib/nvruby/collective/transport/rdma_transports.rb', line 154

def initialize(local_addr:, remote_addr:)
  super(src_device: 0, dst_device: 0)
  @local_addr = local_addr
  @remote_addr = remote_addr
  @initialized = false
  raise TransportError, "NetworkDirect RDMA not available" unless self.class.available?
end

Class Method Details

.available?Boolean

Check if NetworkDirect is available

Returns:

  • (Boolean)


146
147
148
149
150
# File 'lib/nvruby/collective/transport/rdma_transports.rb', line 146

def self.available?
  # Check for NetworkDirect provider
  # Requires RoCE or iWARP capable NIC
  check_nd_provider
end

.check_nd_providerObject



205
206
207
208
209
# File 'lib/nvruby/collective/transport/rdma_transports.rb', line 205

def self.check_nd_provider
  # Would check Windows registry for NetworkDirect providers
  # HKLM\SYSTEM\CurrentControlSet\Services\NDKPI
  false  # Not available by default
end

.transport_typeSymbol

Returns Transport type.

Returns:

  • (Symbol)

    Transport type



140
141
142
# File 'lib/nvruby/collective/transport/rdma_transports.rb', line 140

def self.transport_type
  :network_direct
end

Instance Method Details

#destroy!void

This method returns an undefined value.

Clean up



194
195
196
# File 'lib/nvruby/collective/transport/rdma_transports.rb', line 194

def destroy!
  @initialized = false
end

#estimated_bandwidthFloat

Estimated bandwidth in GB/s

Returns:

  • (Float)


188
189
190
# File 'lib/nvruby/collective/transport/rdma_transports.rb', line 188

def estimated_bandwidth
  12.5  # 100 Gbps typical for RDMA NIC
end

#initialize!void

This method returns an undefined value.

Initialize NetworkDirect transport

Raises:

  • (NotImplementedError)


164
165
166
# File 'lib/nvruby/collective/transport/rdma_transports.rb', line 164

def initialize!
  raise NotImplementedError, "NetworkDirect requires specialized RDMA hardware"
end

#ready?Boolean

Check if ready

Returns:

  • (Boolean)


170
171
172
# File 'lib/nvruby/collective/transport/rdma_transports.rb', line 170

def ready?
  @initialized
end

#recv(dst_ptr, size, stream: nil) ⇒ Integer

Receive data

Returns:

  • (Integer)

Raises:

  • (NotImplementedError)


182
183
184
# File 'lib/nvruby/collective/transport/rdma_transports.rb', line 182

def recv(dst_ptr, size, stream: nil)
  raise NotImplementedError, "NetworkDirect not implemented"
end

#send(src_ptr, size, stream: nil) ⇒ Boolean

Send data

Returns:

  • (Boolean)

Raises:

  • (NotImplementedError)


176
177
178
# File 'lib/nvruby/collective/transport/rdma_transports.rb', line 176

def send(src_ptr, size, stream: nil)
  raise NotImplementedError, "NetworkDirect not implemented"
end

#to_sString

Returns:

  • (String)


199
200
201
# File 'lib/nvruby/collective/transport/rdma_transports.rb', line 199

def to_s
  "NetworkDirectTransport[#{@local_addr} <-> #{@remote_addr}]"
end