Source code for nabu.processing.fft_opencl
from multiprocessing import get_context
from multiprocessing.pool import Pool
from .fft_base import _BaseVKFFT
from ..opencl.processing import OpenCLProcessing
try:
    from pyvkfft.opencl import VkFFTApp as vk_clfft
    __has_vkfft__ = True
except (ImportError, OSError):
    __has_vkfft__ = False
    vk_clfft = None
[docs]
class VKCLFFT(_BaseVKFFT):
    """
    OpenCL FFT, using VKFFT backend
    """
    implem = "vkfft"
    backend = "opencl"
    ProcessingCls = OpenCLProcessing
    vkffs_cls = vk_clfft
    def _init_backend(self, backend_options):
        super()._init_backend(backend_options)
        self._vkfft_other_init_kwargs = {"queue": self.processing.queue} 
def _has_vkfft(x):
    # should be run from within a Process
    try:
        from nabu.processing.fft_opencl import VKCLFFT, __has_vkfft__
        if not __has_vkfft__:
            return False
        vk = VKCLFFT((16,), "f")
        avail = True
    except (RuntimeError, OSError):
        avail = False
    return avail
[docs]
def has_vkfft(safe=True):
    """
    Determine whether pyvkfft is available.
    This function cannot be tested from a notebook/console, a proper entry point has to be created (if __name__ == "__main__").
    """
    if not safe:
        return _has_vkfft(None)
    ctx = get_context("spawn")
    with Pool(1, context=ctx) as p:
        v = p.map(_has_vkfft, [1])[0]
    return v