Opencoarrays: Open-Source Transport Layers Supporting Coarray Fortran Compilers

Total Page:16

File Type:pdf, Size:1020Kb

Opencoarrays: Open-Source Transport Layers Supporting Coarray Fortran Compilers OpenCoarrays: Open-source Transport Layers Supporting Coarray Fortran Compilers ∗ y z Alessandro Fanfarillo Tobias Burnus Valeria Cardellini University of Rome Munich, Germany University of Rome Tor Vergata Tor Vergata Rome, Italy Rome, Italy x { q Salvatore Filippone Dan Nagle Damian Rouson University of Rome National Center for Sourcery Inc. Tor Vergata Atmospheric Research Oakland, California Rome, Italy Boulder, Colorado ABSTRACT 1. INTRODUCTION Coarray Fortran is a set of features of the Fortran 2008 stan- Coarray Fortran (also known as CAF) originated as a syn- dard that make Fortran a PGAS parallel programming lan- tactic extension of Fortran 95 proposed in the early 1990s guage. Two commercial compilers currently support coar- by Robert Numrich and John Reid [10] and eventually be- rays: Cray and Intel. Here we present two coarray trans- came part of the Fortran 2008 standard published in 2010 port layers provided by the new OpenCoarrays project: one (ISO/IEC 1539-1:2010) [11]. The main goal of coarrays is library based on MPI and the other on GASNet. We link to allow Fortran users to create parallel programs without the GNU Fortran (GFortran) compiler to either of the two the burden of explicitly invoking communication functions OpenCoarrays implementations and present performance com- or directives such as those in the Message Passing Interface parisons between executables produced by GFortran and the (MPI) [12] and OpenMP [2]. Cray and Intel compilers. The comparison includes syn- thetic benchmarks, application prototypes, and an applica- Coarrays are based on the Partitioned Global Address Space tion kernel. In our tests, Intel outperforms GFortran only on (PGAS) parallel programming model, which attempts to intra-node small transfers (in particular, scalars). GFortran combine the SPMD approach used in distributed memory outperforms Intel on intra-node array transfers and in all systems with the semantics of shared memory systems. In settings that require inter-node transfers. The Cray compar- the PGAS model, every process has its own memory ad- isons are mixed, with either GFortran or Cray being faster dress space but it can access a portion of the address space depending on the chosen hardware platform, network, and on other processes. The coarray syntax adds a few specific transport layer. keywords and leaves the Fortran user free to use the regular array syntax within parallel programs. Keywords Coarrays were first implemented in the Cray Fortran com- Fortran, PGAS, Coarrays, GCC, HPC piler, and the Cray implementation is considered the most ∗ mature, reliable, and high-performing. Since the inclusion [email protected] - To whom correspondence of coarrays in the Fortran standard, the number of compil- should be addressed y ers implementing them has increased: the Intel and g95 [15] [email protected] Fortran compilers as well as compiler projects at Rice Uni- z [email protected] versity [6] and the University of Houston (OpenUH) [5] sup- xsalvatore.fi[email protected] port coarrays. { [email protected] The Cray compiler only runs on proprietary architectures. q [email protected] The Intel compiler is only available for Linux and Windows, and the standard Intel license only supports coarrays in shared memory; running in distributed memory requires the Intel Cluster Toolkit. These technical limitations, in con- junction with the cost of a commercial compiler, limit the widespread usage of coarrays. The availability of coarray support in a free compiler could contribute to wider evaluation and adoption of the coarray parallel programming model. The free, released compilers with coarray support, however, do not support several other integer : : num img , me standard Fortran features, which limits their utility in mod- ern Fortran projects. For example, neither the Rice compiler num img = num images ( ) nor OpenUH nor g95 supports the object-oriented program- me = t h i s i m a g e ( ) ming (OOP) features that entered the language in the For- ! Some code here tran 2003 standard. Furthermore, g95's coarray support is x(2) = x(3)[7] ! get value from image 7 only free in its shared-memory configuration. Configuring x(6)[4] = x(1) ! put value on image 4 the compiler for multi-node coarray execution requires pur- x(:)[2] = y(:) ! put array on image 2 chasing a commercial license. sync a l l Considering the compiler landscape, the advent of support ! Remote−to−remote array transfer for coarrays in the free, open-source, and widely used GNU i f (me == 1) then Fortran compiler (GFortran) potentially represents a water- y ( : ) [ num img]=x( : ) [4] shed moment. The most recent GFortran release (4.9.1) sync images(num img ) supports most features of the recent Fortran standard, in- e l s e i f (me == num img ) then cluding the aforementioned OOP features [4]. Furthermore, sync images([1]) end i f the pre-release development trunk of GFortran offers nearly complete support for the coarray features of Fortran 2008 x(1:10:2) = y(1:10:2)[4] ! strided get from 4 plus several anticipated new coarray features expected to appear in the next Fortran standard. However, any pro- grams that are not embarrassingly parallel require linking In this example, x and y are coarray arrays and every image GFortran-compiled object files with a parallel communica- can access these variables on every other image. All the tion library. In this paper, we present performance results usual Fortran array syntax rules are valid and applicable. for OpenCoarrays, the first collection of open-source trans- Also, a coarray may be of user-defined derived type. port layers that support coarray Fortran compilers by trans- lating a compiler's communication and synchronization re- Fortran provides Locks, Critical sections and Atomic Intrin- quests into calls to one of several communication libraries. sics for coarrays. Currently, the Cray compiler is the only We provide a link to the OpenCoarrays source code reposi- released compiler supporting these features. Although not tory on the dedicated domain http://opencoarrays.org. discussed in this paper, the OpenCoarray and GNU Fortran trunks offer partial support for these features. Section 2 introduces the coarray programming model. Sec- tion 3 introduces the OpenCoarrays transport layers: one 3. GNU FORTRAN AND LIBCAF based on MPI and one on the GASNet communication li- GNU Fortran (GFortran) is a free, efficient and widely used brary for PGAS languages [1]. Section 4.1 presents the compiler. Starting in 2012, GFortran supported the coar- test suite that forms our basis for comparisons between each ray syntax for single-image execution, but it did not pro- compiler/library combination. Section 5 presents the band- vide multi-image support. GFortran delegates communica- width, latency, and execution times for various message sizes tion and synchronization to an external library (LIBCAF) and problem sizes produced with each compiler/library com- while the compiler remains agnostic with regards to the ac- bination. Section 6 summarizes our conclusions. tual implementation of the library calls. 2. INTRODUCTION TO COARRAYS For single-image execution, GFortran calls stub implemen- In this section, we explain basic coarray concepts. A pro- tations inside a LIBCAF SINGLE library included with the gram that uses coarrays is treated as if it were replicated at compiler. For multi-image execution, an external library the start of execution. Each replication is called an image. must be provided to handle GFortran-generated procedure Each image executes asynchronously until the programmer invocations. Having an external library allows for exchang- explicitly synchronizes via one of several mechanisms. A ing communication libraries without modifying the compiler typical synchronization statement is sync all, which func- code. It also facilitates integration of the library into com- tions as a barrier at which all images wait until every image pilers other than GFortran so long as those compilers are reaches the barrier. A piece of code contained between syn- capable of generating the appropriate library calls. Open- chronization points is called a segment and a compiler is free Coarrays uses a BSD-style, open-source license. to apply all its optimizations inside a segment. OpenCoarrays currently provides two alternative versions An image has an image index that is a number between one of the library: LIBCAF MPI and LIBCAF GASNet. The and the number of images (inclusive). In order to identify MPI version has the widest features coverage; it is intended a specific image at runtime or the total number of images, as the default because of the ease of usage and installation. Fortran provides the this_image() and num_images() func- The GASNet version targets expert users; it provides better tions. A coarray can be a scalar or array, static or dynamic, performance than the MPI version but requires more effort and of intrinsic or derived type. A program accesses a coar- during the installation, configuration, and usage. ray object on a remote image using square brackets [ ]. 3.1 LIBCAF_MPI An object with no square brackets is considered local. A LIBCAF MPI currently supports simple coarray Fortran program follows: real , dimension (10), codimension[ ∗ ] : : x , y • Coarray scalar and array transfers, including efficient transfers of array sections with non-unit stride. all the synchronization routines. This paper therefore pro- vides only a partial analysis of this version. We plan to • Synchronization via , . sync all sync images complete every test case in future work. • Collective procedures (co_sum, co_max, co_min, etc...) except for character coarrays. LIBCAF GASNet maps the Get and Put operations directly onto the gasnet put bulk and gasnet get bulk functions. As • Atomics. LIBCAF MPI, LIBCAF GASNet offers two alternatives for the strided transfers: the element-by-element approach and The support for coarray transfers includes get/put and strided the native support for strided transfers provided by GAS- get/put for every data type, intrinsic or derived.
Recommended publications
  • Introduction to Programming in Fortran 77 for Students of Science and Engineering
    Introduction to programming in Fortran 77 for students of Science and Engineering Roman GrÄoger University of Pennsylvania, Department of Materials Science and Engineering 3231 Walnut Street, O±ce #215, Philadelphia, PA 19104 Revision 1.2 (September 27, 2004) 1 Introduction Fortran (FORmula TRANslation) is a programming language designed speci¯cally for scientists and engineers. For the past 30 years Fortran has been used for such projects as the design of bridges and aeroplane structures, it is used for factory automation control, for storm drainage design, analysis of scienti¯c data and so on. Throughout the life of this language, groups of users have written libraries of useful standard Fortran programs. These programs can be borrowed and used by other people who wish to take advantage of the expertise and experience of the authors, in a similar way in which a book is borrowed from a library. Fortran belongs to a class of higher-level programming languages in which the programs are not written directly in the machine code but instead in an arti¯cal, human-readable language. This source code consists of algorithms built using a set of standard constructions, each consisting of a series of commands which de¯ne the elementary operations with your data. In other words, any algorithm is a cookbook which speci¯es input ingredients, operations with them and with other data and ¯nally returns one or more results, depending on the function of this algorithm. Any source code has to be compiled in order to obtain an executable code which can be run on your computer.
    [Show full text]
  • Writing Fast Fortran Routines for Python
    Writing fast Fortran routines for Python Table of contents Table of contents ............................................................................................................................ 1 Overview ......................................................................................................................................... 2 Installation ...................................................................................................................................... 2 Basic Fortran programming ............................................................................................................ 3 A Fortran case study ....................................................................................................................... 8 Maximizing computational efficiency in Fortran code ................................................................. 12 Multiple functions in each Fortran file ......................................................................................... 14 Compiling and debugging ............................................................................................................ 15 Preparing code for f2py ................................................................................................................ 16 Running f2py ................................................................................................................................. 17 Help with f2py ..............................................................................................................................
    [Show full text]
  • Fortran Resources 1
    Fortran Resources 1 Ian D Chivers Jane Sleightholme May 7, 2021 1The original basis for this document was Mike Metcalf’s Fortran Information File. The next input came from people on comp-fortran-90. Details of how to subscribe or browse this list can be found in this document. If you have any corrections, additions, suggestions etc to make please contact us and we will endeavor to include your comments in later versions. Thanks to all the people who have contributed. Revision history The most recent version can be found at https://www.fortranplus.co.uk/fortran-information/ and the files section of the comp-fortran-90 list. https://www.jiscmail.ac.uk/cgi-bin/webadmin?A0=comp-fortran-90 • May 2021. Major update to the Intel entry. Also changes to the editors and IDE section, the graphics section, and the parallel programming section. • October 2020. Added an entry for Nvidia to the compiler section. Nvidia has integrated the PGI compiler suite into their NVIDIA HPC SDK product. Nvidia are also contributing to the LLVM Flang project. Updated the ’Additional Compiler Information’ entry in the compiler section. The Polyhedron benchmarks discuss automatic parallelisation. The fortranplus entry covers the diagnostic capability of the Cray, gfortran, Intel, Nag, Oracle and Nvidia compilers. Updated one entry and removed three others from the software tools section. Added ’Fortran Discourse’ to the e-lists section. We have also made changes to the Latex style sheet. • September 2020. Added a computer arithmetic and IEEE formats section. • June 2020. Updated the compiler entry with details of standard conformance.
    [Show full text]
  • NUG Single Node Optimization Presentation
    Single Node Optimization on Hopper Michael Stewart, NERSC Introduction ● Why are there so many compilers available on Hopper? ● Strengths and weaknesses of each compiler. ● Advice on choosing the most appropriate compiler for your work. ● Comparative benchmark results. ● How to compile and run with OpenMP for each compiler. ● Recommendations for running hybrid MPI/OpenMP codes on a node. Why So Many Compilers on Hopper? ● Franklin was delivered with the only commercially available compiler for Cray Opteron systems, PGI. ● GNU compilers were on Franklin, but at that time GNU Fortran optimization was poor. ● Next came Pathscale because of superior optimization. ● Cray was finally legally allowed to port their compiler to the Opteron so it was added next. ● Intel was popular on Carver, and it produced highly optimized codes on Hopper. ● PGI is still the default, but this is not a NERSC recommendation. Cray's current default is the Cray compiler, but we kept PGI to avoid disruption. PGI ● Strengths ○ Available on a wide variety of platforms making codes very portable. ○ Because of its wide usage, it is likely to compile almost any valid code cleanly. ● Weaknesses ○ Does not optimize as well as compilers more narrowly targeted to AMD architectures. ● Optimization recommendation: ○ -fast Cray ● Strengths ○ Fortran is well optimized for the Hopper architecture. ○ Uses Cray math libraries for optimization. ○ Well supported. ● Weaknesses ○ Compilations can take much longer than with other compilers. ○ Not very good optimization of C++ codes. ● Optimization recommendations: ○ Compile with no explicit optimization arguments. The default level of optimization is very high. Intel ● Strengths ○ Optimizes C++ and Fortran codes very well.
    [Show full text]
  • PHYS-4007/5007: Computational Physics Course Lecture Notes Section II
    PHYS-4007/5007: Computational Physics Course Lecture Notes Section II Dr. Donald G. Luttermoser East Tennessee State University Version 7.1 Abstract These class notes are designed for use of the instructor and students of the course PHYS-4007/5007: Computational Physics taught by Dr. Donald Luttermoser at East Tennessee State University. II. Choosing a Programming Language A. Which is the Best Programming Language for Your Work? 1. You have come up with a scientific idea which will require nu- merical work using a computer. One needs to ask oneself, which programming language will work best for the project? a) Projects involving data reduction and analysis typically need software with graphics capabilities. Examples of such graphics languages include IDL, Mathlab, Origin, GNU- plot, SuperMongo, and Mathematica. b) Projects involving a lot of ‘number-crunching’ typically require a programming language that is capable of car- rying out math functions in scientific notation with as much precision as possible. In physics and astronomy, the most commonly used number-crunching programming languages include the various flavors of Fortran, C, and more recently, Python. i) As noted in the last section, the decades old For- tran 77 is still widely use in physics and astronomy. ii) Over the past few years, Python has been growing in popularity in scientific programming. c) In this class, we will focus on two programming languages: Fortran and Python. From time to time we will discuss the IDL programming language since some of you may encounter this software during your graduate and profes- sional career. d) Any coding introduced in these notes will be written in either of these three programming languages.
    [Show full text]
  • Using GNU Fortran 95
    Contributed by Steven Bosscher ([email protected]). Using GNU Fortran 95 Steven Bosscher For the 4.0.4 Version* Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307, USA Copyright c 1999-2005 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being “GNU General Public License” and “Funding Free Software”, the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the section entitled “GNU Free Documentation License”. (a) The FSF’s Front-Cover Text is: A GNU Manual (b) The FSF’s Back-Cover Text is: You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise funds for GNU development. i Short Contents Introduction ...................................... 1 GNU GENERAL PUBLIC LICENSE .................... 3 GNU Free Documentation License ....................... 9 Funding Free Software .............................. 17 1 Getting Started................................ 19 2 GFORTRAN and GCC .......................... 21 3 GFORTRAN and G77 ........................... 23 4 GNU Fortran 95 Command Options.................. 25 5 Project Status ................................ 33 6 Extensions ................................... 37 7 Intrinsic Procedures ............................
    [Show full text]
  • Advanced Fortran @
    Sami Ilvonen Peter Råback Advanced Fortran Programming March 26-28, 2019 CSC – IT Center for Science Ltd, Finland type revector(rk) integer, kind :: rk real(kind=rk), allocatable :: data(:) contains procedure :: sum => vecsum generic :: operator(+) => sum end type revector type, extends(revector) :: imvector real(kind=rk), allocatable :: imdata(:) contains procedure :: sum => imvecsum end type imvector contains function vecsum(x,y) result(z) implicit none class(revector(dp)), intent(in) :: x,y class(revector(dp)), allocatable :: z integer :: i select type(y) All material (C) 2013-2019 by CSC – IT Center for Science Ltd. This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License, http://creativecommons.org/licenses/by-nc-sa/3.0/ Agenda Tuesday Wednesday 9:00-9:15 Course introduction 9:00-9:45 Introduction to Fortran coarrays 9:15-10:00 Useful new features beyond F95 9:45-10:00 Coffee break 10:00-10:15 Coffee break 10:00-11:15 Exercises 11:15-12:00 More coarray features 10:15-11:00 Advanced topics in Fortran I/O 12:00-13:00 Lunch break 11:00-11:15 Working with Fortran 13:00-14:00 Exercises compilers 14:00-14:45 Advanced topics in coarrays 11:15-12:00 Exercises 14:45-15:00 Coffee break 12:00-13:00 Lunch break 15:00-16:00 Exercises 13:00-14:00 Interoperability with C 14:00-14:45 Exercises 14:45-15:00 Coffee break 15:00-16:00 Exercises Thursday 9:00-10:00 Additional capabilities of Fortran types, procedure pointers 10:00-10:15 Coffee break 10:15-11:00 Exercises 11:00-12:00 Type extensions, type-bound
    [Show full text]
  • User's Guide for Quantum ESPRESSO
    User's Guide for Quantum ESPRESSO (v.6.1) Contents 1 Introduction 1 1.1 People . 3 1.2 Contacts . 4 1.3 Guidelines for posting to the mailing list . 4 1.4 Terms of use . 5 2 Installation 5 2.1 Download . 6 2.2 Prerequisites . 7 2.3 configure ....................................... 7 2.3.1 Manual configuration . 9 2.4 Libraries . 10 2.5 Compilation . 11 2.6 Running tests and examples . 12 2.7 Installation tricks and problems . 14 2.7.1 All architectures . 14 2.7.2 Intel Xeon Phi . 15 2.7.3 Cray machines . 15 2.7.4 IBM AIX . 16 2.7.5 IBM BlueGene . 16 2.7.6 Linux PC . 16 2.7.7 Linux PC clusters with MPI . 18 2.7.8 Mac OS . 19 3 Parallelism 21 3.1 Understanding Parallelism . 21 3.2 Running on parallel machines . 21 3.3 Parallelization levels . 22 3.3.1 Understanding parallel I/O . 24 3.4 Tricks and problems . 24 1 1 Introduction This guide gives a general overview of the contents and of the installation of Quantum ESPRESSO (opEn-Source Package for Research in Electronic Structure, Simulation, and Op- timization), version 6.1. The Quantum ESPRESSO distribution contains the core packages PWscf (Plane-Wave Self-Consistent Field) and CP (Car-Parrinello) for the calculation of electronic-structure prop- erties within Density-Functional Theory (DFT), using a Plane-Wave (PW) basis set and pseu- dopotentials. It also includes other packages for more specialized calculations: • PWneb: energy barriers and reaction pathways through the Nudged Elastic Band (NEB) method.
    [Show full text]
  • Coarrays in GNU Fortran
    Coarrays in GNU Fortran Alessandro Fanfarillo [email protected] June 24th, 2014 Alessandro Fanfarillo Coarrays in GFortran June 24th, 2014 1 / 50 Introduction Coarray Fortran (also known as CAF) is a syntactic extension of Fortran 95/2003 which has been included in the Fortran 2008 standard. The main goal is to allow Fortran users to realize parallel programs without the burden of explicitly invoke communication functions or directives (MPI, OpenMP). The secondary goal is to express parallelism in a \platform-agnostic" way (no explicit shared or distributed paradigm). Coarrays are based on the Partitioned Global Address Space model (PGAS). Compilers which support Coarrays: Cray Compiler (Gold standard - Commercial) Intel Compiler (Commercial) Rice Compiler (Free - Rice University) OpenUH (Free - University of Houston) G95 (Coarray support not totally free - Not up to date) Alessandro Fanfarillo Coarrays in GFortran June 24th, 2014 2 / 50 PGAS Languages The PGAS model assumes a global memory address space that is logically partitioned and a portion of it is local to each process or thread. It means that a process can directly access a memory portion owned by another process. The model attempts to combine the advantages of a SPMD programming style for distributed memory systems (as employed by MPI) with the data referencing semantics of shared memory systems. Coarray Fortran. UPC (upc.gwu.edu). Titanium (titanium.cs.berkeley.edu). Chapel (Cray). X10 (IBM). Alessandro Fanfarillo Coarrays in GFortran June 24th, 2014 3 / 50 Coarray concepts A program is treated as if it were replicated at the start of execution, each replication is called an image.
    [Show full text]
  • Pathscale Fortran and C/C++ Compilers
    PathScale™ Compiler Suite User Guide Version 3.2 Page i PathScale Compiler Suite User Guide Version 3.2 Page ii PathScale Compiler Suite User Guide Version 3.2 Information furnished in this manual is believed to be accurate and reliable. However, PathScale LLC assumes no responsibility for its use, nor for any infringements of patents or other rights of third parties which may result from its use. PathScale LLC reserves the right to change product specifications at any time without notice. Applications described in this document for any of these products are for illustrative purposes only. PathScale LLC makes no representation nor warranty that such applications are suitable for the specified use without further testing or modification. PathScale LLC assumes no responsibility for any errors that may appear in this document. No part of this document may be copied nor reproduced by any means, nor translated nor transmitted to any magnetic medium without the express written consent of PathScale LLC. In accordance with the terms of their valid PathScale agreements, customers are permitted to make electronic and paper copies of this document for their own exclusive use. Linux is a registered trademark of Linus Torvalds. PathScale, the PathScale logo, and EKOPath are registered trademarks of PathScale, LLC. Red Hat and all Red Hat-based trademarks are trademarks or registered trademarks of Red Hat, Inc. SuSE is a registered trademark of SuSE Linux AG. All other brand and product names are trademarks or registered trademarks of their respective owners. © 2007, 2008 PathScale, LLC. All rights reserved. © 2006, 2007 QLogic Corporation. All rights reserved worldwide.
    [Show full text]
  • In the GNU Fortran Compiler
    Using GNU Fortran For gcc version 12.0.0 (pre-release) (GCC) The gfortran team Published by the Free Software Foundation 51 Franklin Street, Fifth Floor Boston, MA 02110-1301, USA Copyright c 1999-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being \Funding Free Software", the Front-Cover Texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the section entitled \GNU Free Documentation License". (a) The FSF's Front-Cover Text is: A GNU Manual (b) The FSF's Back-Cover Text is: You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise funds for GNU development. i Short Contents 1 Introduction ::::::::::::::::::::::::::::::::::::::::: 1 Invoking GNU Fortran 2 GNU Fortran Command Options :::::::::::::::::::::::: 7 3 Runtime: Influencing runtime behavior with environment variables ::::::::::::::::::::::::::::::::::::::::::: 33 Language Reference 4 Fortran standards status :::::::::::::::::::::::::::::: 39 5 Compiler Characteristics :::::::::::::::::::::::::::::: 45 6 Extensions :::::::::::::::::::::::::::::::::::::::::: 51 7 Mixed-Language Programming ::::::::::::::::::::::::: 73 8 Coarray Programming :::::::::::::::::::::::::::::::: 89 9 Intrinsic Procedures ::::::::::::::::::::::::::::::::: 113
    [Show full text]
  • Using GNU Fortran
    Using GNU Fortran For gcc version 4.6.4 (GCC) The gfortran team Published by the Free Software Foundation 51 Franklin Street, Fifth Floor Boston, MA 02110-1301, USA Copyright c 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being \Funding Free Software", the Front-Cover Texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the section entitled \GNU Free Documentation License". (a) The FSF's Front-Cover Text is: A GNU Manual (b) The FSF's Back-Cover Text is: You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise funds for GNU development. i Short Contents 1 Introduction ::::::::::::::::::::::::::::::::::::::::: 1 Part I: Invoking GNU Fortran :::::::::::::::::::::::::::::: 5 2 GNU Fortran Command Options :::::::::::::::::::::::: 7 3 Runtime: Influencing runtime behavior with environment variables ::::::::::::::::::::::::::::::::::::::::::: 25 Part II: Language Reference :::::::::::::::::::::::::::::: 29 4 Fortran 2003 and 2008 Status :::::::::::::::::::::::::: 31 5 Compiler Characteristics :::::::::::::::::::::::::::::: 35 6 Extensions :::::::::::::::::::::::::::::::::::::::::: 37 7 Mixed-Language Programming :::::::::::::::::::::::::
    [Show full text]