Transcript
Page 1: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Introduction to coarray Fortran using GNU Fortran

Alessandro Fanfarillo

University of Rome Tor Vergata

[email protected]

December 19th, 2014

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 1 / 39

Page 2: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Modern Fortran

FORTRAN 77 is usually what people think when you say “Fortran”.

Since Fortran 90 the language has evolved in order to address the modernprogramming needs.

Fortran 90: free form, recursion, dynamic memory, modules, derivedtypes and much more...

Fortran 95: Pure and elemental routines.

Fortran 2003: Object-oriented programming and C interoperability.

Fortran 2008: Parallel programming with coarrays and do concurrent.

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 2 / 39

Page 3: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Introduction to coarray

Coarray Fortran (also known as CAF) is a syntactic extension of Fortran95/2003 which has been included in the Fortran 2008 standard.

The main goal is to allow Fortran users to realize parallel programswithout the burden of explicitly invoke communication functions ordirectives (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)

GNU Fortran (Free - GCC)

Rice Compiler (Free - Rice University)

OpenUH (Free - University of Houston)

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 3 / 39

Page 4: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

PGAS Languages

The PGAS model assumes a global memory address space that is logicallypartitioned and a portion of it is local to each process or thread.

It means that a process can directly access a memory portion owned byanother process.

The model attempts to combine the advantages of a SPMD programmingstyle for distributed memory systems (as employed by MPI) with the datareferencing semantics of shared memory systems.

Coarray Fortran.

UPC (upc.gwu.edu).

Titanium (titanium.cs.berkeley.edu).

Chapel (Cray).

X10 (IBM).

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 4 / 39

Page 5: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Coarray concepts

A program is treated as if it were replicated at the start of execution(SPMD), each replication is called an image.

Each image executes asynchronously.

An image has an image index, that is a number between one and thenumber of images, inclusive.

A coarray is indicated by trailing [ ].

A coarray could be a scalar or array, static or dynamic, and of intrinsicor derived type.

A data object without trailing [ ] is local.

Explicit synchronization statements are used to maintain programcorrectness.

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 5 / 39

Page 6: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Memory basics

When we declare a coarray variable the following statements are true:

The coarray variable exists on each image.

The coarray name is the same on each image.

The size is the same on each image.

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 6 / 39

Page 7: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Coarray declaration

! Scalar coarray

integer :: x[*]

! Array coarray

real , dimension(n) :: a[*]

! Another array declaration

real , dimension(n), codimension [*] :: a

! Scalar coarray corank 3

integer :: cx[10 ,10,*]

! Array coarray corank 3

! different cobounds

real :: c(m,n) :: [0:10 ,10 ,*]

! Allocatable coarray

real , allocatable :: mat (: ,:)[:]

allocate(mat(m,n)[*])

! Derived type scalar coarray

type(mytype) :: xc[*]

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 7 / 39

Page 8: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Coarray example

real , dimension (10), codimension [*] :: x, y

integer :: num_img , me

integer ,dimension (5) :: idx

num_img = num_images (); me = this_image ()

idx = (/1,2,3,9,10/)

x(2) = x(3)[7] ! get value from image 7

x(6)[4] = x(1) ! put value on image 4

x(:)[2] = y(:) ! put array on image 2

sync all

! Remote -to -remote array transfer

if (me == 1) then

y(:)[ num_img] = x(:)[4]

sync images(num_img)

elseif (me == num_img) then

sync images ([1])

end if

x(1:10:2) = y(1:10:2)[4] ! strided get from 4

y(idx) = x(idx )[8] ! Get using vector subscript

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 8 / 39

Page 9: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Segments

A segment is a piece of code between synchronization points.

The compiler is free to apply optimizations within a segment.

Segments are ordered by synchronization statement and dynamicmemory actions (allocate).

Important rule: if a variable is defined in a segment, it must not bereferenced, defined, or become undefined in a another segment unless thesegments are ordered.

real :: p[*]

: ! Segment 1

sync all

if (this_image ()==1) then ! Segment 2

read (*,*) p ! :

do i = 2, num_images () ! :

p[i] = p ! :

end do ! :

end if ! Segment 2

sync all

: !Segment 3

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 9 / 39

Page 10: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Derived types

