From: Roland Schulz Date: Mon, 28 Jul 2014 17:32:04 +0000 (-0400) Subject: Merge release-5-0 into master X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?a=commitdiff_plain;h=d045cc43f9172bd53777dd600e2f51b750463cd3;p=alexxy%2Fgromacs.git Merge release-5-0 into master Conflicts: src/testutils/refdata.h (trivial) Manual changes: src/external/Random123-1.08/include/Random123/features/compilerfeatures.h replaced simple.h with basedefintions.h Change-Id: I96fbc370b1c6bec101d877b2e3bda1adec56fcb6 --- d045cc43f9172bd53777dd600e2f51b750463cd3 diff --cc src/external/Random123-1.08/include/Random123/features/compilerfeatures.h index 4039790823,3468b659a5..f5f110209d --- a/src/external/Random123-1.08/include/Random123/features/compilerfeatures.h +++ b/src/external/Random123-1.08/include/Random123/features/compilerfeatures.h @@@ -1,320 -1,57 +1,57 @@@ /* - Copyright 2010-2011, D. E. Shaw Research. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions, and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions, and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of D. E. Shaw Research nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - /** - - @page porting Preprocessor symbols for porting Random123 to different platforms. - - The Random123 library is portable across C, C++, CUDA, OpenCL environments, - and multiple operating systems (Linux, Windows 7, Mac OS X, FreeBSD, Solaris). - This level of portability requires the abstraction of some features - and idioms that are either not standardized (e.g., asm statments), or for which - different vendors have their own standards (e.g., SSE intrinsics) or for - which vendors simply refuse to conform to well-established standards (e.g., ). - - Random123/features/compilerfeatures.h - conditionally includes a compiler-or-OS-specific Random123/featires/XXXfeatures.h file which - defines appropriate values for the preprocessor symbols which can be used with - a specific compiler or OS. Those symbols will then - be used by other header files and source files in the Random123 - library (and may be used by applications) to control what actually - gets presented to the compiler. - - Most of the symbols are boolean valued. In general, they will - \b always be defined with value either 1 or 0, so do - \b NOT use \#ifdef. Use \#if R123_USE_SOMETHING instead. - - Library users can override any value by defining the pp-symbol with a compiler option, - e.g., - - cc -DR123_USE_MULHILO64_C99 - - will use a strictly c99 version of the full-width 64x64->128-bit multiplication - function, even if it would be disabled by default. - - All boolean-valued pre-processor symbols in Random123/features/compilerfeatures.h start with the prefix R123_USE_ - @verbatim - AES_NI - AES_OPENSSL - SSE4_2 - SSE4_1 - SSE - - STD_RANDOM - - GNU_UINT128 - ASM_GNU - ASM_MSASM - - CPUID_MSVC - - CXX11_RANDOM - CXX11_TYPE_TRAITS - CXX11_STATIC_ASSERT - CXX11_CONSTEXPR - CXX11_UNRESTRICTED_UNIONS - CXX11_EXPLICIT_CONVERSIONS - CXX11_LONG_LONG - CXX11 - - X86INTRIN_H - IA32INTRIN_H - XMMINTRIN_H - EMMINTRIN_H - SMMINTRIN_H - WMMINTRIN_H - INTRIN_H - - MULHILO32_ASM - MULHILO64_ASM - MULHILO64_MSVC_INTRIN - MULHILO64_CUDA_INTRIN - MULHILO64_OPENCL_INTRIN - MULHILO64_C99 - - U01_DOUBLE - - @endverbatim - Most have obvious meanings. Some non-obvious ones: - - AES_NI and AES_OPENSSL are not mutually exclusive. You can have one, - both or neither. - - GNU_UINT128 says that it's safe to use __uint128_t, but it - does not require its use. In particular, it should be - used in mulhilo only if MULHILO64_ASM is unset. - - If the XXXINTRIN_H macros are true, then one should - @code - #include - @endcode - to gain accesss to compiler intrinsics. - - The CXX11_SOME_FEATURE macros allow the code to use specific - features of the C++11 language and library. The catchall - In the absence of a specific CXX11_SOME_FEATURE, the feature - is controlled by the catch-all R123_USE_CXX11 macro. - - U01_DOUBLE defaults on, and can be turned off (set to 0) - if one does not want the utility functions that convert to double - (i.e. u01_*_53()), e.g. on OpenCL without the cl_khr_fp64 extension. - - There are a number of invariants that are always true. Application code may - choose to rely on these: - -
    -
  • ASM_GNU and ASM_MASM are mutually exclusive -
  • The "higher" SSE values imply the lower ones. -
- - There are also non-boolean valued symbols: - -
    -
  • R123_STATIC_INLINE - - According to both C99 and GNU99, the 'static inline' declaration allows - the compiler to not emit code if the function is not used. - Note that the semantics of 'inline', 'static' and 'extern' in - gcc have changed over time and are subject to modification by - command line options, e.g., -std=gnu89, -fgnu-inline. - Nevertheless, it appears that the meaning of 'static inline' - has not changed over time and (with a little luck) the use of 'static inline' - here will be portable between versions of gcc and to other C99 - compilers. - See: http://gcc.gnu.org/onlinedocs/gcc/Inline.html - http://www.greenend.org.uk/rjk/2003/03/inline.html - -
  • R123_FORCE_INLINE(decl) - - which expands to 'decl', adorned with the compiler-specific - embellishments to strongly encourage that the declared function be - inlined. If there is no such compiler-specific magic, it should - expand to decl, unadorned. - -
  • R123_CUDA_DEVICE - which expands to __device__ (or something else with - sufficiently similar semantics) when CUDA is in use, and expands - to nothing in other cases. - -
  • R123_ASSERT(x) - which expands to assert(x), or maybe to nothing at - all if we're in an environment so feature-poor that you can't even - call assert (I'm looking at you, CUDA and OpenCL), or even include - assert.h safely (OpenCL). - -
  • R123_STATIC_ASSERT(expr,msg) - which expands to - static_assert(expr,msg), or to an expression that - will raise a compile-time exception if expr is not true. - -
  • R123_ULONG_LONG - which expands to a declaration of the longest available - unsigned integer. - -
  • R123_64BIT(x) - expands to something equivalent to - UINT64_C(x) from , even in environments where - is not available, e.g., MSVC and OpenCL. - -
  • R123_BUILTIN_EXPECT(expr,likely_value) - expands to something with - the semantics of gcc's __builtin_expect(expr,likely_value). If - the environment has nothing like __builtin_expect, it should expand - to just expr. -
- - - \cond HIDDEN_FROM_DOXYGEN - */ - - /* - N.B. When something is added to the list of features, it should be - added to each of the *features.h files, AND to examples/ut_features.cpp. - */ - - /* N.B. most other compilers (icc, nvcc, open64, llvm) will also define __GNUC__, so order matters. */ - #if defined(__OPENCL_VERSION__) && __OPENCL_VERSION__ > 0 - #include "openclfeatures.h" - #elif defined(__CUDACC__) - #include "nvccfeatures.h" - #elif defined(__ICC) - #include "iccfeatures.h" - #elif defined(__xlC__) - #include "xlcfeatures.h" - #elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) - #include "sunprofeatures.h" - #elif defined(__OPEN64__) - #include "open64features.h" - #elif defined(__clang__) - #include "clangfeatures.h" - #elif defined(__GNUC__) - #include "gccfeatures.h" - #elif defined(__PGI) - #include "pgccfeatures.h" - #elif defined(_MSC_FULL_VER) - #include "msvcfeatures.h" - #else - #error "Can't identify compiler. You'll need to add a new xxfeatures.hpp" - { /* maybe an unbalanced brace will terminate the compilation */ - #endif - - #ifndef R123_USE_CXX11 - #define R123_USE_CXX11 (__cplusplus >= 201103L) - #endif - - #ifndef R123_USE_CXX11_UNRESTRICTED_UNIONS - #define R123_USE_CXX11_UNRESTRICTED_UNIONS R123_USE_CXX11 - #endif - - #ifndef R123_USE_CXX11_STATIC_ASSERT - #define R123_USE_CXX11_STATIC_ASSERT R123_USE_CXX11 - #endif - - #ifndef R123_USE_CXX11_CONSTEXPR - #define R123_USE_CXX11_CONSTEXPR R123_USE_CXX11 - #endif - - #ifndef R123_USE_CXX11_EXPLICIT_CONVERSIONS - #define R123_USE_CXX11_EXPLICIT_CONVERSIONS R123_USE_CXX11 - #endif - - #ifndef R123_USE_CXX11_RANDOM - #define R123_USE_CXX11_RANDOM R123_USE_CXX11 - #endif - - #ifndef R123_USE_CXX11_TYPE_TRAITS - #define R123_USE_CXX11_TYPE_TRAITS R123_USE_CXX11 - #endif - - #ifndef R123_USE_CXX11_LONG_LONG - #define R123_USE_CXX11_LONG_LONG R123_USE_CXX11 - #endif - - #ifndef R123_USE_MULHILO64_C99 - #define R123_USE_MULHILO64_C99 0 - #endif - - #ifndef R123_USE_MULHILO64_MULHI_INTRIN - #define R123_USE_MULHILO64_MULHI_INTRIN 0 - #endif - - #ifndef R123_USE_MULHILO32_MULHI_INTRIN - #define R123_USE_MULHILO32_MULHI_INTRIN 0 - #endif - - #ifndef R123_STATIC_ASSERT - #if R123_USE_CXX11_STATIC_ASSERT - #define R123_STATIC_ASSERT(expr, msg) static_assert(expr, msg) - #else - /* if msg always_looked_like_this, we could paste it into the name. Worth it? */ - #define R123_STATIC_ASSERT(expr, msg) typedef char static_assertion[(!!(expr))*2-1] - #endif - #endif - - #ifndef R123_CONSTEXPR - #if R123_USE_CXX11_CONSTEXPR - #define R123_CONSTEXPR constexpr - #else - #define R123_CONSTEXPR - #endif - #endif - - #ifndef R123_USE_PHILOX_64BIT - #define R123_USE_PHILOX_64BIT (R123_USE_MULHILO64_ASM || R123_USE_MULHILO64_MSVC_INTRIN || R123_USE_MULHILO64_CUDA_INTRIN || R123_USE_GNU_UINT128 || R123_USE_MULHILO64_C99 || R123_USE_MULHILO64_OPENCL_INTRIN || R123_USE_MULHILO64_MULHI_INTRIN) - #endif - - #ifndef R123_ULONG_LONG - #if defined(__cplusplus) && !R123_USE_CXX11_LONG_LONG - /* C++98 doesn't have long long. It doesn't have uint64_t either, but - we will have typedef'ed uint64_t to something in the xxxfeatures.h. - With luck, it won't elicit complaints from -pedantic. Cross your - fingers... */ - #define R123_ULONG_LONG uint64_t - #else - #define R123_ULONG_LONG unsigned long long - #endif - #endif - - /* UINT64_C should have been #defined by XXXfeatures.h, either by - #include or through compiler-dependent hacks */ - #ifndef R123_64BIT - #define R123_64BIT(x) UINT64_C(x) - #endif - - #ifndef R123_THROW - #define R123_THROW(x) throw (x) - #endif - - /* - * Windows.h (and perhaps other "well-meaning" code define min and - * max, so there's a high chance that our definition of min, max - * methods or use of std::numeric_limits min and max will cause - * complaints in any program that happened to include Windows.h or - * suchlike first. We use the null macro below in our own header - * files definition or use of min, max to defensively preclude - * this problem. It may not be enough; one might need to #define - * NOMINMAX before including Windows.h or compile with -DNOMINMAX. + * 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. */ - #define R123_NO_MACRO_SUBST - /** \endcond */ + #include + -#include "gromacs/legacyheaders/types/simple.h" ++#include "gromacs/utility/basedefinitions.h" + + /* We only use the C interface of ThreeFry and r123array2x64. This file is a + replacment for the original from the Random123 distribution. It sets all + defines (they all start with R123_), which are used by those parts of + Random123 being used. Instead of determining values based on the Compiler + (Name, Version, ..) we set values based on our assumptions in Gromacs, and + the defines used in Gromacs */ + + /* Random123 isn't used from Cuda thus this can always be empty */ + #define R123_CUDA_DEVICE + /* For "inline" use the Gromacs own gmx_inline */ + #define R123_STATIC_INLINE static gmx_inline + /* force_inline isn't used in Gromacs - if it matters for a compiler it probably - not only matters here and should be defined in simple.h */ ++ not only matters here and should be defined in basedefinitions.h */ + #define R123_FORCE_INLINE(decl) decl + /* We assume in Gromacs that assert is available outside of Cuda */ + #define R123_ASSERT assert + /* Not used (only used by C++ interface of ThreeFry) */ + #define R123_STATIC_ASSERT(expr, msg)