Merge "reduced PLINCS communication with H-bond constraints" into release-4-6
authorSzilárd Páll <pszilard@kth.se>
Mon, 17 Dec 2012 22:43:00 +0000 (23:43 +0100)
committerGerrit Code Review <gerrit@gerrit.gromacs.org>
Mon, 17 Dec 2012 22:43:00 +0000 (23:43 +0100)
CMakeLists.txt
cmake/gmxManageMPI.cmake
src/mdlib/fft5d.c

index b9f3dfca9bf8e1ece05cbe3ff160b9c1fecb4945..ac998d0caeda216cccc7fe201505042ce4e99d64 100644 (file)
@@ -325,6 +325,10 @@ if(COMPILER_IS_CLANG_3_0)
     message(FATAL_ERROR "Your compiler is clang version 3.0, which is known to be buggy for GROMACS. Use a different compiler.")
 endif()
 
+if (CMAKE_C_COMPILER_ID STREQUAL "PGI")
+    message(WARNING "All tested PGI compiler versions (up to 12.9.0) generate binaries which produce incorrect results, or even fail to compile Gromacs. Highly recommended to use a different compiler. If you choose to use PGI, make sure to run the regressiontests.")
+endif()
+
 ########################################################################
 # Set up binary and library suffixing 
 ########################################################################
@@ -696,15 +700,15 @@ if(${GMX_CPU_ACCELERATION} STREQUAL "NONE")
 elseif(${GMX_CPU_ACCELERATION} STREQUAL "SSE2")
 
     GMX_TEST_CFLAG(GNU_SSE2_CFLAG "-msse2" GROMACS_C_FLAGS)
-    if(NOT GNU_SSE2_CFLAG)
+    if(NOT GNU_SSE2_CFLAG AND GMX_NATIVE_WINDOWS)
         GMX_TEST_CFLAG(MSVC_SSE2_CFLAG "/arch:SSE2" GROMACS_C_FLAGS)
-    endif(NOT GNU_SSE2_CFLAG)
+    endif(NOT GNU_SSE2_CFLAG AND GMX_NATIVE_WINDOWS)
 
     if (CMAKE_CXX_COMPILER_LOADED)
         GMX_TEST_CXXFLAG(GNU_SSE2_CXXFLAG "-msse2" GROMACS_CXX_FLAGS)
-        if(NOT GNU_SSE2_CXXFLAG)
+        if(NOT GNU_SSE2_CXXFLAG AND GMX_NATIVE_WINDOWS)
             GMX_TEST_CXXFLAG(MSVC_SSE2_CXXFLAG "/arch:SSE2" GROMACS_CXX_FLAGS)
-        endif(NOT GNU_SSE2_CXXFLAG)
+        endif(NOT GNU_SSE2_CXXFLAG AND GMX_NATIVE_WINDOWS)
     endif()
 
     # We dont warn for lacking SSE2 flag support, since that is probably standard today.
@@ -726,26 +730,30 @@ elseif(${GMX_CPU_ACCELERATION} STREQUAL "SSE2")
 elseif(${GMX_CPU_ACCELERATION} STREQUAL "SSE4.1")
 
     GMX_TEST_CFLAG(GNU_SSE4_CFLAG "-msse4.1" GROMACS_C_FLAGS)
-    if (NOT GNU_SSE4_CFLAG)
+    if (NOT GNU_SSE4_CFLAG AND GMX_NATIVE_WINDOWS)
         GMX_TEST_CFLAG(MSVC_SSE4_CFLAG "/arch:SSE4.1" GROMACS_C_FLAGS)
-    endif(NOT GNU_SSE4_CFLAG)
+    endif(NOT GNU_SSE4_CFLAG AND GMX_NATIVE_WINDOWS)
     if (NOT GNU_SSE4_CFLAG AND NOT MSVC_SSE4_CFLAG)
         message(WARNING "No C SSE4.1 flag found. Consider a newer compiler, or use SSE2 for slightly lower performance.")
         # Not surprising if we end up here! MSVC current does not support the SSE4.1 flag. However, it appears to accept SSE4.1
         # intrinsics when SSE2 support is enabled, so we try that instead.
-        GMX_TEST_CFLAG(MSVC_SSE2_CFLAG "/arch:SSE2" GROMACS_C_FLAGS)
+       if (GMX_NATIVE_WINDOWS)
+            GMX_TEST_CFLAG(MSVC_SSE2_CFLAG "/arch:SSE2" GROMACS_C_FLAGS)
+        endif()
     endif(NOT GNU_SSE4_CFLAG AND NOT MSVC_SSE4_CFLAG)
 
     if (CMAKE_CXX_COMPILER_LOADED)
         GMX_TEST_CXXFLAG(GNU_SSE4_CXXFLAG "-msse4.1" GROMACS_CXX_FLAG)
-        if (NOT GNU_SSE4_CXXFLAG)
+        if (NOT GNU_SSE4_CXXFLAG AND GMX_NATIVE_WINDOWS)
             GMX_TEST_CXXFLAG(MSVC_SSE4_CXXFLAG "/arch:SSE4.1" GROMACS_CXX_FLAGS)
