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

The Fortran program is not working with Windows 10 as it used to work with Windows 7

El_Noshokaty__Said
New Contributor I
381 Views

Hi everyone,

It is a 64bit Fortran program that was compiled by Compiler 11.1.51 under Windows 7 pro 64bit and MS MPI. When I moved to Windows 10 and run the same program I noticed that arrays are not any more sent between tasks. I unstalled the old MS MPI and replace it with a new one but the problem still exist. Is there any idea why is that? I need help.

Best regards.

Said.

 

0 Kudos
5 Replies
andrew_4619
Honored Contributor II
381 Views

Your question is probably too general to get a good or indeed any answer. What do you mean by "that arrays are not any more sent between tasks". You should give some more specific information on this problem, there are usually plenty of people on this forum who can help.

0 Kudos
jimdempseyatthecove
Honored Contributor III
381 Views

It would be better to post this on https://software.intel.com/en-us/forums/intel-clusters-and-hpc-technology

The MPI gurus are over there. This said, it may be an issue with (your old version of Fortran and) Windows 10 and MSMPI. Have you tried OpenMPI or Intel's MPI?

Jim Dempsey

0 Kudos
El_Noshokaty__Said
New Contributor I
381 Views

Hi,

As known in programming, an array is a set of memory locations that are accessible via one index or more.  I used to send and receive arrays of one index between tasks where I specify the start of each array (where index value = 1) and its length, which is not allowable under Windows 10. Anyhow, thank you for your attention and I will try the HPC forum, If you do not know, where I might have the answer.

Best regards.

Said

0 Kudos
jimdempseyatthecove
Honored Contributor III
381 Views

>> I used to send and receive arrays of one index between tasks where I specify the start of each array (where index value = 1) and its length, which is not allowable under Windows 10.

MPI_Send takes as arguments (buffer, count, datatype, destination, tag, comm)

Where buffer is the initial address of the send buffer, in Fortran, this argument is a reference, thus

MPI_Send(YourArray(someIndex), count,...

would specify the starting address (by reference) of the transfer.

*** If your version of MS MPI headers is such that the subroutine interface to MPI_Send is declared with the buffer as:

    type(*), dimension(..), intent(in) :: buffer

Then you will have to qualify the range of indexes

call MPI_Send(YourArray(someIndex:someIndex+count-1), count, ...
or if always starting at index 1:
call MPI_Send(YourArray(1:count), count, ...

This then would be a case of you making your application source code conformant with the declared interface.

Jim Dempsey

 

0 Kudos
jimdempseyatthecove
Honored Contributor III
381 Views

I think the change to dimension(..), thus requiring you to specify the array, or more specific array slice, is to force the compiler to generate a contiguous buffer of data in the event that the specified starting location of the specified buffer is not contiguous with the remainder of the buffer. For example when the array slice is a column of an array, or when the buffer is specified via a pointer with stride other than 1.

A bit of cleanup of your code may be all that is necessary.

Have you enabled -warn:interfaces?

Jim Dempsey

0 Kudos
Reply