"ssh:/git@developer.sourcefind.cn:2222/tsoc/openmm.git" did not exist on "7616a9657ecf357ad6040acc43f8cf7e83e4319f"
Commit 465e018f authored by Peter Eastman's avatar Peter Eastman
Browse files

Bug fixes to RPMD

parent 5ed1d277
...@@ -151,11 +151,6 @@ ENDIF(OPENMM_BUILD_STATIC_LIB) ...@@ -151,11 +151,6 @@ ENDIF(OPENMM_BUILD_STATIC_LIB)
ADD_SUBDIRECTORY(platforms/reference/tests) ADD_SUBDIRECTORY(platforms/reference/tests)
# Which hardware platforms to build # Which hardware platforms to build
IF(CUDA_FOUND)
SET(OPENMM_BUILD_RPMD_CUDA_LIB ON CACHE BOOL "Build OpenMMRPMDCuda library for Nvidia GPUs")
ELSE(CUDA_FOUND)
SET(OPENMM_BUILD_RPMD_CUDA_LIB OFF CACHE BOOL "Build OpenMMRPMDCuda library for Nvidia GPUs")
ENDIF(CUDA_FOUND)
#SET(OPENMM_BUILD_RPMD_PATH) #SET(OPENMM_BUILD_RPMD_PATH)
#SET(OPENMM_BUILD_RPMD_CUDA_PATH) #SET(OPENMM_BUILD_RPMD_CUDA_PATH)
...@@ -166,10 +161,10 @@ ENDIF(CUDA_FOUND) ...@@ -166,10 +161,10 @@ ENDIF(CUDA_FOUND)
# SET(OPENMM_RPMD_CUDA_SOURCE_SUBDIRS . openmmapi olla platforms/cuda) # SET(OPENMM_RPMD_CUDA_SOURCE_SUBDIRS . openmmapi olla platforms/cuda)
#ENDIF(OPENMM_BUILD_RPMD_CUDA_LIB) #ENDIF(OPENMM_BUILD_RPMD_CUDA_LIB)
#SET(OPENMM_BUILD_OPENCL_LIB OFF CACHE BOOL "Build OpenMMOpenCL library for Nvidia GPUs") SET(OPENMM_BUILD_RPMD_OPENCL_LIB ON CACHE BOOL "Build RPMD implementation for OpenCL")
#IF(OPENMM_BUILD_OPENCL_LIB) IF(OPENMM_BUILD_RPMD_OPENCL_LIB)
# ADD_SUBDIRECTORY(platforms/opencl) ADD_SUBDIRECTORY(platforms/opencl)
#ENDIF(OPENMM_BUILD_OPENCL_LIB) ENDIF(OPENMM_BUILD_RPMD_OPENCL_LIB)
INSTALL_TARGETS(/lib RUNTIME_DIRECTORY /lib ${SHARED_RPMD_TARGET}) INSTALL_TARGETS(/lib RUNTIME_DIRECTORY /lib ${SHARED_RPMD_TARGET})
IF( CREATE_SERIALIZABLE_OPENMM_RPMD ) IF( CREATE_SERIALIZABLE_OPENMM_RPMD )
...@@ -204,4 +199,3 @@ ENDIF (EXECUTABLE_OUTPUT_PATH) ...@@ -204,4 +199,3 @@ ENDIF (EXECUTABLE_OUTPUT_PATH)
#INCLUDE(ApiDoxygen.cmake) #INCLUDE(ApiDoxygen.cmake)
#ADD_SUBDIRECTORY(tests) #ADD_SUBDIRECTORY(tests)
ADD_SUBDIRECTORY(platforms/opencl)
...@@ -112,6 +112,7 @@ ELSE (UNIX AND CMAKE_BUILD_TYPE MATCHES Debug) ...@@ -112,6 +112,7 @@ ELSE (UNIX AND CMAKE_BUILD_TYPE MATCHES Debug)
ENDIF (UNIX AND CMAKE_BUILD_TYPE MATCHES Debug) ENDIF (UNIX AND CMAKE_BUILD_TYPE MATCHES Debug)
TARGET_LINK_LIBRARIES(${SHARED_TARGET} ${MAIN_OPENMM_LIB} ${OPENCL_LIBRARIES} ${PTHREADS_LIB}) TARGET_LINK_LIBRARIES(${SHARED_TARGET} ${MAIN_OPENMM_LIB} ${OPENCL_LIBRARIES} ${PTHREADS_LIB})
TARGET_LINK_LIBRARIES(${SHARED_TARGET} debug ${OPENMM_LIBRARY_NAME}OpenCL_d optimized ${OPENMM_LIBRARY_NAME}OpenCL) TARGET_LINK_LIBRARIES(${SHARED_TARGET} debug ${OPENMM_LIBRARY_NAME}OpenCL_d optimized ${OPENMM_LIBRARY_NAME}OpenCL)
TARGET_LINK_LIBRARIES(${SHARED_TARGET} debug ${SHARED_RPMD_TARGET} optimized ${SHARED_RPMD_TARGET})
SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES COMPILE_FLAGS "-DOPENMM_BUILDING_SHARED_LIBRARY") SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES COMPILE_FLAGS "-DOPENMM_BUILDING_SHARED_LIBRARY")
INSTALL_TARGETS(/lib/plugins RUNTIME_DIRECTORY /lib/plugins ${SHARED_TARGET}) INSTALL_TARGETS(/lib/plugins RUNTIME_DIRECTORY /lib/plugins ${SHARED_TARGET})
......
...@@ -53,7 +53,7 @@ void OpenCLIntegrateRPMDStepKernel::initialize(const System& system, const RPMDI ...@@ -53,7 +53,7 @@ void OpenCLIntegrateRPMDStepKernel::initialize(const System& system, const RPMDI
numCopies = integrator.getNumCopies(); numCopies = integrator.getNumCopies();
numParticles = system.getNumParticles(); numParticles = system.getNumParticles();
workgroupSize = numCopies; workgroupSize = numCopies;
while (workgroupSize < 128-numCopies) while (workgroupSize <= 128-numCopies)
workgroupSize += numCopies; workgroupSize += numCopies;
if (numCopies != OpenCLFFT3D::findLegalDimension(numCopies)) if (numCopies != OpenCLFFT3D::findLegalDimension(numCopies))
throw OpenMMException("RPMDIntegrator: the number of copies must be a multiple of powers of 2, 3, and 5."); throw OpenMMException("RPMDIntegrator: the number of copies must be a multiple of powers of 2, 3, and 5.");
...@@ -68,6 +68,7 @@ void OpenCLIntegrateRPMDStepKernel::initialize(const System& system, const RPMDI ...@@ -68,6 +68,7 @@ void OpenCLIntegrateRPMDStepKernel::initialize(const System& system, const RPMDI
vector<mm_float4> temp(positions->getSize()); vector<mm_float4> temp(positions->getSize());
for (int i = 0; i < positions->getSize(); i++) for (int i = 0; i < positions->getSize(); i++)
temp[i] = mm_float4(0, 0, 0, 0); temp[i] = mm_float4(0, 0, 0, 0);
positions->upload(temp);
for (int i = 0; i < velocities->getSize(); i++) for (int i = 0; i < velocities->getSize(); i++)
temp[i] = mm_float4(0, 0, 0, 1); temp[i] = mm_float4(0, 0, 0, 1);
velocities->upload(temp); velocities->upload(temp);
...@@ -120,10 +121,10 @@ void OpenCLIntegrateRPMDStepKernel::execute(ContextImpl& context, const RPMDInte ...@@ -120,10 +121,10 @@ void OpenCLIntegrateRPMDStepKernel::execute(ContextImpl& context, const RPMDInte
if (!forcesAreValid) { if (!forcesAreValid) {
for (int i = 0; i < numCopies; i++) { for (int i = 0; i < numCopies; i++) {
cl.getQueue().enqueueCopyBuffer(positions->getDeviceBuffer(), cl.getPosq().getDeviceBuffer(), cl.getQueue().enqueueCopyBuffer(positions->getDeviceBuffer(), cl.getPosq().getDeviceBuffer(),
i*paddedParticles, 0, paddedParticles*sizeof(mm_float4)); i*paddedParticles*sizeof(mm_float4), 0, paddedParticles*sizeof(mm_float4));
context.calcForcesAndEnergy(true, false); context.calcForcesAndEnergy(true, false);
cl.getQueue().enqueueCopyBuffer(cl.getForce().getDeviceBuffer(), forces->getDeviceBuffer(), cl.getQueue().enqueueCopyBuffer(cl.getForce().getDeviceBuffer(), forces->getDeviceBuffer(),
0, i*paddedParticles, paddedParticles*sizeof(mm_float4)); 0, i*paddedParticles*sizeof(mm_float4), paddedParticles*sizeof(mm_float4));
} }
} }
...@@ -146,10 +147,10 @@ void OpenCLIntegrateRPMDStepKernel::execute(ContextImpl& context, const RPMDInte ...@@ -146,10 +147,10 @@ void OpenCLIntegrateRPMDStepKernel::execute(ContextImpl& context, const RPMDInte
for (int i = 0; i < numCopies; i++) { for (int i = 0; i < numCopies; i++) {
cl.getQueue().enqueueCopyBuffer(positions->getDeviceBuffer(), cl.getPosq().getDeviceBuffer(), cl.getQueue().enqueueCopyBuffer(positions->getDeviceBuffer(), cl.getPosq().getDeviceBuffer(),
i*paddedParticles, 0, paddedParticles*sizeof(mm_float4)); i*paddedParticles*sizeof(mm_float4), 0, paddedParticles*sizeof(mm_float4));
context.calcForcesAndEnergy(true, false); context.calcForcesAndEnergy(true, false);
cl.getQueue().enqueueCopyBuffer(cl.getForce().getDeviceBuffer(), forces->getDeviceBuffer(), cl.getQueue().enqueueCopyBuffer(cl.getForce().getDeviceBuffer(), forces->getDeviceBuffer(),
0, i*paddedParticles, paddedParticles*sizeof(mm_float4)); 0, i*paddedParticles*sizeof(mm_float4), paddedParticles*sizeof(mm_float4));
} }
// Update velocities. // Update velocities.
......
...@@ -6,8 +6,6 @@ ENABLE_TESTING() ...@@ -6,8 +6,6 @@ ENABLE_TESTING()
INCLUDE_DIRECTORIES(${OPENCL_INCLUDE_DIR}) INCLUDE_DIRECTORIES(${OPENCL_INCLUDE_DIR})
SET(SHARED_OPENMM_RPMD_TARGET OpenMMRPMD)
# Automatically create tests using files named "Test*.cpp" # Automatically create tests using files named "Test*.cpp"
FILE(GLOB TEST_PROGS "*Test*.cpp") FILE(GLOB TEST_PROGS "*Test*.cpp")
FOREACH(TEST_PROG ${TEST_PROGS}) FOREACH(TEST_PROG ${TEST_PROGS})
...@@ -15,7 +13,7 @@ FOREACH(TEST_PROG ${TEST_PROGS}) ...@@ -15,7 +13,7 @@ FOREACH(TEST_PROG ${TEST_PROGS})
# Link with shared library # Link with shared library
ADD_EXECUTABLE(${TEST_ROOT} ${TEST_PROG}) ADD_EXECUTABLE(${TEST_ROOT} ${TEST_PROG})
TARGET_LINK_LIBRARIES(${TEST_ROOT} ${SHARED_TARGET} ${SHARED_OPENMM_RPMD_TARGET}) TARGET_LINK_LIBRARIES(${TEST_ROOT} ${SHARED_TARGET} ${SHARED_RPMD_TARGET})
ADD_TEST(${TEST_ROOT} ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT}) ADD_TEST(${TEST_ROOT} ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT})
ENDFOREACH(TEST_PROG ${TEST_PROGS}) ENDFOREACH(TEST_PROG ${TEST_PROGS})
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