Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
28500 Discussions

Difference in performance of a COARRAY Fortran example on two similar PCs

avinashs
New Contributor I
4,165 Views

I ran a simple COARRAY Fortran example on two Windows 10 machines with the same project files (so exactly the same compiler settings). However, the output is different on both machines as shown below. Is this expected behavior? Any help will be appreciated, especially with settings that need to be changed.

Computer 1: Intel i7 4770K,    16 GB RAM, Cores = 4, Threads = 8, special order through an engineering software provider
Computer 2: Intel i7 6820HQ, 32 GB RAM, Cores = 4, Threads = 8, special order directly from Dell

The program code is:

program main
  ! Test COARRAY Fortran 2008
  if (this_image() == 1) then
     write(*,'(1x,a,1x,i0,1x,a)') 'Coarray Fortran program running with', num_images(), 'images'
  end if
  sync all
  write(*,'(1x,a,1x,i0)') 'Hello from image', this_image()
  if (this_image() == 1) read *
1 continue
end program main

The output on Computer 1 is as advertised in the tutorial:

         Coarray Fortran program running with 8 images
         Hello from image 1
         Hello from image 5
         Hello from image 2
         Hello from image 6
         Hello from image 3
         Hello from image 4
         Hello from image 7
         Hello from image 8

However, the output on Computer 2 is different as seen below and reports that only 1 image is used.

         Coarray Fortran program running with 1 images
         Hello from image 1
         Coarray Fortran program running with 1 images
         Hello from image 1
         Coarray Fortran program running with 1 images
         Hello from image 1
         Coarray Fortran program running with 1 images
         Hello from image 1
         Coarray Fortran program running with 1 images
         Hello from image 1
         Coarray Fortran program running with 1 images
         Hello from image 1
         Coarray Fortran program running with 1 images
         Hello from image 1
         Coarray Fortran program running with 1 images
         Hello from image 1
         
I will add that Computer 2 in general runs slower than Computer 1 on all Fortran applications although it is a newer and potentially superior computer.
 

0 Kudos
48 Replies
Steve_Lionel
Honored Contributor III
613 Views

It would be interesting to see the value of the PATH environment variable in the context of the running program. You can add a call to GET_ENVIRONMENT_VARIABLE to fetch it (use a 2500 character variable to store the result) and print it.

0 Kudos
JohnNichols
Valued Contributor III
613 Views

Steve:

You are not wrong about the co-array sample, it takes a while to figure out. 

LOL -- we are all not perfect - except maybe mecej4 -- he is close 

John

0 Kudos
avinashs
New Contributor I
613 Views

Steve Lionel (Ret.) (Blackbelt) wrote:

It would be interesting to see the value of the PATH environment variable in the context of the running program. You can add a call to GET_ENVIRONMENT_VARIABLE to fetch it (use a 2500 character variable to store the result) and print it.

The file is attached. The call was invoked several times, even for the image 1. Only one output is attached.  

integer :: lc, info
  character(len = 5000) :: c
  if (this_image() == 1) then
     call get_environment_variable ('path', c, lc, info, .true.)
     write(*,*) info
     write(*,*) lc
     write(*,'(g0)') trim(c)
     read *
  end if

 

0 Kudos
Steve_Lionel
Honored Contributor III
613 Views

Is that from a good run or a bad run? Do it both ways and compare. If you build from a command line environment, and you have the Cluster Edition, a different MPI runtime will be earlier in the list.

0 Kudos
avinashs
New Contributor I
613 Views

I ran the program again to compare the path for successful (x64) and unsuccesful (ia32) runs from the command line as suggested by @Steve Lionel. The two paths are attached.

0 Kudos
avinashs
New Contributor I
613 Views

I also received an error the first time I tried to run the x64 version (see below). It eventually ran on the second try.

MPI startup(): I_MPI_SCALABLE_OPTIMIZATION environment variable is not supported.
MPI startup(): To check the list of supported variables, use the impi_info utility or refer to https://software.intel.com/en-us/mpi-library/documentation/get-started.
forrtl: severe (157): Program Exception - access violation
In coarray image 1
Image              PC                Routine            Line        Source
impi.dll           00007FF8530C0307  Unknown               Unknown  Unknown
impi.dll           00007FF85305BB7E  Unknown               Unknown  Unknown
impi.dll           00007FF8529A29AC  Unknown               Unknown  Unknown
impi.dll           00007FF8529A21DC  Unknown               Unknown  Unknown
impi.dll           00007FF852C2C967  Unknown               Unknown  Unknown
impi.dll           00007FF852C1BCD9  Unknown               Unknown  Unknown
impi.dll           00007FF852ABAFCB  Unknown               Unknown  Unknown
libicaf.dll        00007FF86E13B329  Unknown               Unknown  Unknown
libifcoremdd.dll   00007FF86DFB5856  Unknown               Unknown  Unknown
coarray1.exe       00007FF76B05345D  Unknown               Unknown  Unknown
coarray1.exe       00007FF76B053974  Unknown               Unknown  Unknown
coarray1.exe       00007FF76B05389E  Unknown               Unknown  Unknown
coarray1.exe       00007FF76B05375E  Unknown               Unknown  Unknown
coarray1.exe       00007FF76B0539E9  Unknown               Unknown  Unknown
KERNEL32.DLL       00007FF8B2724034  Unknown               Unknown  Unknown
ntdll.dll          00007FF8B2BF3691  Unknown               Unknown  Unknown

Abort(0) on node 0 (rank 0 in comm 496): application called MPI_Abort(comm=0x84000003, 0) - process 0

 

0 Kudos
Steve_Lionel
Honored Contributor III
613 Views

IA32 doesn't work anymore for coarrays. Don't even try it.

0 Kudos
Reply