Class: TensorStream::OpenCLBuffer

Inherits:
Buffer
  • Object
show all
Includes:
ArrayOpsHelper
Defined in:
lib/tensor_stream/opencl/opencl_buffer.rb

Overview

Buffer used by the OpenCL evaluator

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(owner, data_type:, shape:, buffer:, cl_buffer:, op: nil, name: nil) ⇒ OpenCLBuffer

Returns a new instance of OpenCLBuffer.



8
9
10
11
12
13
14
15
16
# File 'lib/tensor_stream/opencl/opencl_buffer.rb', line 8

def initialize(owner, data_type:, shape:, buffer:, cl_buffer:, op: nil, name: nil)
  @data_type = data_type
  @shape = shape
  @buffer = buffer
  @cl_buffer = cl_buffer
  @name = name
  @op = op
  @owner = owner
end

Instance Attribute Details

#bufferObject

Returns the value of attribute buffer.



6
7
8
# File 'lib/tensor_stream/opencl/opencl_buffer.rb', line 6

def buffer
  @buffer
end

#cl_bufferObject

Returns the value of attribute cl_buffer.



6
7
8
# File 'lib/tensor_stream/opencl/opencl_buffer.rb', line 6

def cl_buffer
  @cl_buffer
end

#opObject

Returns the value of attribute op.



6
7
8
# File 'lib/tensor_stream/opencl/opencl_buffer.rb', line 6

def op
  @op
end

#ownerObject

Returns the value of attribute owner.



6
7
8
# File 'lib/tensor_stream/opencl/opencl_buffer.rb', line 6

def owner
  @owner
end

#shapeObject

Returns the value of attribute shape.



6
7
8
# File 'lib/tensor_stream/opencl/opencl_buffer.rb', line 6

def shape
  @shape
end

Class Method Details

.nil_buffer(owner, name, data_type) ⇒ Object



50
51
52
# File 'lib/tensor_stream/opencl/opencl_buffer.rb', line 50

def self.nil_buffer(owner, name, data_type)
  OpenCLBuffer.new(owner, name: name, data_type: data_type, shape: [0], buffer: nil, cl_buffer: nil)
end

Instance Method Details

#empty_value?Boolean

Returns:

  • (Boolean)


22
23
24
# File 'lib/tensor_stream/opencl/opencl_buffer.rb', line 22

def empty_value?
  @shape == [0]
end

#to_rubyObject



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/tensor_stream/opencl/opencl_buffer.rb', line 26

def to_ruby
  return [] if buffer.empty?

  if dirty
    op.command_queue.enqueue_read_buffer(cl_buffer, buffer, event_wait_list: [op].compact)
    op.command_queue.finish
    self.dirty = false
  end

  if shape.empty?
    return case data_type
           when :string
             buffer.to_s
           when :boolean
             buffer[0] != 0
           else
             buffer[0]
           end
  end

  result = buffer.reshape(*shape.map(&:to_i).reverse).to_a
  data_type == :boolean ? process_function_op(result) { |a, _b|  a != 0 } : result
end

#total_elementsObject



18
19
20
# File 'lib/tensor_stream/opencl/opencl_buffer.rb', line 18

def total_elements
  shape.reduce(:*) || 1
end