Community
cancel
Showing results for 
Search instead for 
Did you mean: 
gammal
Beginner
56 Views

bug on ifc openmp with complex array


I found a big bug on ifc openmp compiler when using complex arrays. The simple following code runs serial but not with openmp. Placing comments on declaration of a variable and on a=(0.d0,1d0) and write(*,*) a(1,1) runs parallel correctly with openmp. I runned with a dual Xeon machine 3.06Ghz, with Linux redhat 9.0. ifc -openmp -o test test.f Used 2 threads with command setenv OMP_NUM_THREADS 2.


Arnaldo






program main


parameter(nx=512,np=512)


implicit real*8 (A-H,O-Z)


real*8 u(nx,np),f(nx,np)


complex*16 a(nx,np)


a=(0.d0,1.d0)


write(*,*) 'passed 1'


write(*,*) a(1,1)


!$omp parallel do private(xx,yy)


do j = 1,nx


do i = 1,np


xx = -1.0 + dx * dble(i-1) ! -1 < x < 1


yy = -1.0 + dy * dble(j-1) ! -1 < y < 1


u(i,j) = 0.0


f(i,j) = -alpha *(1.0-xx*xx)*(1.0-yy*yy)


& - 2.0*(1.0-xx*xx)-2.0*(1.0-yy*yy)


enddo


enddo


!$omp end parallel do


write(*,*) 'passed 2'


END

Message Edited by MADhagabb on 12-11-2003 01:15 PM

0 Kudos
1 Reply
Henry_G_Intel
Employee
56 Views



Hi Arnaldo,


I reproduced the bug but I don't think it has anything to do with complex variables. The program is overflowing stack. Replace the complex*16 declaration with two real*8 arrays and the program still crashes, i.e.:

      real*8 u(nx,np), f(nx,np)

! complex*16 a(nx,np)
real*8 a(nx,np), b(nx,np)
For some reason, the compiler is putting the arrays on the stack instead of the heap. The program works if you declare your arrays ALLOCATABLE, i.e.:
      real*8, allocatable :: u(:,:), f(:,:)

complex*16, allocatable :: a(:,:)
allocate (u(nx,np), f(nx,np), a(nx,np))

Dynamically allocated arrays go on the heap. Please submit this bug to Intel Premier Support.


Thanks,


Henry


Message Edited by MADhagabb on 12-11-2003 01:16 PM

Message Edited by MADhagabb on 12-11-2003 01:17 PM

Reply