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
0c4af105
Commit
0c4af105
authored
May 24, 2012
by
Peter Eastman
Browse files
Optimizations to CustomGBForce
parent
e7a00c6a
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
144 additions
and
118 deletions
+144
-118
platforms/opencl/src/OpenCLKernels.cpp
platforms/opencl/src/OpenCLKernels.cpp
+117
-100
platforms/opencl/src/OpenCLKernels.h
platforms/opencl/src/OpenCLKernels.h
+1
-0
platforms/opencl/src/OpenCLParameterSet.cpp
platforms/opencl/src/OpenCLParameterSet.cpp
+20
-15
platforms/opencl/src/OpenCLParameterSet.h
platforms/opencl/src/OpenCLParameterSet.h
+3
-1
platforms/opencl/src/kernels/customGBEnergyPerParticle.cl
platforms/opencl/src/kernels/customGBEnergyPerParticle.cl
+3
-2
No files found.
platforms/opencl/src/OpenCLKernels.cpp
View file @
0c4af105
This diff is collapsed.
Click to expand it.
platforms/opencl/src/OpenCLKernels.h
View file @
0c4af105
...
...
@@ -687,6 +687,7 @@ private:
std
::
vector
<
std
::
string
>
globalParamNames
;
std
::
vector
<
cl_float
>
globalParamValues
;
std
::
vector
<
OpenCLArray
<
mm_float4
>*>
tabulatedFunctions
;
std
::
vector
<
bool
>
pairValueUsesParam
,
pairEnergyUsesParam
,
pairEnergyUsesValue
;
System
&
system
;
cl
::
Kernel
pairValueKernel
,
perParticleValueKernel
,
pairEnergyKernel
,
perParticleEnergyKernel
,
gradientChainRuleKernel
;
};
...
...
platforms/opencl/src/OpenCLParameterSet.cpp
View file @
0c4af105
...
...
@@ -32,30 +32,33 @@
using
namespace
OpenMM
;
using
namespace
std
;
OpenCLParameterSet
::
OpenCLParameterSet
(
OpenCLContext
&
context
,
int
numParameters
,
int
numObjects
,
const
string
&
name
)
:
OpenCLParameterSet
::
OpenCLParameterSet
(
OpenCLContext
&
context
,
int
numParameters
,
int
numObjects
,
const
string
&
name
,
bool
bufferPerParameter
)
:
context
(
context
),
numParameters
(
numParameters
),
numObjects
(
numObjects
),
name
(
name
)
{
int
params
=
numParameters
;
int
bufferCount
=
0
;
try
{
while
(
params
>
2
)
{
cl
::
Buffer
*
buf
=
new
cl
::
Buffer
(
context
.
getContext
(),
CL_MEM_READ_WRITE
,
numObjects
*
sizeof
(
mm_float4
));
std
::
stringstream
name
;
name
<<
"param"
<<
(
++
bufferCount
);
buffers
.
push_back
(
OpenCLNonbondedUtilities
::
ParameterInfo
(
name
.
str
(),
"float"
,
4
,
sizeof
(
mm_float4
),
*
buf
));
params
-=
4
;
}
if
(
params
>
1
)
{
cl
::
Buffer
*
buf
=
new
cl
::
Buffer
(
context
.
getContext
(),
CL_MEM_READ_WRITE
,
numObjects
*
sizeof
(
mm_float2
));
std
::
stringstream
name
;
name
<<
"param"
<<
(
++
bufferCount
);
buffers
.
push_back
(
OpenCLNonbondedUtilities
::
ParameterInfo
(
name
.
str
(),
"float"
,
2
,
sizeof
(
mm_float2
),
*
buf
));
params
-=
2
;
if
(
!
bufferPerParameter
)
{
while
(
params
>
2
)
{
cl
::
Buffer
*
buf
=
new
cl
::
Buffer
(
context
.
getContext
(),
CL_MEM_READ_WRITE
,
numObjects
*
sizeof
(
mm_float4
));
std
::
stringstream
name
;
name
<<
"param"
<<
(
++
bufferCount
);
buffers
.
push_back
(
OpenCLNonbondedUtilities
::
ParameterInfo
(
name
.
str
(),
"float"
,
4
,
sizeof
(
mm_float4
),
*
buf
));
params
-=
4
;
}
if
(
params
>
1
)
{
cl
::
Buffer
*
buf
=
new
cl
::
Buffer
(
context
.
getContext
(),
CL_MEM_READ_WRITE
,
numObjects
*
sizeof
(
mm_float2
));
std
::
stringstream
name
;
name
<<
"param"
<<
(
++
bufferCount
);
buffers
.
push_back
(
OpenCLNonbondedUtilities
::
ParameterInfo
(
name
.
str
(),
"float"
,
2
,
sizeof
(
mm_float2
),
*
buf
));
params
-=
2
;
}
}
if
(
params
>
0
)
{
while
(
params
>
0
)
{
cl
::
Buffer
*
buf
=
new
cl
::
Buffer
(
context
.
getContext
(),
CL_MEM_READ_WRITE
,
numObjects
*
sizeof
(
cl_float
));
std
::
stringstream
name
;
name
<<
"param"
<<
(
++
bufferCount
);
buffers
.
push_back
(
OpenCLNonbondedUtilities
::
ParameterInfo
(
name
.
str
(),
"float"
,
1
,
sizeof
(
cl_float
),
*
buf
));
params
--
;
}
}
catch
(
cl
::
Error
err
)
{
...
...
@@ -106,6 +109,7 @@ void OpenCLParameterSet::getParameterValues(vector<vector<cl_float> >& values) c
context
.
getQueue
().
enqueueReadBuffer
(
reinterpret_cast
<
cl
::
Buffer
&>
(
buffers
[
i
].
getMemory
()),
CL_TRUE
,
0
,
numObjects
*
buffers
[
i
].
getSize
(),
&
data
[
0
]);
for
(
int
j
=
0
;
j
<
numObjects
;
j
++
)
values
[
j
][
base
]
=
data
[
j
];
base
++
;
}
else
throw
OpenMMException
(
"Internal error: Unknown buffer type in OpenCLParameterSet"
);
...
...
@@ -151,6 +155,7 @@ void OpenCLParameterSet::setParameterValues(const vector<vector<cl_float> >& val
for
(
int
j
=
0
;
j
<
numObjects
;
j
++
)
data
[
j
]
=
values
[
j
][
base
];
context
.
getQueue
().
enqueueWriteBuffer
(
reinterpret_cast
<
cl
::
Buffer
&>
(
buffers
[
i
].
getMemory
()),
CL_TRUE
,
0
,
numObjects
*
buffers
[
i
].
getSize
(),
&
data
[
0
]);
base
++
;
}
else
throw
OpenMMException
(
"Internal error: Unknown buffer type in OpenCLParameterSet"
);
...
...
platforms/opencl/src/OpenCLParameterSet.h
View file @
0c4af105
...
...
@@ -49,8 +49,10 @@ public:
* @param numParameters the number of parameters for each object
* @param numObjects the number of objects to store parameter values for
* @param name the name of the parameter set
* @param bufferPerParameter if true, a separate cl::Buffer is created for each parameter. If false,
* multiple parameters may be combined into a single buffer.
*/
OpenCLParameterSet
(
OpenCLContext
&
context
,
int
numParameters
,
int
numObjects
,
const
std
::
string
&
name
);
OpenCLParameterSet
(
OpenCLContext
&
context
,
int
numParameters
,
int
numObjects
,
const
std
::
string
&
name
,
bool
bufferPerParameter
=
false
);
~
OpenCLParameterSet
();
/**
* Get the number of parameters.
...
...
platforms/opencl/src/kernels/customGBEnergyPerParticle.cl
View file @
0c4af105
#
define
REDUCE_VALUE
(
NAME,
TYPE
)
\
#
define
REDUCE_VALUE
(
NAME,
TYPE
)
{
\
TYPE
sum
=
NAME[index]
; \
for
(
int
i
=
index+bufferSize
; i < totalSize; i += bufferSize) \
sum
+=
NAME[i]
; \
NAME[index]
=
sum
;
NAME[index]
=
sum
; \
}
/**
*
Reduce
the
derivatives
computed
in
the
N^2
energy
kernel,
and
compute
all
per-particle
energy
terms.
...
...
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