Report MIC SIMD correctly
authorRoland Schulz <roland@utk.edu>
Thu, 27 Feb 2014 06:41:41 +0000 (01:41 -0500)
committerGerrit Code Review <gerrit@gerrit.gromacs.org>
Wed, 5 Mar 2014 14:02:15 +0000 (15:02 +0100)
Avoid cmake warning because SIMD cannot be detected. And
avoid that version information prints "None". This is
needed because MIC doesn't use GMX_SIMD so that the same
setting (__MIC__) can be used both for native and (future)
offload.

Also added installguide section.

Change-Id: I4af3b13678aa5c3c69c60bda499c3691ac83dc53

CMakeLists.txt
admin/installguide/installguide.tex
cmake/Platform/XeonPhi.cmake [new file with mode: 0644]
cmake/TestMIC.c [new file with mode: 0644]
cmake/gmxDetectTargetArchitecture.cmake
src/gromacs/gmxlib/copyrite.cpp

index eb41e7a4d6a778c5c0566b6809907acb5bf9a03f..6a47b6d846d7017e3eb8a2fd6a2148c9d8b2af2e 100644 (file)
@@ -198,8 +198,12 @@ if(GMX_CPU_ACCELERATION)
     set(GMX_SIMD "${GMX_CPU_ACCELERATION}" CACHE STRING "SIMD instruction set level and compiler optimization" FORCE)
 endif(GMX_CPU_ACCELERATION)
 
-include(gmxDetectSimd)
-gmx_detect_simd(GMX_SUGGESTED_SIMD)
+if(NOT GMX_TARGET_MIC)
+    include(gmxDetectSimd)
+    gmx_detect_simd(GMX_SUGGESTED_SIMD)
+else()
+    set(GMX_SUGGESTED_SIMD "None")
+endif()
 
 gmx_option_multichoice(
     GMX_SIMD
index 9a84bf369836390b84e4db2ba22f6e195b5e1ab8..a4137de01283079c5edaae63594b540fb8809b4d 100644 (file)
@@ -908,6 +908,22 @@ Sparc64viiifx chips. On this platform \gromacs{} \gromacsversion{} has
 accelerated group kernels, no accelerated Verlet kernels, and a custom
 build toolchain.
 
+\subsubsection{Intel Xeon Phi}
+
+\gromacs{} 5.0 has preliminary support for Intel Xeon Phi. Only symmetric
+(aka native) mode is supported. \gromacs{} is functional on Xeon Phi,
+but it has so far not been optimized to the same level as other
+architectures have. The performance depends among other factors on the
+system size (see ``Running in parallel''), and for now the performance
+might not be faster than CPUs. Building for Xeon Phi works almost as any
+other Unix. See the instructions above for details. The recommended
+configuration is
+\begin{verbatim}
+cmake .. -DCMAKE_TOOLCHAIN_FILE=Platform/XeonPhi
+make
+make install
+\end{verbatim}
+
 \section{Tested platforms}
 
 While it is our best belief that \gromacs{} will build and run pretty
diff --git a/cmake/Platform/XeonPhi.cmake b/cmake/Platform/XeonPhi.cmake
new file mode 100644 (file)
index 0000000..f384578
--- /dev/null
@@ -0,0 +1,39 @@
+#
+# This file is part of the GROMACS molecular simulation package.
+#
+# Copyright (c) 2014, by the GROMACS development team, led by
+# Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
+# and including many others, as listed in the AUTHORS file in the
+# top-level source directory and at http://www.gromacs.org.
+#
+# GROMACS is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public License
+# as published by the Free Software Foundation; either version 2.1
+# of the License, or (at your option) any later version.
+#
+# GROMACS is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with GROMACS; if not, see
+# http://www.gnu.org/licenses, or write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
+#
+# If you want to redistribute modifications to GROMACS, please
+# consider that scientific software is very special. Version
+# control is crucial - bugs must be traceable. We will be happy to
+# consider code for inclusion in the official distribution, but
+# derived work must not be called official GROMACS. Details are found
+# in the README & COPYING files - if they are missing, get the
+# official version at http://www.gromacs.org.
+#
+# To help us fund GROMACS development, we humbly ask that you cite
+# the research papers on the package. Check out http://www.gromacs.org.
+
+set(CMAKE_C_COMPILER "icc")
+set(CMAKE_CXX_COMPILER "icpc")
+set(CMAKE_CXX_FLAGS "-mmic" CACHE STRING "Flags used by the compiler during all build types.")
+set(CMAKE_C_FLAGS "-mmic" CACHE STRING "Flags used by the compiler during all build types.")
+set(GMX_FFT_LIBRARY "mkl" CACHE STRING "FFT library")
diff --git a/cmake/TestMIC.c b/cmake/TestMIC.c
new file mode 100644 (file)
index 0000000..c03a61b
--- /dev/null
@@ -0,0 +1,8 @@
+int main()
+{
+#ifdef __MIC__
+    return 0;
+#else
+#error This compiler is not targetting MIC
+#endif
+}
index 45a2a47fd5ec509f6ce7d41afb5994d0302e6b68..2bd98720903e27ee21bab591d4c2dac81cd6edaa 100644 (file)
@@ -49,4 +49,8 @@ function(gmx_detect_target_architecture)
         try_compile(GMX_TARGET_BGQ ${CMAKE_BINARY_DIR}
             "${CMAKE_SOURCE_DIR}/cmake/TestBlueGeneQ.c")
     endif()
+    if (NOT DEFINED GMX_TARGET_MIC)
+        try_compile(GMX_TARGET_MIC ${CMAKE_BINARY_DIR}
+            "${CMAKE_SOURCE_DIR}/cmake/TestMIC.c")
+    endif()
 endfunction()
index 2ecce78515bf73ba42823d7725d207f2e8afdd9a..9d8a28ada9e87617ef1e757b3f6682736b34eac0 100644 (file)
@@ -679,7 +679,11 @@ static void gmx_print_version_info(FILE *fp)
 #define gmx_stringify2(x) #x
 #define gmx_stringify(x) gmx_stringify2(x)
     fprintf(fp, "invsqrt routine:    %s\n", gmx_stringify(gmx_invsqrt(x)));
+#ifndef __MIC__
     fprintf(fp, "SIMD instructions:  %s\n", GMX_SIMD_STRING);
+#else
+    fprintf(fp, "SIMD instructions:  %s\n", "Intel MIC");
+#endif
 
     fprintf(fp, "FFT library:        %s\n", gmx_fft_get_version_info());
 #ifdef HAVE_RDTSCP