Source code for pyfr.backends.openmp.base

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

import numpy as np

from pyfr.backends.base import BaseBackend
from pyfr.template import DottedTemplateLookup


[docs]class OpenMPBackend(BaseBackend): name = 'openmp' def __init__(self, cfg): super().__init__(cfg) # Take the alignment requirement to be 32-bytes self.alignb = 32 from pyfr.backends.openmp import (blasext, cblas, packing, provider, types) # Register our data types self.base_matrix_cls = types.OpenMPMatrixBase self.const_matrix_cls = types.OpenMPConstMatrix self.matrix_cls = types.OpenMPMatrix self.matrix_bank_cls = types.OpenMPMatrixBank self.matrix_rslice_cls = types.OpenMPMatrixRSlice self.queue_cls = types.OpenMPQueue self.view_cls = types.OpenMPView self.xchg_matrix_cls = types.OpenMPXchgMatrix self.xchg_view_cls = types.OpenMPXchgView # Template lookup self.lookup = DottedTemplateLookup( 'pyfr.backends.openmp.kernels', fpdtype=self.fpdtype, alignb=self.alignb ) # Kernel provider classes kprovcls = [provider.OpenMPPointwiseKernelProvider, blasext.OpenMPBlasExtKernels, packing.OpenMPPackingKernels, cblas.OpenMPCBLASKernels] self._providers = [k(self) for k in kprovcls] # Pointwise kernels self.pointwise = self._providers[0]
[docs] def _malloc_impl(self, nbytes): data = np.zeros(nbytes + self.alignb, dtype=np.uint8) offset = -data.ctypes.data % self.alignb return data[offset:nbytes + offset]