Commit 3c8adf0c authored by Peter Eastman's avatar Peter Eastman
Browse files

OpenCL and CUDA tests are run three times, once for each precision model

parent 6f4ec6b6
...@@ -45,6 +45,8 @@ ...@@ -45,6 +45,8 @@
using namespace OpenMM; using namespace OpenMM;
using namespace std; using namespace std;
CudaPlatform platform;
void testHarmonicBonds() { void testHarmonicBonds() {
const int numParticles = 10; const int numParticles = 10;
System system; System system;
...@@ -64,7 +66,6 @@ void testHarmonicBonds() { ...@@ -64,7 +66,6 @@ void testHarmonicBonds() {
// Minimize it and check that all bonds are at their equilibrium distances. // Minimize it and check that all bonds are at their equilibrium distances.
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
CudaPlatform platform;
Context context(system, integrator, platform); Context context(system, integrator, platform);
context.setPositions(positions); context.setPositions(positions);
LocalEnergyMinimizer::minimize(context, 1e-5); LocalEnergyMinimizer::minimize(context, 1e-5);
...@@ -105,7 +106,6 @@ void testLargeSystem() { ...@@ -105,7 +106,6 @@ void testLargeSystem() {
// Minimize it and verify that the energy has decreased. // Minimize it and verify that the energy has decreased.
CudaPlatform platform;
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
Context context(system, integrator, platform); Context context(system, integrator, platform);
context.setPositions(positions); context.setPositions(positions);
...@@ -167,7 +167,6 @@ void testVirtualSites() { ...@@ -167,7 +167,6 @@ void testVirtualSites() {
// Minimize it and verify that the energy has decreased. // Minimize it and verify that the energy has decreased.
CudaPlatform platform;
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
Context context(system, integrator, platform); Context context(system, integrator, platform);
context.setPositions(positions); context.setPositions(positions);
...@@ -199,8 +198,10 @@ void testVirtualSites() { ...@@ -199,8 +198,10 @@ void testVirtualSites() {
ASSERT(forceNorm < 3*tolerance); ASSERT(forceNorm < 3*tolerance);
} }
int main() { int main(int argc, char* argv[]) {
try { try {
if (argc > 1)
platform.setPropertyDefaultValue("CudaPrecision", string(argv[1]));
testHarmonicBonds(); testHarmonicBonds();
testLargeSystem(); testLargeSystem();
testVirtualSites(); testVirtualSites();
......
...@@ -49,8 +49,9 @@ ...@@ -49,8 +49,9 @@
using namespace OpenMM; using namespace OpenMM;
using namespace std; using namespace std;
CudaPlatform platform;
void testChangingBoxSize() { void testChangingBoxSize() {
CudaPlatform platform;
System system; System system;
system.setDefaultPeriodicBoxVectors(Vec3(4, 0, 0), Vec3(0, 5, 0), Vec3(0, 0, 6)); system.setDefaultPeriodicBoxVectors(Vec3(4, 0, 0), Vec3(0, 5, 0), Vec3(0, 0, 6));
system.addParticle(1.0); system.addParticle(1.0);
...@@ -100,7 +101,6 @@ void testIdealGas() { ...@@ -100,7 +101,6 @@ void testIdealGas() {
// Create a gas of noninteracting particles. // Create a gas of noninteracting particles.
CudaPlatform platform;
System system; System system;
system.setDefaultPeriodicBoxVectors(Vec3(initialLength, 0, 0), Vec3(0, 0.5*initialLength, 0), Vec3(0, 0, 2*initialLength)); system.setDefaultPeriodicBoxVectors(Vec3(initialLength, 0, 0), Vec3(0, 0.5*initialLength, 0), Vec3(0, 0, 2*initialLength));
vector<Vec3> positions(numParticles); vector<Vec3> positions(numParticles);
...@@ -146,7 +146,6 @@ void testRandomSeed() { ...@@ -146,7 +146,6 @@ void testRandomSeed() {
const int numParticles = 8; const int numParticles = 8;
const double temp = 100.0; const double temp = 100.0;
const double pressure = 1.5; const double pressure = 1.5;
CudaPlatform platform;
System system; System system;
system.setDefaultPeriodicBoxVectors(Vec3(8, 0, 0), Vec3(0, 8, 0), Vec3(0, 0, 8)); system.setDefaultPeriodicBoxVectors(Vec3(8, 0, 0), Vec3(0, 8, 0), Vec3(0, 0, 8));
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
...@@ -219,7 +218,6 @@ void testWater() { ...@@ -219,7 +218,6 @@ void testWater() {
// Create a box of SPC water molecules. // Create a box of SPC water molecules.
CudaPlatform platform;
System system; System system;
system.setDefaultPeriodicBoxVectors(Vec3(gridSize*spacing, 0, 0), Vec3(0, gridSize*spacing, 0), Vec3(0, 0, gridSize*spacing)); system.setDefaultPeriodicBoxVectors(Vec3(gridSize*spacing, 0, 0), Vec3(0, gridSize*spacing, 0), Vec3(0, 0, gridSize*spacing));
NonbondedForce* nonbonded = new NonbondedForce(); NonbondedForce* nonbonded = new NonbondedForce();
...@@ -273,8 +271,10 @@ void testWater() { ...@@ -273,8 +271,10 @@ void testWater() {
ASSERT_USUALLY_EQUAL_TOL(1.0, density, 0.02); ASSERT_USUALLY_EQUAL_TOL(1.0, density, 0.02);
} }
int main() { int main(int argc, char* argv[]) {
try { try {
if (argc > 1)
platform.setPropertyDefaultValue("CudaPrecision", string(argv[1]));
testChangingBoxSize(); testChangingBoxSize();
testIdealGas(); testIdealGas();
testRandomSeed(); testRandomSeed();
......
...@@ -52,6 +52,8 @@ ...@@ -52,6 +52,8 @@
using namespace OpenMM; using namespace OpenMM;
using namespace std; using namespace std;
CudaPlatform platform;
const double TOL = 1e-4; const double TOL = 1e-4;
void testForces() { void testForces() {
...@@ -78,9 +80,8 @@ void testForces() { ...@@ -78,9 +80,8 @@ void testForces() {
ReferencePlatform ref; ReferencePlatform ref;
VerletIntegrator integrator1(0.01); VerletIntegrator integrator1(0.01);
Context context1(system, integrator1, ref); Context context1(system, integrator1, ref);
CudaPlatform cl;
VerletIntegrator integrator2(0.01); VerletIntegrator integrator2(0.01);
Context context2(system, integrator2, cl); Context context2(system, integrator2, platform);
OpenMM_SFMT::SFMT sfmt; OpenMM_SFMT::SFMT sfmt;
init_gen_rand(0, sfmt); init_gen_rand(0, sfmt);
vector<Vec3> positions(numParticles); vector<Vec3> positions(numParticles);
...@@ -97,8 +98,10 @@ void testForces() { ...@@ -97,8 +98,10 @@ void testForces() {
ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), TOL); ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), TOL);
} }
int main() { int main(int argc, char* argv[]) {
try { try {
if (argc > 1)
platform.setPropertyDefaultValue("CudaPrecision", string(argv[1]));
testForces(); testForces();
} }
catch(const exception& e) { catch(const exception& e) {
......
...@@ -53,10 +53,11 @@ ...@@ -53,10 +53,11 @@
using namespace OpenMM; using namespace OpenMM;
using namespace std; using namespace std;
CudaPlatform platform;
const double TOL = 1e-5; const double TOL = 1e-5;
void testCoulomb() { void testCoulomb() {
CudaPlatform platform;
System system; System system;
system.addParticle(1.0); system.addParticle(1.0);
system.addParticle(1.0); system.addParticle(1.0);
...@@ -79,7 +80,6 @@ void testCoulomb() { ...@@ -79,7 +80,6 @@ void testCoulomb() {
} }
void testLJ() { void testLJ() {
CudaPlatform platform;
System system; System system;
system.addParticle(1.0); system.addParticle(1.0);
system.addParticle(1.0); system.addParticle(1.0);
...@@ -104,7 +104,6 @@ void testLJ() { ...@@ -104,7 +104,6 @@ void testLJ() {
} }
void testExclusionsAnd14() { void testExclusionsAnd14() {
CudaPlatform platform;
System system; System system;
NonbondedForce* nonbonded = new NonbondedForce(); NonbondedForce* nonbonded = new NonbondedForce();
for (int i = 0; i < 5; ++i) { for (int i = 0; i < 5; ++i) {
...@@ -192,7 +191,6 @@ void testExclusionsAnd14() { ...@@ -192,7 +191,6 @@ void testExclusionsAnd14() {
} }
void testCutoff() { void testCutoff() {
CudaPlatform platform;
System system; System system;
system.addParticle(1.0); system.addParticle(1.0);
system.addParticle(1.0); system.addParticle(1.0);
...@@ -229,7 +227,6 @@ void testCutoff() { ...@@ -229,7 +227,6 @@ void testCutoff() {
} }
void testCutoff14() { void testCutoff14() {
CudaPlatform platform;
System system; System system;
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
NonbondedForce* nonbonded = new NonbondedForce(); NonbondedForce* nonbonded = new NonbondedForce();
...@@ -325,7 +322,6 @@ void testCutoff14() { ...@@ -325,7 +322,6 @@ void testCutoff14() {
} }
void testPeriodic() { void testPeriodic() {
CudaPlatform platform;
System system; System system;
system.addParticle(1.0); system.addParticle(1.0);
system.addParticle(1.0); system.addParticle(1.0);
...@@ -366,7 +362,6 @@ void testLargeSystem() { ...@@ -366,7 +362,6 @@ void testLargeSystem() {
const double cutoff = 2.0; const double cutoff = 2.0;
const double boxSize = 20.0; const double boxSize = 20.0;
const double tol = 2e-3; const double tol = 2e-3;
CudaPlatform cl;
ReferencePlatform reference; ReferencePlatform reference;
System system; System system;
for (int i = 0; i < numParticles; i++) for (int i = 0; i < numParticles; i++)
...@@ -404,7 +399,7 @@ void testLargeSystem() { ...@@ -404,7 +399,7 @@ void testLargeSystem() {
system.addForce(bonds); system.addForce(bonds);
VerletIntegrator integrator1(0.01); VerletIntegrator integrator1(0.01);
VerletIntegrator integrator2(0.01); VerletIntegrator integrator2(0.01);
Context cuContext(system, integrator1, cl); Context cuContext(system, integrator1, platform);
Context referenceContext(system, integrator2, reference); Context referenceContext(system, integrator2, reference);
cuContext.setPositions(positions); cuContext.setPositions(positions);
cuContext.setVelocities(velocities); cuContext.setVelocities(velocities);
...@@ -450,7 +445,6 @@ void testBlockInteractions(bool periodic) { ...@@ -450,7 +445,6 @@ void testBlockInteractions(bool periodic) {
const int numParticles = blockSize*numBlocks; const int numParticles = blockSize*numBlocks;
const double cutoff = 1.0; const double cutoff = 1.0;
const double boxSize = (periodic ? 5.1 : 1.1); const double boxSize = (periodic ? 5.1 : 1.1);
CudaPlatform cl;
System system; System system;
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
NonbondedForce* nonbonded = new NonbondedForce(); NonbondedForce* nonbonded = new NonbondedForce();
...@@ -467,7 +461,7 @@ void testBlockInteractions(bool periodic) { ...@@ -467,7 +461,7 @@ void testBlockInteractions(bool periodic) {
nonbonded->setCutoffDistance(cutoff); nonbonded->setCutoffDistance(cutoff);
system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize));
system.addForce(nonbonded); system.addForce(nonbonded);
Context context(system, integrator, cl); Context context(system, integrator, platform);
context.setPositions(positions); context.setPositions(positions);
ContextImpl* contextImpl = *reinterpret_cast<ContextImpl**>(&context); ContextImpl* contextImpl = *reinterpret_cast<ContextImpl**>(&context);
CudaPlatform::PlatformData& data = *static_cast<CudaPlatform::PlatformData*>(contextImpl->getPlatformData()); CudaPlatform::PlatformData& data = *static_cast<CudaPlatform::PlatformData*>(contextImpl->getPlatformData());
...@@ -628,7 +622,6 @@ void testDispersionCorrection() { ...@@ -628,7 +622,6 @@ void testDispersionCorrection() {
int numParticles = gridSize*gridSize*gridSize; int numParticles = gridSize*gridSize*gridSize;
double boxSize = gridSize*0.5; double boxSize = gridSize*0.5;
double cutoff = boxSize/3; double cutoff = boxSize/3;
CudaPlatform platform;
System system; System system;
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
NonbondedForce* nonbonded = new NonbondedForce(); NonbondedForce* nonbonded = new NonbondedForce();
...@@ -695,7 +688,6 @@ void testChangingParameters() { ...@@ -695,7 +688,6 @@ void testChangingParameters() {
const double cutoff = 2.0; const double cutoff = 2.0;
const double boxSize = 20.0; const double boxSize = 20.0;
const double tol = 2e-3; const double tol = 2e-3;
CudaPlatform cl;
ReferencePlatform reference; ReferencePlatform reference;
System system; System system;
for (int i = 0; i < numParticles; i++) for (int i = 0; i < numParticles; i++)
...@@ -728,7 +720,7 @@ void testChangingParameters() { ...@@ -728,7 +720,7 @@ void testChangingParameters() {
VerletIntegrator integrator1(0.01); VerletIntegrator integrator1(0.01);
VerletIntegrator integrator2(0.01); VerletIntegrator integrator2(0.01);
Context cuContext(system, integrator1, cl); Context cuContext(system, integrator1, platform);
Context referenceContext(system, integrator2, reference); Context referenceContext(system, integrator2, reference);
cuContext.setPositions(positions); cuContext.setPositions(positions);
referenceContext.setPositions(positions); referenceContext.setPositions(positions);
...@@ -761,7 +753,6 @@ void testChangingParameters() { ...@@ -761,7 +753,6 @@ void testChangingParameters() {
} }
void testParallelComputation(bool useCutoff) { void testParallelComputation(bool useCutoff) {
CudaPlatform platform;
System system; System system;
const int numParticles = 200; const int numParticles = 200;
for (int i = 0; i < numParticles; i++) for (int i = 0; i < numParticles; i++)
...@@ -820,8 +811,10 @@ void testParallelComputation(bool useCutoff) { ...@@ -820,8 +811,10 @@ void testParallelComputation(bool useCutoff) {
ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5);
} }
int main() { int main(int argc, char* argv[]) {
try { try {
if (argc > 1)
platform.setPropertyDefaultValue("CudaPrecision", string(argv[1]));
testCoulomb(); testCoulomb();
testLJ(); testLJ();
testExclusionsAnd14(); testExclusionsAnd14();
......
...@@ -46,10 +46,11 @@ ...@@ -46,10 +46,11 @@
using namespace OpenMM; using namespace OpenMM;
using namespace std; using namespace std;
CudaPlatform platform;
const double TOL = 1e-5; const double TOL = 1e-5;
void testPeriodicTorsions() { void testPeriodicTorsions() {
CudaPlatform platform;
System system; System system;
system.addParticle(1.0); system.addParticle(1.0);
system.addParticle(1.0); system.addParticle(1.0);
...@@ -93,7 +94,6 @@ void testPeriodicTorsions() { ...@@ -93,7 +94,6 @@ void testPeriodicTorsions() {
} }
void testParallelComputation() { void testParallelComputation() {
CudaPlatform platform;
System system; System system;
const int numParticles = 200; const int numParticles = 200;
for (int i = 0; i < numParticles; i++) for (int i = 0; i < numParticles; i++)
...@@ -121,8 +121,10 @@ void testParallelComputation() { ...@@ -121,8 +121,10 @@ void testParallelComputation() {
ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5);
} }
int main() { int main(int argc, char* argv[]) {
try { try {
if (argc > 1)
platform.setPropertyDefaultValue("CudaPrecision", string(argv[1]));
testPeriodicTorsions(); testPeriodicTorsions();
testParallelComputation(); testParallelComputation();
} }
......
...@@ -46,10 +46,11 @@ ...@@ -46,10 +46,11 @@
using namespace OpenMM; using namespace OpenMM;
using namespace std; using namespace std;
CudaPlatform platform;
const double TOL = 1e-5; const double TOL = 1e-5;
void testRBTorsions() { void testRBTorsions() {
CudaPlatform platform;
System system; System system;
system.addParticle(1.0); system.addParticle(1.0);
system.addParticle(1.0); system.addParticle(1.0);
...@@ -112,7 +113,6 @@ void testRBTorsions() { ...@@ -112,7 +113,6 @@ void testRBTorsions() {
} }
void testParallelComputation() { void testParallelComputation() {
CudaPlatform platform;
System system; System system;
const int numParticles = 200; const int numParticles = 200;
for (int i = 0; i < numParticles; i++) for (int i = 0; i < numParticles; i++)
...@@ -140,8 +140,10 @@ void testParallelComputation() { ...@@ -140,8 +140,10 @@ void testParallelComputation() {
ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5);
} }
int main() { int main(int argc, char* argv[]) {
try { try {
if (argc > 1)
platform.setPropertyDefaultValue("CudaPrecision", string(argv[1]));
testRBTorsions(); testRBTorsions();
testParallelComputation(); testParallelComputation();
} }
......
...@@ -47,13 +47,14 @@ ...@@ -47,13 +47,14 @@
using namespace OpenMM; using namespace OpenMM;
using namespace std; using namespace std;
CudaPlatform platform;
void testGaussian() { void testGaussian() {
int numAtoms = 5000; int numAtoms = 5000;
System system; System system;
for (int i = 0; i < numAtoms; i++) for (int i = 0; i < numAtoms; i++)
system.addParticle(1.0); system.addParticle(1.0);
CudaPlatform platform; CudaPlatform::PlatformData platformData(system, "", "true", platform.getPropertyDefaultValue("CudaPrecision"),
CudaPlatform::PlatformData platformData(system, "", "true", "single",
platform.getPropertyDefaultValue(CudaPlatform::CudaCompiler()), platform.getPropertyDefaultValue(CudaPlatform::CudaTempDirectory())); platform.getPropertyDefaultValue(CudaPlatform::CudaCompiler()), platform.getPropertyDefaultValue(CudaPlatform::CudaTempDirectory()));
CudaContext& context = *platformData.contexts[0]; CudaContext& context = *platformData.contexts[0];
context.initialize(); context.initialize();
...@@ -93,7 +94,6 @@ void testRandomVelocities() { ...@@ -93,7 +94,6 @@ void testRandomVelocities() {
const int numParticles = 10000; const int numParticles = 10000;
const double temperture = 100.0; const double temperture = 100.0;
CudaPlatform platform;
System system; System system;
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
for (int i = 0; i < numParticles; ++i) for (int i = 0; i < numParticles; ++i)
...@@ -131,8 +131,10 @@ void testRandomVelocities() { ...@@ -131,8 +131,10 @@ void testRandomVelocities() {
ASSERT_USUALLY_EQUAL_TOL(expected, ke, 4/sqrt(numParticles)); ASSERT_USUALLY_EQUAL_TOL(expected, ke, 4/sqrt(numParticles));
} }
int main() { int main(int argc, char* argv[]) {
try { try {
if (argc > 1)
platform.setPropertyDefaultValue("CudaPrecision", string(argv[1]));
testGaussian(); testGaussian();
testRandomVelocities(); testRandomVelocities();
} }
......
...@@ -47,12 +47,13 @@ ...@@ -47,12 +47,13 @@
using namespace OpenMM; using namespace OpenMM;
using namespace std; using namespace std;
CudaPlatform platform;
void testConstraints() { void testConstraints() {
const int numMolecules = 10; const int numMolecules = 10;
const int numParticles = numMolecules*3; const int numParticles = numMolecules*3;
const int numConstraints = numMolecules*3; const int numConstraints = numMolecules*3;
const double temp = 100.0; const double temp = 100.0;
CudaPlatform platform;
System system; System system;
LangevinIntegrator integrator(temp, 2.0, 0.001); LangevinIntegrator integrator(temp, 2.0, 0.001);
integrator.setConstraintTolerance(1e-5); integrator.setConstraintTolerance(1e-5);
...@@ -103,8 +104,10 @@ void testConstraints() { ...@@ -103,8 +104,10 @@ void testConstraints() {
} }
} }
int main() { int main(int argc, char* argv[]) {
try { try {
if (argc > 1)
platform.setPropertyDefaultValue("CudaPrecision", string(argv[1]));
testConstraints(); testConstraints();
} }
catch(const exception& e) { catch(const exception& e) {
......
...@@ -46,6 +46,8 @@ ...@@ -46,6 +46,8 @@
using namespace OpenMM; using namespace OpenMM;
using namespace std; using namespace std;
CudaPlatform platform;
class SortTrait : public CudaSort::SortTrait { class SortTrait : public CudaSort::SortTrait {
int getDataSize() const {return 4;} int getDataSize() const {return 4;}
int getKeySize() const {return 4;} int getKeySize() const {return 4;}
...@@ -62,8 +64,7 @@ void verifySorting(vector<float> array) { ...@@ -62,8 +64,7 @@ void verifySorting(vector<float> array) {
System system; System system;
system.addParticle(0.0); system.addParticle(0.0);
CudaPlatform platform; CudaPlatform::PlatformData platformData(system, "", "true", platform.getPropertyDefaultValue("CudaPrecision"),
CudaPlatform::PlatformData platformData(system, "", "true", "single",
platform.getPropertyDefaultValue(CudaPlatform::CudaCompiler()), platform.getPropertyDefaultValue(CudaPlatform::CudaTempDirectory())); platform.getPropertyDefaultValue(CudaPlatform::CudaCompiler()), platform.getPropertyDefaultValue(CudaPlatform::CudaTempDirectory()));
CudaContext& context = *platformData.contexts[0]; CudaContext& context = *platformData.contexts[0];
context.initialize(); context.initialize();
...@@ -108,8 +109,10 @@ void testLogValues() ...@@ -108,8 +109,10 @@ void testLogValues()
verifySorting(array); verifySorting(array);
} }
int main() { int main(int argc, char* argv[]) {
try { try {
if (argc > 1)
platform.setPropertyDefaultValue("CudaPrecision", string(argv[1]));
testUniformValues(); testUniformValues();
testLogValues(); testLogValues();
} }
......
...@@ -48,10 +48,11 @@ ...@@ -48,10 +48,11 @@
using namespace OpenMM; using namespace OpenMM;
using namespace std; using namespace std;
CudaPlatform platform;
const double TOL = 1e-5; const double TOL = 1e-5;
void testSingleBond() { void testSingleBond() {
CudaPlatform platform;
System system; System system;
system.addParticle(2.0); system.addParticle(2.0);
system.addParticle(2.0); system.addParticle(2.0);
...@@ -97,7 +98,6 @@ void testSingleBond() { ...@@ -97,7 +98,6 @@ void testSingleBond() {
void testTemperature() { void testTemperature() {
const int numParticles = 8; const int numParticles = 8;
const double temp = 100.0; const double temp = 100.0;
CudaPlatform platform;
System system; System system;
VariableLangevinIntegrator integrator(temp, 2.0, 1e-4); VariableLangevinIntegrator integrator(temp, 2.0, 1e-4);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
...@@ -132,7 +132,6 @@ void testTemperature() { ...@@ -132,7 +132,6 @@ void testTemperature() {
void testConstraints() { void testConstraints() {
const int numParticles = 8; const int numParticles = 8;
const double temp = 100.0; const double temp = 100.0;
CudaPlatform platform;
System system; System system;
VariableLangevinIntegrator integrator(temp, 2.0, 1e-5); VariableLangevinIntegrator integrator(temp, 2.0, 1e-5);
integrator.setConstraintTolerance(1e-5); integrator.setConstraintTolerance(1e-5);
...@@ -175,7 +174,6 @@ void testConstraints() { ...@@ -175,7 +174,6 @@ void testConstraints() {
void testRandomSeed() { void testRandomSeed() {
const int numParticles = 8; const int numParticles = 8;
const double temp = 100.0; const double temp = 100.0;
CudaPlatform platform;
System system; System system;
VariableLangevinIntegrator integrator(temp, 2.0, 1e-5); VariableLangevinIntegrator integrator(temp, 2.0, 1e-5);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
...@@ -230,8 +228,10 @@ void testRandomSeed() { ...@@ -230,8 +228,10 @@ void testRandomSeed() {
} }
} }
int main() { int main(int argc, char* argv[]) {
try { try {
if (argc > 1)
platform.setPropertyDefaultValue("CudaPrecision", string(argv[1]));
testSingleBond(); testSingleBond();
testTemperature(); testTemperature();
testConstraints(); testConstraints();
......
...@@ -48,10 +48,11 @@ ...@@ -48,10 +48,11 @@
using namespace OpenMM; using namespace OpenMM;
using namespace std; using namespace std;
CudaPlatform platform;
const double TOL = 1e-5; const double TOL = 1e-5;
void testSingleBond() { void testSingleBond() {
CudaPlatform platform;
System system; System system;
system.addParticle(2.0); system.addParticle(2.0);
system.addParticle(2.0); system.addParticle(2.0);
...@@ -89,7 +90,6 @@ void testConstraints() { ...@@ -89,7 +90,6 @@ void testConstraints() {
const int numParticles = 8; const int numParticles = 8;
const int numConstraints = 5; const int numConstraints = 5;
const double temp = 100.0; const double temp = 100.0;
CudaPlatform platform;
System system; System system;
VariableVerletIntegrator integrator(1e-5); VariableVerletIntegrator integrator(1e-5);
integrator.setConstraintTolerance(1e-5); integrator.setConstraintTolerance(1e-5);
...@@ -150,8 +150,6 @@ void testConstraints() { ...@@ -150,8 +150,6 @@ void testConstraints() {
void testConstrainedClusters() { void testConstrainedClusters() {
const int numParticles = 7; const int numParticles = 7;
const double temp = 500.0;
CudaPlatform platform;
System system; System system;
VariableVerletIntegrator integrator(1e-5); VariableVerletIntegrator integrator(1e-5);
integrator.setConstraintTolerance(1e-5); integrator.setConstraintTolerance(1e-5);
...@@ -213,8 +211,10 @@ void testConstrainedClusters() { ...@@ -213,8 +211,10 @@ void testConstrainedClusters() {
ASSERT(context.getState(State::Positions).getTime() > 0.1); ASSERT(context.getState(State::Positions).getTime() > 0.1);
} }
int main() { int main(int argc, char* argv[]) {
try { try {
if (argc > 1)
platform.setPropertyDefaultValue("CudaPrecision", string(argv[1]));
testSingleBond(); testSingleBond();
testConstraints(); testConstraints();
testConstrainedClusters(); testConstrainedClusters();
......
...@@ -48,10 +48,11 @@ ...@@ -48,10 +48,11 @@
using namespace OpenMM; using namespace OpenMM;
using namespace std; using namespace std;
CudaPlatform platform;
const double TOL = 1e-5; const double TOL = 1e-5;
void testSingleBond() { void testSingleBond() {
CudaPlatform platform;
System system; System system;
system.addParticle(2.0); system.addParticle(2.0);
system.addParticle(2.0); system.addParticle(2.0);
...@@ -90,7 +91,6 @@ void testConstraints() { ...@@ -90,7 +91,6 @@ void testConstraints() {
const int numParticles = 8; const int numParticles = 8;
const int numConstraints = 5; const int numConstraints = 5;
const double temp = 100.0; const double temp = 100.0;
CudaPlatform platform;
System system; System system;
VerletIntegrator integrator(0.001); VerletIntegrator integrator(0.001);
integrator.setConstraintTolerance(1e-5); integrator.setConstraintTolerance(1e-5);
...@@ -143,8 +143,6 @@ void testConstraints() { ...@@ -143,8 +143,6 @@ void testConstraints() {
void testConstrainedClusters() { void testConstrainedClusters() {
const int numParticles = 7; const int numParticles = 7;
const double temp = 500.0;
CudaPlatform platform;
System system; System system;
VerletIntegrator integrator(0.001); VerletIntegrator integrator(0.001);
integrator.setConstraintTolerance(1e-5); integrator.setConstraintTolerance(1e-5);
...@@ -205,8 +203,10 @@ void testConstrainedClusters() { ...@@ -205,8 +203,10 @@ void testConstrainedClusters() {
} }
} }
int main() { int main(int argc, char* argv[]) {
try { try {
if (argc > 1)
platform.setPropertyDefaultValue("CudaPrecision", string(argv[1]));
testSingleBond(); testSingleBond();
testConstraints(); testConstraints();
testConstrainedClusters(); testConstrainedClusters();
......
...@@ -50,11 +50,12 @@ ...@@ -50,11 +50,12 @@
using namespace OpenMM; using namespace OpenMM;
using namespace std; using namespace std;
CudaPlatform platform;
/** /**
* Check that massless particles are handled correctly. * Check that massless particles are handled correctly.
*/ */
void testMasslessParticle() { void testMasslessParticle() {
CudaPlatform platform;
System system; System system;
system.addParticle(0.0); system.addParticle(0.0);
system.addParticle(1.0); system.addParticle(1.0);
...@@ -91,7 +92,6 @@ void testMasslessParticle() { ...@@ -91,7 +92,6 @@ void testMasslessParticle() {
* Test a TwoParticleAverageSite virtual site. * Test a TwoParticleAverageSite virtual site.
*/ */
void testTwoParticleAverage() { void testTwoParticleAverage() {
CudaPlatform platform;
System system; System system;
system.addParticle(1.0); system.addParticle(1.0);
system.addParticle(1.0); system.addParticle(1.0);
...@@ -128,7 +128,6 @@ void testTwoParticleAverage() { ...@@ -128,7 +128,6 @@ void testTwoParticleAverage() {
* Test a ThreeParticleAverageSite virtual site. * Test a ThreeParticleAverageSite virtual site.
*/ */
void testThreeParticleAverage() { void testThreeParticleAverage() {
CudaPlatform platform;
System system; System system;
system.addParticle(1.0); system.addParticle(1.0);
system.addParticle(1.0); system.addParticle(1.0);
...@@ -170,7 +169,6 @@ void testThreeParticleAverage() { ...@@ -170,7 +169,6 @@ void testThreeParticleAverage() {
* Test an OutOfPlaneSite virtual site. * Test an OutOfPlaneSite virtual site.
*/ */
void testOutOfPlane() { void testOutOfPlane() {
CudaPlatform platform;
System system; System system;
system.addParticle(1.0); system.addParticle(1.0);
system.addParticle(1.0); system.addParticle(1.0);
...@@ -220,7 +218,6 @@ void testOutOfPlane() { ...@@ -220,7 +218,6 @@ void testOutOfPlane() {
* when using virtual sites. * when using virtual sites.
*/ */
void testConservationLaws() { void testConservationLaws() {
CudaPlatform platform;
System system; System system;
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
system.addForce(forceField); system.addForce(forceField);
...@@ -329,7 +326,6 @@ void testConservationLaws() { ...@@ -329,7 +326,6 @@ void testConservationLaws() {
void testReordering() { void testReordering() {
const double cutoff = 2.0; const double cutoff = 2.0;
const double boxSize = 20.0; const double boxSize = 20.0;
CudaPlatform platform;
System system; System system;
NonbondedForce* nonbonded = new NonbondedForce(); NonbondedForce* nonbonded = new NonbondedForce();
system.addForce(nonbonded); system.addForce(nonbonded);
...@@ -430,8 +426,10 @@ void testReordering() { ...@@ -430,8 +426,10 @@ void testReordering() {
} }
} }
int main() { int main(int argc, char* argv[]) {
try { try {
if (argc > 1)
platform.setPropertyDefaultValue("CudaPrecision", string(argv[1]));
testMasslessParticle(); testMasslessParticle();
testTwoParticleAverage(); testTwoParticleAverage();
testThreeParticleAverage(); testThreeParticleAverage();
......
...@@ -7,6 +7,8 @@ ENABLE_TESTING() ...@@ -7,6 +7,8 @@ ENABLE_TESTING()
# INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/../FindOpenCL.cmake) # INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/../FindOpenCL.cmake)
INCLUDE_DIRECTORIES(${OPENCL_INCLUDE_DIR}) INCLUDE_DIRECTORIES(${OPENCL_INCLUDE_DIR})
SET(OPENMM_BUILD_OPENCL_DOUBLE_PRECISION_TESTS TRUE CACHE BOOL "Whether to build double precision versions of OpenCL test cases")
SET( INCLUDE_SERIALIZATION FALSE ) SET( INCLUDE_SERIALIZATION FALSE )
#SET( INCLUDE_SERIALIZATION TRUE ) #SET( INCLUDE_SERIALIZATION TRUE )
...@@ -53,7 +55,11 @@ FOREACH(TEST_PROG ${TEST_PROGS}) ...@@ -53,7 +55,11 @@ FOREACH(TEST_PROG ${TEST_PROGS})
ENDIF( INCLUDE_SERIALIZATION ) ENDIF( INCLUDE_SERIALIZATION )
ENDIF( ${TEST_ROOT} STREQUAL "TestOpenCLGBSAOBCForce2" ) ENDIF( ${TEST_ROOT} STREQUAL "TestOpenCLGBSAOBCForce2" )
ADD_TEST(${TEST_ROOT} ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT}) ADD_TEST(${TEST_ROOT}Single ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT} single)
IF (OPENMM_BUILD_OPENCL_DOUBLE_PRECISION_TESTS)
ADD_TEST(${TEST_ROOT}Mixed ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT} mixed)
ADD_TEST(${TEST_ROOT}Double ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT} double)
ENDIF(OPENMM_BUILD_OPENCL_DOUBLE_PRECISION_TESTS)
# Link with static library # Link with static library
# SET(TEST_STATIC ${TEST_ROOT}Static) # SET(TEST_STATIC ${TEST_ROOT}Static)
......
...@@ -48,12 +48,13 @@ ...@@ -48,12 +48,13 @@
using namespace OpenMM; using namespace OpenMM;
using namespace std; using namespace std;
OpenCLPlatform platform;
void testTemperature() { void testTemperature() {
const int numParticles = 8; const int numParticles = 8;
const double temp = 100.0; const double temp = 100.0;
const double collisionFreq = 10.0; const double collisionFreq = 10.0;
const int numSteps = 10000; const int numSteps = 10000;
OpenCLPlatform platform;
System system; System system;
VerletIntegrator integrator(0.005); VerletIntegrator integrator(0.005);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
...@@ -92,7 +93,6 @@ void testConstraints() { ...@@ -92,7 +93,6 @@ void testConstraints() {
const double temp = 100.0; const double temp = 100.0;
const double collisionFreq = 10.0; const double collisionFreq = 10.0;
const int numSteps = 10000; const int numSteps = 10000;
OpenCLPlatform platform;
System system; System system;
VerletIntegrator integrator(0.005); VerletIntegrator integrator(0.005);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
...@@ -144,7 +144,6 @@ void testRandomSeed() { ...@@ -144,7 +144,6 @@ void testRandomSeed() {
const int numParticles = 8; const int numParticles = 8;
const double temp = 100.0; const double temp = 100.0;
const double collisionFreq = 10.0; const double collisionFreq = 10.0;
OpenCLPlatform platform;
System system; System system;
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
...@@ -201,8 +200,10 @@ void testRandomSeed() { ...@@ -201,8 +200,10 @@ void testRandomSeed() {
} }
} }
int main() { int main(int argc, char* argv[]) {
try { try {
if (argc > 1)
platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1]));
testTemperature(); testTemperature();
testConstraints(); testConstraints();
testRandomSeed(); testRandomSeed();
......
...@@ -51,10 +51,11 @@ ...@@ -51,10 +51,11 @@
using namespace OpenMM; using namespace OpenMM;
using namespace std; using namespace std;
OpenCLPlatform platform;
const double TOL = 1e-5; const double TOL = 1e-5;
void testSingleBond() { void testSingleBond() {
OpenCLPlatform platform;
System system; System system;
system.addParticle(2.0); system.addParticle(2.0);
system.addParticle(2.0); system.addParticle(2.0);
...@@ -91,7 +92,6 @@ void testTemperature() { ...@@ -91,7 +92,6 @@ void testTemperature() {
const int numParticles = 8; const int numParticles = 8;
const int numBonds = numParticles-1; const int numBonds = numParticles-1;
const double temp = 10.0; const double temp = 10.0;
OpenCLPlatform platform;
System system; System system;
BrownianIntegrator integrator(temp, 2.0, 0.01); BrownianIntegrator integrator(temp, 2.0, 0.01);
HarmonicBondForce* forceField = new HarmonicBondForce(); HarmonicBondForce* forceField = new HarmonicBondForce();
...@@ -128,7 +128,6 @@ void testConstraints() { ...@@ -128,7 +128,6 @@ void testConstraints() {
const int numParticles = 8; const int numParticles = 8;
const int numConstraints = 5; const int numConstraints = 5;
const double temp = 20.0; const double temp = 20.0;
OpenCLPlatform platform;
System system; System system;
BrownianIntegrator integrator(temp, 2.0, 0.001); BrownianIntegrator integrator(temp, 2.0, 0.001);
integrator.setConstraintTolerance(1e-5); integrator.setConstraintTolerance(1e-5);
...@@ -177,7 +176,6 @@ void testRandomSeed() { ...@@ -177,7 +176,6 @@ void testRandomSeed() {
const int numParticles = 8; const int numParticles = 8;
const double temp = 100.0; const double temp = 100.0;
const double collisionFreq = 10.0; const double collisionFreq = 10.0;
OpenCLPlatform platform;
System system; System system;
BrownianIntegrator integrator(temp, 2.0, 0.001); BrownianIntegrator integrator(temp, 2.0, 0.001);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
...@@ -232,8 +230,10 @@ void testRandomSeed() { ...@@ -232,8 +230,10 @@ void testRandomSeed() {
} }
} }
int main() { int main(int argc, char* argv[]) {
try { try {
if (argc > 1)
platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1]));
testSingleBond(); testSingleBond();
testTemperature(); testTemperature();
testConstraints(); testConstraints();
......
...@@ -48,6 +48,8 @@ ...@@ -48,6 +48,8 @@
using namespace OpenMM; using namespace OpenMM;
using namespace std; using namespace std;
OpenCLPlatform platform;
const double TOL = 1e-5; const double TOL = 1e-5;
void testCMAPTorsions() { void testCMAPTorsions() {
...@@ -56,7 +58,6 @@ void testCMAPTorsions() { ...@@ -56,7 +58,6 @@ void testCMAPTorsions() {
// Create two systems: one with a pair of periodic torsions, and one with a CMAP torsion // Create two systems: one with a pair of periodic torsions, and one with a CMAP torsion
// that approximates the same force. // that approximates the same force.
OpenCLPlatform platform;
System system1; System system1;
for (int i = 0; i < 5; i++) for (int i = 0; i < 5; i++)
system1.addParticle(1.0); system1.addParticle(1.0);
...@@ -104,8 +105,10 @@ void testCMAPTorsions() { ...@@ -104,8 +105,10 @@ void testCMAPTorsions() {
} }
} }
int main() { int main(int argc, char* argv[]) {
try { try {
if (argc > 1)
platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1]));
testCMAPTorsions(); testCMAPTorsions();
} }
catch(const exception& e) { catch(const exception& e) {
......
...@@ -50,6 +50,8 @@ ...@@ -50,6 +50,8 @@
using namespace OpenMM; using namespace OpenMM;
using namespace std; using namespace std;
OpenCLPlatform platform;
Vec3 calcCM(const vector<Vec3>& values, System& system) { Vec3 calcCM(const vector<Vec3>& values, System& system) {
Vec3 cm; Vec3 cm;
for (int j = 0; j < system.getNumParticles(); ++j) { for (int j = 0; j < system.getNumParticles(); ++j) {
...@@ -62,7 +64,6 @@ Vec3 calcCM(const vector<Vec3>& values, System& system) { ...@@ -62,7 +64,6 @@ Vec3 calcCM(const vector<Vec3>& values, System& system) {
void testMotionRemoval(Integrator& integrator) { void testMotionRemoval(Integrator& integrator) {
const int numParticles = 8; const int numParticles = 8;
OpenCLPlatform platform;
System system; System system;
HarmonicBondForce* bonds = new HarmonicBondForce(); HarmonicBondForce* bonds = new HarmonicBondForce();
bonds->addBond(2, 3, 2.0, 0.5); bonds->addBond(2, 3, 2.0, 0.5);
...@@ -103,8 +104,10 @@ void testMotionRemoval(Integrator& integrator) { ...@@ -103,8 +104,10 @@ void testMotionRemoval(Integrator& integrator) {
} }
} }
int main() { int main(int argc, char* argv[]) {
try { try {
if (argc > 1)
platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1]));
LangevinIntegrator langevin(0.0, 1e-5, 0.01); LangevinIntegrator langevin(0.0, 1e-5, 0.01);
testMotionRemoval(langevin); testMotionRemoval(langevin);
VerletIntegrator verlet(0.01); VerletIntegrator verlet(0.01);
......
...@@ -48,6 +48,8 @@ ...@@ -48,6 +48,8 @@
using namespace OpenMM; using namespace OpenMM;
using namespace std; using namespace std;
OpenCLPlatform platform;
const double TOL = 1e-5; const double TOL = 1e-5;
void compareStates(State& s1, State& s2) { void compareStates(State& s1, State& s2) {
...@@ -71,7 +73,6 @@ void testCheckpoint() { ...@@ -71,7 +73,6 @@ void testCheckpoint() {
const int numParticles = 100; const int numParticles = 100;
const double boxSize = 5.0; const double boxSize = 5.0;
const double temperature = 200.0; const double temperature = 200.0;
OpenCLPlatform platform;
System system; System system;
system.addForce(new AndersenThermostat(0.0, 100.0)); system.addForce(new AndersenThermostat(0.0, 100.0));
NonbondedForce* nonbonded = new NonbondedForce(); NonbondedForce* nonbonded = new NonbondedForce();
...@@ -158,8 +159,10 @@ void testCheckpoint() { ...@@ -158,8 +159,10 @@ void testCheckpoint() {
compareStates(s6, s8); compareStates(s6, s8);
} }
int main() { int main(int argc, char* argv[]) {
try { try {
if (argc > 1)
platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1]));
testCheckpoint(); testCheckpoint();
} }
catch(const exception& e) { catch(const exception& e) {
......
...@@ -49,9 +49,9 @@ using namespace std; ...@@ -49,9 +49,9 @@ using namespace std;
const double TOL = 1e-5; const double TOL = 1e-5;
void testAngles() { OpenCLPlatform platform;
OpenCLPlatform platform;
void testAngles() {
// Create a system using a CustomAngleForce. // Create a system using a CustomAngleForce.
System customSystem; System customSystem;
...@@ -134,7 +134,6 @@ void testAngles() { ...@@ -134,7 +134,6 @@ void testAngles() {
} }
void testParallelComputation() { void testParallelComputation() {
OpenCLPlatform platform;
System system; System system;
const int numParticles = 200; const int numParticles = 200;
for (int i = 0; i < numParticles; i++) for (int i = 0; i < numParticles; i++)
...@@ -163,8 +162,10 @@ void testParallelComputation() { ...@@ -163,8 +162,10 @@ void testParallelComputation() {
ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5);
} }
int main() { int main(int argc, char* argv[]) {
try { try {
if (argc > 1)
platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1]));
testAngles(); testAngles();
testParallelComputation(); testParallelComputation();
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment