[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