Hello,
i encountered a behavior I believe is a bug in ifort 14.0.2 which took me quite a lot of time to find.
implicit integer(a-z) nx = 10 ny = 10 nz = 10 tnx = 2 tny = 2 tnz = 2 !$omp parallel do collapse(3) do bk = 1, nz, tnz do bj = 1, ny, tny do bi = 1, nx, tnx do k = bk, min(bk+tnz-1,nz) do j = bj, min(bj+tny-1,ny) do i = bi, min(bi+tnx-1,nx) if (i==1.and.j==1.and.k==1) print *,"*" end do end do end do end do end do end do !$omp end parallel do end
This should print just one "*", but prints more of them
lada@meop37:~/f/testy/errors> ifort -openmp collapse.f90 lada@meop37:~/f/testy/errors> ./a.out * * * * * lada@meop37:~/f/testy/errors> OMP_NUM_THREADS=1 ./a.out * * * * * lada@meop37:~/f/testy/errors> OMP_NUM_THREADS=10 ./a.out * * * * * lada@meop37:~/f/testy/errors> f90 -openmp collapse.f90 f90: Warning: Optimizer level changed from 0 to 3 to support parallelized code. lada@meop37:~/f/testy/errors> ./a.out *