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
9963e51a
Commit
9963e51a
authored
Feb 16, 2017
by
peastman
Committed by
GitHub
Feb 16, 2017
Browse files
Merge pull request #1741 from peastman/lamda
Use lambdas for thread pool tasks
parents
2c559596
50054664
Changes
35
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
63 additions
and
104 deletions
+63
-104
.travis.yml
.travis.yml
+5
-0
CMakeLists.txt
CMakeLists.txt
+6
-19
appveyor.yml
appveyor.yml
+6
-5
docs-source/usersguide/library.rst
docs-source/usersguide/library.rst
+2
-2
openmmapi/include/openmm/internal/ThreadPool.h
openmmapi/include/openmm/internal/ThreadPool.h
+8
-1
openmmapi/src/ThreadPool.cpp
openmmapi/src/ThreadPool.cpp
+17
-5
platforms/cpu/include/CpuBondForce.h
platforms/cpu/include/CpuBondForce.h
+1
-2
platforms/cpu/include/CpuCustomGBForce.h
platforms/cpu/include/CpuCustomGBForce.h
+1
-2
platforms/cpu/include/CpuCustomManyParticleForce.h
platforms/cpu/include/CpuCustomManyParticleForce.h
+1
-2
platforms/cpu/include/CpuCustomNonbondedForce.h
platforms/cpu/include/CpuCustomNonbondedForce.h
+1
-2
platforms/cpu/include/CpuGBSAOBCForce.h
platforms/cpu/include/CpuGBSAOBCForce.h
+1
-2
platforms/cpu/include/CpuGayBerneForce.h
platforms/cpu/include/CpuGayBerneForce.h
+1
-2
platforms/cpu/include/CpuKernels.h
platforms/cpu/include/CpuKernels.h
+0
-2
platforms/cpu/include/CpuLangevinDynamics.h
platforms/cpu/include/CpuLangevinDynamics.h
+1
-4
platforms/cpu/include/CpuNeighborList.h
platforms/cpu/include/CpuNeighborList.h
+1
-2
platforms/cpu/include/CpuNonbondedForce.h
platforms/cpu/include/CpuNonbondedForce.h
+1
-2
platforms/cpu/include/CpuSETTLE.h
platforms/cpu/include/CpuSETTLE.h
+1
-3
platforms/cpu/src/CpuBondForce.cpp
platforms/cpu/src/CpuBondForce.cpp
+5
-22
platforms/cpu/src/CpuCustomGBForce.cpp
platforms/cpu/src/CpuCustomGBForce.cpp
+2
-12
platforms/cpu/src/CpuCustomManyParticleForce.cpp
platforms/cpu/src/CpuCustomManyParticleForce.cpp
+2
-13
No files found.
.travis.yml
View file @
9963e51a
...
...
@@ -108,6 +108,11 @@ before_install:
brew install doxygen fftw;
sudo easy_install pytest;
fi
-
if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then
CMAKE_URL="https://cmake.org/files/v3.7/cmake-3.7.2-Linux-x86_64.tar.gz";
mkdir $HOME/cmake && travis_retry wget --no-check-certificate --quiet -O - ${CMAKE_URL} | tar --strip-components=1 -xz -C $HOME/cmake;
export PATH=${HOME}/cmake/bin:${PATH};
fi
-
if [[ "$OPENCL" == "true" ]]; then
wget http://s3.amazonaws.com/omnia-ci/AMD-APP-SDKInstaller-v3.0.130.135-GA-linux64.tar.bz2;
tar -xjf AMD-APP-SDK*.tar.bz2;
...
...
CMakeLists.txt
View file @
9963e51a
...
...
@@ -21,10 +21,11 @@ IF( NOT PROJECT_NAME )
PROJECT
(
OpenMM
)
ENDIF
(
NOT PROJECT_NAME
)
CMAKE_MINIMUM_REQUIRED
(
VERSION 2.8
)
if
(
"
${
CMAKE_VERSION
}
"
VERSION_GREATER
"3.0"
OR
"
${
CMAKE_VERSION
}
"
VERSION_EQUAL
"3.0"
)
CMAKE_POLICY
(
SET CMP0042 OLD
)
endif
()
CMAKE_MINIMUM_REQUIRED
(
VERSION 3.1
)
CMAKE_POLICY
(
SET CMP0042 OLD
)
CMAKE_POLICY
(
SET CMP0003 NEW
)
CMAKE_POLICY
(
SET CMP0005 NEW
)
CMAKE_POLICY
(
SET CMP0011 NEW
)
#SET(CMAKE_VERBOSE_MAKEFILE 1)
...
...
@@ -39,21 +40,6 @@ IF(NOT cmv EQUAL "2.4") # This whole file...
# We have custom cmake modules for FindOpenMM and running python tests
SET
(
CMAKE_MODULE_PATH
${
CMAKE_MODULE_PATH
}
"
${
CMAKE_SOURCE_DIR
}
/cmake_modules"
)
# Older cmake versions do not have cmake_policy command
# Cmake 2.4.5, the default cmake on red hat linux, has the
# cmake_policy command, but it does not work
# "if(POLICY ..." does not work with cmake 2.4.[56] on red hat
# (cmake 2.4.7 is OK)
if
(
COMMAND cmake_policy
)
if
(
CMAKE_MAJOR_VERSION GREATER 2 OR CMAKE_MINOR_VERSION GREATER 5
)
cmake_policy
(
SET CMP0003 NEW
)
cmake_policy
(
SET CMP0005 NEW
)
endif
(
CMAKE_MAJOR_VERSION GREATER 2 OR CMAKE_MINOR_VERSION GREATER 5
)
if
(
CMAKE_MAJOR_VERSION GREATER 2 OR CMAKE_MINOR_VERSION GREATER 6 OR CMAKE_PATCH_VERSION GREATER 2
)
cmake_policy
(
SET CMP0011 NEW
)
endif
(
CMAKE_MAJOR_VERSION GREATER 2 OR CMAKE_MINOR_VERSION GREATER 6 OR CMAKE_PATCH_VERSION GREATER 2
)
endif
(
COMMAND cmake_policy
)
# Where to install
IF
(
WIN32
)
IF
(
NOT OPENMM_INSTALL_PREFIX
)
...
...
@@ -117,6 +103,7 @@ ELSE( CMAKE_SIZEOF_VOID_P EQUAL 8 )
SET
(
LIB64
)
ENDIF
(
CMAKE_SIZEOF_VOID_P EQUAL 8
)
SET
(
CMAKE_CXX_STANDARD 11
)
IF
(
APPLE
AND
(
NOT PNACL
))
# Build 64 bit binaries compatible with OS X 10.7
...
...
appveyor.yml
View file @
9963e51a
os
:
Windows Server 2012 R2
os
:
Visual Studio
2015
platform
:
x64
configuration
:
Release
shallow_clone
:
true
install
:
# Setup shell for VS2010, x64, release mode
-
>
"%ProgramFiles%\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64 /release
# Setup shell for VS2015, x64
-
call "c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
# Set path to python, git-bash tools.
-
"
set
PATH=C:
\\
Python3
4
-x64;C:
\\
Python3
4
-x64
\\
Scripts;%PATH%"
-
"
set
PATH=C:
\\
Python3
5
-x64;C:
\\
Python3
5
-x64
\\
Scripts;%PATH%"
-
"
set
PATH=C:
\\
Program
Files
(x86)
\\
Git
\\
bin;%PATH%"
-
pip install pytest
...
...
docs-source/usersguide/library.rst
View file @
9963e51a
...
...
@@ -404,7 +404,7 @@ version of Visual Studio.
Install
CMake
=============
CMake
is
the
build
system
used
for
OpenMM
.
You
must
install
CMake
version
2.8
CMake
is
the
build
system
used
for
OpenMM
.
You
must
install
CMake
version
3.1
or
higher
before
attempting
to
build
OpenMM
from
source
.
You
can
get
CMake
from
http
://
www
.
cmake
.
org
/.
If
you
choose
to
build
CMake
from
source
on
Linux
,
make
sure
you
have
the
curses
library
installed
beforehand
,
so
that
you
will
be
able
...
...
@@ -509,7 +509,7 @@ Windows
On
Windows
,
perform
the
following
steps
:
#.
Click
Start
->
All
Programs
->
CMake
2.8
->
CMake
#.
Click
Start
->
All
Programs
->
CMake
3.1
->
CMake
#.
In
the
box
labeled
"Where is the source code:"
browse
to
OpenMM
src
directory
(
containing
top
CMakeLists
.
txt
)
#.
In
the
box
labeled
"Where to build the binaries"
browse
to
your
build_openmm
...
...
openmmapi/include/openmm/internal/ThreadPool.h
View file @
9963e51a
...
...
@@ -9,7 +9,7 @@
* Biological Structures at Stanford, funded under the NIH Roadmap for *
* Medical Research, grant U54 GM072970. See https://simtk.org. *
* *
* Portions copyright (c) 2013 Stanford University and the Authors.
*
* Portions copyright (c) 2013
-2017
Stanford University and the Authors. *
* Authors: Peter Eastman *
* Contributors: *
* *
...
...
@@ -34,6 +34,7 @@
#define NOMINMAX
#include "windowsExport.h"
#include <functional>
#include <pthread.h>
#include <vector>
...
...
@@ -69,6 +70,10 @@ public:
* Execute a Task in parallel on the worker threads.
*/
void
execute
(
Task
&
task
);
/**
* Execute a function in parallel on the worker threads.
*/
void
execute
(
std
::
function
<
void
(
ThreadPool
&
,
int
)
>
task
);
/**
* This is called by the worker threads to block until all threads have reached the same point
* and the master thread instructs them to continue by calling resumeThreads().
...
...
@@ -90,6 +95,8 @@ private:
std
::
vector
<
ThreadData
*>
threadData
;
pthread_cond_t
startCondition
,
endCondition
;
pthread_mutex_t
lock
;
Task
*
currentTask
;
std
::
function
<
void
(
ThreadPool
&
pool
,
int
)
>
currentFunction
;
};
/**
...
...
openmmapi/src/ThreadPool.cpp
View file @
9963e51a
...
...
@@ -6,7 +6,7 @@
* Biological Structures at Stanford, funded under the NIH Roadmap for *
* Medical Research, grant U54 GM072970. See https://simtk.org. *
* *
* Portions copyright (c) 2013-201
4
Stanford University and the Authors. *
* Portions copyright (c) 2013-201
7
Stanford University and the Authors. *
* Authors: Peter Eastman *
* Contributors: *
* *
...
...
@@ -40,10 +40,17 @@ class ThreadPool::ThreadData {
public:
ThreadData
(
ThreadPool
&
owner
,
int
index
)
:
owner
(
owner
),
index
(
index
),
isDeleted
(
false
)
{
}
void
executeTask
()
{
if
(
owner
.
currentTask
!=
NULL
)
owner
.
currentTask
->
execute
(
owner
,
index
);
else
owner
.
currentFunction
(
owner
,
index
);
}
ThreadPool
&
owner
;
int
index
;
bool
isDeleted
;
Task
*
currentTask
;
function
<
void
(
ThreadPool
&
pool
,
int
)
>
currentFunction
;
};
static
void
*
threadBody
(
void
*
args
)
{
...
...
@@ -54,13 +61,13 @@ static void* threadBody(void* args) {
data
.
owner
.
syncThreads
();
if
(
data
.
isDeleted
)
break
;
data
.
currentTask
->
execute
(
data
.
owner
,
data
.
index
);
data
.
executeTask
(
);
}
delete
&
data
;
return
0
;
}
ThreadPool
::
ThreadPool
(
int
numThreads
)
{
ThreadPool
::
ThreadPool
(
int
numThreads
)
:
currentTask
(
NULL
)
{
if
(
numThreads
<=
0
)
numThreads
=
getNumProcessors
();
this
->
numThreads
=
numThreads
;
...
...
@@ -99,8 +106,13 @@ int ThreadPool::getNumThreads() const {
}
void
ThreadPool
::
execute
(
Task
&
task
)
{
for
(
int
i
=
0
;
i
<
(
int
)
threadData
.
size
();
i
++
)
threadData
[
i
]
->
currentTask
=
&
task
;
currentTask
=
&
task
;
resumeThreads
();
}
void
ThreadPool
::
execute
(
function
<
void
(
ThreadPool
&
,
int
)
>
task
)
{
currentTask
=
NULL
;
currentFunction
=
task
;
resumeThreads
();
}
...
...
platforms/cpu/include/CpuBondForce.h
View file @
9963e51a
...
...
@@ -9,7 +9,7 @@
* Biological Structures at Stanford, funded under the NIH Roadmap for *
* Medical Research, grant U54 GM072970. See https://simtk.org. *
* *
* Portions copyright (c) 2014 Stanford University and the Authors.
*
* Portions copyright (c) 2014
-2017
Stanford University and the Authors. *
* Authors: Peter Eastman *
* Contributors: *
* *
...
...
@@ -46,7 +46,6 @@ namespace OpenMM {
*/
class
OPENMM_EXPORT_CPU
CpuBondForce
{
public:
class
ComputeForceTask
;
CpuBondForce
();
/**
* Analyze the set of bonds and decide which to compute with each thread.
...
...
platforms/cpu/include/CpuCustomGBForce.h
View file @
9963e51a
/* Portions copyright (c) 2009-201
6
Stanford University and Simbios.
/* Portions copyright (c) 2009-201
7
Stanford University and Simbios.
* Contributors: Peter Eastman
*
* Permission is hereby granted, free of charge, to any person obtaining
...
...
@@ -39,7 +39,6 @@ namespace OpenMM {
class
CpuCustomGBForce
{
private:
class
ComputeForceTask
;
class
ThreadData
;
bool
cutoff
;
...
...
platforms/cpu/include/CpuCustomManyParticleForce.h
View file @
9963e51a
/* Portions copyright (c) 2009-201
4
Stanford University and Simbios.
/* Portions copyright (c) 2009-201
7
Stanford University and Simbios.
* Contributors: Peter Eastman
*
* Permission is hereby granted, free of charge, to any person obtaining
...
...
@@ -48,7 +48,6 @@ private:
class
DistanceTermInfo
;
class
AngleTermInfo
;
class
DihedralTermInfo
;
class
ComputeForceTask
;
class
ThreadData
;
int
numParticles
,
numParticlesPerSet
,
numPerParticleParameters
,
numTypes
;
bool
useCutoff
,
usePeriodic
,
triclinic
,
centralParticleMode
;
...
...
platforms/cpu/include/CpuCustomNonbondedForce.h
View file @
9963e51a
/* Portions copyright (c) 2009-201
6
Stanford University and Simbios.
/* Portions copyright (c) 2009-201
7
Stanford University and Simbios.
* Contributors: Peter Eastman
*
* Permission is hereby granted, free of charge, to any person obtaining
...
...
@@ -122,7 +122,6 @@ class CpuCustomNonbondedForce {
RealOpenMM
*
fixedParameters
,
const
std
::
map
<
std
::
string
,
double
>&
globalParameters
,
std
::
vector
<
AlignedArray
<
float
>
>&
threadForce
,
bool
includeForce
,
bool
includeEnergy
,
double
&
totalEnergy
,
double
*
energyParamDerivs
);
private:
class
ComputeForceTask
;
class
ThreadData
;
bool
cutoff
;
...
...
platforms/cpu/include/CpuGBSAOBCForce.h
View file @
9963e51a
/* Portions copyright (c) 2006-201
3
Stanford University and Simbios.
/* Portions copyright (c) 2006-201
7
Stanford University and Simbios.
* Contributors: Pande Group
*
* Permission is hereby granted, free of charge, to any person obtaining
...
...
@@ -36,7 +36,6 @@ namespace OpenMM {
class
CpuGBSAOBCForce
{
public:
class
ComputeTask
;
CpuGBSAOBCForce
();
/**
...
...
platforms/cpu/include/CpuGayBerneForce.h
View file @
9963e51a
...
...
@@ -6,7 +6,7 @@
* Biological Structures at Stanford, funded under the NIH Roadmap for *
* Medical Research, grant U54 GM072970. See https://simtk.org. *
* *
* Portions copyright (c) 2016 Stanford University and the Authors.
*
* Portions copyright (c) 2016
-2017
Stanford University and the Authors. *
* Authors: Peter Eastman *
* Contributors: *
* *
...
...
@@ -45,7 +45,6 @@ namespace OpenMM {
class
CpuGayBerneForce
{
public:
struct
Matrix
;
class
ComputeTask
;
/**
* Constructor.
...
...
platforms/cpu/include/CpuKernels.h
View file @
9963e51a
...
...
@@ -54,8 +54,6 @@ namespace OpenMM {
*/
class
CpuCalcForcesAndEnergyKernel
:
public
CalcForcesAndEnergyKernel
{
public:
class
InitForceTask
;
class
SumForceTask
;
CpuCalcForcesAndEnergyKernel
(
std
::
string
name
,
const
Platform
&
platform
,
CpuPlatform
::
PlatformData
&
data
,
ContextImpl
&
context
);
/**
* Initialize the kernel.
...
...
platforms/cpu/include/CpuLangevinDynamics.h
View file @
9963e51a
/* Portions copyright (c) 2013-201
6
Stanford University and Simbios.
/* Portions copyright (c) 2013-201
7
Stanford University and Simbios.
* Authors: Peter Eastman
* Contributors:
*
...
...
@@ -35,9 +35,6 @@ namespace OpenMM {
class
CpuLangevinDynamics
:
public
ReferenceStochasticDynamics
{
public:
class
Update1Task
;
class
Update2Task
;
class
Update3Task
;
/**
* Constructor.
*
...
...
platforms/cpu/include/CpuNeighborList.h
View file @
9963e51a
...
...
@@ -9,7 +9,7 @@
* Biological Structures at Stanford, funded under the NIH Roadmap for *
* Medical Research, grant U54 GM072970. See https://simtk.org. *
* *
* Portions copyright (c) 2013-201
6
Stanford University and the Authors. *
* Portions copyright (c) 2013-201
7
Stanford University and the Authors. *
* Authors: Peter Eastman *
* Contributors: *
* *
...
...
@@ -45,7 +45,6 @@ namespace OpenMM {
class
OPENMM_EXPORT_CPU
CpuNeighborList
{
public:
class
ThreadTask
;
class
Voxels
;
CpuNeighborList
(
int
blockSize
);
void
computeNeighborList
(
int
numAtoms
,
const
AlignedArray
<
float
>&
atomLocations
,
const
std
::
vector
<
std
::
set
<
int
>
>&
exclusions
,
...
...
platforms/cpu/include/CpuNonbondedForce.h
View file @
9963e51a
/* Portions copyright (c) 2006-201
5
Stanford University and Simbios.
/* Portions copyright (c) 2006-201
7
Stanford University and Simbios.
* Contributors: Pande Group
*
* Permission is hereby granted, free of charge, to any person obtaining
...
...
@@ -39,7 +39,6 @@ namespace OpenMM {
class
CpuNonbondedForce
{
public:
class
ComputeDirectTask
;
/**---------------------------------------------------------------------------------------
...
...
platforms/cpu/include/CpuSETTLE.h
View file @
9963e51a
...
...
@@ -9,7 +9,7 @@
* Biological Structures at Stanford, funded under the NIH Roadmap for *
* Medical Research, grant U54 GM072970. See https://simtk.org. *
* *
* Portions copyright (c) 2013 Stanford University and the Authors.
*
* Portions copyright (c) 2013
-2017
Stanford University and the Authors. *
* Authors: Peter Eastman *
* Contributors: *
* *
...
...
@@ -45,8 +45,6 @@ namespace OpenMM {
*/
class
OPENMM_EXPORT_CPU
CpuSETTLE
:
public
ReferenceConstraintAlgorithm
{
public:
class
ApplyToPositionsTask
;
class
ApplyToVelocitiesTask
;
CpuSETTLE
(
const
System
&
system
,
const
ReferenceSETTLEAlgorithm
&
settle
,
ThreadPool
&
threads
);
~
CpuSETTLE
();
...
...
platforms/cpu/src/CpuBondForce.cpp
View file @
9963e51a
...
...
@@ -6,7 +6,7 @@
* Biological Structures at Stanford, funded under the NIH Roadmap for *
* Medical Research, grant U54 GM072970. See https://simtk.org. *
* *
* Portions copyright (c) 2014-201
6
Stanford University and the Authors. *
* Portions copyright (c) 2014-201
7
Stanford University and the Authors. *
* Authors: Peter Eastman *
* Contributors: *
* *
...
...
@@ -35,25 +35,6 @@
using
namespace
OpenMM
;
using
namespace
std
;
class
CpuBondForce
::
ComputeForceTask
:
public
ThreadPool
::
Task
{
public:
ComputeForceTask
(
CpuBondForce
&
owner
,
vector
<
RealVec
>&
atomCoordinates
,
RealOpenMM
**
parameters
,
vector
<
RealVec
>&
forces
,
vector
<
RealOpenMM
>&
threadEnergy
,
RealOpenMM
*
totalEnergy
,
ReferenceBondIxn
&
referenceBondIxn
)
:
owner
(
owner
),
atomCoordinates
(
atomCoordinates
),
parameters
(
parameters
),
forces
(
forces
),
threadEnergy
(
threadEnergy
),
totalEnergy
(
totalEnergy
),
referenceBondIxn
(
referenceBondIxn
)
{
}
void
execute
(
ThreadPool
&
threads
,
int
threadIndex
)
{
RealOpenMM
*
energy
=
(
totalEnergy
==
NULL
?
NULL
:
&
threadEnergy
[
threadIndex
]);
owner
.
threadComputeForce
(
threads
,
threadIndex
,
atomCoordinates
,
parameters
,
forces
,
energy
,
referenceBondIxn
);
}
CpuBondForce
&
owner
;
vector
<
RealVec
>&
atomCoordinates
;
RealOpenMM
**
parameters
;
vector
<
RealVec
>&
forces
;
vector
<
RealOpenMM
>&
threadEnergy
;
RealOpenMM
*
totalEnergy
;
ReferenceBondIxn
&
referenceBondIxn
;
};
CpuBondForce
::
CpuBondForce
()
{
}
...
...
@@ -188,8 +169,10 @@ void CpuBondForce::calculateForce(vector<RealVec>& atomCoordinates, RealOpenMM**
// Have the worker threads compute their forces.
vector
<
RealOpenMM
>
threadEnergy
(
threads
->
getNumThreads
(),
0
);
ComputeForceTask
task
(
*
this
,
atomCoordinates
,
parameters
,
forces
,
threadEnergy
,
totalEnergy
,
referenceBondIxn
);
threads
->
execute
(
task
);
threads
->
execute
([
&
]
(
ThreadPool
&
threads
,
int
threadIndex
)
{
RealOpenMM
*
energy
=
(
totalEnergy
==
NULL
?
NULL
:
&
threadEnergy
[
threadIndex
]);
threadComputeForce
(
threads
,
threadIndex
,
atomCoordinates
,
parameters
,
forces
,
energy
,
referenceBondIxn
);
});
threads
->
waitForThreads
();
// Compute any "extra" bonds.
...
...
platforms/cpu/src/CpuCustomGBForce.cpp
View file @
9963e51a
/* Portions copyright (c) 2009-201
6
Stanford University and Simbios.
/* Portions copyright (c) 2009-201
7
Stanford University and Simbios.
* Contributors: Peter Eastman
*
* Permission is hereby granted, free of charge, to any person obtaining
...
...
@@ -33,16 +33,6 @@
using
namespace
OpenMM
;
using
namespace
std
;
class
CpuCustomGBForce
::
ComputeForceTask
:
public
ThreadPool
::
Task
{
public:
ComputeForceTask
(
CpuCustomGBForce
&
owner
)
:
owner
(
owner
)
{
}
void
execute
(
ThreadPool
&
threads
,
int
threadIndex
)
{
owner
.
threadComputeForce
(
threads
,
threadIndex
);
}
CpuCustomGBForce
&
owner
;
};
CpuCustomGBForce
::
ThreadData
::
ThreadData
(
int
numAtoms
,
int
numThreads
,
int
threadIndex
,
const
vector
<
Lepton
::
CompiledExpression
>&
valueExpressions
,
const
vector
<
vector
<
Lepton
::
CompiledExpression
>
>&
valueDerivExpressions
,
...
...
@@ -206,7 +196,7 @@ void CpuCustomGBForce::calculateIxn(int numberOfAtoms, float* posq, RealOpenMM**
// Calculate the first computed value.
ComputeForceTask
task
(
*
this
)
;
auto
task
=
[
&
]
(
ThreadPool
&
threads
,
int
threadIndex
)
{
threadComputeForce
(
threads
,
threadIndex
);
}
;
gmx_atomic_set
(
&
counter
,
0
);
threads
.
execute
(
task
);
threads
.
waitForThreads
();
...
...
platforms/cpu/src/CpuCustomManyParticleForce.cpp
View file @
9963e51a
/* Portions copyright (c) 2009-201
4
Stanford University and Simbios.
/* Portions copyright (c) 2009-201
7
Stanford University and Simbios.
* Contributors: Peter Eastman
*
* Permission is hereby granted, free of charge, to any person obtaining
...
...
@@ -37,16 +37,6 @@
using
namespace
OpenMM
;
using
namespace
std
;
class
CpuCustomManyParticleForce
::
ComputeForceTask
:
public
ThreadPool
::
Task
{
public:
ComputeForceTask
(
CpuCustomManyParticleForce
&
owner
)
:
owner
(
owner
)
{
}
void
execute
(
ThreadPool
&
threads
,
int
threadIndex
)
{
owner
.
threadComputeForce
(
threads
,
threadIndex
);
}
CpuCustomManyParticleForce
&
owner
;
};
CpuCustomManyParticleForce
::
CpuCustomManyParticleForce
(
const
CustomManyParticleForce
&
force
,
ThreadPool
&
threads
)
:
threads
(
threads
),
useCutoff
(
false
),
usePeriodic
(
false
),
neighborList
(
NULL
)
{
numParticles
=
force
.
getNumParticles
();
...
...
@@ -141,8 +131,7 @@ void CpuCustomManyParticleForce::calculateIxn(AlignedArray<float>& posq, RealOpe
// Signal the threads to start running and wait for them to finish.
ComputeForceTask
task
(
*
this
);
threads
.
execute
(
task
);
threads
.
execute
([
&
]
(
ThreadPool
&
threads
,
int
threadIndex
)
{
threadComputeForce
(
threads
,
threadIndex
);
});
threads
.
waitForThreads
();
// Combine the energies from all the threads.
...
...
Prev
1
2
Next
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