Change use of compiler flags with GPU + C++11
authorTeemu Murtola <teemu.murtola@gmail.com>
Wed, 18 Dec 2013 16:52:32 +0000 (18:52 +0200)
committerGerrit Code Review <gerrit@gerrit.gromacs.org>
Sat, 28 Dec 2013 23:30:38 +0000 (00:30 +0100)
Fix some unused parameter warnings in CUDA code, which were made visible
now that the warning flags propagate there.

Disable -Wnon-virtual-dtor, since C++-only flags seem to trip nvcc.
It is likely that this same warning is also given by cppcheck and/or the
clang static analyzer, so we should not lose much.  We can still enable
it again if we implement partial propagation of flags to nvcc.

Refs #1390

Change-Id: I8489af3dcc3139884065abe2e5806d71992abd6c

CMakeLists.txt
cmake/gmxCFlags.cmake
src/gromacs/legacyheaders/nbnxn_cuda_data_mgmt.h
src/gromacs/mdlib/nbnxn_cuda/nbnxn_cuda_data_mgmt.cu
src/programs/mdrun/runner.c

index f8511089f9245cdacbbf8784e4e5bf2116c0894f..e4e640140b3849e57bdcd30154f5cfb3969c892a 100644 (file)
@@ -549,13 +549,19 @@ gmx_test__isfinite(HAVE__ISFINITE)
 gmx_test__finite(HAVE__FINITE)
 
 include(gmxTestCXX11)
-gmx_test_cxx11(GMX_CXX11 GMX_CXX11_FLAGS)
-if(CXX11_FLAG AND GMX_GPU)
-    #FIXME: add proper solution for progate all but cxx11 flag
-    set(CUDA_PROPAGATE_HOST_FLAGS no)
-    message(WARNING "Please manually add compiler flags to CUDA_NVCC_FLAGS. Automatic propogation temporary not working.")
+gmx_test_cxx11(GMX_CXX11_SUPPORTED GMX_CXX11_FLAGS)
+include(CMakeDependentOption)
+# nvcc does not support C++11 flags, so with GPUs we prefer to skip C++11 flags
+# entirely to keep the compilation environment uniform.
+cmake_dependent_option(GMX_CXX11
+    "Use C++11 features"
+    ON "GMX_CXX11_SUPPORTED AND NOT GMX_GPU" OFF)
+mark_as_advanced(GMX_CXX11)
+if(GMX_CXX11)
+    set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} ${GMX_CXX11_FLAGS}")
 endif()
 
+
 include(gmxTestXDR)
 gmx_test_xdr(GMX_SYSTEM_XDR)
 if(NOT GMX_SYSTEM_XDR)
@@ -855,7 +861,7 @@ endif(GMX_FAHCORE)
 # these are set after everything else
 if (NOT GMX_SKIP_DEFAULT_CFLAGS)
     set(CMAKE_C_FLAGS "${ACCELERATION_C_FLAGS} ${MPI_COMPILE_FLAGS} ${EXTRA_C_FLAGS} ${CMAKE_C_FLAGS}")
-    set(CMAKE_CXX_FLAGS "${ACCELERATION_CXX_FLAGS} ${MPI_COMPILE_FLAGS} ${GMX_CXX11_FLAGS} ${EXTRA_CXX_FLAGS} ${CMAKE_CXX_FLAGS}")
+    set(CMAKE_CXX_FLAGS "${ACCELERATION_CXX_FLAGS} ${MPI_COMPILE_FLAGS} ${EXTRA_CXX_FLAGS} ${CMAKE_CXX_FLAGS}")
     set(CMAKE_EXE_LINKER_FLAGS "${FFT_LINKER_FLAGS} ${MPI_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}")
     set(CMAKE_SHARED_LINKER_FLAGS "${MPI_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS}")
 else()
@@ -863,7 +869,7 @@ else()
     message("CMAKE_C_FLAGS: ${ACCELERATION_C_FLAGS} ${MPI_COMPILE_FLAGS} ${EXTRA_C_FLAGS} ${GMXC_CFLAGS}")
     message("CMAKE_C_FLAGS_RELEASE: ${GMXC_CFLAGS_RELEASE}")
     message("CMAKE_C_FLAGS_DEBUG: ${GMXC_CFLAGS_DEBUG}")
-    message("CMAKE_CXX_FLAGS: ${ACCELERATION_CXX_FLAGS} ${MPI_COMPILE_FLAGS} ${GMX_CXX11_FLAGS} ${EXTRA_CXX_FLAGS} ${GMXC_CXXFLAGS}")
+    message("CMAKE_CXX_FLAGS: ${ACCELERATION_CXX_FLAGS} ${MPI_COMPILE_FLAGS} ${EXTRA_CXX_FLAGS} ${GMXC_CXXFLAGS}")
     message("CMAKE_CXX_FLAGS_RELEASE: ${GMXC_CXXFLAGS_RELEASE}")
     message("CMAKE_CXX_FLAGS_DEBUG: ${GMXC_CXXFLAGS_DEBUG}")
     message("CMAKE_EXE_LINKER_FLAGS: ${FFT_LINKER_FLAGS} ${MPI_LINKER_FLAGS}")