-        endif(NOT GNU_SSE4_CXXFLAG)
+        endif(NOT GNU_SSE4_CXXFLAG AND GMX_NATIVE_WINDOWS)
         if (NOT GNU_SSE4_CXXFLAG AND NOT MSVC_SSE4_CXXFLAG) 
             message(WARNING "No C++ SSE4.1 flag found. Consider a newer compiler, or use SSE2 for slightly lower performance.")
             # Not surprising if we end up here! MSVC current does not support the SSE4.1 flag. However, it appears to accept SSE4.1
             # intrinsics when SSE2 support is enabled, so we try that instead.
-            GMX_TEST_CXXFLAG(MSVC_SSE2_CXXFLAG "/arch:SSE2" GROMACS_CXX_FLAGS)
+            if (GMX_NATIVE_WINDOWS)
+                GMX_TEST_CXXFLAG(MSVC_SSE2_CXXFLAG "/arch:SSE2" GROMACS_CXX_FLAGS)
+            endif()
         endif(NOT GNU_SSE4_CXXFLAG AND NOT MSVC_SSE4_CXXFLAG)
     endif()
 
@@ -769,18 +777,18 @@ elseif(${GMX_CPU_ACCELERATION} STREQUAL "AVX_128_FMA" OR ${GMX_CPU_ACCELERATION}
     # Set the AVX compiler flag for both these choices!
 
     GMX_TEST_CFLAG(GNU_AVX_CFLAG "-mavx" GROMACS_C_FLAGS)
-    if (NOT GNU_AVX_CFLAG)
+    if (NOT GNU_AVX_CFLAG AND GMX_NATIVE_WINDOWS)
         GMX_TEST_CFLAG(MSVC_AVX_CFLAG "/arch:AVX" GROMACS_C_FLAGS)
-    endif (NOT GNU_AVX_CFLAG)
+    endif (NOT GNU_AVX_CFLAG AND GMX_NATIVE_WINDOWS)
     if (NOT GNU_AVX_CFLAG AND NOT MSVC_AVX_CFLAG)
         message(WARNING "No C AVX flag found. Consider a newer compiler, or try SSE4.1 (lower performance).")
     endif (NOT GNU_AVX_CFLAG AND NOT MSVC_AVX_CFLAG)
 
     if (CMAKE_CXX_COMPILER_LOADED)
         GMX_TEST_CXXFLAG(GNU_AVX_CXXFLAG "-mavx" GROMACS_CXX_FLAGS)
-        if (NOT GNU_AVX_CXXFLAG)
+        if (NOT GNU_AVX_CXXFLAG AND GMX_NATIVE_WINDOWS)
             GMX_TEST_CXXFLAG(MSVC_AVX_CXXFLAG "/arch:AVX" GROMACS_CXX_FLAGS)
-        endif (NOT GNU_AVX_CXXFLAG)
+        endif (NOT GNU_AVX_CXXFLAG AND GMX_NATIVE_WINDOWS)
         if (NOT GNU_AVX_CXXFLAG AND NOT MSVC_AVX_CXXFLAG)
             message(WARNING "No C++ AVX flag found. Consider a newer compiler, or try SSE4.1 (lower performance).")
         endif (NOT GNU_AVX_CXXFLAG AND NOT MSVC_AVX_CXXFLAG)
index e44d02c19c547cebe625804d3684540dadc854c3..e5b286d704e7c02c54782355df02843d786dec94 100644 (file)
@@ -56,7 +56,7 @@ if(GMX_MPI)
       endif()
       find_package(MPI)
       if(${${MPI_PREFIX}_FOUND})
-        set(GROMACS_C_FLAGS ${GROMACS_FLAGS} ${${MPI_PREFIX}_COMPILE_FLAGS})
+        set(GROMACS_C_FLAGS ${GROMACS_C_FLAGS} ${${MPI_PREFIX}_COMPILE_FLAGS})
         set(GROMACS_LINKER_FLAGS ${GROMACS_LINKER_FLAGS} ${${MPI_PREFIX}_LINK_FLAGS})
         include_directories(${${MPI_PREFIX}_INCLUDE_PATH})
         list(APPEND GMX_EXTRA_LIBRARIES ${${MPI_PREFIX}_LIBRARIES})
index ef1d5ff88d24ffeb5b6331de67135d48000636cf..4d4f58a450e87d71076270ba340d6ab30fa20fae 100644 (file)
@@ -528,6 +528,7 @@ fft5d_plan fft5d_plan_3d(int NG, int MG, int KG, MPI_Comm comm[2], int flags, t_
              */
 #pragma omp parallel for num_threads(nthreads) schedule(static) ordered
             for(t=0; t<nthreads; t++)
+            {    
 #pragma omp ordered
             {
                 int tsize = ((t+1)*pM[s]*pK[s]/nthreads)-(t*pM[s]*pK[s]/nthreads);
@@ -538,6 +539,7 @@ fft5d_plan fft5d_plan_3d(int NG, int MG, int KG, MPI_Comm comm[2], int flags, t_
                     gmx_fft_init_many_1d     ( &plan->p1d[s][t],  C[s], tsize, (flags&FFT5D_NOMEASURE)?GMX_FFT_FLAG_CONSERVATIVE:0 );
                 }
             }
+            }
         }
 
 #ifdef GMX_FFT_FFTW3