[pyfr] 59/88: Improve the performance of the intconu kernel.

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Wed Nov 16 12:05:30 UTC 2016


This is an automated email from the git hooks/post-receive script.

ghisvail-guest pushed a commit to branch master
in repository pyfr.

commit 15b8aed1c05c38d4da0296a29b2c9a36dd74a6d9
Author: Freddie Witherden <freddie at witherden.org>
Date:   Sun Jul 3 17:30:55 2016 -0700

    Improve the performance of the intconu kernel.
---
 pyfr/backends/base/types.py                 | 4 ++--
 pyfr/solvers/base/system.py                 | 3 ++-
 pyfr/solvers/baseadvecdiff/elements.py      | 3 +++
 pyfr/solvers/baseadvecdiff/system.py        | 2 ++
 pyfr/solvers/navstokes/inters.py            | 6 ++++++
 pyfr/solvers/navstokes/kernels/intconu.mako | 4 ++--
 6 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/pyfr/backends/base/types.py b/pyfr/backends/base/types.py
index d1f3735..e34fe19 100644
--- a/pyfr/backends/base/types.py
+++ b/pyfr/backends/base/types.py
@@ -139,9 +139,9 @@ class MatrixRSlice(object):
         self.p, self.q = int(p), int(q)
         self.nrow, self.ncol = self.q - self.p, mat.ncol
         self.dtype, self.itemsize = mat.dtype, mat.itemsize
-        self.leaddim = mat.leaddim
+        self.leaddim, self.pitch = mat.leaddim, mat.pitch
 
-        self.pitch = self.leaddim*self.itemsize
+        self.nbytes = self.nrow*self.pitch
         self.traits = (self.nrow, self.leaddim, self.dtype)
 
         self.tags = mat.tags | {'slice'}
diff --git a/pyfr/solvers/base/system.py b/pyfr/solvers/base/system.py
index b7a9f03..819d279 100644
--- a/pyfr/solvers/base/system.py
+++ b/pyfr/solvers/base/system.py
@@ -164,7 +164,8 @@ class BaseSystem(object, metaclass=ABCMeta):
 
         for pn, pobj in zip(provnames, provobjs):
             for kn, kgetter in it.chain(*pobj.kernels.items()):
-                kernels[pn, kn].append(kgetter())
+                if not kn.startswith('_'):
+                    kernels[pn, kn].append(kgetter())
 
     @abstractmethod
     def rhs(self, t, uinbank, foutbank):
diff --git a/pyfr/solvers/baseadvecdiff/elements.py b/pyfr/solvers/baseadvecdiff/elements.py
index 0bd1318..0e5e66b 100644
--- a/pyfr/solvers/baseadvecdiff/elements.py
+++ b/pyfr/solvers/baseadvecdiff/elements.py
@@ -30,6 +30,9 @@ class BaseAdvectionDiffusionElements(BaseAdvectionElements):
             'pyfr.solvers.baseadvecdiff.kernels.gradcoru'
         )
 
+        self.kernels['_copy_fpts'] = lambda: backend.kernel(
+            'copy', self._vect_fpts.rslice(0, self.nfpts), self._scal_fpts
+        )
         self.kernels['tgradpcoru_upts'] = lambda: backend.kernel(
             'mul', self.opmat('M4 - M6*M0'), self.scal_upts_inb,
             out=self._vect_upts
diff --git a/pyfr/solvers/baseadvecdiff/system.py b/pyfr/solvers/baseadvecdiff/system.py
index 1133615..eff6eab 100644
--- a/pyfr/solvers/baseadvecdiff/system.py
+++ b/pyfr/solvers/baseadvecdiff/system.py
@@ -18,6 +18,8 @@ class BaseAdvectionDiffusionSystem(BaseAdvectionSystem):
 
         if ('eles', 'copy_soln') in kernels:
             q1 << kernels['eles', 'copy_soln']()
+        if ('iint', 'copy_fpts') in kernels:
+            q1 << kernels['iint', 'copy_fpts']()
         q1 << kernels['iint', 'con_u']()
         q1 << kernels['bcint', 'con_u'](t=t)
         if ('eles', 'shocksensor') in kernels:
diff --git a/pyfr/solvers/navstokes/inters.py b/pyfr/solvers/navstokes/inters.py
index 96b8aae..801bd7e 100644
--- a/pyfr/solvers/navstokes/inters.py
+++ b/pyfr/solvers/navstokes/inters.py
@@ -2,6 +2,7 @@
 
 import numpy as np
 
+from pyfr.backends.base.kernels import ComputeMetaKernel
 from pyfr.solvers.baseadvecdiff import (BaseAdvectionDiffusionBCInters,
                                         BaseAdvectionDiffusionIntInters,
                                         BaseAdvectionDiffusionMPIInters)
@@ -22,6 +23,11 @@ class NavierStokesIntInters(BaseAdvectionDiffusionIntInters):
         be.pointwise.register('pyfr.solvers.navstokes.kernels.intconu')
         be.pointwise.register('pyfr.solvers.navstokes.kernels.intcflux')
 
+        if abs(self._tpl_c['ldg-beta']) == 0.5:
+            self.kernels['copy_fpts'] = lambda: ComputeMetaKernel(
+                [ele.kernels['_copy_fpts']() for ele in elemap.values()]
+            )
+
         self.kernels['con_u'] = lambda: be.kernel(
             'intconu', tplargs=tplargs, dims=[self.ninterfpts],
             ulin=self._scal_lhs, urin=self._scal_rhs,
diff --git a/pyfr/solvers/navstokes/kernels/intconu.mako b/pyfr/solvers/navstokes/kernels/intconu.mako
index f097faa..8b90f1c 100644
--- a/pyfr/solvers/navstokes/kernels/intconu.mako
+++ b/pyfr/solvers/navstokes/kernels/intconu.mako
@@ -9,9 +9,9 @@
               urout='out view fpdtype_t[${str(nvars)}]'>
 % for i in range(nvars):
 % if c['ldg-beta'] == -0.5:
-    ulout[${i}] = urout[${i}] = ulin[${i}];
+    urout[${i}] = ulin[${i}];
 % elif c['ldg-beta'] == 0.5:
-    ulout[${i}] = urout[${i}] = urin[${i}];
+    ulout[${i}] = urin[${i}];
 % else:
     ulout[${i}] = urout[${i}] = urin[${i}]*${0.5 + c['ldg-beta']}
                               + ulin[${i}]*${0.5 - c['ldg-beta']};

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/pyfr.git



More information about the debian-science-commits mailing list