def run(self, queue, length, *args, **kwargs): """ run the kernel without acquiring interop objects. """ if self._kernel is None: self.build() arguments = kernel_helpers.create_knl_args_ordered(self._kernel_args, args, kwargs) getattr(self._kernel, self.kernel_name)(queue, tuple([int(a) for a in self.size]), None, *arguments)
def run_acquired(self, queue, length, *args, **kwargs): """ run the kernel with acquired interop objects. all objects in argument of type cl.GL* will be acquire and released. cl.enqueue_acquire_gl_objects(...) kernel() cl.enqueue_release_gl_objects(...) """ if self._kernel is None: self.build() arguments = kernel_helpers.create_knl_args_ordered(self._kernel_args, args, kwargs) enq = [a for a in arguments if type(a) in [cl.GLTexture, cl.GLBuffer]] cl.enqueue_acquire_gl_objects(queue, enq) getattr(self._kernel, self.kernel_name)(queue, tuple([int(a) for a in self.size]), None, *arguments) cl.enqueue_release_gl_objects(queue, enq)
def __call__(self, queue, length, *args, **kwargs): """ invoke kernel """ if self._kernel is None: self.build() if self._kernel_local is None: length = (length,) if type(length) is not tuple else length elif len(self._kernel_local) == 1: length = (length * self._kernel_local[0],) elif len(self._kernel_local) == 2: length = (length * self._kernel_local[0], self._kernel_local[1]) elif len(self._kernel_local) == 3: length = (length * self._kernel_local[0], self._kernel_local[1], self._kernel_local[2]) knl_args = kernel_helpers.create_knl_args_ordered(self._kernel_args, args, kwargs) return getattr(self._kernel, self.name)(queue, length, self._kernel_local, *knl_args)