[PATCH] improved nbnxn PME kernel performance on AMD

The performance of the nbnxn PME kernels on AMD was much worse with
gcc than with icc. Now the table load macro has been changed,
which roughly halves the performance difference.


[PATCH] make ::localize() more efficient, still need to handle
 ::localize_to_one()


[PATCH] performance optimizations in sgemm_kernel_16x2_bulldozer.S


[PATCH] Restructured the subdivision package

-- Integrated the doc in the header files
-- Split and moved files to have a proper internal structure and to distinguish
   between hosts, stencils and methods at the filename level.
-- Removed all instances of Polyhedron to have PolygonMesh instead
-- Cleaned off useless functions (Polyhedron_decorator remnants)
-- Improved general documentation
-- Minor performance improvements


[PATCH] Added full double precision support to the hisq-force
 routines. Replaced the macro used to write the hisq fermion force to global
 memory with a much more efficient device function.


[PATCH] Signifcantly improved restrictor performance through the use
 of CTA index swizzling to improve spatial locality improving cache line
 utilization


[PATCH] #1295 More efficient implementation of A[I] = B


[PATCH] Accelerate "Checking if non utf-8 characters are used"


[PATCH] Improved performance of tranpose

* Using int instead of dim_type
* Unrolling loops using static consts
* Using output dimensions


[PATCH] fixed problem with index group for system size and made the
 diameter calculation more efficient


[PATCH] on itanium (with Intel compiler) **2 was verrrry slow,
 replaced with ()*()


[PATCH] Added shared memory carve out setting for Volta - improves
 dslash performance by ~5%


[PATCH] Tensor, SymmTensor: Simplified invariantII

Now the calculation of the 2nd-invariant is more efficient and
accumulates less round-off error.


[PATCH] Improved performance of g_bar while reading .edr files with
 small nstenergy.


[PATCH] some more performance improvements from Krys. Mostly in
 gradients


[PATCH] Changed increment ordering for performance


[PATCH] Better optimized ICC release flags

Add those flags included in -fast which both helps performance
and are appropriate for GROMACS.

The flags included in -fast for Linux we weren't using were:
-ipo, -no-prec-div, -static, -fimf-domain-exclusion=15

Full static depends on static libraries to be installed and thus
will not always work. IPO increases compile time by a huge factor.
We do require that extreme values (e.g. large negative arguments
to exp and large positive to erfc) are computed correctly.

This leaves -no-prec-div -fimf-domain-exclusion=14 -static-intel
as safe and useful flags for GROMACS.

Change-Id: Ifbee69431841e3051c95f0b4c0ad204aac965c4e


[PATCH] BJP: Changed determination of io procs so that IO is more
 efficient for single files using parallel IO.


[PATCH] optimization, improve performance by more than 20%


[PATCH] Switching to Simple_cartesian gives better performance"


[PATCH] Use HostVector for PME CPU Force Buffer

Fix performance bug: PME CPU force buffer should be a HostVector to
allow pinned memory GPU transfers (which occur in PME-PP
communications on virial steps).


[PATCH] improved efficiency for communication somewhat and fixed Ssw
 option to work correctly, albeit not as efficient as possible yet.


[PATCH] Optimize the performance of sum by using universal intrinsics


[PATCH] - Changed Hash_map to Unique_hash_map. Kept old file. -
 Separated Handle_hash_function into own file. - Improved performance of
 default Handle_hash_function. - Rewrote manual pages including the
 UniqueHandleFunction concept. - Made protected methods in chained_map.h
 public such that   Unique_hash_map can be implemented using a private member
  instead of private inheritance.


[PATCH] eliminate it extra assignement to increase performance


[PATCH] Fix performance regresssion bug of unnecessary destruction of
 IPC comms buffers


[PATCH] Residuals: New MeshObject class to store solver performance
 residuals

This is more efficient and modular than the previous approach of storing the
residuals in the mesh data dictionary.


[PATCH] More efficient GetNonzeros::evaluateGen (sensitivities)


[PATCH] checking in change for 1-1-48 pathway, a more efficient free
 energy path. See Pham and Shirts,
 http://jcp.aip.org/resource/1/jcpsa6/v135/i3/p034114_s1


[PATCH] refactor reading last line of potential file code to be more
 efficient


