Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
tsoc
openmm
Commits
fdea63e9
Unverified
Commit
fdea63e9
authored
Aug 06, 2025
by
Peter Eastman
Committed by
GitHub
Aug 06, 2025
Browse files
Reducing sorting overhead for small systems with PME (#5027)
parent
d2f76949
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
20 additions
and
15 deletions
+20
-15
platforms/common/include/openmm/common/CommonCalcNonbondedForce.h
...s/common/include/openmm/common/CommonCalcNonbondedForce.h
+2
-1
platforms/common/src/CommonCalcNonbondedForce.cpp
platforms/common/src/CommonCalcNonbondedForce.cpp
+18
-14
No files found.
platforms/common/include/openmm/common/CommonCalcNonbondedForce.h
View file @
fdea63e9
...
@@ -47,7 +47,7 @@ namespace OpenMM {
...
@@ -47,7 +47,7 @@ namespace OpenMM {
class
CommonCalcNonbondedForceKernel
:
public
CalcNonbondedForceKernel
{
class
CommonCalcNonbondedForceKernel
:
public
CalcNonbondedForceKernel
{
public:
public:
CommonCalcNonbondedForceKernel
(
std
::
string
name
,
const
Platform
&
platform
,
ComputeContext
&
cc
,
const
System
&
system
)
:
CalcNonbondedForceKernel
(
name
,
platform
),
CommonCalcNonbondedForceKernel
(
std
::
string
name
,
const
Platform
&
platform
,
ComputeContext
&
cc
,
const
System
&
system
)
:
CalcNonbondedForceKernel
(
name
,
platform
),
hasInitializedKernel
(
false
),
cc
(
cc
),
pmeio
(
NULL
)
{
hasInitializedKernel
(
false
),
cc
(
cc
),
pmeio
(
NULL
)
,
stepsToSort
(
0
)
{
}
}
~
CommonCalcNonbondedForceKernel
();
~
CommonCalcNonbondedForceKernel
();
/**
/**
...
@@ -168,6 +168,7 @@ private:
...
@@ -168,6 +168,7 @@ private:
double
ewaldSelfEnergy
,
dispersionCoefficient
,
alpha
,
dispersionAlpha
,
totalCharge
;
double
ewaldSelfEnergy
,
dispersionCoefficient
,
alpha
,
dispersionAlpha
,
totalCharge
;
int
gridSizeX
,
gridSizeY
,
gridSizeZ
;
int
gridSizeX
,
gridSizeY
,
gridSizeZ
;
int
dispersionGridSizeX
,
dispersionGridSizeY
,
dispersionGridSizeZ
;
int
dispersionGridSizeX
,
dispersionGridSizeY
,
dispersionGridSizeZ
;
int
stepsToSort
;
bool
usePmeQueue
,
deviceIsCpu
,
useFixedPointChargeSpreading
,
useCpuPme
;
bool
usePmeQueue
,
deviceIsCpu
,
useFixedPointChargeSpreading
,
useCpuPme
;
bool
hasCoulomb
,
hasLJ
,
doLJPME
,
usePosqCharges
,
recomputeParams
,
hasOffsets
;
bool
hasCoulomb
,
hasLJ
,
doLJPME
,
usePosqCharges
,
recomputeParams
,
hasOffsets
;
NonbondedMethod
nonbondedMethod
;
NonbondedMethod
nonbondedMethod
;
...
...
platforms/common/src/CommonCalcNonbondedForce.cpp
View file @
fdea63e9
...
@@ -960,19 +960,24 @@ double CommonCalcNonbondedForceKernel::execute(ContextImpl& context, bool includ
...
@@ -960,19 +960,24 @@ double CommonCalcNonbondedForceKernel::execute(ContextImpl& context, bool includ
// Execute the reciprocal space kernels.
// Execute the reciprocal space kernels.
if
(
hasCoulomb
)
{
if
(
hasCoulomb
)
{
setPeriodicBoxArgs
(
cc
,
pmeGridIndexKernel
,
2
);
if
(
stepsToSort
<=
0
||
doLJPME
||
cc
.
getNumAtoms
()
>
15000
)
{
if
(
cc
.
getUseDoublePrecision
())
{
setPeriodicBoxArgs
(
cc
,
pmeGridIndexKernel
,
2
);
pmeGridIndexKernel
->
setArg
(
7
,
recipBoxVectors
[
0
]);
if
(
cc
.
getUseDoublePrecision
())
{
pmeGridIndexKernel
->
setArg
(
8
,
recipBoxVectors
[
1
]);
pmeGridIndexKernel
->
setArg
(
7
,
recipBoxVectors
[
0
]);
pmeGridIndexKernel
->
setArg
(
9
,
recipBoxVectors
[
2
]);
pmeGridIndexKernel
->
setArg
(
8
,
recipBoxVectors
[
1
]);
}
pmeGridIndexKernel
->
setArg
(
9
,
recipBoxVectors
[
2
]);
else
{
}
pmeGridIndexKernel
->
setArg
(
7
,
recipBoxVectorsFloat
[
0
]);
else
{
pmeGridIndexKernel
->
setArg
(
8
,
recipBoxVectorsFloat
[
1
]);
pmeGridIndexKernel
->
setArg
(
7
,
recipBoxVectorsFloat
[
0
]);
pmeGridIndexKernel
->
setArg
(
9
,
recipBoxVectorsFloat
[
2
]);
pmeGridIndexKernel
->
setArg
(
8
,
recipBoxVectorsFloat
[
1
]);
pmeGridIndexKernel
->
setArg
(
9
,
recipBoxVectorsFloat
[
2
]);
}
pmeGridIndexKernel
->
execute
(
cc
.
getNumAtoms
());
sort
->
sort
(
pmeAtomGridIndex
);
stepsToSort
=
3
;
}
}
pmeGridIndexKernel
->
execute
(
cc
.
getNumAtoms
());
else
sort
->
sort
(
pmeAtomGridIndex
)
;
stepsToSort
--
;
setPeriodicBoxArgs
(
cc
,
pmeSpreadChargeKernel
,
2
);
setPeriodicBoxArgs
(
cc
,
pmeSpreadChargeKernel
,
2
);
if
(
cc
.
getUseDoublePrecision
())
{
if
(
cc
.
getUseDoublePrecision
())
{
pmeSpreadChargeKernel
->
setArg
(
7
,
recipBoxVectors
[
0
]);
pmeSpreadChargeKernel
->
setArg
(
7
,
recipBoxVectors
[
0
]);
...
@@ -1038,8 +1043,7 @@ double CommonCalcNonbondedForceKernel::execute(ContextImpl& context, bool includ
...
@@ -1038,8 +1043,7 @@ double CommonCalcNonbondedForceKernel::execute(ContextImpl& context, bool includ
pmeDispersionGridIndexKernel
->
setArg
(
9
,
recipBoxVectorsFloat
[
2
]);
pmeDispersionGridIndexKernel
->
setArg
(
9
,
recipBoxVectorsFloat
[
2
]);
}
}
pmeDispersionGridIndexKernel
->
execute
(
cc
.
getNumAtoms
());
pmeDispersionGridIndexKernel
->
execute
(
cc
.
getNumAtoms
());
if
(
!
hasCoulomb
)
sort
->
sort
(
pmeAtomGridIndex
);
sort
->
sort
(
pmeAtomGridIndex
);
if
(
useFixedPointChargeSpreading
)
if
(
useFixedPointChargeSpreading
)
cc
.
clearBuffer
(
pmeGrid2
);
cc
.
clearBuffer
(
pmeGrid2
);
else
else
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment