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

ifort 2016 release 3: input statement requires too much data

martin_k_5
Beginner
303 Views

Hello,

we installed the new release 3 of the Intel Parallel Studio 2016 (parallel_studio_xe_2016.3.067) on our cluster and a problem occurs while reading from an unformatted file with any optimization (O1, O2, O3) on.

The program itself works flawlessly with -O2 with release 2 of this year's ifort as well as with ifort 10 and 11. The operating system is Linux with kernel version 3.12.60.

The following code was taken from the complete program  in fixed form Fortran and is able to reproduce the error:

      program main
      implicit none
      integer*4 iconf(1000)
      integer*4 jerz(20), jver(20)
      integer*4 iv(20),ie(20),
     .          ivsave(20),iesave(20)
      character*4 girep
      integer*4, allocatable ::lconf(:,:)
      integer*4, allocatable ::lstart(:)
      integer*4, allocatable ::iconf1(:,:)
      integer*4, allocatable ::iconf2(:,:)
      integer*4, allocatable ::i1off(:,:)
      integer*4, allocatable ::i2off(:,:)
      integer*4, allocatable ::i1ix(:)
      integer*4, allocatable ::i1ex(:)
      integer*4, allocatable ::i2iix1(:)
      integer*4, allocatable ::i2iix2(:)
      integer*4, allocatable ::i2iex1(:)
      integer*4, allocatable ::i2iex2(:)
      integer*4, allocatable ::i2eex1(:)
      integer*4, allocatable ::i2eex2(:)
      integer*4, allocatable :: mat(:) ,merz(:,:) ,mver(:,:)
      integer irefold(73),i,j
      integer*8 matall,matclast,matcalc
      integer*4 i1i,i1e,i2ie,i2ii,idum,imem,ierr
      integer*4 momax,MEMMB,NCONF,INTS2EEMAX,INTS2IEMAX
      integer*4 INTS2IIMAX,INTS1EMAX,INTS1IMAX
      integer*4 INT2,INT1,I2EE,INT0

      matall = 0
      nconf=8477
      open(unit=2,file='Hc.info.ag',form='unformatted')
      read(2) idum 
      read(2) int0
      read(2) (irefold(i),i=1,int0)
      read(2) momax 
      read(2) i2ii 

      allocate(i2iix1(i2ii),i2iix2(i2ii),stat=ierr)
      if (ierr.ne.0) stop 'Allocation failed for creators in cinew'
      read(2)(i2iix1(i),i=1,i2ii)
      read(2)(i2iix2(i),i=1,i2ii)

      print *, '1'


      read(2) i2ie
      allocate(i2iex1(i2ie),i2iex2(i2ie),stat=ierr)
      if (ierr.ne.0) stop 'Allocation failed for creators in cinew'
      read(2)(i2iex1(i),i=1,i2ie)
      read(2)(i2iex2(i),i=1,i2ie)

      print *, '2'

      read(2) i1i
      allocate(i1ix(i1i),stat=ierr)
      if (ierr.ne.0) stop 'Allocation failed for creators in cinew'
      read(2)(i1ix(i),i=1,i1i)

      print *, '3'

      read(2) i1e
      allocate(i1ex(i1e),stat=ierr)
      if (ierr.ne.0) stop 'Allocation failed for creators in cinew'
      read(2)(i1ex(i),i=1,i1e)

      print *, '4'

      read(2) i2ee
      allocate(i2eex1(i2ee),i2eex2(i2ee),stat=ierr)
      if (ierr.ne.0) stop 'Allocation failed for creators in cinew'
      read(2)(i2eex1(i),i=1,i2ee)
      read(2)(i2eex2(i),i=1,i2ee)

      print *, '5'

      read(2) int1
      allocate(iconf1(2,int1),stat=ierr)
      if (ierr.ne.0) stop 'Allocation failed for iconf1'

      print *, '6'

      read(2) ((iconf1(i,j),i=1,2),j=1,int1)

      read(2) int2
      allocate(iconf2(3,int2),stat=ierr)
      if (ierr.ne.0) stop 'Allocation failed for iconf2'

      print *, '7'

      read(2) ((iconf2(i,j),i=1,3),j=1,int2)
      allocate(i1off(0:int1,2),stat=ierr)
      if (ierr.ne.0) stop 'Allocation failed for i1off'
      read(2)(i1off(i,1),i=0,int1)
      read(2)(i1off(i,2),i=0,int1)

      print *, '8'

      allocate(i2off(0:int2,3),stat=ierr)
      if (ierr.ne.0) stop 'Allocation failed for i2off'
      read(2)(i2off(i,1),i=0,int2)
      read(2)(i2off(i,2),i=0,int2)
      read(2)(i2off(i,3),i=0,int2)
      read(2) ints1imax,ints1emax,ints2iimax,ints2iemax,ints2eemax

      print *, '9'

      allocate(lstart(nconf+1),stat=ierr)
      if (ierr.ne.0) stop'Allocation failed for lstart in mrci'
      imem = imem + 4 * ( nconf + 1 )
	  print *, '10'
      read(2)(lstart(i),i=1,nconf+1)
	  print *, '11'
      close(2)
      end

$ ifort -O0 main.f

$ ./a.out

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10    
 11

This works as expected. But with -O1, -O2 or -O3 the following error occurs:

$ ifort -O2 main.f

$ ./a.out

 1
 2
 3
 4
forrtl: severe (67): input statement requires too much data, unit 2, file /home/adrian/tmp/ifort_test/Hc.info.ag
Image              PC                Routine            Line        Source             
a.out              0000000000407049  Unknown               Unknown  Unknown
a.out              000000000041DAB6  Unknown               Unknown  Unknown
a.out              000000000041B673  Unknown               Unknown  Unknown
a.out              00000000004032A6  Unknown               Unknown  Unknown
a.out              00000000004026DE  Unknown               Unknown  Unknown
libc.so.6          00007F01B068EF45  Unknown               Unknown  Unknown
a.out              00000000004025E9  Unknown               Unknown  Unknown

 

The input file was created by a working binary of the program compiled with release 2 of ifort 2016 and is the same in all test cases.

 

Thanks.

 

0 Kudos
5 Replies
Kevin_D_Intel
Employee
303 Views

Thank you for reporting this and for the reproducer. I will try reproducing this and keep you informed on my progress.

0 Kudos
Kevin_D_Intel
Employee
303 Views

I can reproduce the failure with 16.0.3 as you described. I also find that the program behaves as expected when compiled at any opt-level with our current Parallel Studio XE 2017 (i.e. 17.0 compiler) Beta release. That could mean the underlying root cause with 16.0.3 is known and that a fix was promoted to the 17.0 release either exclusively or is upcoming in another 16.0 update. I won’t know until I triage the failure further and know which compiler component development team to contact further regarding this.

0 Kudos
Kevin_D_Intel
Employee
303 Views

After further triage this appears to be a runtime library issue. I escalated this to our Developers (internal tracking id below) and will keep you updated about the availability of a fix.

(Internal tracking id: DPD200411901)

0 Kudos
Kevin_D_Intel
Employee
303 Views

Our Developers found the root cause. A fix for the defect is expected in the PSXE 2016 Update 4 release tentatively scheduled for late-August.

0 Kudos
Kevin_D_Intel
Employee
303 Views

I confirmed your case executes successfully with our latest 16.0 internal-only development compiler which confirms the fix will be present in our upcoming PSXE 2016 Update 4 in late-August. The fix will also be present in our initial PSXE 2017 release later this year.

0 Kudos
Reply