type mytype

integer :: a

real , dimension (3) :: dims

real , allocatable :: v(:)

end type mytype

!Some code here

type(mytype) :: my[*]

type(mytype),dimension (2) :: arrmy [*]

allocate(my%v(n))

if(me==2) then

my%dims (:) = my[1]% dims (:)

arrmy (:) = arrmy (:)[1]

endif

In GNU Fortran there are still some limitations on accessing derived type’scomponents (e.g. allocatable components).

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 10 / 39

Page 11: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Synchronization

sync all: barrier on all images

sync images(list-of-images): partial barrier

critical: only one image at a time can access a critical region

locks: similar to critical but with more flexibility

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 11 / 39

Page 12: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Locks and critical

Example using locks

use iso_fortran_env

TYPE(LOCK_TYPE) :: queue_lock [*]

integer :: counter [*]

!Some code

lock(queue_lock [2])

counter [2] = counter [2] + 1

unlock(queue_lock [2])

Example using critical

real(real64),codimension [*] :: sum

!Some code here

do i=start_int ,start_int + l_int -1

x=dx*(i-0.5d0)

f=4.d0/(1.d0+x*x)

critical

sum [1]= sum [1]+f

end critical

end do

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 12 / 39

Page 13: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Collectives

co sum

co max/co min

co reduce (not yet supported by the library)

co broadcast

Pi computation: pi = 4* int 1/(1+x*x) x in [0-1]

real(real64),codimension [*] :: sum

real(real64) :: dx ,x

real(real64) :: f,pi

!Some code here

dx=1.d0/intervals

do i=start_int ,start_int + l_int -1

x=dx*(i-0.5d0)

f=4.d0/(1.d0+x*x)

sum=sum+f

end do

call co_sum(sum)

pi = dx*sum

if(me == 1) write (*,*) pi

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 13 / 39

Page 14: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Atomics

An atomic can be integer or logical

Atomic define

Atomic ref

Atomic add

Atomic cas

Atomic or

Atomic and

use iso_fortran_env

integer(atomic_int_kind) :: counter [*]

integer :: res

!Some code

call atomic_add (counter [2], 1)

!Some code

call atomic_ref(res ,counter [2])

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 14 / 39

Page 15: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Coarray references

Original Paper atftp://ftp.numerical.rl.ac.uk/pub/reports/nrRAL98060.ps.gz

WG5 N1824.pdf (John Reid’s summary) at www.nag.co.uk/sc22wg5

Rice University - caf.rice.edu

FDIS J3/10-007r1.pdf (www.j3-fortran.org)

Modern Fortran Explained by Metcalf, Reid, Cohen.

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 15 / 39

Page 16: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

GNU Fortran and OpenCoarrays (1)

GNU Fortran translates the coarrays syntax into library calls.

real(real64), allocatable :: d(:)[:]

! More code here

if(me == 1) d(:)[2] = d(:)

! More code here

Becomes:

if (me == 1)

{

_gfortran_caf_send (d.token , 0,

3 - (integer(kind =4)) d.dim [1]. lbound , &d, 0B, &d, 8, 8);

}

Library API:

void caf_send (caf_token_t token , size_t offset , int image_index ,

gfc_descriptor_t *dest , caf_vector_t *dst_vector ,

gfc_descriptor_t *src , int dst_kind , int src_kind)

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 16 / 39

Page 17: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

GNU Fortran and OpenCoarrays (2)

GFortran uses an external library to support coarrays(libcaf/OpenCoarrays).

Currently there are three libcaf implementations:

MPI Based

GASNet Based

ARMCI Based (not updated)

LIBCAF MPI uses passive One-Sided communication functions (usingMPI Win lock/unlock) provided by MPI-2/MPI-3.

GASNet provides higher performance than MPI and PGAS functionalitiesbut is more difficult to use.

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 17 / 39

Page 18: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

MPI version - Current status

Supported Features:

Coarray scalar and array transfers (efficient strided transfers)

Synchronization

Collectives

Atomics

Critical

Locks (compiler support missing)

Unsupported Features:

Vector subscripts

Derived type coarrays with non-coarray allocatable components

Error handling

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 18 / 39

Page 19: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

How to use coarrays in GFortran (1)

Compiler:

