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



320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
# File 'lib/opencl_ruby_ffi/Kernel.rb', line 320

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.



315
316
317
# File 'lib/opencl_ruby_ffi/Kernel.rb', line 315

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.



305
306
307
308
309
310
311
312
# File 'lib/opencl_ruby_ffi/Kernel.rb', line 305

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



292
293
294
295
296
297
298
299
300
301
302
# File 'lib/opencl_ruby_ffi/Kernel.rb', line 292

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