Module: OpenCL::Kernel::OpenCL20

Included in:
OpenCL::Kernel
Defined in:
lib/opencl_ruby_ffi/Kernel.rb

Instance Method Summary collapse

Instance Method Details

#enqueue_with_args(command_queue, global_work_size, *args) ⇒ Object

Enqueues the Kernel in the given queue, specifying the global_work_size. Arguments for the kernel are specified afterwards. Last, a hash containing options for enqueu_ndrange kernel can be specified



350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
# File 'lib/opencl_ruby_ffi/Kernel.rb', line 350

def enqueue_with_args(command_queue, global_work_size, *args)
  n = self.num_args
  error_check(INVALID_KERNEL_ARGS) if args.length < n
  error_check(INVALID_KERNEL_ARGS) if args.length > n + 1
  if args.length == n + 1
    options = args.last
  else
    options = {}
  end
  n.times { |i|
    if args[i].class == SVMPointer and self.context.platform.version_number >= 2.0 then
      self.set_arg_svm_pointer(i, args[i])
    else
      self.set_arg(i, args[i])
    end
  }
  command_queue.enqueue_ndrange_kernel(self, global_work_size, options)
end

#set_arg_svm_pointer(index, svm_pointer) ⇒ Object

Set the index th argument of the Kernel to an svm pointer value.



345
346
347
# File 'lib/opencl_ruby_ffi/Kernel.rb', line 345

def set_arg_svm_pointer(index, svm_pointer)
  OpenCL.set_kernel_arg_svm_pointer(self, index, svm_pointer)
end

#set_svm_fine_grain_system(flag) ⇒ Object

Specifies the granularity of the SVM system.



335
336
337
338
339
340
341
342
# File 'lib/opencl_ruby_ffi/Kernel.rb', line 335

def set_svm_fine_grain_system( flag )
  error_check(INVALID_OPERATION) if self.context.platform.version_number < 2.0
  pt = MemoryPointer::new(  :cl_bool )
  pt.write_cl_bool( flag )
  error = OpenCL.clSetKernelExecInfo( self, EXEC_INFO_SVM_FINE_GRAIN_SYSTEM, pt.size, pt)
  error_check(error)
  return self
end

#set_svm_ptrs(ptrs) ⇒ Object

Specifies the list of SVM pointers the kernel will be using



322
323
324
325
326
327
328
329
330
331
332
# File 'lib/opencl_ruby_ffi/Kernel.rb', line 322

def set_svm_ptrs( ptrs )
  error_check(INVALID_OPERATION) if self.context.platform.version_number < 2.0
  pointers = [ptrs].flatten
  pt = MemoryPointer::new( :pointer, pointers.length )
  pointers.each_with_index { |p, i|
    pt[i].write_pointer(p)
  }
  error = OpenCL.clSetKernelExecInfo( self, EXEC_INFO_SVM_PTRS, pt.size, pt)
  error_check(error)
  return self
end