module CooCoo::CUDA::DeviceBuffer::FFI
Public Class Methods
buffer_function(*args)
click to toggle source
# File lib/coo-coo/cuda/device_buffer/ffi.rb, line 11 def self.buffer_function(*args) if args.size == 3 func, args, return_type = args meth = func elsif args.size == 4 meth, func, args, return_type = args else raise ArgumentError.new("Wrong number of arguments: (given #{args.size}, expected 3 or 4") end attach_function("buffer_#{func}", args, return_type) caller = if return_type.kind_of?(Symbol) :call_func else :call_buffer end class_eval <<-EOT def self.#{meth}(*call_args) #{caller}(:#{func}, *call_args) end EOT end
call_buffer(func, *args)
click to toggle source
# File lib/coo-coo/cuda/device_buffer/ffi.rb, line 95 def self.call_buffer(func, *args) retries = 0 r = send("buffer_#{func}", *args) raise NullResultError.new if r.null? r rescue NullResultError raise if retries > 1 retries += 1 CUDA.collect_garbage retry end
call_func(func, *args)
click to toggle source
# File lib/coo-coo/cuda/device_buffer/ffi.rb, line 89 def self.call_func(func, *args) r = send("buffer_#{func}", *args) raise APIError.new(r) if r != 0 r end