[open-coarrays] 60/80: New upstream 1.8.10
Alastair McKinstry
mckinstry at moszumanska.debian.org
Wed Oct 25 13:45:50 UTC 2017
This is an automated email from the git hooks/post-receive script.
mckinstry pushed a commit to branch debian/master
in repository open-coarrays.
commit fb52d3364d5becca7998b498330e9858cea4c4c0
Author: Alastair McKinstry <mckinstry at debian.org>
Date: Wed May 10 15:42:01 2017 +0100
New upstream 1.8.10
---
.VERSION | 5 +
CMakeLists.txt | 99 ++-
GETTING_STARTED.md | 2 +-
INSTALL.md | 343 ++++++----
README.md | 170 +++--
doc/dependency_tree/opencoarrays-tree.txt | 2 +-
.../flex-2.6.0/bison-3.0.4/m4-1.4.17/.gitkeep | 0
.../gcc-6.1.0/gmp/.gitkeep | 0
.../gcc-6.1.0/mpc/.gitkeep | 0
.../gcc-6.1.0/mpfr/.gitkeep | 0
prerequisites/build-functions/build_and_install.sh | 10 +-
.../edit_GCC_download_prereqs_file_if_necessary.sh | 4 +-
.../set_or_print_default_version.sh | 2 +-
.../install-functions/build_opencoarrays.sh | 13 +-
prerequisites/install-functions/print_header.sh | 2 +-
prerequisites/install-functions/report_results.sh | 24 +-
src/single/CMakeLists.txt | 5 -
src/single/Makefile | 19 -
src/single/single.c | 727 ---------------------
src/tests/regression/open/issue-172 | 1 -
20 files changed, 459 insertions(+), 969 deletions(-)
diff --git a/.VERSION b/.VERSION
new file mode 100644
index 0000000..ff1f65f
--- /dev/null
+++ b/.VERSION
@@ -0,0 +1,5 @@
+# OpenCoarrays version file. Odd patch levels indicate inter-release
+# version, i.e., code is from SCM/git. This project uses semantic
+# versioning. For details see http://semver.org
+
+1.8.10
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ebd59ba..f7f7b61 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.2)
# Set the type/configuration of build to perform
set ( CMAKE_CONFIGURATION_TYPES "Debug" "Release" "MinSizeRel" "RelWithDebInfo" "CodeCoverage" )
@@ -6,6 +6,14 @@ set ( CMAKE_BUILD_TYPE "Release"
CACHE STRING "Select which configuration to build." )
set_property ( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES} )
+# Add option and check environment to determine if developer tests should be run
+if(ENV{OPENCOARRAYS_DEVELOPER})
+ option(RUN_DEVELOPER_TESTS "Run tests intended only for developers" ON)
+else()
+ option(RUN_DEVELOPER_TESTS "Run tests intended only for developers" OFF)
+endif()
+mark_as_advanced(RUN_DEVELOPER_TESTS)
+
# Name project and specify source languages
# Parse version from .VERSION file so that more info can be added and easier to get from scripts
file( STRINGS ".VERSION" OpenCoarraysVersion
@@ -90,7 +98,7 @@ the C compiler if it matches the Fortran compiler ID." )
endif()
set( CMAKE_Fortran_COMPILER_VERSION "${DETECTED_VER}" )
endif()
-
+
# We have populated CMAKE_Fortran_COMPILER_VERSION if it was missing
if(gfortran_compiler AND (CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER 5.0.0))
set(opencoarrays_aware_compiler true)
@@ -155,15 +163,84 @@ endif()
find_package( MPI )
-if ( (NOT MPI_C_FOUND) OR (NOT MPI_Fortran_FOUND) )
+if ( (NOT MPI_C_FOUND) OR (NOT MPI_Fortran_FOUND) OR (NOT MPIEXEC))
+ # Get default install location of MPICH from install.sh
+ execute_process( COMMAND "./install.sh" -P mpich
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+ OUTPUT_VARIABLE DEFAULT_MPICH_INSTALL_LOC
+ OUTPUT_QUIET
+ OUTPUT_STRIP_TRAILING_WHITES_SPACE
+ )
find_program (MY_MPI_EXEC NAMES mpirun mpiexec lamexec srun
- PATHS "${CMAKE_SOURCE_DIR/prerequisites/installations/mpich/3.1.4}" "${CMAKE_SOURCE_DIR}/prerequisites/installations/mpich/*" ENV PATH
+ PATHS "${DEFAULT_MPICH_INSTALL_LOC}" ENV PATH
HINTS "${FTN_COMPILER_DIR}" "${C_COMPILER_DIR}"
PATH_SUFFIXES bin)
set ( MPI_HOME "${MPI_HOME}" "${MY_MPI_EXEC}" "${MY_MPI_EXEC}/.." )
find_package( MPI REQUIRED )
endif()
+# Test for consistent MPI environment
+if (NOT MPIEXEC)
+ message ( ERROR "CMake failed to find `mpiexec` or similar. If building with `./install.sh` please
+report this bug to the OpenCoarrays developers at
+https://github.com/sourceryinstitute/opencoarrays/issues, otherwise use point CMake
+to the desired MPI runtime.")
+endif()
+
+get_filename_component(MPIEXEC_RELATIVE_LOC "${MPIEXEC}"
+ PROGRAM)
+get_filename_component(MPIEXEC_ABS_LOC "${MPIEXEC_RELATIVE_LOC}"
+ REALPATH)
+get_filename_component(MPIEXEC_DIR "${MPIEXEC_ABS_LOC}"
+ DIRECTORY)
+
+get_filename_component(MPICC_RELATIVE_LOC "${MPI_C_COMPILER}"
+ PROGRAM)
+get_filename_component(MPICC_ABS_LOC "${MPICC_RELATIVE_LOC}"
+ REALPATH)
+get_filename_component(MPICC_DIR "${MPICC_ABS_LOC}"
+ DIRECTORY)
+
+get_filename_component(MPIFC_RELATIVE_LOC "${MPI_Fortran_COMPILER}"
+ PROGRAM)
+get_filename_component(MPIFC_ABS_LOC "${MPIFC_RELATIVE_LOC}"
+ REALPATH)
+get_filename_component(MPIFC_DIR "${MPIFC_ABS_LOC}"
+ DIRECTORY)
+
+if ((MPIEXEC_DIR STREQUAL MPICC_DIR) AND (MPIEXEC_DIR STREQUAL MPIFC_DIR))
+ message ( STATUS "MPI runtime and compile time environments appear to be consistent")
+else()
+ message ( WARNING "MPIEXEC is in \"${MPIEXEC_DIR},\"
+which differs from the location of MPICC and/or MPIFC which are in
+\"${MPICC_DIR}\" and \"${MPIFC_DIR},\" respectively.
+This is likely indicative of a problem. If building with `./install.sh` please report
+this to the OpenCoarrays developers by filing a new issue at:
+https://github.com/sourceryinstitute/OpenCoarrays/issues/new")
+endif()
+
+#-----------------------------------------------
+# Work around bug #317 present on fedora systems
+#-----------------------------------------------
+if( (MPI_C_LINK_FLAGS MATCHES "noexecstack") OR (MPI_Fortran_LINK_FLAGS MATCHES "noexecstack") )
+ message ( WARNING
+"The `noexecstack` linker flag was found in the MPI_<lang>_LINK_FLAGS variable. This is
+known to cause segmentation faults for some Fortran codes. See, e.g.,
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71729 or
+https://github.com/sourceryinstitute/OpenCoarrays/issues/317.
+
+`noexecstack` is being replaced with `execstack`"
+ )
+ string(REPLACE "noexecstack"
+ "execstack" MPI_C_LINK_FLAGS_FIXED ${MPI_C_LINK_FLAGS})
+ string(REPLACE "noexecstack"
+ "execstack" MPI_Fortran_LINK_FLAGS_FIXED ${MPI_Fortran_LINK_FLAGS})
+ set(MPI_C_LINK_FLAGS "${MPI_C_LINK_FLAGS_FIXED}" CACHE STRING
+ "MPI C linking flags" FORCE)
+ set(MPI_Fortran_LINK_FLAGS "${MPI_Fortran_LINK_FLAGS_FIXED}" CACHE STRING
+ "MPI Fortran linking flags" FORCE)
+endif()
+
#--------------------------------------------------------
# Make sure a simple "hello world" C mpi program compiles
#--------------------------------------------------------
@@ -399,10 +476,12 @@ if(opencoarrays_aware_compiler)
add_mpi_test(register_alloc_comp_1 2 ${tests_root}/unit/init_register/register_alloc_comp_1)
add_mpi_test(register_alloc_comp_2 2 ${tests_root}/unit/init_register/register_alloc_comp_2)
add_mpi_test(register_alloc_comp_3 2 ${tests_root}/unit/init_register/register_alloc_comp_3)
- add_mpi_test(async_comp_alloc 6 ${tests_root}/unit/init_register/async_comp_alloc)
- # Timeout async_comp_alloc test after 3 seconds to progess past the known failure
- set_property(TEST async_comp_alloc PROPERTY TIMEOUT_AFTER_MATCH 3 "known failure")
- set_property(TEST async_comp_alloc PROPERTY TIMEOUT 6) # in the event old CMake is being used
+ if (RUN_DEVELOPER_TESTS)
+ add_mpi_test(async_comp_alloc 6 ${tests_root}/unit/init_register/async_comp_alloc)
+ # Timeout async_comp_alloc test after 3 seconds to progess past the known failure
+ set_property(TEST async_comp_alloc PROPERTY TIMEOUT_AFTER_MATCH 3 "known failure")
+ set_property(TEST async_comp_alloc PROPERTY TIMEOUT 6) # in the event old CMake is being used
+ endif()
endif()
add_mpi_test(get_array 2 ${tests_root}/unit/send-get/get_array)
add_mpi_test(get_self 2 ${tests_root}/unit/send-get/get_self)
@@ -439,7 +518,9 @@ if(opencoarrays_aware_compiler)
# GFortran PR 78505 only fixed on trunk/gcc 7
add_mpi_test(source-alloc-no-sync 8 ${tests_root}/regression/reported/source-alloc-sync)
endif()
- add_mpi_test(convert-before-put 3 ${tests_root}/regression/reported/convert-before-put)
+ if (RUN_DEVELOPER_TESTS)
+ add_mpi_test(convert-before-put 3 ${tests_root}/regression/reported/convert-before-put)
+ endif()
add_mpi_test(event-post 3 ${tests_root}/regression/reported/event-post)
add_mpi_test(co_reduce-factorial 4 ${tests_root}/regression/reported/co_reduce-factorial)
add_mpi_test(co_reduce-factorial-int8 4 ${tests_root}/regression/reported/co_reduce-factorial-int8)
diff --git a/GETTING_STARTED.md b/GETTING_STARTED.md
index 1b45ed4..eb3b1bb 100644
--- a/GETTING_STARTED.md
+++ b/GETTING_STARTED.md
@@ -107,7 +107,7 @@ If the `caf` compiler wrapper cannot process the source code in question, invoke
the underlying communication library directly:
```bash
-mpif90 -fcoarray=lib -L/opt/opencoarrays/ tally.f90 \ -lcaf_mpi -o htally-I<OpenCoarrays-install-path>/mod
+mpif90 -fcoarray=lib -L/opt/opencoarrays/ tally.f90 \ -lcaf_mpi -o htally -I<OpenCoarrays-install-path>/mod
```
and also run the program with the lower-level communication library:
diff --git a/INSTALL.md b/INSTALL.md
index e9c1112..fb06375 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -4,35 +4,36 @@
[For better viewing, including hyperlinks, read it online at ]:#
[https://github.com/sourceryinstitute/OpenCoarrays/blob/master/INSTALL.md]:#
-Installing OpenCoarrays
-=======================
+# Installing OpenCoarrays #
[](https://github.com/sourceryinstitute/OpenCoarrays/releases/latest)
[](https://github.com/sourceryinstitute/OpenCoarrays/releases/latest)
-[![Download as PDF][pdf img]](http://md2pdf.herokuapp.com/sourceryinstitute/OpenCoarrays/blob/master/INSTALL.pdf)
+[![Download as PDF][pdf img]][INSTALL.pdf]
Download this file as a PDF document
-[here](http://md2pdf.herokuapp.com/sourceryinstitute/OpenCoarrays/blob/master/INSTALL.pdf).
-
- * [End-User Installation]
- * [macOS]
- * [Windows]
- * [Linux]
- * [Virtual machine]
- * [Installation Script]
- * [Advanced Installation from Source]
- * [Prerequisites]
- * [CMake scripts]
- * [Make]
- * [Obtaining GCC, MPICH, and CMake]
-
-End-User Installation
----------------------
-
-Most users will find it easiest and fastest to use package management software to install OpenCoarrays.
-Package management options for macOS (formerly known as OS X), Windows, and Linux are described first
-below. Also described below are options for installing via the Sourcery Institute virtual machine or
-the OpenCoarrays installation script.
+[here][INSTALL.pdf].
+
+* [End-User Installation]
+ * [macOS]
+ * [Windows]
+ * [Linux]
+ * [FreeBSD]
+ * [Virtual machine]
+ * [Installation Script]
+* [Advanced Installation from Source]
+ * [Prerequisites]
+ * [CMake scripts]
+ * [Make]
+* [Obtaining GCC, MPICH, and CMake]
+
+## End-User Installation ##
+
+Most users will find it easiest and fastest to use package management
+software to install OpenCoarrays. Package management options for
+macOS (formerly known as OS X), Windows, and Linux are described first
+below. Also described below are options for installing via the
+Sourcery Institute virtual machine or the OpenCoarrays installation
+script.
[top]
@@ -40,135 +41,179 @@ the OpenCoarrays installation script.
[](http://braumeister.org/formula/opencoarrays)
-OS X users may use the [Homebrew] or [MacPorts] package management systems to install OpenCoarrays.
-We recommend [Homebrew].
+macOS users may use the [Homebrew] or [MacPorts] package management
+systems to install OpenCoarrays. We recommend [Homebrew].
Basic Homebrew installation steps:
-```
+
+```bash
brew update
brew install opencoarrays
```
OpenCoarrays also ships with a
-[`Brewfile`](https://github.com/sourceryinstitute/OpenCoarrays/blob/master/Brewfile)
+[`Brewfile`][Brewfile]
that will make it easier to install opencoarrays using MPICH built
with GCC. To install using the
-[`Brewfile`](https://github.com/sourceryinstitute/OpenCoarrays/blob/master/Brewfile)
+[`Brewfile`][Brewfile]
with MPICH wrapping GCC, follow these steps:
-```
+```bash
brew tap homebrew/bundle
brew update
brew bundle
```
MacPorts installation steps:
-```
+
+```bash
sudo port selfupdate
sudo port upgrade outdated
sudo port install opencoarrays
```
-where the `sudo` command requires administrator privileges. If you install using MacPorts, please
-also install the `mpstats` port as follows:
-```
+
+where the `sudo` command requires administrator privileges. If you
+install using MacPorts, please also install the `mpstats` port as
+follows:
+
+```bash
sudo port install mpstats
```
-which supports future OpenCoarrays development by providing download data the OpenCoarrays team
-uses in proposals for research grants and development contracts.
+
+which supports future OpenCoarrays development by providing download
+data the OpenCoarrays team uses in proposals for research grants and
+development contracts.
[top]
### Windows ###
-Windows users may run the windows-install.sh script inside the Windows Subsystem for Linux (WSL).
+Windows users may run the windows-install.sh script inside the Windows
+Subsystem for Linux (WSL).
Requirements:
+
* WSL release 14936 or later,
* Windows Insider Preview, and
* "Fast" updates option.
Steps:
-```
+
+```bash
do-release-upgrade
./windows-install.sh
```
-where the first command above updates the default Ubuntu 14.04 to 16.04 and the second command must
-be executed with the present working directory set to the top level of the OpenCoarrays source tree.
-The `windows-install.sh` installation script uses Ubuntu's `apt-get` package manager to build
-[GCC] 5.4.0, [CMake], and [MPICH]. Windows users who desire a newer version of GCC are welcome to
-submit a request via our [Issues] page and suggest a method for updating. Previously attempted
-upgrade methods are described in the discussion thread starting with [commit comment 20539810].
+where the first command above updates the default Ubuntu 14.04 to
+16.04 and the second command must be executed with the present working
+directory set to the top level of the OpenCoarrays source tree.
+
+The `windows-install.sh` installation script uses Ubuntu's `apt-get`
+package manager to build [GCC] 5.4.0, [CMake], and [MPICH]. Windows
+users who desire a newer version of GCC are welcome to submit a
+request via our [Issues] page and suggest a method for updating.
+Previously attempted upgrade methods are described in the discussion
+thread starting with [commit comment 20539810].
[top]
### Linux ###
-The [Arch Linux] distribution provides an [aur package] for installing OpenCoarrays. Users of
-other Linux distributions may install the [Virtual machine] or use the [Installation Script].
-Alternatively, if you desire to install using other Linux package Linux package management
-software such as [dnf] or [apt-get], please submit a feature request via our [Issues] page.
+Acces OpenCoarrays on Linux via any of the following package managers
+or pre-installed copies:
+
+* The [linuxbrew] package manager installs OpenCoarrays on all Linux distributions.
+* Debian-based distributions such as Ubuntu provide an "open-coarrays" [APT package].
+* [Arch Linux] provides an [aur package].
+* [HPCLinux] includes a pre-installed copy of OpenCoarrays.
+
+[linuxbrew] does not require `sudo` privileges and will generally
+provide the most up-to-date OpenCoarrays release because linxubrew
+pulls directly from macOS homebrew, which updates automatically.
+
+[top]
+
+### FreeBSD ###
+
+A FreeBSD Port is available for installing OpenCoarrays and can be
+located via [port search]. See the FreeBSD OpenCoarrays [port details]
+page for installation instructions.
[top]
## Virtual machine ##
-Users of macOS, Windows, or Linux have the option to use OpenCoarrays by installing the Lubuntu
-Linux virtual machine from the [Sourcery Institute Store]. The virtual machine boots inside
-the open-source [VirtualBox] virtualization package. In addition to containing [GCC], [MPICH],
-and OpenCoarrays, the virtual machine contains dozens of other open-source software packages
-that support modern Fortran software development. See the [download and installation instructions]
-for a partial list of the included packages.
+Users of macOS, Windows, or Linux have the option to use OpenCoarrays
+by installing the Lubuntu Linux virtual machine from the
+[Sourcery Institute Store]. The virtual machine boots inside the
+open-source [VirtualBox] virtualization package. In addition to
+containing [GCC], [MPICH], and OpenCoarrays, the virtual machine
+contains dozens of other open-source software packages that support
+modern Fortran software development. See the
+[download and installation instructions] for a partial list of the
+included packages.
[top]
## Installation Script ##
-If the above package management or virtualization options are infeasible or unavailable,
-Linux and macOS users may also install OpenCoarrays by downloading and uncompressing our
-[latest release] and running our installation script in the top-level OpenCoarrays source
+If the above package management or virtualization options are
+infeasible or unavailable, Linux and macOS users may also install
+OpenCoarrays by downloading and uncompressing our [latest release] and
+running our installation script in the top-level OpenCoarrays source
directory (see above for the corresponding [Windows] script):
-```
+
+```bash
tar xvzf OpenCoarrays-x.y.z.tar.gz
cd OpenCoarrays-x.y.z
./install.sh
```
-where `x.y.z` should be replaced with the appropriate version numbers. For a scripted or unattended build, use
-`./install.sh -y` or equivalently `./install.sh --yes-to-all`, which will assume affirmative answers
-to all user prompts and will only prompt the user if an installation directory is chosen that requires
-`sudo` privelenges (by passing `-i` or equivalently `--install-prefix`).
-
-Before installing OpenCoarrays, the above bash script will attempt to detect the presence of the
-default prerequisite packages: [GCC], [MPICH] , and [CMake]. For additional details, see the
-[Prerequisites] section. If any of the installation script cannot find the prerequisite packages,
-the [install.sh] script will attempt to download, build, and install any missing packages
-after asking permission to do so. The script has been tested on Linux and OS X. Please
-submit any related problems or questions to our [Issues] page.
-A complete installation should result in the creation of the following directories
-inside the installation path (.e.g, inside `build` in the above example):
-
-* `bin`: contains the compiler wrapper (`caf`) and program launcher (`cafun`).
-* `mod`: contains the `opencoarrays.mod` module file for use with non-OpenCoarrays-aware compilers
-* `lib`: contains the `libcaf_mpi.a` static library to which codes link for CAF support
+where `x.y.z` should be replaced with the appropriate version numbers.
+For a scripted or unattended build, use `./install.sh -y` or
+equivalently `./install.sh --yes-to-all`, which will assume
+affirmative answers to all user prompts and will only prompt the user
+if an installation directory is chosen that requires `sudo`
+privelenges (by passing `-i` or equivalently `--install-prefix`).
+
+Before installing OpenCoarrays, the above bash script will attempt to
+detect the presence of the default prerequisite packages: [GCC],
+[MPICH] , and [CMake]. For additional details, see the
+[Prerequisites] section. If any of the installation script cannot find
+the prerequisite packages, the [install.sh] script will attempt to
+download, build, and install any missing packages after asking
+permission to do so. The script has been tested on Linux and OS X.
+Please submit any related problems or questions to our [Issues] page.
+
+A complete installation should result in the creation of the following
+directories inside the installation path (.e.g, inside `build` in the
+above example):
+
+* `bin`: contains the compiler wrapper (`caf`) and program launcher
+ (`cafun`).
+* `mod`: contains the `opencoarrays.mod` module file for use with
+ non-OpenCoarrays-aware compilers
+* `lib`: contains the `libcaf_mpi.a` static library to which codes
+ link for CAF support
[top]
-Advanced Installation from Source
----------------------------------
+## Advanced Installation from Source ##
-### Prerequisites: ###
+### Prerequisites ###
-The prerequisites below and their dependencies are recommended for the broadest coverage of CAF features.
-If a prerequisite is missing or outdated, the [install.sh] script will prompt the user for permission to
-download, compile, and install it. Before doing so, [install.sh] will verify whether that prerequisite's
-prerequisites are present and will recursively traverse the dependency tree until reaching an acceptable
-prerequisite or reaching the end of a branch.
+The prerequisites below and their dependencies are recommended for the
+broadest coverage of CAF features. If a prerequisite is missing or
+outdated, the [install.sh] script will prompt the user for permission
+to download, compile, and install it. Before doing so, [install.sh]
+will verify whether that prerequisite's prerequisites are present and
+will recursively traverse the dependency tree until reaching an
+acceptable prerequisite or reaching the end of a branch.
-```
+```text
opencoarrays
├── cmake-3.4.0
-└── mpich-3.1.4
+└── mpich-3.2
└── gcc-6.1.0
├── flex-2.6.0
│ └── bison-3.0.4
@@ -178,13 +223,15 @@ opencoarrays
└── mpfr
```
-If using the advanced [CMake] or [Make] builds detailed below, please ensure that these dependencies are met before attempting to build and install OpenCoarrays.
+If using the advanced [CMake] or [Make] builds detailed below, please
+ensure that these dependencies are met before attempting to build and
+install OpenCoarrays.
[top]
### CMake scripts ###
-#### N.B.: ####
+#### N.B. ####
__As of OpenCoarrays 1.7.6, passing `FC=mpi_fortran_wrapper` and
`CC=mpi_c_wrapper` is *DEPRECATED*. Please pass `FC=/path/to/gfortran`
@@ -195,13 +242,15 @@ compiler in which MPI is *built-in* to the compiler, you still pass
the `FC` and `CC` as the Fortran and C compiler, even though MPI is
built-in.__
-[CMake] is the preferred build system. CMake is a cross-platform Makefile generator that
-includes the testing tool CTest. To avoid cluttering or clobbering the source tree,
-our CMake setup requires that your build directory be any directory other than the top-level
-OpenCoarrays source directory. In a bash shell, the following steps should build
-OpenCoarrays, install OpenCoarrays, build the tests, run the tests, and report the test results:
+[CMake] is the preferred build system. CMake is a cross-platform
+Makefile generator that includes the testing tool CTest. To avoid
+cluttering or clobbering the source tree, our CMake setup requires
+that your build directory be any directory other than the top-level
+OpenCoarrays source directory. In a bash shell, the following steps
+should build OpenCoarrays, install OpenCoarrays, build the tests, run
+the tests, and report the test results:
-```
+```bash
tar xvzf opencoarrays.tar.gz
cd opencoarrays
mkdir opencoarrays-build
@@ -212,9 +261,10 @@ ctest
make install
```
-where the the first part of the cmake line sets the CC and FC environment variables
-and the final part of the same line defines the installation path as
-the `packages` directory in the current user's `$HOME` directory. Please report any test failures via the
+where the the first part of the cmake line sets the CC and FC
+environment variables and the final part of the same line defines the
+installation path as the `packages` directory in the current user's
+`$HOME` directory. Please report any test failures via the
OpenCoarrays [Issues] page. Please note that you need a recent
GCC/GFortran, and a recent MPI-3 implementation. If CMake is having
trouble finding the MPI implementation, or is finding the wrong MPI
@@ -226,62 +276,72 @@ you can also try passing the
Advanced options (most users should not use these):
- -DMPI_HOME=/path/to/mpi/dir # try to force CMake to find your preferred MPI implementation
+```CMake
+-DMPI_HOME=/path/to/mpi/dir # try to force CMake to find your preferred MPI implementation
# OR
- -DMPI_C_COMPILER=/path/to/c/wrapper
- -DMPI_Fortran_COMPILER=/path/to/fortran/wrapper
-
- -DLEGACY_ARCHITECTURE=OFF # enables the use of FFT libraries that employ AVX instructions
- -DHIGH_RESOLUTION_TIMER=ON # enables timers that tick once per clock cycle
- -DCOMPILER_SUPPORTS_ATOMICS # enables support for the proposed Fortran 2015 events feature
- -DUSE_EXTENSIONS # builds the opencoarrays module for use with non-OpenCoarrays-aware compilers
- -DCOMPILER_PROVIDES_MPI # is set automatically when building with the Cray Compiler Environment
+-DMPI_C_COMPILER=/path/to/c/wrapper
+-DMPI_Fortran_COMPILER=/path/to/fortran/wrapper
+
+-DLEGACY_ARCHITECTURE=OFF # enables the use of FFT libraries that employ AVX instructions
+-DHIGH_RESOLUTION_TIMER=ON # enables timers that tick once per clock cycle
+-DCOMPILER_SUPPORTS_ATOMICS # enables support for the proposed-Fortran 2015 events
+ # feature
+-DUSE_EXTENSIONS # builds the opencoarrays module for use-with non-
+ # OpenCoarrays-aware compilers
+-DCOMPILER_PROVIDES_MPI # is set automatically when building with-the Cray
+ # Compiler Environment
+```
-The fourth and fifth flags above are not portable and the sixth enables code that is incomplete as
-of release 1.0.0. The eighth is set automatically by the CMake scripts based on the compiler
-identity and version.
+The fourth and fifth flags above are not portable and the sixth
+enables code that is incomplete as of release 1.0.0. The eighth is
+set automatically by the CMake scripts based on the compiler identity
+and version.
[top]
### Make ###
-Unlike the Makefiles that CMake generates automatically for the chosen platform, static
-Makefiles require a great deal more maintenance and are less portable. Also, the static
-Makefiles provided with OpenCoarrays lack several important capabilities. In particular,
-they will not build the tests; they will not build any of the infrastructure for compiling
-CAF source with non-OpenCoarrays-aware compilers (that infrastructure includes the
-[opencoarrays] module, the `caf` compiler wrapper, and the `cafrun` program launcher);
-nor do the static Makefiles provide a `make install` option so you will need to manually
-move the desired library from the corresponding source directory to your intended installation
-location as shown below.
+Unlike the Makefiles that CMake generates automatically for the chosen
+platform, static Makefiles require a great deal more maintenance and
+are less portable. Also, the static Makefiles provided with
+OpenCoarrays lack several important capabilities. In particular, they
+will not build the tests; they will not build any of the
+infrastructure for compiling CAF source with non-OpenCoarrays-aware
+compilers (that infrastructure includes the [opencoarrays] module, the
+`caf` compiler wrapper, and the `cafrun` program launcher); nor do the
+static Makefiles provide a `make install` option so you will need to
+manually move the desired library from the corresponding source
+directory to your intended installation location as shown below.
If CMake is unavailable, build and install with Make using steps such as the following:
-```
+```bash
tar xvzf opencoarrays.tar.gz
cd opencoarray/src
make
mv mpi/libcaf_mpi.a <installation-path>
```
-For the above steps to succeed, you might need to edit the [make.inc] file to match your
-system settings. For example, you might need to remove the `-Werror` option from the
-compiler flags or name a different compiler. In order to activate efficient strided-array
-transfer support, uncomment the `-DSTRIDED` flag inside the [make.inc] file.
+For the above steps to succeed, you might need to edit the [make.inc]
+file to match your system settings. For example, you might need to
+remove the `-Werror` option from the compiler flags or name a
+different compiler. In order to activate efficient strided-array
+transfer support, uncomment the `-DSTRIDED` flag inside the [make.inc]
+file.
[top]
-Obtaining GCC, MPICH, and CMake
--------------------------------
+## Obtaining GCC, MPICH, and CMake ##
[GFortran Binaries] binary builds are available at <https://gcc.gnu.org/wiki/GFortranBinaries>.
-To build all prerequisites from source, including the current development branch of GCC,
-you might first try the running the provided [install.sh] script as described above in
-the [Installation Script] section or try building each prerequisite from source inside
-a bash shell as follows:
+To build all prerequisites from source, including the current
+development branch of GCC, you might first try the running the
+provided [install.sh] script as described above in the
+[Installation Script] section or try building each prerequisite from
+source inside a bash shell as follows:
-```
+```bash
export gcc_install_path=/desired/installation/destination
./install.sh --package gcc --install-prefix "${gcc_install_path}"
./install.sh --package mpich \
@@ -298,11 +358,14 @@ export gcc_install_path=/desired/installation/destination
---
+<div align="center">
+
[](https://github.com/sourceryinstitute/OpenCoarrays/fork)
[](https://github.com/sourceryinstitute/OpenCoarrays)
[](https://github.com/sourceryinstitute/OpenCoarrays)
[](https://twitter.com/intent/tweet?hashtags=HPC,Fortran,PGAS&related=zbeekman,gnutools,HPCwire,HPC_Guru,hpcprogrammer,SciNetHPC,DegenerateConic,jeffdotscience,travisci&text=Stop%20programming%20w%2F%20the%20%23MPI%20docs%20in%20your%20lap%2C%20try%20Coarray%20Fortran%20w%2F%20OpenCoarrays%20%26%20GFortran!&url=https%3A//github.com/sourceryinstitute/OpenCoarrays)
+</div>
[Internal document links]: #
@@ -311,6 +374,7 @@ export gcc_install_path=/desired/installation/destination
[macOS]: #macos
[Windows]: #windows
[Linux]: #linux
+[FreeBSD]: #freebsd
[Virtual machine]: #virtual-machine
[Installation Script]: #installation-script
@@ -321,18 +385,19 @@ export gcc_install_path=/desired/installation/destination
[Obtaining GCC, MPICH, and CMake]: #obtaining-gcc-mpich-and-cmake
-
[Links to source]: #
[install.sh]: ./install.sh
-
[URLs]: #
-[CMake]: http://www.cmake.org
-[Sourcery Store]: http://www.sourceryinstitute.org/store
-[Sourcery Institute Store]: http://www.sourceryinstitute.org/store
-[VirtualBox]: http://www.virtualbox.org
+[APT package]: https://qa.debian.org/popcon.php?package=open-coarrays
+[HPCLinux]: http://www.paratools.com/hpclinux/
+[Brewfile]: https://github.com/sourceryinstitute/OpenCoarrays/blob/master/Brewfile
+[INSTALL.pdf]: https://md2pdf.herokuapp.com/sourceryinstitute/OpenCoarrays/blob/master/INSTALL.pdf
+[CMake]: https://cmake.org
+[Sourcery Institute Store]: http://www.sourceryinstitute.org/store/c1/Featured_Products.html
+[VirtualBox]: https://www.virtualbox.org
[download and installation instructions]: http://www.sourceryinstitute.org/uploads/4/9/9/6/49967347/overview.pdf
[yum]: http://yum.baseurl.org
[apt-get]: https://en.wikipedia.org/wiki/Advanced_Packaging_Tool
@@ -342,9 +407,9 @@ export gcc_install_path=/desired/installation/destination
[prerequisites]: #prerequisites
[MPICH]: http://www.mpich.org
[MVAPICH]:http://mvapich.cse.ohio-state.edu
-[MacPorts]: http://www.macports.org
+[MacPorts]: https://www.macports.org
[GCC]: http://gcc.gnu.org
-[TS18508 Additional Parallel Features in Fortran]: http://isotc.iso.org/livelink/livelink?func=ll&objId=17181227&objAction=Open
+[TS18508 Additional Parallel Features in Fortran]: http://isotc.iso.org/livelink/livelink/nfetch/-8919044/8919782/8919787/17001078/ISO%2DIECJTC1%2DSC22%2DWG5_N2056_Draft_TS_18508_Additional_Paralle.pdf?nodeid=17181227&vernum=0
[GFortran Binaries]: https://gcc.gnu.org/wiki/GFortranBinaries#FromSource
[Installing GCC]: https://gcc.gnu.org/install/
[Arch Linux]: https://www.archlinux.org
@@ -352,5 +417,7 @@ export gcc_install_path=/desired/installation/destination
[latest release]: https://github.com/sourceryinstitute/OpenCoarrays/releases/latest
[pdf img]: https://img.shields.io/badge/PDF-INSTALL.md-6C2DC7.svg?style=flat-square "Download as PDF"
[commit comment 20539810]: https://github.com/sourceryinstitute/OpenCoarrays/commit/26e99919fe732576f7277a0e1b83f43cc7c9d749#commitcomment-20539810
-[Homebrew]: http://brew.sh
+[Homebrew]: https://brew.sh
[dnf]: https://github.com/rpm-software-management/dnf
+[port details]: http://www.freshports.org/lang/opencoarrays
+[port search]: https://www.freebsd.org/cgi/ports.cgi?query=opencoarrays
diff --git a/README.md b/README.md
index fde9213..5fccb47 100644
--- a/README.md
+++ b/README.md
@@ -3,59 +3,110 @@
[This document is formatted with GitHub-Flavored Markdown. ]:#
[For better viewing, including hyperlinks, read it online at ]:#
[https://github.com/sourceryinstitute/OpenCoarrays/blob/master/README.md]:#
+<div align="center">
-
-[![Sourcery Institute][sourcery-institute logo]](https://www.sourceryinstitute.org)
+[![Sourcery Institute][sourcery-institute logo]][Sourcery, Inc.]
OpenCoarrays
============
[![CI Build Status][build img]](https://travis-ci.org/sourceryinstitute/OpenCoarrays)
+[![Release Downloads][download img]][Releases]
[](https://gitter.im/sourceryinstitute/opencoarrays)
[![GitHub license][license img]](./LICENSE)
[![GitHub release][release img]](https://github.com/sourceryinstitute/OpenCoarrays/releases/latest)
[](http://braumeister.org/formula/opencoarrays)
-[![Download as PDF][pdf img]](http://md2pdf.herokuapp.com/sourceryinstitute/OpenCoarrays/blob/master/README.pdf)
-[](https://twitter.com/intent/tweet?hashtags=HPC,Fortran,PGAS&related=zbeekman,gnutools,HPCwire,HPC_Guru,hpcprogrammer,SciNetHPC,DegenerateConic,jeffdotscience,travisci&text=Stop%20programming%20w%2F%20the%20%23MPI%20docs%20in%20your%20lap%2C%20try%20Coarray%20Fortran%20w%2F%20OpenCoarrays%20%26%20GFortran!&url=https%3A//github.com/sourceryinstitute/OpenCoarrays)
-<!-- [![Release Downloads][download img]](https://github.com/sourceryinstitute/OpenCoarrays/releases) -->
-
-* [Overview](#overview)
-* [Downloads](#downloads)
-* [Compatibility](#compatibility)
-* [Prerequisites](#prerequisites)
-* [Installation](#installation)
-* [Getting Started](#getting-started)
-* [Contributing](#contributing)
-* [Status](#status)
-* [Support](#support)
-* [Acknowledgements](#acknowledgements)
-* [Donate](#donate)
+[![Download as PDF][pdf img]](https://md2pdf.herokuapp.com/sourceryinstitute/OpenCoarrays/blob/master/README.pdf)
+[![Twitter URL][twitter img]][default tweet]
+
+[Overview](#overview) ·
+[Downloads](#downloads) ·
+[Compatibility](#compatibility) ·
+[Prerequisites](#prerequisites) ·
+[Installation](#installation) ·
+[Getting Started](#getting-started) ·
+[Contributing](#contributing) ·
+[Status](#status) ·
+[Support](#support) ·
+[Acknowledgements](#acknowledgements) ·
+[Donate](#donate)
+
+</div>
Overview
--------
-[OpenCoarrays] is an open-source software project that supports the coarray Fortran (CAF) parallel programming features of the Fortran 2008 standard and several features proposed for Fortran 2015 in the draft Technical Specification [TS 18508] _Additional Parallel Features in Fortran_.
-
-OpenCoarrays provides a compiler wrapper (named `caf`), a runtime library (named `libcaf_mpi.a` by default), and an executable file launcher (named `cafrun`). With OpenCoarrays-aware compilers, the compiler wrapper passes the provided source code to the chosen compiler (`mpif90` by default). For non-OpenCoarrays-aware compilers, the wrapper transforms CAF syntax into OpenCoarrys procedure calls before invoking the chosen compiler on the transformed code. The runtime library supports c [...]
-
-OpenCoarrays defines an application binary interface ([ABI]) that translates high-level communication and synchronization requests into low-level calls to a user-specified communication library. This design decision liberates compiler teams from hardwiring communication-library choice into their compilers and it frees Fortran programmers to express parallel algorithms once and reuse identical CAF source with whichever communication library is most efficient for a given hardware platform [...]
-OpenCoarrays enables CAF application developers to express parallel algorithms without hardwiring a particular version of a particular communication library or library version into their codes. Such abstraction makes application code less sensitive to the evolution of the underlying communication libraries and hardware platforms.
+[OpenCoarrays] is an open-source software project
+that supports the coarray Fortran (CAF) parallel programming features
+of the Fortran 2008 standard and several features proposed for Fortran
+2015 in the draft Technical Specification [TS 18508] _Additional
+Parallel Features in Fortran_.
+
+OpenCoarrays provides a compiler wrapper (named `caf`), a runtime
+library (named `libcaf_mpi.a` by default), and an executable file
+launcher (named `cafrun`). With OpenCoarrays-aware compilers, the
+compiler wrapper passes the provided source code to the chosen
+compiler (`mpif90` by default). For non-OpenCoarrays-aware compilers,
+the wrapper transforms CAF syntax into OpenCoarrays procedure calls
+before invoking the chosen compiler on the transformed code. The
+runtime library supports compiler communication and synchronization
+requests by invoking a lower-level communication library--the Message
+Passing Interface ([MPI]) by default. The launcher passes execution
+to the chosen communication library's parallel program launcher
+(`mpirun` by default).
+
+OpenCoarrays defines an application binary interface ([ABI]) that
+translates high-level communication and synchronization requests into
+low-level calls to a user-specified communication library. This
+design decision liberates compiler teams from hardwiring
+communication-library choice into their compilers and it frees Fortran
+programmers to express parallel algorithms once and reuse identical
+CAF source with whichever communication library is most efficient for
+a given hardware platform. The communication substrate for
+OpenCoarrays built with the preferred build system, CMake, is the
+Message Passing Interface ([MPI]).
+
+OpenCoarrays enables CAF application developers to express parallel
+algorithms without hardwiring a particular version of a particular
+communication library or library version into their codes. Such
+abstraction makes application code less sensitive to the evolution of
+the underlying communication libraries and hardware platforms.
Downloads
---------
-<!--[![Release Downloads][download img]](https://github.com/sourceryinstitute/OpenCoarrays/releases/latest)-->
Please see our [Releases] page.
Compatibility
-------------
-The GNU Compiler Collection ([GCC]) Fortran front end ([gfortran]) is OpenCoarrays-aware for release versions 5.1.0 and higher. Users of other compilers, including earlier versions of gfortran, can access a limited subset of CAF features via the provided [opencoarrays module]. After installation, please execute the `caf` script (which is installed in the `bin` directory of the installation path) with no arguments to see a list of the corresponding limitations. Please also notify the c [...]
+
+The GNU Compiler Collection ([GCC]) Fortran front end ([gfortran]) is
+OpenCoarrays-aware for release versions 5.1.0 and higher. Users of
+other compilers, including earlier versions of gfortran, can access a
+limited subset of CAF features via the provided [opencoarrays module].
+After installation, please execute the `caf` script (which is
+installed in the `bin` directory of the installation path) with no
+arguments to see a list of the corresponding limitations. Please also
+notify the corresponding compiler vendor and the OpenCoarrays team
+that you would like for a future version of the compiler to be
+OpenCoarrays-aware.
Prerequisites
-------------
-We expect our LIBCAF_MPI library to be the default OpenCoarrays library. LIBCAF_MPI is the most straightforward to install and use, the most robust in terms of its internal complexity, and the most frequently updated and maintained. Building LIBCAF_MPI requires prior installation of an MPI implementation. We recommend [MPICH] generally or, if available, [MVAPICH] for better performance. [OpenMPI] is another option.
-We offer an unsupported LIBCAF_GASNet alternative. We intend for LIBCAF_GASNet to be an "expert" alternative capable of outperforming MPI for some applications on some platforms. LIBCAF_GASNet requires greater care to configure and use and building LIBCAF_GASNet requires prior installation of [GASNet].
+We expect our LIBCAF_MPI library to be the default OpenCoarrays
+library. LIBCAF_MPI is the most straightforward to install and use,
+the most robust in terms of its internal complexity, and the most
+frequently updated and maintained. Building LIBCAF_MPI requires prior
+installation of an MPI implementation. We recommend [MPICH] generally
+or, if available, [MVAPICH] for better performance. [OpenMPI] is
+another option.
+
+We offer an unsupported LIBCAF_GASNet alternative. We intend for
+LIBCAF_GASNet to be an "expert" alternative capable of outperforming
+MPI for some applications on some platforms. LIBCAF_GASNet requires
+greater care to configure and use and building LIBCAF_GASNet requires
+prior installation of [GASNet].
Installation
------------
@@ -76,26 +127,39 @@ Status
------
A list of open issues can be viewed on the
-[issues page](https://github.com/sourcery institute/opencoarrays/issues).
+[issues page](https://github.com/sourceryinstitute/opencoarrays/issues).
Support
-------
* Please submit bug reports and feature requests via our [Issues] page.
-* Please submit questions regarding installation and use via our [Google Group] by signing into [Google Groups] or [subscribing] and sending email to [opencoarrays at googlegroups.com].
+* Please submit questions regarding installation and use via our
+ [Google Group] by signing into [Google Groups] or [subscribing] and
+ sending email to [opencoarrays at googlegroups.com].
Acknowledgements
----------------
+
We gratefully acknowledge support from the following institutions:
-* [National Center for Atmospheric Research] for access to the Yellowstone/Caldera supercomputers and for logistics support during the initial development of OpenCoarrays.
-* [CINECA] for access to Eurora/PLX for the project HyPS- BLAS under the ISCRA grant program for 2014.
-* [Google] for support of a related [Google Summer of Code] 2014 project.
-* The National Energy Research Scientific Computing Center ([NERSC]), which is supported by the Office of Science of the U.S. Department of Energy under Contract No. DE-AC02-05CH11231, for access to the Hopper and Edison supercomputers under the OpenCoarrays project start allocation.
-* [Sourcery, Inc.], for financial support for the domain registration, web hosting, advanced development, and conference travel.
+* [National Center for Atmospheric Research] for access to the
+ Yellowstone/Caldera supercomputers and for logistics support during
+ the initial development of OpenCoarrays.
+* [CINECA] for access to Eurora/PLX for the project HyPS- BLAS under
+ the ISCRA grant program for 2014.
+* [Google] for support of a related [Google Summer of Code] 2014
+ project.
+* The National Energy Research Scientific Computing Center ([NERSC]),
+ which is supported by the Office of Science of the U.S. Department
+ of Energy under Contract No. DE-AC02-05CH11231, for access to the
+ Hopper and Edison supercomputers under the OpenCoarrays project
+ start allocation.
+* [Sourcery, Inc.], for financial support for the domain registration,
+ web hosting, advanced development, and conference travel.
Donate
------
+
If you find this software useful, please consider donating
[your time](CONTRIBUTING.md) or
[your money](http://www.sourceryinstitute.org/store/p5/Donation.html)
@@ -103,11 +167,14 @@ to aid in development efforts.
---
+<div align="center">
+
[](https://github.com/sourceryinstitute/OpenCoarrays/fork)
[](https://github.com/sourceryinstitute/OpenCoarrays)
[](https://github.com/sourceryinstitute/OpenCoarrays)
-[](https://twitter.com/intent/tweet?hashtags=HPC,Fortran,PGAS&related=zbeekman,gnutools,HPCwire,HPC_Guru,hpcprogrammer,SciNetHPC,DegenerateConic,jeffdotscience,travisci&text=Stop%20programming%20w%2F%20the%20%23MPI%20docs%20in%20your%20lap%2C%20try%20Coarray%20Fortran%20w%2F%20OpenCoarrays%20%26%20GFortran!&url=https%3A//github.com/sourceryinstitute/OpenCoarrays)
+[![Twitter URL][twitter img]][default tweet]
+</div>
[Hyperlinks]:#
@@ -122,39 +189,38 @@ to aid in development efforts.
[sourcery-institute logo]: http://www.sourceryinstitute.org/uploads/4/9/9/6/49967347/sourcery-logo-rgb-hi-rez-1.png
[OpenCoarrays]: http://www.opencoarrays.org
[ABI]: https://gcc.gnu.org/onlinedocs/gfortran/Coarray-Programming.html#Coarray-Programming
-[TS 18508]: http://isotc.iso.org/livelink/livelink?func=ll&objId=16769292&objAction=Open
-[MPI]: http://www.mpi-forum.org
+[TS 18508]: http://isotc.iso.org/livelink/livelink/nfetch/-8919044/8919782/8919787/16681398/ISO%2DIECJTC1%2DSC22%2DWG5_N2027_Draft_TS_18508_Additional_Paralle.pdf?nodeid=16769292&vernum=0
+[MPI]: http://mpi-forum.org
[GCC]: http://gcc.gnu.org
[gfortran]: https://gcc.gnu.org/wiki/GFortran
[opencoarrays module]: ./src/extensions/opencoarrays.F90
[MPICH]: http://www.mpich.org
[MVAPICH]: http://mvapich.cse.ohio-state.edu
-[OpenMPI]: http://www.open-mpi.org
+[OpenMPI]: https://www.open-mpi.org
[Sourcery, Inc.]: http://www.sourceryinstitute.org
-[Google]: http://google.com
-[CINECA]: http://www.cineca.it/en
+[Google]: http://www.google.com
+[CINECA]: https://www.cineca.it/en
[NERSC]: http://www.nersc.gov
-[National Center for Atmospheric Research]: http://ncar.ucar.edu
+[National Center for Atmospheric Research]: https://ncar.ucar.edu
[INSTALL.md]: ./INSTALL.md
[GASNet]: http://gasnet.lbl.gov
[CONTRIBUTING.md]: ./CONTRIBUTING.md
[GETTING_STARTED.md]: ./GETTING_STARTED.md
-[Google Groups]: https://groups.google.com
+[Google Groups]: https://groups.google.com/forum/#!homeredir
[Google Group]: https://groups.google.com/forum/#!forum/opencoarrays
[subscribing]: https://groups.google.com/forum/#!forum/opencoarrays/join
[opencoarrays at googlegroups.com]: mailto:opencoarrays at googlegroups.com
-[Google Summer of Code]: https://www.google-melange.com/archive/gsoc/2014/orgs/gcc/projects/afanfa.html
+[Google Summer of Code]: https://www.google-melange.com/archive/gsoc/2014/orgs/gcc
-[try this GSoC link? https://www.google-melange.com/archive/gsoc/2014/orgs/gcc]:#
-[old GSoC link: https://www.google-melange.com/gsoc/org2/google/gsoc2014/gcc]:#
-
-[OpenCoarrays Google Group]: https://groups.google.com/forum/#!forum/opencoarrays)
[Issues]: https://github.com/sourceryinstitute/OpenCoarrays/issues
[Releases]: https://github.com/sourceryinstitute/OpenCoarrays/releases
-[build img]: https://img.shields.io/travis-ci/sourceryinstitute/OpenCoarrays/master.svg?style=flat-square "View Travis-CI builds"
+[build img]: https://img.shields.io/travis-ci/sourceryinstitute/OpenCoarrays/master.svg?style=flat-square "Travis-CI build badge"
[CI Master Branch]: https://travis-ci.org/sourceryinstitute/OpenCoarrays?branch=master "View Travis-CI builds"
-[download img]: https://img.shields.io/github/downloads/sourceryinstitute/OpenCoarrays/total.svg?style=flat-square "Download count image source"
-[license img]: https://img.shields.io/badge/license-BSD--3-blue.svg?style=flat-square "View BSD-3 License"
-[release img]: https://img.shields.io/github/release/sourceryinstitute/OpenCoarrays.svg?style=flat-square "View latest release"
-[pdf img]: https://img.shields.io/badge/PDF-README.md-6C2DC7.svg?style=flat-square "Download as PDF"
+[download img]: https://img.shields.io/github/downloads/sourceryinstitute/OpenCoarrays/total.svg?style=flat-square "Download count badge"
+[license img]: https://img.shields.io/badge/license-BSD--3-blue.svg?style=flat-square "BSD-3 License badge"
+[release img]: https://img.shields.io/github/release/sourceryinstitute/OpenCoarrays.svg?style=flat-square "Latest release badge"
+[pdf img]: https://img.shields.io/badge/PDF-README.md-6C2DC7.svg?style=flat-square "Download this readme as a PDF"
+[twitter img]: https://img.shields.io/twitter/url/http/shields.io.svg?style=social
+
+[default tweet]: https://twitter.com/intent/tweet?hashtags=HPC,Fortran,PGAS&related=zbeekman,gnutools,HPCwire,HPC_Guru,hpcprogrammer,SciNetHPC,DegenerateConic,jeffdotscience,travisci&text=Stop%20programming%20w%2F%20the%20%23MPI%20docs%20in%20your%20lap%2C%20try%20Coarray%20Fortran%20w%2F%20OpenCoarrays%20%26%20GFortran!&url=https%3A//github.com/sourceryinstitute/OpenCoarrays
diff --git a/doc/dependency_tree/opencoarrays-tree.txt b/doc/dependency_tree/opencoarrays-tree.txt
index 6f4fa74..1ccfeb0 100644
--- a/doc/dependency_tree/opencoarrays-tree.txt
+++ b/doc/dependency_tree/opencoarrays-tree.txt
@@ -1,6 +1,6 @@
opencoarrays
├── cmake-3.4.0
-└── mpich-3.1.4
+└── mpich-3.2
└── gcc-6.1.0
├── flex-2.6.0
│ └── bison-3.0.4
diff --git a/doc/dependency_tree/opencoarrays/mpich-3.1.4/gcc-6.1.0/flex-2.6.0/bison-3.0.4/m4-1.4.17/.gitkeep b/doc/dependency_tree/opencoarrays/mpich-3.2/gcc-6.1.0/flex-2.6.0/bison-3.0.4/m4-1.4.17/.gitkeep
similarity index 100%
rename from doc/dependency_tree/opencoarrays/mpich-3.1.4/gcc-6.1.0/flex-2.6.0/bison-3.0.4/m4-1.4.17/.gitkeep
rename to doc/dependency_tree/opencoarrays/mpich-3.2/gcc-6.1.0/flex-2.6.0/bison-3.0.4/m4-1.4.17/.gitkeep
diff --git a/doc/dependency_tree/opencoarrays/mpich-3.1.4/gcc-6.1.0/gmp/.gitkeep b/doc/dependency_tree/opencoarrays/mpich-3.2/gcc-6.1.0/gmp/.gitkeep
similarity index 100%
rename from doc/dependency_tree/opencoarrays/mpich-3.1.4/gcc-6.1.0/gmp/.gitkeep
rename to doc/dependency_tree/opencoarrays/mpich-3.2/gcc-6.1.0/gmp/.gitkeep
diff --git a/doc/dependency_tree/opencoarrays/mpich-3.1.4/gcc-6.1.0/mpc/.gitkeep b/doc/dependency_tree/opencoarrays/mpich-3.2/gcc-6.1.0/mpc/.gitkeep
similarity index 100%
rename from doc/dependency_tree/opencoarrays/mpich-3.1.4/gcc-6.1.0/mpc/.gitkeep
rename to doc/dependency_tree/opencoarrays/mpich-3.2/gcc-6.1.0/mpc/.gitkeep
diff --git a/doc/dependency_tree/opencoarrays/mpich-3.1.4/gcc-6.1.0/mpfr/.gitkeep b/doc/dependency_tree/opencoarrays/mpich-3.2/gcc-6.1.0/mpfr/.gitkeep
similarity index 100%
rename from doc/dependency_tree/opencoarrays/mpich-3.1.4/gcc-6.1.0/mpfr/.gitkeep
rename to doc/dependency_tree/opencoarrays/mpich-3.2/gcc-6.1.0/mpfr/.gitkeep
diff --git a/prerequisites/build-functions/build_and_install.sh b/prerequisites/build-functions/build_and_install.sh
index 1dc1ec9..311063f 100644
--- a/prerequisites/build-functions/build_and_install.sh
+++ b/prerequisites/build-functions/build_and_install.sh
@@ -1,7 +1,8 @@
# Make the build directory, configure, and build
# shellcheck disable=SC2154
-source ${OPENCOARRAYS_SRC_DIR}/prerequisites/build-functions/edit_GCC_download_prereqs_file_if_necessary.sh
+# shellcheck source=prerequisites/build-functions/edit_GCC_download_prereqs_file_if_necessary.sh
+source "${OPENCOARRAYS_SRC_DIR}/prerequisites/build-functions/edit_GCC_download_prereqs_file_if_necessary.sh"
build_and_install()
{
@@ -20,6 +21,13 @@ build_and_install()
if [[ "${package_to_build}" != "gcc" ]]; then
+ if [[ "${package_to_build}" == "mpich" && "${version_to_build}" == "3.2" ]]; then
+ info "Patching MPICH 3.2 on Mac OS due to segfault bug (see http://lists.mpich.org/pipermail/discuss/2016-May/004764.html)."
+ sed 's/} MPID_Request ATTRIBUTE((__aligned__(32)));/} ATTRIBUTE((__aligned__(32))) MPID_Request;/g' \
+ "${download_path}/${package_source_directory}/src/include/mpiimpl.h" > "${download_path}/${package_source_directory}/src/include/mpiimpl.h.patched"
+ cp "${download_path}/${package_source_directory}/src/include/mpiimpl.h.patched" "${download_path}/${package_source_directory}/src/include/mpiimpl.h"
+ fi
+
info "Configuring ${package_to_build} ${version_to_build} with the following command:"
info "FC=\"${FC:-'gfortran'}\" CC=\"${CC:-'gcc'}\" CXX=\"${CXX:-'g++'}\" \"${download_path}/${package_source_directory}\"/configure --prefix=\"${install_path}\""
FC="${FC:-'gfortran'}" CC="${CC:-'gcc'}" CXX="${CXX:-'g++'}" "${download_path}/${package_source_directory}"/configure --prefix="${install_path}"
diff --git a/prerequisites/build-functions/edit_GCC_download_prereqs_file_if_necessary.sh b/prerequisites/build-functions/edit_GCC_download_prereqs_file_if_necessary.sh
index e49dcd8..5b4a662 100644
--- a/prerequisites/build-functions/edit_GCC_download_prereqs_file_if_necessary.sh
+++ b/prerequisites/build-functions/edit_GCC_download_prereqs_file_if_necessary.sh
@@ -14,7 +14,7 @@ replace_wget()
sed -i${backup_extension} -e '2 a\'$'\n'". ${OPENCOARRAYS_SRC_DIR}/prerequisites/build-functions/ftp_url.sh"$'\n' "${download_prereqs_file}"
fi
- arg_string="${gcc_prereqs_fetch_args[@]:-}"
+ arg_string="${gcc_prereqs_fetch_args[*]:-}"
info "Using the following command to replace wget in the GCC download_prerequisites file:"
info "sed -i${backup_extension} s/\"${wget_command}\"/\"${gcc_prereqs_fetch} ${arg_string} \"/ \"${download_prereqs_file}\""
@@ -31,7 +31,7 @@ edit_GCC_download_prereqs_file_if_necessary()
download_prereqs_file="${PWD}/contrib/download_prerequisites"
# Grab the line with the first occurence of 'wget'
- wget_line=`grep wget "${download_prereqs_file}" | head -1` || true
+ wget_line=$(grep wget "${download_prereqs_file}" | head -1) || true
wget_command="${wget_line%%ftp*}" # grab everything before ftp
# Check for wget format used before GCC 7
diff --git a/prerequisites/build-functions/set_or_print_default_version.sh b/prerequisites/build-functions/set_or_print_default_version.sh
index a168549..9b0b010 100644
--- a/prerequisites/build-functions/set_or_print_default_version.sh
+++ b/prerequisites/build-functions/set_or_print_default_version.sh
@@ -28,7 +28,7 @@ set_or_print_default_version()
package_version=(
"cmake:3.4.0"
"gcc:6.1.0"
- "mpich:3.1.4"
+ "mpich:3.2"
"wget:1.16.3"
"flex:2.6.0"
"bison:3.0.4"
diff --git a/prerequisites/install-functions/build_opencoarrays.sh b/prerequisites/install-functions/build_opencoarrays.sh
index 5e3a745..11fb282 100644
--- a/prerequisites/install-functions/build_opencoarrays.sh
+++ b/prerequisites/install-functions/build_opencoarrays.sh
@@ -22,9 +22,17 @@ build_opencoarrays()
FC="${MPIFC_show[0]}"
# Set CC to the MPI implementation's gcc command...
CC="${MPICC_show[0]}"
+ # try to find mpiexec
+ MPI_BIN_DIR="$(type -P "${MPICC}")"
+ MPIEXEC_CANDIDATES=($(find "${MPI_BIN_DIR%/*}" -name 'mpiexec' -o -name 'mpirun' -o -name 'lamexec' -o -name 'srun'))
+ if ! ((${#MPIEXEC_CANDIDATES[@]} >= 1)); then
+ emergency "Could not find a suitable \`mpiexec\` in directory containing mpi wrappers (${MPICC%/*})"
+ else
+ MPIEXEC="${MPIEXEC_CANDIDATES[0]}"
+ fi
info "Configuring OpenCoarrays in ${PWD} with the command:"
- info "CC=\"${CC}\" FC=\"${FC}\" $CMAKE \"${opencoarrays_src_dir}\" -DCMAKE_INSTALL_PREFIX=\"${install_path}\" -DMPI_C_COMPILER=\"${MPICC}\" -DMPI_Fortran_COMPILER=\"${MPIFC}\""
- CC="${CC}" FC="${FC}" $CMAKE "${opencoarrays_src_dir}" -DCMAKE_INSTALL_PREFIX="${install_path}" -DMPI_C_COMPILER="${MPICC}" -DMPI_Fortran_COMPILER="${MPIFC}"
+ info "CC=\"${CC}\" FC=\"${FC}\" $CMAKE \"${opencoarrays_src_dir}\" -DCMAKE_INSTALL_PREFIX=\"${install_path}\" -DMPIEXEC=\"${MPIEXEC}\" -DMPI_C_COMPILER=\"${MPICC}\" -DMPI_Fortran_COMPILER=\"${MPIFC}\""
+ CC="${CC}" FC="${FC}" $CMAKE "${opencoarrays_src_dir}" -DCMAKE_INSTALL_PREFIX="${install_path}" -DMPIEXEC="${MPIEXEC}" -DMPI_C_COMPILER="${MPICC}" -DMPI_Fortran_COMPILER="${MPIFC}"
info "Building OpenCoarrays in ${PWD} with the command make -j${num_threads}"
make "-j${num_threads}"
if [[ ! -z ${SUDO:-} ]]; then
@@ -33,4 +41,3 @@ build_opencoarrays()
info "Installing OpenCoarrays in ${install_path} with the command ${SUDO:-} make install"
${SUDO:-} make install
}
-
diff --git a/prerequisites/install-functions/print_header.sh b/prerequisites/install-functions/print_header.sh
index 08e9a44..320b452 100644
--- a/prerequisites/install-functions/print_header.sh
+++ b/prerequisites/install-functions/print_header.sh
@@ -4,7 +4,7 @@ print_header()
clear
echo ""
echo "*** By default, building OpenCoarrays requires CMake 3.4.0 or later, ***"
- echo "*** MPICH 3.1.4, and GCC Fortran (gfortran) 6.1.0 or later. To see ***"
+ echo "*** MPICH 3.2, and GCC Fortran (gfortran) 6.1.0 or later. To see ***"
echo "*** options for forcing the use of older or alternative packages, execute ***"
echo "*** this script with the -h flag. This script will recursively traverse ***"
echo "*** the following dependency tree, asking permission to download, build, ***"
diff --git a/prerequisites/install-functions/report_results.sh b/prerequisites/install-functions/report_results.sh
index dac3c39..b917379 100644
--- a/prerequisites/install-functions/report_results.sh
+++ b/prerequisites/install-functions/report_results.sh
@@ -45,7 +45,17 @@ report_results()
echo "# Execute this script via the following command: " | tee -a setup.csh setup.sh
echo "# source ${install_path%/}/setup.sh " | tee -a setup.csh setup.sh
echo " " | tee -a setup.csh setup.sh
+ if [[ -x "$cmake_install_path/cmake" ]]; then
+ echo "# Prepend the CMake path to the PATH environment variable:" | tee -a setup.sh setup.csh
+ echo "if [[ -z \"\$PATH\" ]]; then " >> setup.sh
+ echo " export PATH=\"${cmake_install_path%/}/\" " >> setup.sh
+ echo "else " >> setup.sh
+ echo " export PATH=\"${cmake_install_path%/}/\":\$PATH " >> setup.sh
+ echo "fi " >> setup.sh
+ echo "set path = (\"${cmake_install_path%/}\"/\"\$path\") " >> setup.csh
+ fi
if [[ -x "$fully_qualified_FC" ]]; then
+ echo "# Prepend the compiler path to the PATH environment variable:" | tee -a setup.sh setup.csh
echo "if [[ -z \"\$PATH\" ]]; then " >> setup.sh
echo " export PATH=\"${compiler_install_root%/}/bin\" " >> setup.sh
echo "else " >> setup.sh
@@ -54,6 +64,7 @@ report_results()
echo "set path = (\"${compiler_install_root%/}\"/bin \"\$path\") " >> setup.csh
fi
if [[ -d "${compiler_install_root%/}/lib" || -d "${compiler_install_root%/}/lib64" ]]; then
+ echo "# Prepend the compiler library paths to the LD_LIBRARY_PATH environment variable:" | tee -a setup.sh setup.csh
compiler_lib_paths="${compiler_install_root%/}/lib64/:${compiler_install_root%/}/lib"
echo "if [[ -z \"\$LD_LIBRARY_PATH\" ]]; then " >> setup.sh
echo " export LD_LIBRARY_PATH=\"${compiler_lib_paths%/}\" " >> setup.sh
@@ -64,6 +75,7 @@ report_results()
fi
echo " " >> setup.sh
if [[ -x "$mpi_install_root/bin/mpif90" ]]; then
+ echo "# Prepend the MPI path to the PATH environment variable:" | tee -a setup.sh setup.csh
echo "if [[ -z \"\$PATH\" ]]; then " >> setup.sh
echo " export PATH=\"${mpi_install_root%/}/bin\" " >> setup.sh
echo "else " >> setup.sh
@@ -71,14 +83,6 @@ report_results()
echo "fi " >> setup.sh
echo "set path = (\"${mpi_install_root%/}\"/bin \"\$path\") " >> setup.csh
fi
- if [[ -x "$cmake_install_path/cmake" ]]; then
- echo "if [[ -z \"\$PATH\" ]]; then " >> setup.sh
- echo " export PATH=\"${cmake_install_path%/}/\" " >> setup.sh
- echo "else " >> setup.sh
- echo " export PATH=\"${cmake_install_path%/}/\":\$PATH " >> setup.sh
- echo "fi " >> setup.sh
- echo "set path = (\"${cmake_install_path%/}\"/\"\$path\") " >> setup.csh
- fi
# In all likelihood, the following paths are only needed if OpenCoarrays built them,
# In by far the most common such use case, they would have been built in a recursive
# build of all the OpenCoarrays dependency tree (rather than built indvidually via
@@ -88,6 +92,7 @@ report_results()
# user doesn't need them at all (e.g. there was no need to build gfortran from source).
flex_install_path=$("${build_script}" -P flex)
if [[ -x "$flex_install_path/bin/flex" ]]; then
+ echo "# Prepend the flex path to the PATH environment variable:" | tee -a setup.sh setup.csh
echo "if [[ -z \"\$PATH\" ]]; then " >> setup.sh
echo " export PATH=\"$flex_install_path/bin\" " >> setup.sh
echo "else " >> setup.sh
@@ -97,6 +102,7 @@ report_results()
fi
bison_install_path=$("${build_script}" -P bison)
if [[ -x "$bison_install_path/bin/yacc" ]]; then
+ echo "# Prepend the bison path to the PATH environment variable:" | tee -a setup.sh setup.csh
echo "if [[ -z \"\$PATH\" ]]; then " >> setup.sh
echo " export PATH=\"$bison_install_path/bin\" " >> setup.sh
echo "else " >> setup.sh
@@ -106,6 +112,7 @@ report_results()
fi
m4_install_path=$("${build_script}" -P m4)
if [[ -x "$m4_install_path/bin/m4" ]]; then
+ echo "# Prepend the m4 path to the PATH environment variable:" | tee -a setup.sh setup.csh
echo "if [[ -z \"\$PATH\" ]]; then " >> setup.sh
echo " export PATH=\"$m4_install_path/bin\" " >> setup.sh
echo "else " >> setup.sh
@@ -115,6 +122,7 @@ report_results()
fi
opencoarrays_install_path="${install_path}"
if [[ -x "$opencoarrays_install_path/bin/caf" ]]; then
+ echo "# Prepend the OpenCoarrays path to the PATH environment variable:" | tee -a setup.sh setup.csh
echo "if [[ -z \"\$PATH\" ]]; then " >> setup.sh
echo " export PATH=\"${opencoarrays_install_path%/}/bin\" " >> setup.sh
echo "else " >> setup.sh
diff --git a/src/single/CMakeLists.txt b/src/single/CMakeLists.txt
deleted file mode 100644
index 013ba7a..0000000
--- a/src/single/CMakeLists.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-add_library(caf_single single.c ../common/caf_auxiliary.c)
-target_compile_options(caf_single INTERFACE -fcoarray=lib)
-install(TARGETS caf_single EXPORT OpenCoarraysTargets
- ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-)
diff --git a/src/single/Makefile b/src/single/Makefile
deleted file mode 100644
index cf43559..0000000
--- a/src/single/Makefile
+++ /dev/null
@@ -1,19 +0,0 @@
-include ../make.inc
-
-libcaf_single.a: single.o ../common/caf_auxiliary.o
- ar rcv $@ single.o ../common/caf_auxiliary.o
- ranlib $@
-
-.c.o:
- $(CC) $(CFLAGS) $(SINGLE_CFLAGS) -I.. -c $< -o $@
-
-single.o: single.c ../libcaf.h ../libcaf-gfortran-descriptor.h
-
-../common/caf_auxiliary.o:
- $(MAKE) -C ../common
-
-clean:
- rm -f single.o
-
-distclean: clean
- rm -f libcaf_single.a
diff --git a/src/single/single.c b/src/single/single.c
deleted file mode 100644
index b032e51..0000000
--- a/src/single/single.c
+++ /dev/null
@@ -1,727 +0,0 @@
-/* Single-Image implementation of Libcaf
-
-Copyright (c) 2012-2014, Sourcery, Inc.
-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 the Sourcery, Inc., 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 SOURCERY, INC., 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. */
-
-#include "libcaf.h"
-#include <stdio.h> /* For fputs and fprintf. */
-#include <stdlib.h> /* For exit and malloc. */
-#include <string.h> /* For memcpy and memset. */
-#include <stdarg.h> /* For variadic arguments. */
-
-/* Define GFC_CAF_CHECK to enable run-time checking. */
-/* #define GFC_CAF_CHECK 1 */
-
-/* Single-image implementation of the CAF library.
- Note: For performance reasons -fcoarry=single should be used
- rather than this library. */
-
-typedef void* single_token_t;
-#define TOKEN(X) ((single_token_t) (X))
-
-
-/* Global variables. */
-caf_static_t *caf_static_list = NULL;
-
-
-/* Keep in sync with mpi.c. */
-static void
-caf_runtime_error (const char *message, ...)
-{
- va_list ap;
- fprintf (stderr, "Fortran runtime error: ");
- va_start (ap, message);
- vfprintf (stderr, message, ap);
- va_end (ap);
- fprintf (stderr, "\n");
-
- /* FIXME: Shutdown the Fortran RTL to flush the buffer. PR 43849. */
- exit (EXIT_FAILURE);
-}
-
-void
-PREFIX(init) (int *argc __attribute__ ((unused)),
- char ***argv __attribute__ ((unused)))
-{
-}
-
-
-void
-PREFIX (finalize) (void)
-{
- while (caf_static_list != NULL)
- {
- caf_static_t *tmp = caf_static_list->prev;
- free (TOKEN (caf_static_list->token));
- free (caf_static_list);
- caf_static_list = tmp;
- }
-}
-
-
-int
-PREFIX (this_image) (int distance __attribute__ ((unused)))
-{
- return 1;
-}
-
-
-int
-PREFIX (num_images) (int distance __attribute__ ((unused)),
- int failed __attribute__ ((unused)))
-{
- return 1;
-}
-
-
-void *
-PREFIX (register) (size_t size, caf_register_t type, caf_token_t *token,
- int *stat, char *errmsg, int errmsg_len)
-{
- void *local;
-
- local = malloc (size);
- *token = malloc (sizeof (single_token_t));
-
- if (unlikely (local == NULL || TOKEN (*token) == NULL))
- {
- const char msg[] = "Failed to allocate coarray";
- if (stat)
- {
- *stat = 1;
- if (errmsg_len > 0)
- {
- int len = ((int) sizeof (msg) > errmsg_len) ? errmsg_len
- : (int) sizeof (msg);
- memcpy (errmsg, msg, len);
- if (errmsg_len > len)
- memset (&errmsg[len], ' ', errmsg_len-len);
- }
- return NULL;
- }
- else
- caf_runtime_error (msg);
- }
-
- *token = local;
-
- if (stat)
- *stat = 0;
-
- if (type == CAF_REGTYPE_COARRAY_STATIC)
- {
- caf_static_t *tmp = malloc (sizeof (caf_static_t));
- tmp->prev = caf_static_list;
- tmp->token = *token;
- caf_static_list = tmp;
- }
- return local;
-}
-
-
-void
-PREFIX (deregister) (caf_token_t *token, int *stat,
- char *errmsg __attribute__ ((unused)),
- int errmsg_len __attribute__ ((unused)))
-{
- free (TOKEN (*token));
-
- if (stat)
- *stat = 0;
-}
-
-
-static void
-convert_type (void *dst, int dst_type, int dst_kind, void *src,
- int src_type, int src_kind)
-{
-#ifdef HAVE_GFC_INTEGER_16
- typedef __int128 int128t;
-#else
- typedef int64_t int128t;
-#endif
-
-#if defined(GFC_REAL_16_IS_LONG_DOUBLE)
- typedef long double real128t;
- typedef _Complex long double complex128t;
-#elif defined(HAVE_GFC_REAL_16)
- typedef _Complex float __attribute__((mode(TC))) __complex128;
- typedef __float128 real128t;
- typedef __complex128 complex128t;
-#elif defined(HAVE_GFC_REAL_10)
- typedef long double real128t;
- typedef long double complex128t;
-#else
- typedef double real128t;
- typedef _Complex double complex128t;
-#endif
-
- int128t int_val = 0;
- real128t real_val = 0;
- complex128t cmpx_val = 0;
-
- switch (src_type)
- {
- case BT_INTEGER:
- if (src_kind == 1)
- int_val = *(int8_t*) src;
- else if (src_kind == 2)
- int_val = *(int16_t*) src;
- else if (src_kind == 4)
- int_val = *(int32_t*) src;
- else if (src_kind == 8)
- int_val = *(int64_t*) src;
-#ifdef HAVE_GFC_INTEGER_16
- else if (src_kind == 16)
- int_val = *(int128t*) src;
-#endif
- else
- goto error;
- break;
- case BT_REAL:
- if (src_kind == 4)
- real_val = *(float*) src;
- else if (src_kind == 8)
- real_val = *(double*) src;
-#ifdef HAVE_GFC_REAL_10
- else if (src_kind == 10)
- real_val = *(long double*) src;
-#endif
-#ifdef HAVE_GFC_REAL_16
- else if (src_kind == 16)
- real_val = *(real128t*) src;
-#endif
- else
- goto error;
- break;
- case BT_COMPLEX:
- if (src_kind == 4)
- cmpx_val = *(_Complex float*) src;
- else if (src_kind == 8)
- cmpx_val = *(_Complex double*) src;
-#ifdef HAVE_GFC_REAL_10
- else if (src_kind == 10)
- cmpx_val = *(_Complex long double*) src;
-#endif
-#ifdef HAVE_GFC_REAL_16
- else if (src_kind == 16)
- cmpx_val = *(complex128t*) src;
-#endif
- else
- goto error;
- break;
- default:
- goto error;
- }
-
- switch (dst_type)
- {
- case BT_INTEGER:
- if (src_type == BT_INTEGER)
- {
- if (dst_kind == 1)
- *(int8_t*) dst = (int8_t) int_val;
- else if (dst_kind == 2)
- *(int16_t*) dst = (int16_t) int_val;
- else if (dst_kind == 4)
- *(int32_t*) dst = (int32_t) int_val;
- else if (dst_kind == 8)
- *(int64_t*) dst = (int64_t) int_val;
-#ifdef HAVE_GFC_INTEGER_16
- else if (dst_kind == 16)
- *(int128t*) dst = (int128t) int_val;
-#endif
- else
- goto error;
- }
- else if (src_type == BT_REAL)
- {
- if (dst_kind == 1)
- *(int8_t*) dst = (int8_t) real_val;
- else if (dst_kind == 2)
- *(int16_t*) dst = (int16_t) real_val;
- else if (dst_kind == 4)
- *(int32_t*) dst = (int32_t) real_val;
- else if (dst_kind == 8)
- *(int64_t*) dst = (int64_t) real_val;
-#ifdef HAVE_GFC_INTEGER_16
- else if (dst_kind == 16)
- *(int128t*) dst = (int128t) real_val;
-#endif
- else
- goto error;
- }
- else if (src_type == BT_COMPLEX)
- {
- if (dst_kind == 1)
- *(int8_t*) dst = (int8_t) cmpx_val;
- else if (dst_kind == 2)
- *(int16_t*) dst = (int16_t) cmpx_val;
- else if (dst_kind == 4)
- *(int32_t*) dst = (int32_t) cmpx_val;
- else if (dst_kind == 8)
- *(int64_t*) dst = (int64_t) cmpx_val;
-#ifdef HAVE_GFC_INTEGER_16
- else if (dst_kind == 16)
- *(int128t*) dst = (int128t) cmpx_val;
-#endif
- else
- goto error;
- }
- else
- goto error;
- break;
- case BT_REAL:
- if (src_type == BT_INTEGER)
- {
- if (dst_kind == 4)
- *(float*) dst = (float) int_val;
- else if (dst_kind == 8)
- *(double*) dst = (double) int_val;
-#ifdef HAVE_GFC_REAL_10
- else if (dst_kind == 10)
- *(long double*) dst = (long double) int_val;
-#endif
-#ifdef HAVE_GFC_REAL_16
- else if (dst_kind == 16)
- *(real128t*) dst = (real128t) int_val;
-#endif
- else
- goto error;
- }
- else if (src_type == BT_REAL)
- {
- if (dst_kind == 4)
- *(float*) dst = (float) real_val;
- else if (dst_kind == 8)
- *(double*) dst = (double) real_val;
-#ifdef HAVE_GFC_REAL_10
- else if (dst_kind == 10)
- *(long double*) dst = (long double) real_val;
-#endif
-#ifdef HAVE_GFC_REAL_16
- else if (dst_kind == 16)
- *(real128t*) dst = (real128t) real_val;
-#endif
- else
- goto error;
- }
- else if (src_type == BT_COMPLEX)
- {
- if (dst_kind == 4)
- *(float*) dst = (float) cmpx_val;
- else if (dst_kind == 8)
- *(double*) dst = (double) cmpx_val;
-#ifdef HAVE_GFC_REAL_10
- else if (dst_kind == 10)
- *(long double*) dst = (long double) cmpx_val;
-#endif
-#ifdef HAVE_GFC_REAL_16
- else if (dst_kind == 16)
- *(real128t*) dst = (real128t) cmpx_val;
-#endif
- else
- goto error;
- }
- break;
- case BT_COMPLEX:
- if (src_type == BT_INTEGER)
- {
- if (dst_kind == 4)
- *(_Complex float*) dst = (_Complex float) int_val;
- else if (dst_kind == 8)
- *(_Complex double*) dst = (_Complex double) int_val;
-#ifdef HAVE_GFC_REAL_10
- else if (dst_kind == 10)
- *(_Complex long double*) dst = (_Complex long double) int_val;
-#endif
-#ifdef HAVE_GFC_REAL_16
- else if (dst_kind == 16)
- *(complex128t*) dst = (complex128t) int_val;
-#endif
- else
- goto error;
- }
- else if (src_type == BT_REAL)
- {
- if (dst_kind == 4)
- *(_Complex float*) dst = (_Complex float) real_val;
- else if (dst_kind == 8)
- *(_Complex double*) dst = (_Complex double) real_val;
-#ifdef HAVE_GFC_REAL_10
- else if (dst_kind == 10)
- *(_Complex long double*) dst = (_Complex long double) real_val;
-#endif
-#ifdef HAVE_GFC_REAL_16
- else if (dst_kind == 16)
- *(complex128t*) dst = (complex128t) real_val;
-#endif
- else
- goto error;
- }
- else if (src_type == BT_COMPLEX)
- {
- if (dst_kind == 4)
- *(_Complex float*) dst = (_Complex float) cmpx_val;
- else if (dst_kind == 8)
- *(_Complex double*) dst = (_Complex double) cmpx_val;
-#ifdef HAVE_GFC_REAL_10
- else if (dst_kind == 10)
- *(_Complex long double*) dst = (_Complex long double) cmpx_val;
-#endif
-#ifdef HAVE_GFC_REAL_16
- else if (dst_kind == 16)
- *(complex128t*) dst = (complex128t) cmpx_val;
-#endif
- else
- goto error;
- }
- else
- goto error;
- break;
- default:
- goto error;
- }
-
-error:
- fprintf (stderr, "RUNTIME ERROR: Cannot convert type %d kind "
- "%d to type %d kind %d\n", src_type, src_kind, dst_type, dst_kind);
- PREFIX (error_stop) (1);
-}/* Get a scalar (or contiguous) data from remote image into a buffer. */
-
-
-void
-PREFIX (get) (caf_token_t token, size_t offset,
- int image_index __attribute__ ((unused)),
- gfc_descriptor_t *src ,
- caf_vector_t *src_vector __attribute__ ((unused)),
- gfc_descriptor_t *dest, int src_kind, int dst_kind)
-{
- /* FIXME: Handle vector subscripts; check whether strings of different
- kinds are permitted. */
- size_t i, k, size;
- int j;
- int rank = GFC_DESCRIPTOR_RANK (dest);
- size_t src_size = GFC_DESCRIPTOR_SIZE (src);
- size_t dst_size = GFC_DESCRIPTOR_SIZE (dest);
-
- if (rank == 0)
- {
- void *sr = (void *) ((char *) TOKEN (token) + offset);
- if (GFC_DESCRIPTOR_TYPE (dest) == GFC_DESCRIPTOR_TYPE (src)
- && dst_kind == src_kind)
- memmove (dest->base_addr, sr,
- dst_size > src_size ? src_size : dst_size);
- else
- convert_type (dest->base_addr, GFC_DESCRIPTOR_TYPE (dest),
- dst_kind, sr, GFC_DESCRIPTOR_TYPE (src), src_kind);
- if (GFC_DESCRIPTOR_TYPE (dest) == BT_CHARACTER && dst_size > src_size)
- {
- if (dst_kind == 1)
- memset ((void*)(char*) dest->base_addr + src_size, ' ',
- dst_size-src_size);
- else /* dst_kind == 4. */
- for (i = src_size/4; i < dst_size/4; i++)
- ((int32_t*) dest->base_addr)[i] = (int32_t) ' ';
- }
- return;
- }
-
- size = 1;
- for (j = 0; j < rank; j++)
- {
- ptrdiff_t dimextent = dest->dim[j]._ubound - dest->dim[j].lower_bound + 1;
- if (dimextent < 0)
- dimextent = 0;
- size *= dimextent;
- }
-
- if (size == 0)
- return;
-
- for (i = 0; i < size; i++)
- {
- ptrdiff_t array_offset_dst = 0;
- ptrdiff_t stride = 1;
- ptrdiff_t extent = 1;
- for (j = 0; j < rank-1; j++)
- {
- array_offset_dst += ((i / (extent*stride))
- % (dest->dim[j]._ubound
- - dest->dim[j].lower_bound + 1))
- * dest->dim[j]._stride;
- extent = (dest->dim[j]._ubound - dest->dim[j].lower_bound + 1);
- stride = dest->dim[j]._stride;
- }
- array_offset_dst += (i / extent) * dest->dim[rank-1]._stride;
- void *dst = dest->base_addr + array_offset_dst*GFC_DESCRIPTOR_SIZE (dest);
-
- ptrdiff_t array_offset_sr = 0;
- stride = 1;
- extent = 1;
- for (j = 0; j < GFC_DESCRIPTOR_RANK (src)-1; j++)
- {
- array_offset_sr += ((i / (extent*stride))
- % (src->dim[j]._ubound
- - src->dim[j].lower_bound + 1))
- * src->dim[j]._stride;
- extent = (src->dim[j]._ubound - src->dim[j].lower_bound + 1);
- stride = src->dim[j]._stride;
- }
- array_offset_sr += (i / extent) * src->dim[rank-1]._stride;
- void *sr = (void *)((char *) TOKEN (token) + offset
- + array_offset_sr*GFC_DESCRIPTOR_SIZE (src));
-
- if (GFC_DESCRIPTOR_TYPE (dest) == GFC_DESCRIPTOR_TYPE (src)
- && dst_kind == src_kind)
- memmove (dst, sr, dst_size > src_size ? src_size : dst_size);
- else
- convert_type (dst, GFC_DESCRIPTOR_TYPE (dest), dst_kind,
- sr, GFC_DESCRIPTOR_TYPE (src), src_kind);
- if (GFC_DESCRIPTOR_TYPE (dest) == BT_CHARACTER && dst_size > src_size)
- {
- if (dst_kind == 1)
- memset ((void*)(char*) dst + src_size, ' ', dst_size-src_size);
- else /* dst_kind == 4. */
- for (k = src_size/4; k < dst_size/4; i++)
- ((int32_t*) dst)[i] = (int32_t) ' ';
- }
- }
-}
-
-
-void
-PREFIX (send) (caf_token_t token, size_t offset,
- int image_index __attribute__ ((unused)),
- gfc_descriptor_t *dest,
- caf_vector_t *dst_vector __attribute__ ((unused)),
- gfc_descriptor_t *src, int dst_kind,
- int src_kind)
-{
- /* FIXME: Handle vector subscripts; check whether strings of different
- kinds are permitted. */
- size_t i, k, size;
- int j;
- int rank = GFC_DESCRIPTOR_RANK (dest);
- size_t src_size = GFC_DESCRIPTOR_SIZE (src);
- size_t dst_size = GFC_DESCRIPTOR_SIZE (dest);
-
- if (rank == 0)
- {
- void *dst = (void *) ((char *) TOKEN (token) + offset);
- if (GFC_DESCRIPTOR_TYPE (dest) == GFC_DESCRIPTOR_TYPE (src)
- && dst_kind == src_kind)
- memmove (dst, src->base_addr,
- dst_size > src_size ? src_size : dst_size);
- else
- convert_type (dst, GFC_DESCRIPTOR_TYPE (dest), dst_kind, src->base_addr,
- GFC_DESCRIPTOR_TYPE (src), src_kind);
- if (GFC_DESCRIPTOR_TYPE (dest) == BT_CHARACTER && dst_size > src_size)
- {
- if (dst_kind == 1)
- memset ((void*)(char*) dst + src_size, ' ', dst_size-src_size);
- else /* dst_kind == 4. */
- for (i = src_size/4; i < dst_size/4; i++)
- ((int32_t*) dst)[i] = (int32_t) ' ';
- }
- return;
- }
-
- size = 1;
- for (j = 0; j < rank; j++)
- {
- ptrdiff_t dimextent = dest->dim[j]._ubound - dest->dim[j].lower_bound + 1;
- if (dimextent < 0)
- dimextent = 0;
- size *= dimextent;
- }
-
- if (size == 0)
- return;
-
- for (i = 0; i < size; i++)
- {
- ptrdiff_t array_offset_dst = 0;
- ptrdiff_t stride = 1;
- ptrdiff_t extent = 1;
- for (j = 0; j < rank-1; j++)
- {
- array_offset_dst += ((i / (extent*stride))
- % (dest->dim[j]._ubound
- - dest->dim[j].lower_bound + 1))
- * dest->dim[j]._stride;
- extent = (dest->dim[j]._ubound - dest->dim[j].lower_bound + 1);
- stride = dest->dim[j]._stride;
- }
- array_offset_dst += (i / extent) * dest->dim[rank-1]._stride;
- void *dst = (void *)((char *) TOKEN (token) + offset
- + array_offset_dst*GFC_DESCRIPTOR_SIZE (dest));
- void *sr;
- if (GFC_DESCRIPTOR_RANK (src) != 0)
- {
- ptrdiff_t array_offset_sr = 0;
- stride = 1;
- extent = 1;
- for (j = 0; j < GFC_DESCRIPTOR_RANK (src)-1; j++)
- {
- array_offset_sr += ((i / (extent*stride))
- % (src->dim[j]._ubound
- - src->dim[j].lower_bound + 1))
- * src->dim[j]._stride;
- extent = (src->dim[j]._ubound - src->dim[j].lower_bound + 1);
- stride = src->dim[j]._stride;
- }
- array_offset_sr += (i / extent) * src->dim[rank-1]._stride;
- sr = (void *)((char *) src->base_addr
- + array_offset_sr*GFC_DESCRIPTOR_SIZE (src));
- }
- else
- sr = src->base_addr;
-
- if (GFC_DESCRIPTOR_TYPE (dest) == GFC_DESCRIPTOR_TYPE (src)
- && dst_kind == src_kind)
- memmove (dst, sr, dst_size > src_size ? src_size : dst_size);
- else
- convert_type (dst, GFC_DESCRIPTOR_TYPE (dest), dst_kind, sr,
- GFC_DESCRIPTOR_TYPE (src), src_kind);
- if (GFC_DESCRIPTOR_TYPE (dest) == BT_CHARACTER && dst_size > src_size)
- {
- if (dst_kind == 1)
- memset ((void*)(char*) dst + src_size, ' ', dst_size-src_size);
- else /* dst_kind == 4. */
- for (k = src_size/4; k < dst_size/4; i++)
- ((int32_t*) dst)[i] = (int32_t)' ';
- }
- }
-}
-
-
-void
-PREFIX (sendget) (caf_token_t dst_token, size_t dst_offset, int dst_image_index,
- gfc_descriptor_t *dest, caf_vector_t *dst_vector,
- caf_token_t src_token, size_t src_offset,
- int src_image_index __attribute__ ((unused)),
- gfc_descriptor_t *src,
- caf_vector_t *src_vector __attribute__ ((unused)),
- int dst_len, int src_len)
-{
- /* FIXME: Handle vector subscript of 'src_vector'. */
- /* For a single image, src->base_addr should be the same as src_token + offset
- but to play save, we do it properly. */
- void *src_base = src->base_addr;
- src->base_addr = (void *) ((char *) TOKEN (src_token) + src_offset);
- PREFIX (send) (dst_token, dst_offset, dst_image_index, dest, dst_vector,
- src, dst_len, src_len);
- src->base_addr = src_base;
-}
-
-
-void
-PREFIX (co_sum) (gfc_descriptor_t *a __attribute__ ((unused)),
- int result_image __attribute__ ((unused)), int *stat,
- char *errmsg __attribute__ ((unused)),
- int errmsg_len __attribute__ ((unused)))
-{
- if (stat)
- *stat = 0;
-}
-
-
-void
-PREFIX (co_min) (gfc_descriptor_t *a __attribute__ ((unused)),
- int result_image __attribute__ ((unused)), int *stat,
- char *errmsg __attribute__ ((unused)),
- int src_len __attribute__ ((unused)),
- int errmsg_len __attribute__ ((unused)))
-{
- if (stat)
- *stat = 0;
-}
-
-
-void
-PREFIX (co_max) (gfc_descriptor_t *a __attribute__ ((unused)),
- int result_image __attribute__ ((unused)), int *stat,
- char *errmsg __attribute__ ((unused)),
- int src_len __attribute__ ((unused)),
- int errmsg_len __attribute__ ((unused)))
-{
- if (stat)
- *stat = 0;
-}
-
-
-void
-PREFIX (sync_all) (int *stat,
- char *errmsg __attribute__ ((unused)),
- int errmsg_len __attribute__ ((unused)))
-{
- if (stat)
- *stat = 0;
-}
-
-
-void
-PREFIX (sync_images) (int count __attribute__ ((unused)),
- int images[] __attribute__ ((unused)),
- int *stat,
- char *errmsg __attribute__ ((unused)),
- int errmsg_len __attribute__ ((unused)))
-{
-#ifdef GFC_CAF_CHECK
- int i;
-
- for (i = 0; i < count; i++)
- if (images[i] != 1)
- {
- fprintf (stderr, "COARRAY ERROR: Invalid image index %d to SYNC "
- "IMAGES", images[i]);
- exit (EXIT_FAILURE);
- }
-#endif
-
- if (stat)
- *stat = 0;
-}
-
-
-void
-PREFIX (error_stop_str) (const char *string, int32_t len)
-{
- fputs ("ERROR STOP ", stderr);
- while (len--)
- fputc (*(string++), stderr);
- fputs ("\n", stderr);
-
- exit (1);
-}
-
-
-void
-PREFIX(error_stop) (int32_t error)
-{
- fprintf (stderr, "ERROR STOP %d\n", error);
- exit (error);
-}
diff --git a/src/tests/regression/open/issue-172 b/src/tests/regression/open/issue-172
deleted file mode 120000
index 364883a..0000000
--- a/src/tests/regression/open/issue-172
+++ /dev/null
@@ -1 +0,0 @@
-../reported/issue-172-wrong-co_reduce.f90
\ No newline at end of file
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/open-coarrays.git
More information about the debian-science-commits
mailing list