Gromacs  2026.0-dev-20241212-74b8831
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Macros | Enumerations | Functions | Variables
nbnxm_simd.h File Reference
#include "config.h"
#include "gromacs/math/vectypes.h"
#include "gromacs/simd/simd.h"
#include "gromacs/utility/real.h"
#include "pairlist.h"
#include "pairlistparams.h"
+ Include dependency graph for nbnxm_simd.h:
+ This graph shows which files directly or indirectly include this file:

Description

Defines constants used to know which nbNxM kernel flavours (4xM or 2xMM) can be supported by the SIMD layer in use.

Author
Berk Hess hess@.nosp@m.kth..nosp@m.se

Macros

#define GMX_HAVE_NBNXM_SIMD_2XMM   0
 The nbnxn SIMD 4xN and 2x(N+N) kernels can be added independently. Currently the 2xNN SIMD kernels only make sense with: 8-way SIMD: 4x4 setup, performance wise only useful on CPUs without FMA or on AMD Zen1 16-way SIMD: 4x8 setup, used in single precision with 512 bit wide SIMD.
 
#define GMX_HAVE_NBNXM_SIMD_4XM   0
 

Enumerations

enum  KernelLayout { KernelLayout::r4xM, KernelLayout::r2xMM }
 The types of nbNxM SIMD kernel layout. More...
 
enum  KernelLayoutClusterRatio { KernelLayoutClusterRatio::JSizeEqualsISize, KernelLayoutClusterRatio::JSizeIsDoubleISize, KernelLayoutClusterRatio::JSizeIsHalfISize }
 List of supported ratios for j-cluster size versus i-cluster sizes. More...
 

Functions

static constexpr int sc_iClusterSize (const KernelLayout kernelLayout)
 The NBNxM i-cluster size in atoms for the given NBNxM kernel layout.
 

Variables

static constexpr bool sc_haveNbnxmSimd2xmmKernels = 0
 Whether we have support for NBNxM 2xM kernels.
 
static constexpr bool sc_haveNbnxmSimd4xmKernels = 0
 Whether we have support for NBNxM 4xM kernels.
 

Enumeration Type Documentation

enum KernelLayout
strong

The types of nbNxM SIMD kernel layout.

Enumerator
r4xM 

4 'i'-registers each containing data for interaction with M j-atoms

r2xMM 

2 'i'-registers each containing duplicated data, { M, M }, for interaction with M j-atoms

List of supported ratios for j-cluster size versus i-cluster sizes.

Enumerator
JSizeEqualsISize 

j-cluster size = i-cluster size

JSizeIsDoubleISize 

j-cluster size = 2 * i-cluster size

JSizeIsHalfISize 

j-cluster size = i-cluster size / 2