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
"vscode:/vscode.git/clone" did not exist on "14df6a03f933dc3fcec1bf2268f3532b0f4acfc2"
Commit
0c4af105
authored
May 24, 2012
by
Peter Eastman
Browse files
Optimizations to CustomGBForce
parent
e7a00c6a
Changes
5
Expand all
Show 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:
...
@@ -687,6 +687,7 @@ private:
std
::
vector
<
std
::
string
>
globalParamNames
;
std
::
vector
<
std
::
string
>
globalParamNames
;
std
::
vector
<
cl_float
>
globalParamValues
;
std
::
vector
<
cl_float
>
globalParamValues
;
std
::
vector
<
OpenCLArray
<
mm_float4
>*>
tabulatedFunctions
;
std
::
vector
<
OpenCLArray
<
mm_float4
>*>
tabulatedFunctions
;
std
::
vector
<
bool
>
pairValueUsesParam
,
pairEnergyUsesParam
,
pairEnergyUsesValue
;
System
&
system
;
System
&
system
;
cl
::
Kernel
pairValueKernel
,
perParticleValueKernel
,
pairEnergyKernel
,
perParticleEnergyKernel
,
gradientChainRuleKernel
;
cl
::
Kernel
pairValueKernel
,
perParticleValueKernel
,
pairEnergyKernel
,
perParticleEnergyKernel
,
gradientChainRuleKernel
;
};
};
...
...
platforms/opencl/src/OpenCLParameterSet.cpp
View file @
0c4af105
...
@@ -32,11 +32,12 @@
...
@@ -32,11 +32,12 @@
using
namespace
OpenMM
;
using
namespace
OpenMM
;
using
namespace
std
;
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
)
{
context
(
context
),
numParameters
(
numParameters
),
numObjects
(
numObjects
),
name
(
name
)
{
int
params
=
numParameters
;
int
params
=
numParameters
;
int
bufferCount
=
0
;
int
bufferCount
=
0
;
try
{
try
{
if
(
!
bufferPerParameter
)
{
while
(
params
>
2
)
{
while
(
params
>
2
)
{
cl
::
Buffer
*
buf
=
new
cl
::
Buffer
(
context
.
getContext
(),
CL_MEM_READ_WRITE
,
numObjects
*
sizeof
(
mm_float4
));
cl
::
Buffer
*
buf
=
new
cl
::
Buffer
(
context
.
getContext
(),
CL_MEM_READ_WRITE
,
numObjects
*
sizeof
(
mm_float4
));
std
::
stringstream
name
;
std
::
stringstream
name
;
...
@@ -51,11 +52,13 @@ OpenCLParameterSet::OpenCLParameterSet(OpenCLContext& context, int numParameters
...
@@ -51,11 +52,13 @@ OpenCLParameterSet::OpenCLParameterSet(OpenCLContext& context, int numParameters
buffers
.
push_back
(
OpenCLNonbondedUtilities
::
ParameterInfo
(
name
.
str
(),
"float"
,
2
,
sizeof
(
mm_float2
),
*
buf
));
buffers
.
push_back
(
OpenCLNonbondedUtilities
::
ParameterInfo
(
name
.
str
(),
"float"
,
2
,
sizeof
(
mm_float2
),
*
buf
));
params
-=
2
;
params
-=
2
;
}
}
if
(
params
>
0
)
{
}
while
(
params
>
0
)
{
cl
::
Buffer
*
buf
=
new
cl
::
Buffer
(
context
.
getContext
(),
CL_MEM_READ_WRITE
,
numObjects
*
sizeof
(
cl_float
));
cl
::
Buffer
*
buf
=
new
cl
::
Buffer
(
context
.
getContext
(),
CL_MEM_READ_WRITE
,
numObjects
*
sizeof
(
cl_float
));
std
::
stringstream
name
;
std
::
stringstream
name
;
name
<<
"param"
<<
(
++
bufferCount
);
name
<<
"param"
<<
(
++
bufferCount
);
buffers
.
push_back
(
OpenCLNonbondedUtilities
::
ParameterInfo
(
name
.
str
(),
"float"
,
1
,
sizeof
(
cl_float
),
*
buf
));
buffers
.
push_back
(
OpenCLNonbondedUtilities
::
ParameterInfo
(
name
.
str
(),
"float"
,
1
,
sizeof
(
cl_float
),
*
buf
));
params
--
;
}
}
}
}
catch
(
cl
::
Error
err
)
{
catch
(
cl
::
Error
err
)
{
...
@@ -106,6 +109,7 @@ void OpenCLParameterSet::getParameterValues(vector<vector<cl_float> >& values) c
...
@@ -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
]);
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
++
)
for
(
int
j
=
0
;
j
<
numObjects
;
j
++
)
values
[
j
][
base
]
=
data
[
j
];
values
[
j
][
base
]
=
data
[
j
];
base
++
;
}
}
else
else
throw
OpenMMException
(
"Internal error: Unknown buffer type in OpenCLParameterSet"
);
throw
OpenMMException
(
"Internal error: Unknown buffer type in OpenCLParameterSet"
);
...
@@ -151,6 +155,7 @@ void OpenCLParameterSet::setParameterValues(const vector<vector<cl_float> >& val
...
@@ -151,6 +155,7 @@ void OpenCLParameterSet::setParameterValues(const vector<vector<cl_float> >& val
for
(
int
j
=
0
;
j
<
numObjects
;
j
++
)
for
(
int
j
=
0
;
j
<
numObjects
;
j
++
)
data
[
j
]
=
values
[
j
][
base
];
data
[
j
]
=
values
[
j
][
base
];
context
.
getQueue
().
enqueueWriteBuffer
(
reinterpret_cast
<
cl
::
Buffer
&>
(
buffers
[
i
].
getMemory
()),
CL_TRUE
,
0
,
numObjects
*
buffers
[
i
].
getSize
(),
&
data
[
0
]);
context
.
getQueue
().
enqueueWriteBuffer
(
reinterpret_cast
<
cl
::
Buffer
&>
(
buffers
[
i
].
getMemory
()),
CL_TRUE
,
0
,
numObjects
*
buffers
[
i
].
getSize
(),
&
data
[
0
]);
base
++
;
}
}
else
else
throw
OpenMMException
(
"Internal error: Unknown buffer type in OpenCLParameterSet"
);
throw
OpenMMException
(
"Internal error: Unknown buffer type in OpenCLParameterSet"
);
...
...
platforms/opencl/src/OpenCLParameterSet.h
View file @
0c4af105
...
@@ -49,8 +49,10 @@ public:
...
@@ -49,8 +49,10 @@ public:
* @param numParameters the number of parameters for each object
* @param numParameters the number of parameters for each object
* @param numObjects the number of objects to store parameter values for
* @param numObjects the number of objects to store parameter values for
* @param name the name of the parameter set
* @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
();
~
OpenCLParameterSet
();
/**
/**
* Get the number of parameters.
* 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]
; \
TYPE
sum
=
NAME[index]
; \
for
(
int
i
=
index+bufferSize
; i < totalSize; i += bufferSize) \
for
(
int
i
=
index+bufferSize
; i < totalSize; i += bufferSize) \
sum
+=
NAME[i]
; \
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.
*
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