# - OFF, TRUE : Will keep GMX_GPU=OFF if no CUDA is detected, but will assemble
# a warning message which will be issued at the end of the
# configuration if GPU(s) were found in the build system.
-# - ON , FALSE: The user requested GPU builds, will require CUDA and will fail
-# if it is not available.
+# - ON , FALSE: The user requested GPU build and this requires CUDA, so we will
+# fail if it is not available.
# - ON , TRUE : Can't happen (GMX_GPU=ON can only be user-set at this point)
if((GMX_GPU OR GMX_GPU_AUTO) AND NOT GMX_GPU_DETECTION_DONE)
if (EXISTS ${CUDA_TOOLKIT_ROOT_DIR})
set(CUDA_NOTFOUND_MESSAGE "
mdrun supports native GPU acceleration on NVIDIA hardware with compute
- capability >=2.0. This requires the NVIDIA CUDA library, which was not
- found; the location can be hinted by setting CUDA_TOOLKIT_ROOT_DIR as
- a CMake option (It does not work as an environment variable).
+ capability >=2.0 (Fermi or later). This requires the NVIDIA CUDA toolkit,
+ which was not found. Its location can be hinted by setting the
+ CUDA_TOOLKIT_ROOT_DIR CMake option (does not work as an environment variable).
The typical location would be /usr/local/cuda[-version].
Note that CPU or GPU acceleration can be selected at runtime!
if (NOT CUDA_FOUND)
if (GMX_GPU_AUTO)
# Disable GPU acceleration in auto mode
- message(STATUS "Disabling native GPU acceleration")
+ message(STATUS "No compatible CUDA toolkit found (v3.2+), disabling native GPU acceleration")
set_property(CACHE GMX_GPU PROPERTY VALUE OFF)
set(CUDA_NOTFOUND_AUTO ON)
else ()
if(NOT GMX_OPENMP)
message(WARNING "
To use GPU acceleration efficiently, mdrun requires OpenMP multi-threading.
- With no OpenMP a single CPU core can be used with a GPU which is not optimal.
+ Without OpenMP a single CPU core can be used with a GPU which is not optimal.
Note that with MPI multiple processes can be forced to use a single GPU, but this
typically inefficient. Note that you need to set both C and C++ compilers that
support OpenMP (CC and CXX environment variables, respectively) when using GPUs.")
* operations and only works on x86/x86_64.
* With polling wait event-timing also needs to be disabled.
*
- * The overhead is greatly reduced in 304.xx drivers (independent of runtime ver).
- * The corresponding driver API version (which is what we can query) should
- * be at least 5.0. Hence we will not switch to polling when >=5.0 is returned.
+ * The overhead is greatly reduced in API v5.0 drivers and the improvement
+ $ is independent of runtime version. Hence, with API v5.0 drivers and later
+ * we won't switch to polling.
*
- * NOTE: Unfortunately, this is knonw to fail when GPUs are shared by (t)MPI,
+ * NOTE: Unfortunately, this is known to fail when GPUs are shared by (t)MPI,
* ranks so we will also disable it in that case.
*/
if (bOldDriver && !gpu_info->bDevShare)
{
md_print_warn(fplog,
- "NOTE: Using a GPU with ECC enabled and a driver older than 5.0, but\n"
+ "NOTE: Using a GPU with ECC enabled and CUDA driver API version <5.0, but\n"
" cudaStreamSynchronize waiting is forced by the GMX_CUDA_STREAMSYNC env. var.\n");
}
}
if (nb->bUseStreamSync)
{
md_print_warn(fplog,
- "NOTE: Using a GPU with ECC enabled and CUDA driver version <5.0, will switch to\n"
- " polling wait to avoid performance loss. If you encounter issues, set the\n"
- " GMX_CUDA_STREAMSYNC env. var. to switch back to standard GPU waiting.\n");
+ "NOTE: Using a GPU with ECC enabled and CUDA driver API version <5.0, known to\n"
+ " cause performance loss. Switching to the alternative polling GPU waiting.\n"
+ " If you encounter issues, switch back to standard GPU waiting by setting\n"
+ " the GMX_CUDA_STREAMSYNC environment variable.\n");
}
else if (bOldDriver)
{
/* Tell the user that the ECC+old driver combination can be bad */
sprintf(sbuf,
- "NOTE: Using a GPU with ECC enabled and driver version <5.0. A bug in this\n"
+ "NOTE: Using a GPU with ECC enabled and CUDA driver API version <5.0. A bug in this\n"
" driver can cause performance loss.\n"
" However, the polling waiting workaround can not be used because\n%s\n"
" Consider updating the driver or turning ECC off.",