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
c66766a8
Commit
c66766a8
authored
Sep 03, 2014
by
peastman
Browse files
Fixed errors on Windows
parent
6f7dee30
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
1049 additions
and
1045 deletions
+1049
-1045
openmmapi/include/openmm/internal/vectorize_sse.h
openmmapi/include/openmm/internal/vectorize_sse.h
+305
-305
platforms/cpu/include/CpuCustomManyParticleForce.h
platforms/cpu/include/CpuCustomManyParticleForce.h
+223
-224
platforms/cpu/src/CpuCustomManyParticleForce.cpp
platforms/cpu/src/CpuCustomManyParticleForce.cpp
+521
-516
No files found.
openmmapi/include/openmm/internal/vectorize_sse.h
View file @
c66766a8
...
@@ -250,8 +250,8 @@ static inline float dot4(const fvec4& v1, const fvec4& v2) {
...
@@ -250,8 +250,8 @@ static inline float dot4(const fvec4& v1, const fvec4& v2) {
}
}
static
inline
fvec4
cross
(
const
fvec4
&
v1
,
const
fvec4
&
v2
)
{
static
inline
fvec4
cross
(
const
fvec4
&
v1
,
const
fvec4
&
v2
)
{
fvec4
temp
=
_mm_mul_ps
(
v1
,
_mm_shuffle_ps
(
v2
,
v2
,
_MM_SHUFFLE
(
3
,
0
,
2
,
1
)))
-
fvec4
temp
=
fvec4
(
_mm_mul_ps
(
v1
,
_mm_shuffle_ps
(
v2
,
v2
,
_MM_SHUFFLE
(
3
,
0
,
2
,
1
)))
)
-
_mm_mul_ps
(
v2
,
_mm_shuffle_ps
(
v1
,
v1
,
_MM_SHUFFLE
(
3
,
0
,
2
,
1
)))
;
fvec4
(
_mm_mul_ps
(
v2
,
_mm_shuffle_ps
(
v1
,
v1
,
_MM_SHUFFLE
(
3
,
0
,
2
,
1
)))
);
return
_mm_shuffle_ps
(
temp
,
temp
,
_MM_SHUFFLE
(
3
,
0
,
2
,
1
));
return
_mm_shuffle_ps
(
temp
,
temp
,
_MM_SHUFFLE
(
3
,
0
,
2
,
1
));
}
}
...
...
platforms/cpu/include/CpuCustomManyParticleForce.h
View file @
c66766a8
...
@@ -191,7 +191,6 @@ public:
...
@@ -191,7 +191,6 @@ public:
int
p1
,
p2
,
p3
,
p4
,
variableIndex
;
int
p1
,
p2
,
p3
,
p4
,
variableIndex
;
Lepton
::
CompiledExpression
forceExpression
;
Lepton
::
CompiledExpression
forceExpression
;
int
delta1
,
delta2
,
delta3
;
int
delta1
,
delta2
,
delta3
;
mutable
fvec4
cross1
,
cross2
;
DihedralTermInfo
(
const
std
::
string
&
name
,
const
std
::
vector
<
int
>&
atoms
,
const
Lepton
::
CompiledExpression
&
forceExpression
,
ThreadData
&
data
);
DihedralTermInfo
(
const
std
::
string
&
name
,
const
std
::
vector
<
int
>&
atoms
,
const
Lepton
::
CompiledExpression
&
forceExpression
,
ThreadData
&
data
);
};
};
...
@@ -206,7 +205,7 @@ public:
...
@@ -206,7 +205,7 @@ public:
std
::
vector
<
DistanceTermInfo
>
distanceTerms
;
std
::
vector
<
DistanceTermInfo
>
distanceTerms
;
std
::
vector
<
AngleTermInfo
>
angleTerms
;
std
::
vector
<
AngleTermInfo
>
angleTerms
;
std
::
vector
<
DihedralTermInfo
>
dihedralTerms
;
std
::
vector
<
DihedralTermInfo
>
dihedralTerms
;
AlignedArray
<
fvec4
>
delta
;
AlignedArray
<
fvec4
>
delta
,
cross1
,
cross2
;
std
::
vector
<
float
>
normDelta
;
std
::
vector
<
float
>
normDelta
;
std
::
vector
<
float
>
norm2Delta
;
std
::
vector
<
float
>
norm2Delta
;
AlignedArray
<
fvec4
>
f
;
AlignedArray
<
fvec4
>
f
;
...
...
platforms/cpu/src/CpuCustomManyParticleForce.cpp
View file @
c66766a8
...
@@ -278,6 +278,8 @@ void CpuCustomManyParticleForce::calculateOneIxn(vector<int>& particleSet, RealO
...
@@ -278,6 +278,8 @@ void CpuCustomManyParticleForce::calculateOneIxn(vector<int>& particleSet, RealO
int
numDeltas
=
data
.
deltaPairs
.
size
();
int
numDeltas
=
data
.
deltaPairs
.
size
();
AlignedArray
<
fvec4
>&
delta
=
data
.
delta
;
AlignedArray
<
fvec4
>&
delta
=
data
.
delta
;
AlignedArray
<
fvec4
>&
cross1
=
data
.
cross1
;
AlignedArray
<
fvec4
>&
cross2
=
data
.
cross2
;
vector
<
float
>&
normDelta
=
data
.
normDelta
;
vector
<
float
>&
normDelta
=
data
.
normDelta
;
vector
<
float
>&
norm2Delta
=
data
.
norm2Delta
;
vector
<
float
>&
norm2Delta
=
data
.
norm2Delta
;
for
(
int
i
=
0
;
i
<
numDeltas
;
i
++
)
{
for
(
int
i
=
0
;
i
<
numDeltas
;
i
++
)
{
...
@@ -303,7 +305,7 @@ void CpuCustomManyParticleForce::calculateOneIxn(vector<int>& particleSet, RealO
...
@@ -303,7 +305,7 @@ void CpuCustomManyParticleForce::calculateOneIxn(vector<int>& particleSet, RealO
}
}
for
(
int
i
=
0
;
i
<
(
int
)
data
.
dihedralTerms
.
size
();
i
++
)
{
for
(
int
i
=
0
;
i
<
(
int
)
data
.
dihedralTerms
.
size
();
i
++
)
{
const
DihedralTermInfo
&
term
=
data
.
dihedralTerms
[
i
];
const
DihedralTermInfo
&
term
=
data
.
dihedralTerms
[
i
];
expressionSet
.
setVariable
(
term
.
variableIndex
,
getDihedralAngleBetweenThreeVectors
(
delta
[
term
.
delta1
],
delta
[
term
.
delta2
],
delta
[
term
.
delta3
],
term
.
cross1
,
term
.
cross2
,
delta
[
term
.
delta1
]));
expressionSet
.
setVariable
(
term
.
variableIndex
,
getDihedralAngleBetweenThreeVectors
(
delta
[
term
.
delta1
],
delta
[
term
.
delta2
],
delta
[
term
.
delta3
],
cross1
[
i
],
cross2
[
i
]
,
delta
[
term
.
delta1
]));
}
}
if
(
includeForces
)
{
if
(
includeForces
)
{
...
@@ -356,18 +358,18 @@ void CpuCustomManyParticleForce::calculateOneIxn(vector<int>& particleSet, RealO
...
@@ -356,18 +358,18 @@ void CpuCustomManyParticleForce::calculateOneIxn(vector<int>& particleSet, RealO
for
(
int
i
=
0
;
i
<
(
int
)
data
.
dihedralTerms
.
size
();
i
++
)
{
for
(
int
i
=
0
;
i
<
(
int
)
data
.
dihedralTerms
.
size
();
i
++
)
{
const
DihedralTermInfo
&
term
=
data
.
dihedralTerms
[
i
];
const
DihedralTermInfo
&
term
=
data
.
dihedralTerms
[
i
];
float
dEdTheta
=
(
float
)
term
.
forceExpression
.
evaluate
();
float
dEdTheta
=
(
float
)
term
.
forceExpression
.
evaluate
();
float
normCross1
=
dot3
(
term
.
cross1
,
term
.
cross1
);
float
normCross1
=
dot3
(
cross1
[
i
],
cross1
[
i
]
);
float
normBC
=
normDelta
[
term
.
delta2
];
float
normBC
=
normDelta
[
term
.
delta2
];
float
forceFactors
[
4
];
float
forceFactors
[
4
];
forceFactors
[
0
]
=
(
-
dEdTheta
*
normBC
)
/
normCross1
;
forceFactors
[
0
]
=
(
-
dEdTheta
*
normBC
)
/
normCross1
;
float
normCross2
=
dot3
(
term
.
cross2
,
term
.
cross2
);
float
normCross2
=
dot3
(
cross2
[
i
],
cross2
[
i
]
);
forceFactors
[
3
]
=
(
dEdTheta
*
normBC
)
/
normCross2
;
forceFactors
[
3
]
=
(
dEdTheta
*
normBC
)
/
normCross2
;
forceFactors
[
1
]
=
dot3
(
delta
[
term
.
delta1
],
delta
[
term
.
delta2
]);
forceFactors
[
1
]
=
dot3
(
delta
[
term
.
delta1
],
delta
[
term
.
delta2
]);
forceFactors
[
1
]
/=
norm2Delta
[
term
.
delta2
];
forceFactors
[
1
]
/=
norm2Delta
[
term
.
delta2
];
forceFactors
[
2
]
=
dot3
(
delta
[
term
.
delta3
],
delta
[
term
.
delta2
]);
forceFactors
[
2
]
=
dot3
(
delta
[
term
.
delta3
],
delta
[
term
.
delta2
]);
forceFactors
[
2
]
/=
norm2Delta
[
term
.
delta2
];
forceFactors
[
2
]
/=
norm2Delta
[
term
.
delta2
];
fvec4
force1
=
forceFactors
[
0
]
*
term
.
cross1
;
fvec4
force1
=
forceFactors
[
0
]
*
cross1
[
i
];
fvec4
force4
=
forceFactors
[
3
]
*
term
.
cross2
;
fvec4
force4
=
forceFactors
[
3
]
*
cross2
[
i
];
fvec4
s
=
forceFactors
[
1
]
*
force1
-
forceFactors
[
2
]
*
force4
;
fvec4
s
=
forceFactors
[
1
]
*
force1
-
forceFactors
[
2
]
*
force4
;
f
[
term
.
p1
]
+=
force1
;
f
[
term
.
p1
]
+=
force1
;
f
[
term
.
p2
]
-=
force1
-
s
;
f
[
term
.
p2
]
-=
force1
-
s
;
...
@@ -495,6 +497,9 @@ CpuCustomManyParticleForce::ThreadData::ThreadData(const CustomManyParticleForce
...
@@ -495,6 +497,9 @@ CpuCustomManyParticleForce::ThreadData::ThreadData(const CustomManyParticleForce
delta
.
resize
(
numDeltas
);
delta
.
resize
(
numDeltas
);
normDelta
.
resize
(
numDeltas
);
normDelta
.
resize
(
numDeltas
);
norm2Delta
.
resize
(
numDeltas
);
norm2Delta
.
resize
(
numDeltas
);
cross1
.
resize
(
numDeltas
);
cross2
.
resize
(
numDeltas
);
}
}
void
CpuCustomManyParticleForce
::
ThreadData
::
requestDeltaPair
(
int
p1
,
int
p2
,
int
&
pairIndex
,
float
&
pairSign
,
bool
allowReversed
)
{
void
CpuCustomManyParticleForce
::
ThreadData
::
requestDeltaPair
(
int
p1
,
int
p2
,
int
&
pairIndex
,
float
&
pairSign
,
bool
allowReversed
)
{
...
...
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