Class: TensorStream::OpenCLBuffer
- Inherits:
-
Buffer
- Object
- Buffer
- TensorStream::OpenCLBuffer
- Includes:
- ArrayOpsHelper
- Defined in:
- lib/tensor_stream/opencl/opencl_buffer.rb
Overview
Buffer used by the OpenCL evaluator
Instance Attribute Summary collapse
-
#buffer ⇒ Object
Returns the value of attribute buffer.
-
#cl_buffer ⇒ Object
Returns the value of attribute cl_buffer.
-
#op ⇒ Object
Returns the value of attribute op.
-
#owner ⇒ Object
Returns the value of attribute owner.
-
#shape ⇒ Object
Returns the value of attribute shape.
Class Method Summary collapse
Instance Method Summary collapse
- #empty_value? ⇒ Boolean
-
#initialize(owner, data_type:, shape:, buffer:, cl_buffer:, op: nil, name: nil) ⇒ OpenCLBuffer
constructor
A new instance of OpenCLBuffer.
- #to_ruby ⇒ Object
- #total_elements ⇒ Object
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
#buffer ⇒ Object
Returns the value of attribute buffer.
6 7 8 |
# File 'lib/tensor_stream/opencl/opencl_buffer.rb', line 6 def buffer @buffer end |
#cl_buffer ⇒ Object
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 |
#op ⇒ Object
Returns the value of attribute op.
6 7 8 |
# File 'lib/tensor_stream/opencl/opencl_buffer.rb', line 6 def op @op end |
#owner ⇒ Object
Returns the value of attribute owner.
6 7 8 |
# File 'lib/tensor_stream/opencl/opencl_buffer.rb', line 6 def owner @owner end |
#shape ⇒ Object
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
22 23 24 |
# File 'lib/tensor_stream/opencl/opencl_buffer.rb', line 22 def empty_value? @shape == [0] end |
#to_ruby ⇒ Object
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_elements ⇒ Object
18 19 20 |
# File 'lib/tensor_stream/opencl/opencl_buffer.rb', line 18 def total_elements shape.reduce(:*) || 1 end |