When switching from CPU->GPU in a non-clean build tree it seems to work fine,
a few options are disabled/modified from the default values.
However, when doings GPU->CPU switch, the code builds, but the default values
(fftw3, threads, SSE) are not restores and need to be changed manually.
########################################################################
option(GMX_DOUBLE "Use double precision" OFF)
option(GMX_MPI "Build a parallel (message-passing) version of GROMACS" OFF)
########################################################################
option(GMX_DOUBLE "Use double precision" OFF)
option(GMX_MPI "Build a parallel (message-passing) version of GROMACS" OFF)
-option(GMX_THREADS "Build a parallel (threaded-based) version of GROMACS)" ON)
+option(GMX_THREADS "Build a parallel (thread-based) version of GROMACS)" ON)
option(GMX_SOFTWARE_INVSQRT "Use GROMACS software 1/sqrt" ON)
option(GMX_FAHCORE "Build a library with mdrun functionality" OFF)
option(GMX_OPENMM "Accelerated execution on GPUs through the OpenMM library" OFF)
option(GMX_SOFTWARE_INVSQRT "Use GROMACS software 1/sqrt" ON)
option(GMX_FAHCORE "Build a library with mdrun functionality" OFF)
option(GMX_OPENMM "Accelerated execution on GPUs through the OpenMM library" OFF)
if(GMX_OPENMM)
cmake_minimum_required(VERSION 2.6.4)
# we'll use the built-in fft to avoid unnecessary dependencies
if(GMX_OPENMM)
cmake_minimum_required(VERSION 2.6.4)
# we'll use the built-in fft to avoid unnecessary dependencies
- set (GMX_FFT_LIBRARY "fftpack")
+ message(STATUS "No external FFT libraries needed for the OpenMM build, using fftpack!")
+ set (GMX_FFT_LIBRARY "fftpack" CACHE STRING
+ "No external FFT libraries needed for the OpenMM build, using fftpack!" FORCE)
if(GMX_MPI)
message(FATAL_ERROR "The OpenMM build is not compatible with MPI!")
endif(GMX_MPI)
if(GMX_THREADS)
if(GMX_MPI)
message(FATAL_ERROR "The OpenMM build is not compatible with MPI!")
endif(GMX_MPI)
if(GMX_THREADS)
- message(STATUS "Threads not compatible with OpenMM build, disabled")
- set(GMX_THREADS OFF)
+ message(STATUS "Threads not compatible with OpenMM build, disabled!")
+ set(GMX_THREADS OFF CACHE BOOL
+ "Threads not compatible with OpenMM build, disabled!" FORCE)
endif(GMX_THREADS)
if(GMX_SOFTWARE_INVSQRT)
endif(GMX_THREADS)
if(GMX_SOFTWARE_INVSQRT)
- set(GMX_SOFTWARE_INVSQRT OFF)
+ set(GMX_SOFTWARE_INVSQRT OFF FORCE)
endif(GMX_SOFTWARE_INVSQRT)
endif(GMX_SOFTWARE_INVSQRT)
- if(NOT GMX_ACCELERATION MATCHES "auto|none|None|NONE" OR NOT ${GMX_ACCELERATION} STREQUAL "")
- message(WARNING "The OpenMM build does not support other acceleration modes!")
- set(GMX_ACCELERATION "none")
+ if(NOT GMX_ACCELERATION MATCHES "^(none|None|NONE)")
+ message(WARNING "CPU-based acceleration turned off, OpenMM does not support/need any!")
+ unset(GMX_ACCELERATION CACHE)
+ set(GMX_ACCELERATION "none" CACHE STRING
+ "CPU-based acceleration turned off, OpenMM does not support/need any!" FORCE)
endif()
if(GMX_FAHCORE)
message(FATAL_ERROR "The OpenMM build does not support FAH build!")
endif()
if(GMX_FAHCORE)
message(FATAL_ERROR "The OpenMM build does not support FAH build!")
gmx_test_inline_asm_msvc_x86(GMX_X86_MSVC_INLINE_ASM)
# turn on SSE if supported with reasonable defaults.
gmx_test_inline_asm_msvc_x86(GMX_X86_MSVC_INLINE_ASM)
# turn on SSE if supported with reasonable defaults.
-if (${GMX_ACCELERATION} STREQUAL "auto")
+if (${GMX_ACCELERATION} STREQUAL "auto" AND NOT GMX_OPENMM)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(i.86|x86|x64|x86_64|AMD64|amd64)")
set(GMX_ACCELERATION "SSE" CACHE STRING "Accelerated kernels. Pick one of: none, SSE, BlueGene, Power6, ia64, altivec" FORCE)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(i.86|x86|x64|x86_64|AMD64|amd64)")
set(GMX_ACCELERATION "SSE" CACHE STRING "Accelerated kernels. Pick one of: none, SSE, BlueGene, Power6, ia64, altivec" FORCE)
else()
set(GMX_ACCELERATION "none" CACHE STRING "Accelerated kernels. Pick one of: none, SSE, BlueGene, Power6, ia64, altivec" FORCE)
endif()
else()
set(GMX_ACCELERATION "none" CACHE STRING "Accelerated kernels. Pick one of: none, SSE, BlueGene, Power6, ia64, altivec" FORCE)
endif()
-endif (${GMX_ACCELERATION} STREQUAL "auto")
+endif (${GMX_ACCELERATION} STREQUAL "auto" AND NOT GMX_OPENMM)
list(REMOVE_ITEM GMXLIB_SOURCES ${SELECTION_TEST})
endif(GMX_FAHCORE)
list(REMOVE_ITEM GMXLIB_SOURCES ${SELECTION_TEST})
endif(GMX_FAHCORE)
+# only fiddle with assembly kernels if we're not doing OpenMM build
+if(NOT GMX_OPENMM)
if(GMX_ASM_USEASM-NASM)
enable_language(ASM-NASM)
if(GMX_ASM_USEASM-NASM)
enable_language(ASM-NASM)
endif()
endif(GMX_ASM_USEASM-NASM)
endif()
endif(GMX_ASM_USEASM-NASM)
add_library(gmx ${GMXLIB_SOURCES} ${BLAS_SOURCES} ${LAPACK_SOURCES} ${GMX_SSEKERNEL_C_SRC} ${GMX_SSEKERNEL_ASM_SRC} ${THREAD_MPI_SRC})
target_link_libraries(gmx ${GMX_EXTRA_LIBRARIES} ${THREAD_LIB})
add_library(gmx ${GMXLIB_SOURCES} ${BLAS_SOURCES} ${LAPACK_SOURCES} ${GMX_SSEKERNEL_C_SRC} ${GMX_SSEKERNEL_ASM_SRC} ${THREAD_MPI_SRC})
target_link_libraries(gmx ${GMX_EXTRA_LIBRARIES} ${THREAD_LIB})