x86 Open64 4.5.1 Release Notes Dec 19, 2011 1. Overview 2. Features 3. The Packages of the Compiler Suite 4. Supported Operating Systems 5. Installing the Compiler Suite 5.1 Install from bz2 Package 5.2 Install from RPM packages 6. Bug Reporting and Support 7. Known Issues and Limitations 1. Overview =========== This is version 4.5.1 of the x86 Open64 compiler suite. x86 Open64 is an open source, optimizing compiler for 32-bit (x86) and 64-bit (x86-64) architectures. x86 Open64 supports Fortran 77/90/95, C (C89 and C99 with GNU extensions), and C++ (C++98 with GNU extensions), as well as the shared memory programming model OpenMP (version 2.5). The compiler source code and instrumentation library (libinstr) are released under GPL v2. Libraries intended for redistribution are licensed under LGPL v2.1. These libraries include libffio, libfortran, libhugetlbfs, libmv, libopen64rt, libopen64rt_shared, libacml_mv, and libopenmp. 2. New Features in x86 Open64 4.5.1 =================================== o Extended proactive loop optimizations for improved loop-fusion, if-merging, loop-unswitching, loop-interchange and if-condition pre-computation. o Added support for partial vectorization(simdization) You can enable this using the flag -LNO:simd=3 o Added new peep-hole optimizations including improve sign extension codes, register, usage etc. o Improvements to dispatch scheduling in terms of alignment, padding, instruction size etc.You can enable this using the flag -CG:dsched o Improved performance of certain class of intrinsics such as mm_set* through better handling of CONSTRUCTORs and CONSTs o Added support to unconditionally generate non-temporal stores. o General correctness improvements including bug fixes for problems in handing BOZ constants, constant folding in Fortran data statements, better handling of floating point rules, handling complex division overflows etc. o Preview into FMA3 support. You can enable this using either the -march=bdver2 or -mfma flags 3. The Packages of the Compiler Suite ===================================== This compiler is available in both binary and source-code forms. o x86_open64-4.5.1-1.src.tar.bz2 This package contains the compiler's source code. To unpack the source, use the command: tar xjvf x86_open64-4.5.1-1.src.tar.bz2 For instructions on how to build the compiler from source, see the included INSTALL file. o x86_open64-4.5.1-1.x86_64.tar.bz2 This package contains the compiler binaries, suitable to run on systems having GlibC version 2.11 and above. In addition if your application is taking advantage of new AMD Opteron Family 15h processor ("Bulldozer" core) instructions like AVX, XOP, FMA etc you will need newer assembler (Binutils ver 2.20.0.20100122-0.7.9 or above) to support it. Newer OS versions like SLES 11 SP1, RHEL 6 etc., by default support the GLibc and Binutils that meets this requirement. This is the recommended compiler package on new AMD Opteron Family 15h processor ("Bulldozer" core) based x86-64 machines. The compiler in this package is built on an x86-64-based system running SUSE Linux Enterprise Server (SLES) 11 with SP1 installed. We use the system compilers (GCC 4.3.4) to build the compiler components and the newly built compiler components are used to build the libraries. o x86_open64-4.5.1-1.rhel5_sles10.x86_64.tar.bz2 This package contains the compiler binaries,suitable to run on systems with rhel5.x sles10.x etc. OS installed. Given this the libraries shipped with in this package, especially the math routines, are optimized to take advantage of older SIMD (SSE2 etc) instructions but cannot take advantage of newer instructions like AVX, XOP, FMA4 etc. Older OS versions like SLES 10.x, RHEL 5.x etc. support older Binutils, by default and so this is the recommended compiler package to be used in those systems. The compiler in this package is built on an x86-64-based system running SUSE Linux Enterprise Server (SLES) 10 with SP2 installed. We use the system compilers (GCC 4.1.2) to build the compiler components and the newly built compiler components are used to build the libraries. o x86_open64-4.5.1-1.x86_64.rpm This package contains the same binaries as the x86_open64-4.5.1-1.x86_64.tar.bz2 package in RPM form. o x86_open64-4.5.1-1.rhel5_sles10.x86_64.rpm This package contains the same binaries as the x86_open64-4.5.1-1.rhel5_sles10.x86_64.tar.bz2 package in RPM form. 4. Supported Operating Systems ============================== The two binary packages, o x86_open64-4.5.1-1.x86_64.tar.bz2 o x86_open64-4.5.1-1.x86_64.rpm are tested and validated on 64-bit Linux systems running: o SUSE Linux Enterprise Server (SLES) 10 with SP2 o SUSE Linux Enterprise Server (SLES) 10 with SP3 o SUSE Linux Enterprise Server (SLES) 11 with SP1 o Red Hat Enterprise Linux (RHEL) 5.5 o Red Hat Enterprise Linux (RHEL) 6.1 o Red Hat Enterprise Linux (RHEL) 6.2 x86 Open64 compilers make use of the GNU binutils package. Packages known to work include: o binutils-2.16.91.0.5-23.34.33 (SLES 10 with SP3) o binutils-2.20.0-0.7.9 (SLES 11 with SP1) o binutils-2.17.50.0.6-12.el5 (RHEL 5.4 and RHEL 5.5) For best performance on AMD Opteron Family 15h processor("Bulldozer"core) use binutils-2.21 or above. 5. Installing the Compiler Suite ================================ 5.1 Install from bz2 Package ---------------------------- If your system has GLibc 2.11 or above (newer OS like SLES 11 SP1 , RHEL 6 etc) expand, x86_open64-4.2.5.2-1.x86_64.tar.bz2. . tar xjvf x86_open64-4.5.1-1.x86_64.tar.bz2 If your system does not comply to the above, you need to expand x86_open64-4.5.1-1.rhel5_sles10.x86_64.tar.bz2 tar xjvf x86_open64-4.5.1-1.rhel5_sles10.x86_64.tar.bz2 If desired, move the x86_open64-4.5.1 directory to the final installation location using the 'mv' command. The C, C++, FORTRAN compilers are now available in the 'bin' subdirectory. 5.2 Install from RPM Package ---------------------------- Normally you must have superuser privileges to install RPM packages. If your system has GLibc 2.11 or above AND newer assembler (Binutils ver 2.20.0.20100122-0.7.9 or above) OR newer OS like SLES 11 SP1, RHEL 6 etc., you need to be using the package x86_open64-4.5.1-1.x86_64.rpm To install the compiler from RPM: $ rpm -ivh x86_open64-4.5.1-1.x86_64.rpm This command will install the x86 Open64 compiler to /opt/x86_open64-4.5.1. The C, C++, FORTRAN compilers are in folder /opt/x86_open64-4.5.1/bin. To install the compiler to another location: $ rpm --prefix=/path/to/folder -ivh \ x86_open64-4.5.1-1.x86_64.rpm Then the compiler will be installed to /path/to/folder. If your system does not comply to the above, you need to be using the package x86_open64-4.5.1-1.rhel5_sles10.x86_64.rpm To install the compiler from RPM: $ rpm -ivh x86_open64-4.5.1-1.rhel5_sles10.x86_64.rpm This command will install the x86 Open64 compiler to /opt/x86_open64-4.5.1. The C, C++, FORTRAN compilers are in folder /opt/x86_open64-4.5.1/bin. To install the compiler to another location: $ rpm --prefix=/path/to/folder -ivh x86_open64-4.5.1-1.rhel5_sles10.x86_64.rpm Then the compiler will be installed to /path/to/folder. 6. Bug Reporting and Support ============================ To report a bug or get help with the binary releases, please see the Support section on http://developer.amd.com/cpu/open64. Bug reports should include these items in order to be reproduced: o The compiler release version. o System details -- the OS, libc version, etc. o The compilation flags that trigger the bug. o The test file if applicable (it is highly appreciated if the test file is minimized). o The correct output of the test file. 7. Known Issues and Limitations =============================== o The Open64 compiler depends on 32-bit system libraries. These libraries may not be installed by default on some Linux distributions, such as the 64-bit Fedora 16 distribution. Before installing the compiler on Fedora 16, make certain the following packages are installed: glibc.i686 and libstdc++.i686. o Linux Operating Systems are frequently configured with a soft limit on process stack sizes. Programs that exceed these limits by methods such as placing very large arrays on the stack will terminate with a segmentation violation. You can query and alter these limits using the ulimit command (ksh, sh and bash) or limit command (tcsh, csh). o Open64 does not support the following GCC extensions: - complex integer data types - decimal floating point types - GCC vector types containing a single element - GCC vector types whose base type is char and whose overall size is less than 8 bytes - the __builtin_object_size function - the __builtin_apply function - vector types other than MMX (8-byte) and SSE (16-bit) The __builtin_return_address function is supported only with no optimization. o Open64 does not fully support C99 variable length arrays. o To provide the best runtime performance, the compiler makes assumptions that runtime integer arithmetic expressions that arise in certain contexts do not overflow (that is, they do not produce values that are too high or too low to represent). These assumptions apply to expressions that are present in user code as well as expressions that the compiler constructs. Note that if an integer arithmetic overflow assumption is violated, runtime behavior is undefined. Option '-OPT:wrap_around_unsafe=off' instructs the compiler to be conservative about integer overflow assumptions and avoid performing optimizations that are based on integer overflow assumptions, for example, linear function test replacement. o Open64 4.5.1 does not fully support all intrinsics in SSE4.1, SSE4.2, SSSE3, AVX, XOP, FMA4,pclmul, AES, given that Open64 uses GCC 4.2 front end. Open64 cannot package the newer header files from GCC 4.5.x or greater since these releases are under GPLv3 license. o Binutils requires to be 2.20.0.20100122-0.7.9 or above to use the new AMD Opteron Family 15h processor ("Bulldozer" core) instructions. o In certain OSes like RHEL, Fedora etc. for shared objects. one may not be able to override RPATH using LD_LIRARY_PATH, since the dynamic linker sets, only the DT_RPATH value and not DT_RUNPATH. The current workaround for this issue would be to either patch the binary using utility like PatchElf (http://nixos.org/patchelf.html)