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
775866b6
"vscode:/vscode.git/clone" did not exist on "1d7ac0e2fbbdc3072b7fe5e20b43cede7b2ea7c2"
Commit
775866b6
authored
Nov 04, 2013
by
peastman
Browse files
Minor optimizations to CPU version of GBSAOBCForce
parent
c97ca97b
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
14 additions
and
14 deletions
+14
-14
platforms/cpu/include/CpuGBSAOBCForce.h
platforms/cpu/include/CpuGBSAOBCForce.h
+2
-2
platforms/cpu/src/CpuGBSAOBCForce.cpp
platforms/cpu/src/CpuGBSAOBCForce.cpp
+8
-10
platforms/cpu/src/CpuKernels.cpp
platforms/cpu/src/CpuKernels.cpp
+4
-2
No files found.
platforms/cpu/include/CpuGBSAOBCForce.h
View file @
775866b6
...
@@ -66,12 +66,12 @@ public:
...
@@ -66,12 +66,12 @@ public:
void
setSolventDielectric
(
float
dielectric
);
void
setSolventDielectric
(
float
dielectric
);
/**
/**
* Get the per-particle parameters (
atomic
radius, scal
ing factor
).
* Get the per-particle parameters (
offset
radius, scal
ed radius
).
*/
*/
const
std
::
vector
<
std
::
pair
<
float
,
float
>
>&
getParticleParameters
()
const
;
const
std
::
vector
<
std
::
pair
<
float
,
float
>
>&
getParticleParameters
()
const
;
/**
/**
* Set the per-particle parameters (
atomic
radius, scal
ing factor
).
* Set the per-particle parameters (
offset
radius, scal
ed radius
).
*/
*/
void
setParticleParameters
(
const
std
::
vector
<
std
::
pair
<
float
,
float
>
>&
params
);
void
setParticleParameters
(
const
std
::
vector
<
std
::
pair
<
float
,
float
>
>&
params
);
...
...
platforms/cpu/src/CpuGBSAOBCForce.cpp
View file @
775866b6
...
@@ -123,8 +123,7 @@ void CpuGBSAOBCForce::threadComputeForce(ThreadPool& threads, int threadIndex) {
...
@@ -123,8 +123,7 @@ void CpuGBSAOBCForce::threadComputeForce(ThreadPool& threads, int threadIndex) {
for
(
int
atomI
=
start
;
atomI
<
end
;
atomI
++
)
{
for
(
int
atomI
=
start
;
atomI
<
end
;
atomI
++
)
{
fvec4
posI
(
posq
+
4
*
atomI
);
fvec4
posI
(
posq
+
4
*
atomI
);
float
radiusI
=
particleParams
[
atomI
].
first
;
float
offsetRadiusI
=
particleParams
[
atomI
].
first
;
float
offsetRadiusI
=
radiusI
-
dielectricOffset
;
float
radiusIInverse
=
1.0
f
/
offsetRadiusI
;
float
radiusIInverse
=
1.0
f
/
offsetRadiusI
;
float
sum
=
0.0
f
;
float
sum
=
0.0
f
;
for
(
int
atomJ
=
0
;
atomJ
<
numParticles
;
atomJ
++
)
{
for
(
int
atomJ
=
0
;
atomJ
<
numParticles
;
atomJ
++
)
{
...
@@ -136,8 +135,7 @@ void CpuGBSAOBCForce::threadComputeForce(ThreadPool& threads, int threadIndex) {
...
@@ -136,8 +135,7 @@ void CpuGBSAOBCForce::threadComputeForce(ThreadPool& threads, int threadIndex) {
if
(
cutoff
&&
r2
>=
cutoffDistance
*
cutoffDistance
)
if
(
cutoff
&&
r2
>=
cutoffDistance
*
cutoffDistance
)
continue
;
continue
;
float
r
=
sqrtf
(
r2
);
float
r
=
sqrtf
(
r2
);
float
offsetRadiusJ
=
particleParams
[
atomJ
].
first
-
dielectricOffset
;
float
scaledRadiusJ
=
particleParams
[
atomJ
].
second
;
float
scaledRadiusJ
=
offsetRadiusJ
*
particleParams
[
atomJ
].
second
;
float
rScaledRadiusJ
=
r
+
scaledRadiusJ
;
float
rScaledRadiusJ
=
r
+
scaledRadiusJ
;
if
(
offsetRadiusI
<
rScaledRadiusJ
)
{
if
(
offsetRadiusI
<
rScaledRadiusJ
)
{
float
rInverse
=
1.0
f
/
r
;
float
rInverse
=
1.0
f
/
r
;
...
@@ -158,6 +156,7 @@ void CpuGBSAOBCForce::threadComputeForce(ThreadPool& threads, int threadIndex) {
...
@@ -158,6 +156,7 @@ void CpuGBSAOBCForce::threadComputeForce(ThreadPool& threads, int threadIndex) {
float
sum2
=
sum
*
sum
;
float
sum2
=
sum
*
sum
;
float
sum3
=
sum
*
sum2
;
float
sum3
=
sum
*
sum2
;
float
tanhSum
=
tanh
(
alphaObc
*
sum
-
betaObc
*
sum2
+
gammaObc
*
sum3
);
float
tanhSum
=
tanh
(
alphaObc
*
sum
-
betaObc
*
sum2
+
gammaObc
*
sum3
);
float
radiusI
=
offsetRadiusI
+
dielectricOffset
;
bornRadii
[
atomI
]
=
1.0
f
/
(
1.0
f
/
offsetRadiusI
-
tanhSum
/
radiusI
);
bornRadii
[
atomI
]
=
1.0
f
/
(
1.0
f
/
offsetRadiusI
-
tanhSum
/
radiusI
);
obcChain
[
atomI
]
=
offsetRadiusI
*
(
alphaObc
-
2.0
f
*
betaObc
*
sum
+
3.0
f
*
gammaObc
*
sum2
);
obcChain
[
atomI
]
=
offsetRadiusI
*
(
alphaObc
-
2.0
f
*
betaObc
*
sum
+
3.0
f
*
gammaObc
*
sum2
);
obcChain
[
atomI
]
=
(
1.0
f
-
tanhSum
*
tanhSum
)
*
obcChain
[
atomI
]
/
radiusI
;
obcChain
[
atomI
]
=
(
1.0
f
-
tanhSum
*
tanhSum
)
*
obcChain
[
atomI
]
/
radiusI
;
...
@@ -174,8 +173,9 @@ void CpuGBSAOBCForce::threadComputeForce(ThreadPool& threads, int threadIndex) {
...
@@ -174,8 +173,9 @@ void CpuGBSAOBCForce::threadComputeForce(ThreadPool& threads, int threadIndex) {
bornForces
[
i
]
=
0.0
f
;
bornForces
[
i
]
=
0.0
f
;
for
(
int
atomI
=
start
;
atomI
<
end
;
atomI
++
)
{
for
(
int
atomI
=
start
;
atomI
<
end
;
atomI
++
)
{
if
(
bornRadii
[
atomI
]
>
0
)
{
if
(
bornRadii
[
atomI
]
>
0
)
{
float
r
=
particleParams
[
atomI
].
first
+
probeRadius
;
float
radiusI
=
particleParams
[
atomI
].
first
+
dielectricOffset
;
float
ratio6
=
powf
(
particleParams
[
atomI
].
first
/
bornRadii
[
atomI
],
6.0
f
);
float
r
=
radiusI
+
probeRadius
;
float
ratio6
=
powf
(
radiusI
/
bornRadii
[
atomI
],
6.0
f
);
float
saTerm
=
surfaceAreaFactor
*
r
*
r
*
ratio6
;
float
saTerm
=
surfaceAreaFactor
*
r
*
r
*
ratio6
;
energy
+=
saTerm
;
energy
+=
saTerm
;
bornForces
[
atomI
]
=
-
6.0
f
*
saTerm
/
bornRadii
[
atomI
];
bornForces
[
atomI
]
=
-
6.0
f
*
saTerm
/
bornRadii
[
atomI
];
...
@@ -239,8 +239,7 @@ void CpuGBSAOBCForce::threadComputeForce(ThreadPool& threads, int threadIndex) {
...
@@ -239,8 +239,7 @@ void CpuGBSAOBCForce::threadComputeForce(ThreadPool& threads, int threadIndex) {
for
(
int
i
=
0
;
i
<
numThreads
;
i
++
)
for
(
int
i
=
0
;
i
<
numThreads
;
i
++
)
bornForce
+=
threadBornForces
[
i
][
atomI
];
bornForce
+=
threadBornForces
[
i
][
atomI
];
bornForce
*=
bornRadii
[
atomI
]
*
bornRadii
[
atomI
]
*
obcChain
[
atomI
];
bornForce
*=
bornRadii
[
atomI
]
*
bornRadii
[
atomI
]
*
obcChain
[
atomI
];
float
radiusI
=
particleParams
[
atomI
].
first
;
float
offsetRadiusI
=
particleParams
[
atomI
].
first
;
float
offsetRadiusI
=
radiusI
-
dielectricOffset
;
fvec4
posI
(
posq
+
4
*
atomI
);
fvec4
posI
(
posq
+
4
*
atomI
);
fvec4
forceI
(
0.0
f
);
fvec4
forceI
(
0.0
f
);
...
@@ -253,8 +252,7 @@ void CpuGBSAOBCForce::threadComputeForce(ThreadPool& threads, int threadIndex) {
...
@@ -253,8 +252,7 @@ void CpuGBSAOBCForce::threadComputeForce(ThreadPool& threads, int threadIndex) {
if
(
cutoff
&&
r2
>=
cutoffDistance
*
cutoffDistance
)
if
(
cutoff
&&
r2
>=
cutoffDistance
*
cutoffDistance
)
continue
;
continue
;
float
r
=
sqrtf
(
r2
);
float
r
=
sqrtf
(
r2
);
float
offsetRadiusJ
=
particleParams
[
atomJ
].
first
-
dielectricOffset
;
float
scaledRadiusJ
=
particleParams
[
atomJ
].
second
;
float
scaledRadiusJ
=
offsetRadiusJ
*
particleParams
[
atomJ
].
second
;
float
scaledRadiusJ2
=
scaledRadiusJ
*
scaledRadiusJ
;
float
scaledRadiusJ2
=
scaledRadiusJ
*
scaledRadiusJ
;
float
rScaledRadiusJ
=
r
+
scaledRadiusJ
;
float
rScaledRadiusJ
=
r
+
scaledRadiusJ
;
if
(
offsetRadiusI
<
rScaledRadiusJ
)
{
if
(
offsetRadiusI
<
rScaledRadiusJ
)
{
...
...
platforms/cpu/src/CpuKernels.cpp
View file @
775866b6
...
@@ -402,7 +402,8 @@ void CpuCalcGBSAOBCForceKernel::initialize(const System& system, const GBSAOBCFo
...
@@ -402,7 +402,8 @@ void CpuCalcGBSAOBCForceKernel::initialize(const System& system, const GBSAOBCFo
double
charge
,
radius
,
scalingFactor
;
double
charge
,
radius
,
scalingFactor
;
force
.
getParticleParameters
(
i
,
charge
,
radius
,
scalingFactor
);
force
.
getParticleParameters
(
i
,
charge
,
radius
,
scalingFactor
);
data
.
posq
[
4
*
i
+
3
]
=
(
float
)
charge
;
data
.
posq
[
4
*
i
+
3
]
=
(
float
)
charge
;
particleParams
[
i
]
=
make_pair
((
float
)
radius
,
(
float
)
scalingFactor
);
radius
-=
0.009
;
particleParams
[
i
]
=
make_pair
((
float
)
radius
,
(
float
)
(
scalingFactor
*
radius
));
}
}
obc
.
setParticleParameters
(
particleParams
);
obc
.
setParticleParameters
(
particleParams
);
obc
.
setSolventDielectric
((
float
)
force
.
getSolventDielectric
());
obc
.
setSolventDielectric
((
float
)
force
.
getSolventDielectric
());
...
@@ -434,7 +435,8 @@ void CpuCalcGBSAOBCForceKernel::copyParametersToContext(ContextImpl& context, co
...
@@ -434,7 +435,8 @@ void CpuCalcGBSAOBCForceKernel::copyParametersToContext(ContextImpl& context, co
double
charge
,
radius
,
scalingFactor
;
double
charge
,
radius
,
scalingFactor
;
force
.
getParticleParameters
(
i
,
charge
,
radius
,
scalingFactor
);
force
.
getParticleParameters
(
i
,
charge
,
radius
,
scalingFactor
);
data
.
posq
[
4
*
i
+
3
]
=
(
float
)
charge
;
data
.
posq
[
4
*
i
+
3
]
=
(
float
)
charge
;
particleParams
[
i
]
=
make_pair
((
float
)
radius
,
(
float
)
scalingFactor
);
radius
-=
0.009
;
particleParams
[
i
]
=
make_pair
((
float
)
radius
,
(
float
)
(
scalingFactor
*
radius
));
}
}
obc
.
setParticleParameters
(
particleParams
);
obc
.
setParticleParameters
(
particleParams
);
}
}
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