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
d98bd6b0
"csrc/vscode:/vscode.git/clone" did not exist on "9ec061204e6763c12a9dd9f4cc5ca3b6c868b552"
Commit
d98bd6b0
authored
Jul 07, 2011
by
Peter Eastman
Browse files
Optimized CCMA
parent
0ab00340
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
17 additions
and
7 deletions
+17
-7
platforms/opencl/src/OpenCLIntegrationUtilities.cpp
platforms/opencl/src/OpenCLIntegrationUtilities.cpp
+15
-7
platforms/opencl/src/OpenCLIntegrationUtilities.h
platforms/opencl/src/OpenCLIntegrationUtilities.h
+2
-0
No files found.
platforms/opencl/src/OpenCLIntegrationUtilities.cpp
View file @
d98bd6b0
...
...
@@ -88,7 +88,7 @@ OpenCLIntegrationUtilities::OpenCLIntegrationUtilities(OpenCLContext& context, c
random
(
NULL
),
randomSeed
(
NULL
),
randomPos
(
0
),
stepSize
(
NULL
),
ccmaAtoms
(
NULL
),
ccmaDistance
(
NULL
),
ccmaReducedMass
(
NULL
),
ccmaAtomConstraints
(
NULL
),
ccmaNumAtomConstraints
(
NULL
),
ccmaConstraintMatrixColumn
(
NULL
),
ccmaConstraintMatrixValue
(
NULL
),
ccmaDelta1
(
NULL
),
ccmaDelta2
(
NULL
),
ccmaConverged
(
NULL
),
hasInitializedConstraintKernels
(
false
)
{
ccmaConvergedBuffer
(
NULL
),
hasInitializedConstraintKernels
(
false
)
{
// Create workspace arrays.
posDelta
=
new
OpenCLArray
<
mm_float4
>
(
context
,
context
.
getPaddedNumAtoms
(),
"posDelta"
);
...
...
@@ -450,7 +450,9 @@ OpenCLIntegrationUtilities::OpenCLIntegrationUtilities(OpenCLContext& context, c
ccmaNumAtomConstraints
=
new
OpenCLArray
<
cl_int
>
(
context
,
numAtoms
,
"CcmaAtomConstraintsIndex"
);
ccmaDelta1
=
new
OpenCLArray
<
cl_float
>
(
context
,
numCCMA
,
"CcmaDelta1"
);
ccmaDelta2
=
new
OpenCLArray
<
cl_float
>
(
context
,
numCCMA
,
"CcmaDelta2"
);
ccmaConverged
=
new
OpenCLArray
<
cl_int
>
(
context
,
1
,
"CcmaConverged"
,
true
);
ccmaConverged
=
new
OpenCLArray
<
cl_int
>
(
context
,
1
,
"CcmaConverged"
);
ccmaConvergedBuffer
=
new
cl
::
Buffer
(
context
.
getContext
(),
CL_MEM_ALLOC_HOST_PTR
,
sizeof
(
cl_int
));
ccmaConvergedMemory
=
(
cl_int
*
)
context
.
getQueue
().
enqueueMapBuffer
(
*
ccmaConvergedBuffer
,
CL_TRUE
,
CL_MAP_READ
|
CL_MAP_WRITE
,
0
,
sizeof
(
cl_int
));
ccmaReducedMass
=
new
OpenCLArray
<
cl_float
>
(
context
,
numCCMA
,
"CcmaReducedMass"
);
ccmaConstraintMatrixColumn
=
new
OpenCLArray
<
cl_int
>
(
context
,
numCCMA
*
maxRowElements
,
"ConstraintMatrixColumn"
);
ccmaConstraintMatrixValue
=
new
OpenCLArray
<
cl_float
>
(
context
,
numCCMA
*
maxRowElements
,
"ConstraintMatrixValue"
);
...
...
@@ -539,6 +541,8 @@ OpenCLIntegrationUtilities::~OpenCLIntegrationUtilities() {
delete
ccmaDelta2
;
if
(
ccmaConverged
!=
NULL
)
delete
ccmaConverged
;
if
(
ccmaConvergedBuffer
!=
NULL
)
delete
ccmaConvergedBuffer
;
}
void
OpenCLIntegrationUtilities
::
applyConstraints
(
double
tol
)
{
...
...
@@ -595,20 +599,24 @@ void OpenCLIntegrationUtilities::applyConstraints(double tol) {
ccmaForceKernel
.
setArg
<
cl_float
>
(
6
,
(
cl_float
)
tol
);
context
.
executeKernel
(
ccmaDirectionsKernel
,
ccmaAtoms
->
getSize
());
const
int
checkInterval
=
3
;
cl
::
Event
event
;
for
(
int
i
=
0
;
i
<
150
;
i
++
)
{
if
((
i
+
1
)
%
checkInterval
==
0
)
{
(
*
ccmaConverged
)
[
0
]
=
1
;
c
cmaConverged
->
upload
(
);
ccmaConverged
Memory
[
0
]
=
1
;
c
ontext
.
getQueue
().
enqueueWriteBuffer
(
ccmaConverged
->
getDeviceBuffer
(),
CL_FALSE
,
0
,
sizeof
(
cl_int
),
ccmaConvergedMemory
);
}
context
.
executeKernel
(
ccmaForceKernel
,
ccmaAtoms
->
getSize
());
if
((
i
+
1
)
%
checkInterval
==
0
)
{
ccmaConverged
->
download
();
if
((
*
ccmaConverged
)[
0
])
break
;
context
.
getQueue
().
enqueueReadBuffer
(
ccmaConverged
->
getDeviceBuffer
(),
CL_FALSE
,
0
,
sizeof
(
cl_int
),
ccmaConvergedMemory
,
NULL
,
&
event
);
}
context
.
executeKernel
(
ccmaMultiplyKernel
,
ccmaAtoms
->
getSize
());
ccmaUpdateKernel
.
setArg
<
cl_int
>
(
8
,
i
);
context
.
executeKernel
(
ccmaUpdateKernel
,
context
.
getNumAtoms
());
if
((
i
+
1
)
%
checkInterval
==
0
)
{
event
.
wait
();
if
(
ccmaConvergedMemory
[
0
])
break
;
}
}
}
hasInitializedConstraintKernels
=
true
;
...
...
platforms/opencl/src/OpenCLIntegrationUtilities.h
View file @
d98bd6b0
...
...
@@ -105,6 +105,8 @@ private:
OpenCLArray
<
cl_float
>*
ccmaDelta1
;
OpenCLArray
<
cl_float
>*
ccmaDelta2
;
OpenCLArray
<
cl_int
>*
ccmaConverged
;
cl
::
Buffer
*
ccmaConvergedBuffer
;
cl_int
*
ccmaConvergedMemory
;
int
randomPos
;
int
lastSeed
;
bool
hasInitializedConstraintKernels
;
...
...
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