[Bug 1879092] Re: gfortran can't use vectorized functions.

Balint Reczey 1879092 at bugs.launchpad.net
Mon Aug 3 17:33:18 UTC 2020


** Description changed:

+ [Impact]
+ 
  After ubuntu-glibc maintainers changed "math-vector-fortran.h" install
  directory (LP#1861353), gfortran can no longer use it.
  
- This the old behavior Ubuntu 19.10 gcc-9.2.1 glibc 2.30
+ [Test Case]
+ 
+ This the old (good) behavior Ubuntu 19.10 gcc-9.2.1 glibc 2.30
  $ gfortran -O3 -mavx2 vect_test.f90 -o test.x
  $ nm ./test.x | grep sin
      U _ZGVdN4v_sin@@GLIBC_2.22
      U _ZGVdN8v_sinf@@GLIBC_2.22
  
  After that change : Ubuntu 20.04 gcc-9.3.0 glibc 2.31
  $ gfortran -O3 -mavx2 vect_test.f90 -o test.x
  $ nm ./test.x | grep sinn
      U sin@@GLIBC_2.2.5
      U sinf@@GLIBC_2.2.5
  
  $ cat vect_test.f90
  program test_vect
    implicit none
    integer, parameter :: n = 64*1024**2
    integer :: i
    integer(8) :: t1, t2, t0
    real(8) :: tic
    !
    real, allocatable :: a32(:), b32(:)
    real(8), allocatable :: a64(:), b64(:)
    !
    allocate( a32(n), a64(n))
    allocate( b32(n), b64(n))
    !
    call random_number(a32 )
    call random_number(a64 )
    !
    call system_clock(t0, tic)
    !
    do i = 1, n
      b32(i) = sin(a32(i))
    end do
    !
    call system_clock(t1)
    print*, (t1-t0)/tic
    !
    do i = 1, n
      b64(i) = sin(a64(i))
    end do
    !
    call system_clock(t2)
    print*, (t2-t1)/tic
    !
  end program test_vect
  
  Verbose:
  
  Ubuntu 19.10
  $ gfortran -O3 -mavx2 -v vect_test.f90 -o test.x
  ...
  /usr/lib/gcc/x86_64-linux-gnu/9/f951 vect_test.f90 -quiet -dumpbase vect_test.f90 -mavx2 -mtune=generic -march=x86-64 -auxbase vect_test -O3 -version -fintrinsic-modules-path /usr/lib/gcc/x86_64-linux-gnu/9/finclude -fpre-include=/usr/include/finclude/math-vector-fortran.h -o /tmp/cc2E2K8s.s
  ...
  
  Ubuntu 20.04
  $ gfortran -O3 -mavx2 -v vect_test.f90 -o test.x
  ...
  /usr/lib/gcc/x86_64-linux-gnu/9/f951 vect_test.f90 -quiet -dumpbase vect_test.f90 -mavx2 -mtune=generic -march=x86-64 -auxbase vect_test -O3 -version -fintrinsic-modules-path /usr/lib/gcc/x86_64-linux-gnu/9/finclude -o /tmp/cc4swJwz.s
  ...
  
+ [Regression Potential]
+ 
+ The fix ships the file on all architectures and it is used in gfortran
+ compilations. If the conditions in the file did not work properly those
+ could break gfortran compilations on other architectures. Looking at the
+ file all lines are conditionalized and I've also tested gfortran
+ compilation in verbose mode on s390x and the optimizations did not take
+ place (as it was expected).
+ 
+ 
+ [Other Info]
+ 
  As you can see gfortran is not preincluding "math-vector-fortran.h" file on Ubuntu 20.04.
  A workaround is to copy "math-vector-fortran.h" to /usr/include/finclude (which is empty!).

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to gcc-10 in Ubuntu.
https://bugs.launchpad.net/bugs/1879092

Title:
  gfortran can't use vectorized functions.

Status in gcc-10 package in Ubuntu:
  New
Status in glibc package in Ubuntu:
  Fix Released
Status in gcc-10 source package in Focal:
  New
Status in glibc source package in Focal:
  In Progress
Status in gcc-10 source package in Groovy:
  New
Status in glibc source package in Groovy:
  Fix Released

Bug description:
  [Impact]

  After ubuntu-glibc maintainers changed "math-vector-fortran.h" install
  directory (LP#1861353), gfortran can no longer use it.

  [Test Case]

  This the old (good) behavior Ubuntu 19.10 gcc-9.2.1 glibc 2.30
  $ gfortran -O3 -mavx2 vect_test.f90 -o test.x
  $ nm ./test.x | grep sin
      U _ZGVdN4v_sin@@GLIBC_2.22
      U _ZGVdN8v_sinf@@GLIBC_2.22

  After that change : Ubuntu 20.04 gcc-9.3.0 glibc 2.31
  $ gfortran -O3 -mavx2 vect_test.f90 -o test.x
  $ nm ./test.x | grep sinn
      U sin@@GLIBC_2.2.5
      U sinf@@GLIBC_2.2.5

  $ cat vect_test.f90
  program test_vect
    implicit none
    integer, parameter :: n = 64*1024**2
    integer :: i
    integer(8) :: t1, t2, t0
    real(8) :: tic
    !
    real, allocatable :: a32(:), b32(:)
    real(8), allocatable :: a64(:), b64(:)
    !
    allocate( a32(n), a64(n))
    allocate( b32(n), b64(n))
    !
    call random_number(a32 )
    call random_number(a64 )
    !
    call system_clock(t0, tic)
    !
    do i = 1, n
      b32(i) = sin(a32(i))
    end do
    !
    call system_clock(t1)
    print*, (t1-t0)/tic
    !
    do i = 1, n
      b64(i) = sin(a64(i))
    end do
    !
    call system_clock(t2)
    print*, (t2-t1)/tic
    !
  end program test_vect

  Verbose:

  Ubuntu 19.10
  $ gfortran -O3 -mavx2 -v vect_test.f90 -o test.x
  ...
  /usr/lib/gcc/x86_64-linux-gnu/9/f951 vect_test.f90 -quiet -dumpbase vect_test.f90 -mavx2 -mtune=generic -march=x86-64 -auxbase vect_test -O3 -version -fintrinsic-modules-path /usr/lib/gcc/x86_64-linux-gnu/9/finclude -fpre-include=/usr/include/finclude/math-vector-fortran.h -o /tmp/cc2E2K8s.s
  ...

  Ubuntu 20.04
  $ gfortran -O3 -mavx2 -v vect_test.f90 -o test.x
  ...
  /usr/lib/gcc/x86_64-linux-gnu/9/f951 vect_test.f90 -quiet -dumpbase vect_test.f90 -mavx2 -mtune=generic -march=x86-64 -auxbase vect_test -O3 -version -fintrinsic-modules-path /usr/lib/gcc/x86_64-linux-gnu/9/finclude -o /tmp/cc4swJwz.s
  ...

  [Regression Potential]

  The fix ships the file on all architectures and it is used in gfortran
  compilations. If the conditions in the file did not work properly
  those could break gfortran compilations on other architectures.
  Looking at the file all lines are conditionalized and I've also tested
  gfortran compilation in verbose mode on s390x and the optimizations
  did not take place (as it was expected).

  
  [Other Info]

  As you can see gfortran is not preincluding "math-vector-fortran.h" file on Ubuntu 20.04.
  A workaround is to copy "math-vector-fortran.h" to /usr/include/finclude (which is empty!).

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/gcc-10/+bug/1879092/+subscriptions



More information about the foundations-bugs mailing list