The coarray support on GFortran is available since version GCC 5.

Currently, GCC 5.0 is downloadable from the trunk using SVN/GIT orfrom a snapshot; in both cases the user is supposed to compile GCC fromsource.

Library:

OpenCoarrays is not part of GCC; it has to be downloaded separately.

opencoarrays.org provides a link to the OpenCoarrays repository.

Once downloaded just type “make” and the LIBCAF MPI will be compiledby default.

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 19 / 39

Page 20: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

How to use coarrays in GFortran (2)

Assuming MPICH as MPI implementation, the wrapper mpifort has topoint to the new gfortran.

In order to turn on the coarray support during the compilation you mustuse the -fcoarray=lib option.

mpifort -fcoarray=lib youcoarray.f90 -L/path/to/libcaf mpi.a

-lcaf mpi -o yourcoarray

For running your coarray program:

mpirun -np n ./yourcoarray

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 20 / 39

Page 21: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Coarray support comparison

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 21 / 39

Page 22: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Coarray support

In order to evaluate the coarray support provided by GNU Fortran wemake a comparison with the two most complete compilers.

Cray:

Pros: Most mature, reliable, efficient and complete coarrayimplementation.Cons: Commercial compiler. Requires a Cray supercomputer.

Intel:

Pros: Pretty complete implentation of coarray functionality.Cons: Commercial compiler. Works only on Linux and Windows.

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 22 / 39

Page 23: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Test Suite Description

EPCC CAF Micro-benchmark suite (Edinburgh University)

It measures a set of basic parallel operations (get, put, strided get,strided put, sync, halo exchange).

Burgers Solver (Damian Rouson)

It has nice scaling properties: it has a 87% weak scaling efficiency on16384 cores and linear scaling (sometimes super-linear).

CAF Himeno (Prof. Ryutaro Himeno - Bill Long - Dan Nagle)

It is a 3-D Poisson relaxation.

Distributed Transpose (Bob Rogallo).

It is a 3-D Distributed Transpose part of a Navier-Stokes solver.

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 23 / 39

Page 24: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Hardware

Eurora: Linux Cluster, 16 cores per node, Infiniband QDR QLogic(CINECA).

PLX: IBM Dataplex, 12 cores per node, Infiniband QDR QLogic(CINECA).

Yellowstone/Caldera: IBM Dataplex, 16 cores per node, InfinibandMellanox (NCAR).

Janus: Dell, 12 cores per node, Infiniband Mellanox (CU-Boulder).

Hopper: Cray XE6, 24 cores per node, 3-D Torus Cray Gemini(NERSC).

Edison: Cray XC30, 24 cores per node, Cray Aries (NERSC).

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 24 / 39

Page 25: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

GFortran vs. Intel two Yellowstone nodes

1e-05

0.0001

0.001

0.01

0.1

1

10

100

1000

1 2 4 8 16

32

64

128

256

512

Tim

e (

sec)

Block size (doubles)

Latency put 32 cores

GFor/MPIIntel

1e-06

1e-05

0.0001

0.001

0.01

0.1

1

10

100

1000

1 2 4 8 16

32

64

128

256

512

MB

/sec

Block size (doubles)

Bandwidth put 32 cores

GFor/MPIIntel

Latency: lower is better - Bandwidth: higher is better

Note: Latency is expressed in seconds and Bw in MB/Sec.

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 25 / 39

Page 26: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Bw Single Strided Put 16 cores Yellowstone

1

10

100

1000

10000

1 2 4 8 16 32 64 128

MB

/se

c

Stride size

Bandwidth strided put 16 cores (no network)

GFor/MPIIntel

GFor/MPI_NS

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 26 / 39

Page 27: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Bw two Hopper nodes - Small sizes

0

10

20

30

40

50

60

70

1 2 4 8 16 32 64

MB

/sec

Block size (doubles)

Bandwidth Get Hopper 48 cores

GFor/MPICray

GFor/GN

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 27 / 39

Page 28: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Bw two Hopper nodes - Big sizes

0

500

1000

1500

2000

2500

3000

3500

4000

4500

128

256

512

1024

2048

4096

8192

16384

32768

65536

13107

2

26214

4

52428

8

10485

76

20971

52

41943

04

