From 3bf4c36be9db5130447f3566a54cf562b6cdf797 Mon Sep 17 00:00:00 2001 From: David Cantrell Date: Mon, 27 Mar 2023 12:04:32 -0400 Subject: [PATCH] Revert "Enable AVX2 on x86_64" This reverts commit eed891dc9d83d3dbd491fa8b7bf41095dbdf9102. --- fftw.spec | 102 ++++++++++++++++++++++++------------------------------ 1 file changed, 46 insertions(+), 56 deletions(-) diff --git a/fftw.spec b/fftw.spec index c083d1a..a0da8bb 100644 --- a/fftw.spec +++ b/fftw.spec @@ -13,7 +13,7 @@ Name: fftw Version: 3.3.10 -Release: 6%{?dist} +Release: 5%{?dist} Summary: A Fast Fourier Transform library License: GPLv2+ URL: http://www.fftw.org @@ -28,16 +28,6 @@ BuildRequires: gcc-gfortran %global quad 1 %endif -# Names of precisions to (maybe) build -%global prec_names prec_name[0]=single;prec_name[1]=double;prec_name[2]=long;prec_name[3]=quad -# Number of precisions to build; sometimes quad is not possible -%global nprec 3 -%if %{quad} -%global nprec 4 -%endif -# Number of precisions to build for MPI -%global nmpiprec 3 - # For check phase BuildRequires: time BuildRequires: perl-interpreter @@ -288,7 +278,10 @@ BASEFLAGS="--enable-shared --disable-dependency-tracking --enable-threads" BASEFLAGS+=" --enable-openmp" # Precisions to build -%prec_names +prec_name[0]=single +prec_name[1]=double +prec_name[2]=long +prec_name[3]=quad # Corresponding flags prec_flags[0]=--enable-single @@ -299,27 +292,31 @@ prec_flags[3]=--enable-quad-precision %ifarch x86_64 # Enable SSE2 and AVX support for x86_64 for ((i=0; i<2; i++)) ; do - prec_flags[i]+=" --enable-sse2 --enable-avx --enable-avx2" + prec_flags[i]+=" --enable-sse2 --enable-avx" done %endif -%ifarch %{arm64} -# Compile support for NEON instructions -for ((i=0; i<2; i++)) ; do - prec_flags[i]+=" --enable-neon" -done -BASEFLAGS+=" --enable-armv8-cntvct-el0" -%endif +# No NEON run time detection, not all ARM SoCs have NEON +#%ifarch %{arm} +## Compile support for NEON instructions +#for ((i=0; i<2; i++)) ; do +# prec_flags[i]+=" --enable-neon" +#done +#%endif -%ifarch ppc ppc64 -# Compile support for Altivec instructions; only supported for single precision -for ((i=0; i<1; i++)) ; do - prec_flags[i]+=" --enable-altivec" -done -%endif +#%ifarch ppc ppc64 +## Compile support for Altivec instructions +#for ((i=0; i<2; i++)) ; do +# prec_flags[i]+=" --enable-altivec" +#done +#%endif # Loop over precisions -for ((iprec=0; iprec<%{nprec}; iprec++)) ; do +%if %{quad} +for ((iprec=0; iprec<4; iprec++)) ; do +%else +for ((iprec=0; iprec<3; iprec++)) ; do +%endif mkdir ${prec_name[iprec]}${ver_name[iver]} cd ${prec_name[iprec]}${ver_name[iver]} ln -s ../configure . @@ -331,19 +328,16 @@ for ((iprec=0; iprec<%{nprec}; iprec++)) ; do done # MPI Builds - this duplicates the non-mpi builds, but oh well -for mpi in %{?mpi_list} ; do +for mpi in %{mpi_list} ; do module load mpi/${mpi}-%{_arch} # Loop over precisions - no quad precision support with MPI - for((iprec=0;iprec<%{nmpiprec};iprec++)) ; do + for((iprec=0;iprec<3;iprec++)) ; do mkdir ${mpi}-${prec_name[iprec]}${ver_name[iver]} cd ${mpi}-${prec_name[iprec]}${ver_name[iver]} ln -s ../configure . # Force linking the _mpi.so libraries with the mpi libs. This works because # we get rid of all of the non-mpi components of these builds export CC=mpicc - if [ $mpi = "openmpi" ]; then - export MPIRUN="mpirun --oversubscribe" - fi %{configure} ${BASEFLAGS} ${prec_flags[iprec]} \ --enable-mpi \ --libdir=%{_libdir}/$mpi/lib \ @@ -358,21 +352,23 @@ for mpi in %{?mpi_list} ; do done %install -%prec_names - # Explicitly load shell support for the environment-modules package, used # below via 'module' pseudo-command. source /etc/profile.d/modules.sh -for((iprec=0;iprec<%{nprec};iprec++)) ; do - %make_install -C ${prec_name[iprec]} +%if %{quad} +for ver in single double long quad ; do +%else +for ver in single double long ; do +%endif + %make_install -C $ver done # MPI -for mpi in %{?mpi_list} ; do +for mpi in %{mpi_list} ; do module load mpi/${mpi}-%{_arch} - for((iprec=0;iprec<%{nmpiprec};iprec++)) ; do - %make_install -C ${mpi}-${prec_name[iprec]} + for ver in single double long ; do + %make_install -C ${mpi}-${ver} # Remove duplicated non-mpi libraries, binaries, and data find %{buildroot}%{_libdir}/${mpi}/lib -name libfftw\* -a \! -name \*_mpi.\* -delete rm -r %{buildroot}%{_libdir}/${mpi}/{bin,share} @@ -384,25 +380,28 @@ rm -f %{buildroot}%{_infodir}/dir find %{buildroot} -name \*.la -delete %check -%prec_names # Explicitly load shell support for the environment-modules package, used # below via 'module' pseudo-command. . /etc/profile.d/modules.sh bdir=$(pwd) -for((iprec=0;iprec<%{nprec};iprec++)) ; do - export LD_LIBRARY_PATH=$bdir/${prec_name[iprec]}/.libs:$bdir/${prec_name[iprec]}/threads/.libs - %make_build -C ${prec_name[iprec]} check +%if %{quad} +for ver in single double long quad ; do +%else +for ver in single double long ; do +%endif + export LD_LIBRARY_PATH=$bdir/$ver/.libs:$bdir/$ver/threads/.libs + %make_build -C $ver check done # MPI # Allow oversubscription with openmpi export OMPI_MCA_rmaps_base_oversubscribe=1 -for mpi in %{?mpi_list} ; do +for mpi in %{mpi_list} ; do module load mpi/${mpi}-%{_arch} - for((iprec=0;iprec<%{nmpiprec};iprec++)) ; do - export LD_LIBRARY_PATH=$bdir/${prec_name[iprec]}/.libs:$bdir/${prec_name[iprec]}/threads/.libs - %make_build -C ${mpi}-${prec_name[iprec]}/mpi check + for ver in single double long ; do + export LD_LIBRARY_PATH=$bdir/$ver/.libs:$bdir/$ver/threads/.libs + %make_build -C ${mpi}-${ver}/mpi check done module unload mpi/${mpi}-%{_arch} done @@ -526,15 +525,6 @@ done %endif %changelog -* Mon Mar 27 2023 David cantrell - 3.3.10-6 -- Enable AVX2 on x86_64 -- Enable NEON on aarch64 -- Clean up precision list -- Fix for OpenMPI build with < 4 processors -- Fix building with no enabled MPI types -- Enable single precision Altivec on PPC -- Enable CNTVCT_EL0 cycle counter support on aarch64 - * Thu Mar 02 2023 Orion Poplawski - 3.3.10-5 - Use make macros - Drop openmpi vader workaround