index e85932a2c27cd34fa0e3894b3e5d13da3a2c308b..52d36d2d7c98a87a5d600958c5ecc743ffbc803a 100644 (file)
@@ -81,9 +81,10 @@ MACRO(gmx_c_flags)
             GMX_TEST_CXXFLAG(CXXFLAGS_PRAGMA "-Wno-unknown-pragmas" GMXC_CXXFLAGS)
         endif()
         GMX_TEST_CXXFLAG(CXXFLAGS_WARN "-Wall -Wno-unused-function" GMXC_CXXFLAGS)
-        GMX_TEST_CXXFLAG(CXXFLAGS_WARN_EFFCXX "-Wnon-virtual-dtor" GMXC_CXXFLAGS)
+        # Problematic with CUDA
+        # GMX_TEST_CXXFLAG(CXXFLAGS_WARN_EFFCXX "-Wnon-virtual-dtor" GMXC_CXXFLAGS)
         GMX_TEST_CXXFLAG(CXXFLAGS_WARN_EXTRA "-Wextra -Wno-missing-field-initializers" GMXC_CXXFLAGS)
-      # new in gcc 4.5
+        # new in gcc 4.5
         GMX_TEST_CXXFLAG(CXXFLAGS_EXCESS_PREC "-fexcess-precision=fast" GMXC_CXXFLAGS_RELEASE)
         GMX_TEST_CXXFLAG(CXXFLAGS_COPT "-fomit-frame-pointer -funroll-all-loops"
                          GMXC_CXXFLAGS_RELEASE)
index 4761532c21ac8f02561c31e814872753104faf52..1530a2e93fcd95fcbb7332ca5cd6bbcd63db78fc 100644 (file)
@@ -99,8 +99,7 @@ void nbnxn_cuda_clear_outputs(nbnxn_cuda_ptr_t gmx_unused cu_nb,
 
 /*! Frees all GPU resources used for the nonbonded calculations. */
 FUNC_QUALIFIER
-void nbnxn_cuda_free(FILE             gmx_unused *fplog,
-                     nbnxn_cuda_ptr_t gmx_unused  cu_nb) FUNC_TERM
+void nbnxn_cuda_free(nbnxn_cuda_ptr_t gmx_unused  cu_nb) FUNC_TERM
 
 /*! Returns the GPU timings structure or NULL if GPU is not used or timing is off. */
 FUNC_QUALIFIER
index 6d26a86560f56aa2bf7833de05b400c78071ff52..eb20159b9a402fa993676df409a7a2ced4955b4b 100644 (file)
@@ -58,6 +58,8 @@
 #include "pmalloc_cuda.h"
 #include "gpu_utils.h"
 
+#include "gromacs/utility/common.h"
+
 static bool bUseCudaEventBlockingSync = false; /* makes the CPU thread block */
 
 /* This is a heuristically determined parameter for the Fermi architecture for
@@ -156,6 +158,7 @@ static void init_ewald_coulomb_force_table(cu_nbparam_t          *nbp,
         else
 #endif
         {
+            GMX_UNUSED_VALUE(dev_info);
             cudaChannelFormatDesc cd   = cudaCreateChannelDesc<float>();
             stat = cudaBindTexture(NULL, &nbnxn_cuda_get_coulomb_tab_texref(),
                                    coul_tab, &cd, tabsize*sizeof(*coul_tab));
@@ -821,7 +824,7 @@ void nbnxn_cuda_init_atomdata(nbnxn_cuda_ptr_t cu_nb,
     }
 }
 
-void nbnxn_cuda_free(FILE *fplog, nbnxn_cuda_ptr_t cu_nb)
+void nbnxn_cuda_free(nbnxn_cuda_ptr_t cu_nb)
 {
     cudaError_t     stat;
     cu_atomdata_t   *atdat;
index 45754b4f4316e7482063a77f6aa0bd12bdfe30ae..a11bd54a4e0a51649d279b0442248b833a37a7c6 100644 (file)
@@ -994,8 +994,7 @@ static void override_nsteps_cmdline(FILE            *fplog,
  * in this run because the PME ranks have no knowledge of whether GPUs
  * are used or not, but all ranks need to enter the barrier below.
  */
-static void free_gpu_resources(FILE             *fplog,
-                               const t_forcerec *fr,
+static void free_gpu_resources(const t_forcerec *fr,
                                const t_commrec  *cr)
 {
     gmx_bool bIsPPrankUsingGPU;
@@ -1006,7 +1005,7 @@ static void free_gpu_resources(FILE             *fplog,
     if (bIsPPrankUsingGPU)
     {
         /* free nbnxn data in GPU memory */
-        nbnxn_cuda_free(fplog, fr->nbv->cu_nbv);
+        nbnxn_cuda_free(fr->nbv->cu_nbv);
 
         /* With tMPI we need to wait for all ranks to finish deallocation before
          * destroying the context in free_gpu() as some ranks may be sharing
@@ -1783,7 +1782,7 @@ int mdrunner(gmx_hw_opt_t *hw_opt,
 
 
     /* Free GPU memory and context */
-    free_gpu_resources(fplog, fr, cr);
+    free_gpu_resources(fr, cr);
 
     if (opt2bSet("-membed", nfile, fnm))
     {