[PATCH] Stopping criterion: improve the performance one last time by
 using a kernel for the boolean initialization instead of a synchronous copy.


[PATCH] POWER10: Improve dgemm performance

This patch uses vector pair pointer for input load operation
which helps to generate power10 lxvp instructions.


[PATCH] Crucial bug fix - table lookup was too slow in the previous
 version.


[PATCH] VT:for infiniband VT:disabled HBNA get for performance
 reasons, needs to be enabled in the future


[PATCH] SOLVE, MATMUL and INVERSE now use af_mat_prop

af_mat_prop values can be used for performance improvements
by calling specialized routines


[PATCH] remove legacy CUDA non-bonded kernels

This commit drops the legacy set of kernels which were optimized for use
with CUDA compilers 3.2 and 4.0 (previous to the switch to llvm backend
in 4.1).

For now the only consequence is slight performance degradation with CUDA
3.2/4.0, the build system still requires CUDA >=3.2 as the kernels do
build with the older CUDA compilers. Whether to require at least CUDA
4.1 will be decided later.

Refs #1382

Change-Id: I75d31b449e5b5e10f823408e23f35b9a7ac68bae


[PATCH] Improved the performance of finding whether a halfedge is on
 the outer ccb


[PATCH] Optimize `copy_cells`, part 2 (#1695)

This patch optimizes the `copy_cells` path for multi-fragment reads. The
following benchmarks are for the multi-fragment read scenario discussed
offline:

```
// Current
Read time: 4.75082 secs
  * Time to copy result attribute values: 3.54192 secs
    > Time to read attribute tiles: 0.311707 secs
    > Time to unfilter attribute tiles: 0.370434 secs
    > Time to copy fixed-sized attribute values: 0.898421 secs
    > Time to copy var-sized attribute values: 0.954925 secs
```

```
// With this patch
Read time: 3.04627 secs
  * Time to copy result attribute values: 1.83972 secs
    > Time to read attribute tiles: 0.274928 secs
    > Time to unfilter attribute tiles: 0.38196 secs
    > Time to copy fixed-sized attribute values: 0.517415 secs
    > Time to copy var-sized attribute values: 0.461847 secs
```

For context, here are the benchmark results for the single-fragment read. The
stats are similar with and without this patch:
```
Read time: 1.86883 secs
  * Time to copy result attribute values: 1.19411 secs
    > Time to read attribute tiles: 0.304055 secs
    > Time to unfilter attribute tiles: 0.351332 secs
    > Time to copy fixed-sized attribute values: 0.289661 secs
    > Time to copy var-sized attribute values: 0.142405 secs
```

This patch does three things:
1. Converts the `offset_offsets_per_cs` and `var_offsets_per_cs` in the var-sized
   path from a 2D array (vector<vector<uint64_t>>) to a 1D array (vector<uint64_t).
   The big win is construction and destruction time for the nested vector
   elements.
2. Partitions cell copying for both fixed and var-sized paths. The motivation
   is to reduce contention on the TBB threads and minimize time spent context
   switching between the individual cell slab copies.
3. Added a context cache for the fixed size path, similar to the existing
   var-sized context cache.

Co-authored-by: Joe Maley <joe@tiledb.com>


[PATCH] Improve general performance, set up 1-attribute, fix
 correspondence issue between original and copied map


[PATCH] Transitioning and cleaning up toward a more efficient load
 balancer.


[PATCH] HvD: It turns out that the performance improvements of a
 number of the optimizations don't carry over to other platforms. So I am
 removing most of them again. The ones that are here to stay are: the
 USE_FORTRAN2008 flag to pick Fortran 2008 intrinsic functions up for POPCNT,
 LEADZ, TRAILZ and ERF where available; the nwxc_dble_powix function to
 exploit that exponentiation with an integer power is much faster than
 exponentiation with a double precision power of the same value.


[PATCH] fixed bug in CRSSparsity append, now efficient concat


[PATCH] Converted lots of ints to unsigned ints (might help
 performance a little by avoiding conversions)


[PATCH] Replaced the "visited_facets" array (parallel version) by an
 atomic char

It's as fast, and it required less memory.


[PATCH] fix minor CUDA NB kernel performance regression

Commit f2b9db26 introduced the thread index z component as a stride in
the middle j4 loop. As this index is not a constant but a value
loaded from a special register, this change caused up to a few %
performance loss in the force kernels. This went unnoticed because
some architectures (cc 3.5/5.2) and some compilers (CUDA 7.0) were
barely affected.

Change-Id: I423790e8fb01a35f7234d26ff064dcc555e73c48


[PATCH] Improve GPU performance especially without electrostatics


[PATCH] Changed workgroup size to work around NVIDIA bug.  This also
 improves performance slightly.


[PATCH] Attempting to add diffusion term in a more efficient manner


[PATCH] Use non-allocating build_edge_ptr where possible

This may be noticeably more efficient in a few of these cases.


[PATCH] Fix performance bug when LDC is a multiple of 1024


[PATCH] made some bondeds slightly more efficient


[PATCH] Improved FAST performance on CUDA backend


[PATCH] Optimize

- Makes the resizing of the points real fast
- Makes the resizing of the normals applied on slider released instead of every tick when the point set size is bigger than 300 000
- sets the initial value of the point size to 2 instead of 5


[PATCH] More efficient GetNonzeros::evaluateGen


[PATCH] ARM64: Improve DAXPY for ThunderX2

Improve performance of DAXPY for ThunderX2
when the vector fits in L1 Cache.


[PATCH] More efficient ordering of constrained DoF index sets


[PATCH] performance improvemnts under ia64


[PATCH] Changed some compiler flags for better performance


[PATCH] Remove use of interaction_mask_indices on BG/Q

This field was degrading cache performance ~1% on x86. It probably
made little difference on BG/Q, because the extra integer operations
can use the second instruction-issue port, assuming the use of OpenMP
to use more than one hardware thread per core. Overall, this code is
about 1% faster on BG/Q.

Minor fix to the gmx_load_simd_4xn_interactions() function that looks
up the exclusion masks, so that new non-x86 platforms won't silently
fail for want of an implementation of this function.

Minor simplication to always pass simd_interaction_indices to
gmx_load_simd_4xn_interactions(), since it is only used on BG/Q and
then it is non-null.

Change-Id: I140a11607810e9cf08b702cae0b48426c3592fec


[PATCH] Add node ranking for increased nearest neighbour performance,
 currently failing tests for k > 1


[PATCH] Improve performance of Python integrator (NVE_Opt version)

Removing the loop over atoms by using NumPy array indexing allows to recover
performance close to that of plain fix nve.


[PATCH] dtrsm_kernel_LT_8x2_bulldozer.S performance optimization


[PATCH] Performance improvments to CPU Anisotropic Diffusion (#2174)

* Performance improvments to CPU Anisotropic Diffusion


[PATCH] Modifications in sweepline algorithm for is_simple: - Made
 replacing edge by another edge more efficient (using insert with hint). -
 altered the output during debugging somewhat.


[PATCH] changed the redistribution to x/y/z only moves, which
 improves the performance for especially 3D decomposition


[PATCH] convert pair styles in USER-OMP to use fast DP analytical
 coulomb


[PATCH]  - Added C++ include guards to all installed .h files

 - Modified PCG:
    - usage is consistent with SMG
    - no HYPRE_*pcg.h files
    - no need to allocate extra work-space vectors
    - more efficient matvec (does not do setup everytime)
    - default preconditioner is identity, i.e. default PCG is CG

 - All HYPRE_* interface routines are now consistently HYPRE_Struct*


[PATCH] More efficient way of creating point set from selected points


[PATCH] Fixed return value of gmx_mtop_bondeds_free_energy

The return value was always true, which was harmless, since it
could only cause a small performance hit of useless sorting.

Fixes #1387

Change-Id: I088a3747ddb3517fbb5e416b791bd542bd49fed2


[PATCH] Added const& for gaining performance


[PATCH] Precalculate pbc shift for analysis nbsearch

Instead of using pbc_dx_aiuc(), precalculate the PBC shift between grid
cells outside the inner loop when doing grid searching for analysis
neighborhood searching.  In addition to improving the performance, this
encapsulates another piece of code that needs to be changed to implement
more generic grids.

Change-Id: Ifbbe54596f820b01572fe7bb97a5354556a4981d


[PATCH] USER-DPD: propagate a minor performance bugfix throughout the
 DPDE code

The fix_shardlow_kokkos.cpp code had already factored out a redundant
sqrt() calculation in the innermost loop of ssa_update_dpde().  This
changeset propagates an equivilent optimization to:
  fix_shardlow.cpp
  pair_dpd_fdt_energy.cpp
  pair_dpd_fdt_energy_kokkos.cpp
The alpha_ij variable was really just an [itype][jtype] lookup parameter,
replacing a sqrt() and two multiplies per interacting particle pair
by a cached memory read.  Even if there isn't much time savings, the
code is now consistent across the various versions.


[PATCH] POWER10: Update param.h

Increasing the values of DGEMM_DEFAULT_P and DGEMM_DEFAULT_Q helps
in improving performance ~10% for DGEMM.


[PATCH] Removed one star. Nomore five stars record. This makes that
 mollocs are larger, therefore more efficient, and it works around buggy
 malloc library routines.


[PATCH] Issue #2738 More efficient clearing of DaeBuilder cache Wait
 until it's really needed


[PATCH] [ZARCH] Improve loading performance for camax/icamax


[PATCH] dgemm: Use the skylakex beta function also for haswell

it's more efficient for certain tall/skinny matrices


[PATCH] make ::localize() more efficient, still need to handle
 ::localize_to_one()

git-svn-id: file:///Users/petejw/Documents/libmesh_svn_bak@2242 434f946d-2f3d-0410-ba4c-cb9f52fb0dbf


[PATCH] Rewrote the BoxManGatherEntries() code for handling
 AddGraphEntries() to improve performance when using the assumed partition.


[PATCH] more efficient way to display a combinatorial map


[PATCH] performance improvements for Linear JIT CUDA kernels


[PATCH] Optimize atomic accumulation in CUDA NB kernel

As a result of this reorganization of the reduction, the final atomic
accumulation of the three force components can happen on three threads
concurrently. As this can be serviced by the hardware in a single
instruction, the optimization improves overall performance by a few %.
This also results in fewer shuffle operations.

Change-Id: I29519469b1e1848c026ee5b7a32256440031dbce


[PATCH] Accelerate L-BFGS with a couple of tricks.

1. Function objective calculation after optimization isn't needed.
2. minPointIterate isn't actually used anywhere, so get rid of it.
3. Return best result from line search, not the last result.

Also I cleaned up a few no-longer-needed sections of code and simplified a few
lines.


[PATCH] Switch to "parallel_for" for cell scan => Better performance,
 in particular with implicit function domain.


[PATCH] Added OPTLD for optimized but slow loading which you want for
 time-critical programs such as mdrun.


[PATCH] Improving performance of right Trsm routines based on
 suggestions from Bryan Marker.


[PATCH] Rationalize HAVE_FMA

Distinguish ARCH_PREFERS_FMA, for architectures that "naturally"
prefer FMA (e.g., powerpc), from ISA_EXTENSION_PREFERS_FMA, for
instruction-set extensions that favor FMA where the base architecture
does not (e.g., avx2 on x86).

Previously, --enable-avx2 would use FMA code for scalar and avx
codelets, which is wrong.

This change improves performance by a few percent on Ryzen (where FMA
doesn't really do anything), and is a wash on Haswell.


[PATCH] fvOptions: Changed to be a MeshObject to support automatic
 update for mesh changes

Now cellSetOption correctly handles the update of the cell set following mesh
topology changes rather than every time any of the fvOption functions are
called for moving meshes.  This is more efficient and consistent with the rest
of OpenFOAM and avoids a lot of unnecessary clutter in the log.


[PATCH] Use gmx_mtop_t in selections, part 2

Use gmx_mtop_t throughout low-level selection routines, i.e.,
centerofmass.cpp, poscalc.cpp, and indexutil.cpp.  Adapt test code,
which is now using gmx_mtop_t throughout as well.

In places where gmx_mtop_t is actually accessed, the changes are as
local as possible.  In most cases, some additional restructuring could
give better performance and/or much clearer code, but that is outside
the scope of this change.

Part of #1862.

Change-Id: Icc99432bddec04a325aef733df56571d709130fb


[PATCH] Call to  change_notf->update_all_faces(result, a1, a2), which
 is the notifier function updating all the faces features. This was added
 since the Map overlay should use from now on the Post precessing notifier,
 rather then the In processing notifier, since the former is more efficient
 than the latter.