Class: Ignis::Collective::NetworkDirect::CompletionQueue
- Inherits:
-
Object
- Object
- Ignis::Collective::NetworkDirect::CompletionQueue
- Defined in:
- lib/nvruby/collective/net/nd_adapter.rb
Overview
Completion Queue for RDMA operation completions
Instance Attribute Summary collapse
-
#adapter ⇒ Adapter
readonly
Parent adapter.
-
#depth ⇒ Integer
readonly
Queue depth.
-
#handle ⇒ FFI::Pointer
readonly
Native CQ handle.
Instance Method Summary collapse
-
#close! ⇒ void
Close the completion queue.
-
#create! ⇒ void
Create the completion queue.
-
#initialize(adapter, depth) ⇒ CompletionQueue
constructor
A new instance of CompletionQueue.
-
#poll(max_results: 16) ⇒ Array<Hash>
Poll for completions.
-
#wait(timeout_ms: 1000) ⇒ Boolean
Wait for completion with timeout.
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
#adapter ⇒ Adapter (readonly)
Returns Parent adapter.
125 126 127 |
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 125 def adapter @adapter end |
#depth ⇒ Integer (readonly)
Returns Queue depth.
128 129 130 |
# File 'lib/nvruby/collective/net/nd_adapter.rb', line 128 def depth @depth end |
#handle ⇒ FFI::Pointer (readonly)
Returns 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
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
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 |