MB

/sec

Block size (doubles)

Bandwidth Get Hopper 48 cores

GFor/MPICray

GFor/GN

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 28 / 39

Page 29: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Bw Single Get 48 cores Edison (small)

0

20

40

60

80

100

120

140

1 2 4 8 16 32 64

MB

/sec

Block size (double)

Bandwidth Get Edison 48 cores

GFor/MPICray

GFor/GN

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 29 / 39

Page 30: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Bw Single Get 48 cores Edison (Big)

0

1000

2000

3000

4000

5000

6000

7000

8000

9000

10000

12

8

25

6

51

2

10

24

20

48

40

96

81

92

16

384

32

768

65

536

13

107

2

26

214

4

52

428

8

10

485

76

20

971

52

41

943

04

MB

/sec

Block size (doubles)

Bandwidth Get Edison 48 cores

GFor/MPICray

GFor/GN

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 30 / 39

Page 31: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Bw Strided Get on Hopper - Two nodes

10

100

1000

10000

1 2 4 8 16 32 64 128

MB

/sec

Stride size

Bandwidth strided Get 48 cores Hopper

GFor/MPICray

GFor/GN

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 31 / 39

Page 32: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Bw Strided Get on Hopper (2)

The Cray strided transfer support has been strongly improved in the newCCE 8.3.2.

10

100

1000

10000

1 2 4 8 16 32 64 128

MB

/sec

Stride size

Comparison strided Get 24 cores Hopper (no network)

GFor/MPICray8.2.2GFor/GN

Cray-8.3.2

10

100

1000

10000

1 2 4 8 16 32 64 128

MB

/sec

Stride size

Comparison strided Get 48 cores Hopper

GFor/MPICray-8.2.2

GFor/GNCray-8.3.2

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 32 / 39

Page 33: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Distributed Transpose

3-D Distributed Transpose.

The problem size has been fixed at 1024,1024,512.

Part of a parallel Navier-Stokes solver.

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 33 / 39

Page 34: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Distributed Transpose - Hopper

0

1

2

3

4

5

6

7

16 32 64

Tim

e (

sec)

Cores

GFor/MPICray

GFor/GASNetMPI

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 34 / 39

Page 35: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Conclusions - GFortran vs. Intel

Intel Pros:

Intel provides good coverage in terms of coarray functionality.

Intel shows better performance than GFortran only during scalar transfers

within the same node.

Intel Cons:

Intel pays a huge penalty when it uses the network (multi node).

Coarray support provided only on Linux and Windows.

GFortran Pros:

GFortran shows better performance than Intel in every configuration which

involves the network.

GFortran works on any architecture able to compile GCC and a standard

MPI implementation.

GFortran is free.

GFortran Cons:

GFortran does not yet cover all the coarray features.

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 35 / 39

Page 36: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Conclusions - GFortran vs. Cray

Cray pros:

Cray has better performance than GFortran within the same node and on

multi node for contiguous array transfers.

Cray provides the best coverage in terms of coarray functionality.

Cray cons:

Cray requires some tuning in order to work properly (env vars and modules).

The Cray compiler requires a Cray supercomputer.

GFortran pros:

GFortran has better performance than Cray for strided transfers on multi

node.

GFortran works on any architecture able to compile GCC and a standard

MPI implementation.

GFortran is free.

GFortran cons:

GFortran does not yet cover all the coarray features.

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 36 / 39

Page 37: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Conclusions

GFortran provides a stable, easy to use and efficient implementationof coarrays.

GFortran provides a valid and free alternative to commercialcompilers.

GFortran + LIBCAF MPI has significant performanceimprovement/decrease according to the machine and the MPI onesided implementation.

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 37 / 39

Page 38: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Acknowledgment

Sourcery, Inc

CINECA (Grant HyPSBLAS)

Google (Project GSoC 2014)

UCAR/NCAR

NERSC (Grant OpenCoarrays)

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 38 / 39

Page 39: Introduction to coarray Fortran using GNU Fortran · Modern Fortran FORTRAN 77 is usually what people think when you say \Fortran". Since Fortran 90 the language has evolved in order

Thanks

Questions?

Alessandro Fanfarillo OpenCoarrays December 19th, 2014 39 / 39


Top Related