Quantcast
Channel: Recent posts
Viewing all articles
Browse latest Browse all 415

ifort 2016 release 3: input statement requires too much data

$
0
0

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.

 


Viewing all articles
Browse latest Browse all 415

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>