Source code for nabu.opencl.processing
import numpy as np
from ..misc.processing_base import ProcessingBase
from .utils import get_opencl_context, __has_pyopencl__
if __has_pyopencl__:
import pyopencl as cl
import pyopencl.array as parray
[docs]
class OpenCLProcessing(ProcessingBase):
_array_class = parray.Array
def __init__(self, ctx=None, device_type="all", queue=None, **kwargs):
"""
Initialie a OpenCLProcessing instance.
Parameters
----------
ctx: pycuda.driver.Context, optional
Existing context to use. If provided, do not create a new context.
cleanup_at_exit: bool, optional
Whether to clean-up the context at exit.
Ignored if ctx is not None.
"""
super().__init__()
if queue is not None:
# re-use an existing queue. In this case the this instance is mostly for convenience
ctx = queue.context
if ctx is None:
self.ctx = get_opencl_context(device_type=device_type, **kwargs)
else:
self.ctx = ctx
if queue is None:
queue = cl.CommandQueue(self.ctx)
self.queue = queue
# TODO push_context, pop_context ?
def _allocate_array_mem(self, shape, dtype):
return parray.zeros(self.queue, shape, dtype)