Skip to main content

  | मौसम…

411 समाचार
Public archive edition · Attributed source reporting with original dates · AI drafts are excluded

411 REFERENCE · Wikibooks

Fortran/parallel processing

Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.

Fortran Parallelism is included in the Fortran 2008 standard. To use parallel features, a Fortran program must be compiled with parallelism enabled. For example, the Intel ifort compiler uses the flag -coarray. Images Fortran uses a Partitioned Global Address Space (PGAS) model for parallelism. For each processor, the program is executed as a separate duplicate "image" of the program, each with their own separate memory partition. Consider the following program:program hello implicit none write (*,*) 'Hello from ', this_image(), 'of', num_images() end program helloThe intrinsic function this_image returns the number of the image that is being executed, and the intrinsic function num_images returns the total number of images for the program. If the program is compiled and executed with 4 processors, the output might look something like this:Hello from image 1 of 4 Hello from image 4 of 4 Hello from image 2 of 4 Hello from image 3 of 4Note that the images are executed asynchronously and so the output may not appear in the order 1, 2, 3 then 4. Coarrays Coarrays are a way of communicating data in arrays across images. A coarray is just like a normal array but it has extra codimensions for each image. Codimensions can be declared and indexed using the square brackets []. For example to declare a rank 1 coarray with size of 10 and a codimension of size 4:real :: coarr(10)[4] ! Or you can use declaration attributes to do the same thing real, dimension (10), codimension [4] :: another_coarrScalar variables can also be coarrays:integer :: scalar[*]Here, * denotes the maximum number of available processors. The codimensions can have multiple axes just like normal dimensions, however, there is a limit of rank 15 for codimensions. Transferring data between images is as simple as indexing on the codimensions.! Set all images to 1 coarr = 1 ! Indexing another_coarr(3)[4] = coarr(3)[3]