Source code for pyfr.backends.openmp.provider

# -*- coding: utf-8 -*-

from pyfr.backends.base import (BaseKernelProvider,
                                BasePointwiseKernelProvider, ComputeKernel)
from pyfr.backends.openmp.compiler import SourceModule
from pyfr.backends.openmp.generator import OpenMPKernelGenerator
from pyfr.util import memoize


class OpenMPKernelProvider(BaseKernelProvider):
    @memoize
    def _build_kernel(self, name, src, argtypes, restype=None):
        mod = SourceModule(src, self.backend.cfg)
        return mod.function(name, restype, argtypes)


[docs]class OpenMPPointwiseKernelProvider(OpenMPKernelProvider, BasePointwiseKernelProvider): kernel_generator_cls = OpenMPKernelGenerator
[docs] def _instantiate_kernel(self, dims, fun, arglst): class PointwiseKernel(ComputeKernel): if any(isinstance(arg, str) for arg in arglst): def run(self, queue, **kwargs): fun(*[kwargs.get(ka, ka) for ka in arglst]) else: def run(self, queue, **kwargs): fun(*arglst) return PointwiseKernel()