> > -----Original Message----- > > From: Ferriter, Cian > > Sent: Friday 28 January 2022 16:32 > > To: William Tu <u9012...@gmail.com>; d...@openvswitch.org > > Subject: RE: [ovs-dev] [PATCH] acinclude: Detect avx512 vpopcntdq compiler > support. > > > > > > > -----Original Message----- > > > From: dev <ovs-dev-boun...@openvswitch.org> On Behalf Of William Tu > > > Sent: Thursday 27 January 2022 03:45 > > > To: d...@openvswitch.org > > > Subject: [ovs-dev] [PATCH] acinclude: Detect avx512 vpopcntdq compiler > support. > > > > > > Ubuntu Xenial 16.04 is using GCC 5.4 and it does not support > > > target "-mavx512vpopcntdq" and cuases error > > > lib/dpif-netdev-lookup-avx512-gather.c:356:47: > > > error: attribute(target("avx512vpopcntdq")) is unknown > > > GCC 7+ supports vpopcntdq: > > > https://gcc.gnu.org/gcc-7/changes.html > > > The patch detects vpopcntdq and disables AVX512 when not found. > > > > > > Reported-by: Greg Rose <gvrose8...@gmail.com> > > > Signed-off-by: William Tu <u9012...@gmail.com> > > > --- > > > acinclude.m4 | 2 +- > > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > > > diff --git a/acinclude.m4 b/acinclude.m4 > > > index 5c971e98ce91..0c360fd1ef73 100644 > > > --- a/acinclude.m4 > > > +++ b/acinclude.m4 > > > @@ -77,7 +77,7 @@ dnl Checks if compiler and binutils supports AVX512. > > > AC_DEFUN([OVS_CHECK_AVX512], [ > > > OVS_CHECK_BINUTILS_AVX512 > > > OVS_CHECK_CC_OPTION( > > > - [-mavx512f], [ovs_have_cc_mavx512f=yes], > [ovs_have_cc_mavx512f=no]) > > > + [-mavx512f -mavx512vpopcntdq], [ovs_have_cc_mavx512f=yes], > [ovs_have_cc_mavx512f=no]) > > > AM_CONDITIONAL([HAVE_AVX512F], [test $ovs_have_cc_mavx512f = > yes]) > > > if test "$ovs_have_cc_mavx512f" = yes; then > > > AC_DEFINE([HAVE_AVX512F], [1], > > > -- > > > > Hi William, > > > > Thanks for this fix, I can verify that this fixes the below error for GCC 5 > > (it will > work for GCC 4.9 > > - GCC 6): > > make[3]: Entering directory '/root/cian/ovs/datapath' > > lib/dpif-netdev-lookup-avx512-gather.c:90:1: error: > attribute(target("avx512vpopcntdq")) is unknown > > > > We would like to re-spin a new version of this patch that fixes the compile > error for the relevant GCC > > versions (GCC 4.9 - GCC 6) but allows some AVX512 code to be build. > > For setups with GCC 6 for example, we still have support for most of the > AVX512 ISA used in OVS, so we > > can still enable building of this ISA, while still correctly avoiding the > avx512vpopcntdq error that > > your patch does. > > > > Please allow us a few days to test and re-spin a new version of this patch. > > Thanks, > > Cian > > Hi again William, > > I have been looking into a new version of this patch to add partial support to > GCC versions that don't have full support for all the AVX512 ISA we use in > OVS. > This is still a work in progress. > > While I'm looking into this more, I think it doesn't make sense to hold back > this > patch from being merged. It fixes build issues. > > I think the patch should be applied as is. We can add further improvements > later. > > Acked-by: Cian Ferriter <cian.ferri...@intel.com> > > More details about what I tested: > I switched to GCC 5 on my system and can see the compile issue below before > applying the patch. > After applying the patch, the build is successful. > Before patch > Configure message: > checking whether gcc accepts -mavx512f... yes > > Build error: > make[3]: Entering directory '/root/cian/ovs/datapath' > lib/dpif-netdev-lookup-avx512-gather.c:90:1: error: > attribute(target("avx512vpopcntdq")) is unknown > > After patch > Configure message: > checking whether gcc accepts -mavx512f -mavx512vpopcntdq... no > > On GCC 4.8 before the patch is applied, the build is actually successful, > since the > "avx512f" only check fails, so the AVX512 build is disabled. > On GCC 4.8 after the patch is applied, the build still works as expected. > Before patch > Configure message: > checking whether gcc -std=gnu99 accepts -mavx512f... no > > After patch > Configure message: > checking whether gcc -std=gnu99 accepts -mavx512f -mavx512vpopcntdq... no > > I also checked that all was working as expected with the compile time AVX512 > flags: > --enable-dpif-default-avx512 --enable-autovalidator --enable-mfex-default- > autovalidator > > I can confirm that these compile time flags don't cause issues. > > Finally, I tested and confirmed that OVS was still building and running with > AVX512 support when built with GCC 9.
Thanks for the patch William and thanks for testing Cian. Just looking and it seems this should be backported as far as 2.16 if I'm correct? At least from code inspection I see reference to vpopcntdq mainly around dpif (If memory serves me correctly it was 2.16 when AVX512 was introduced to dpif). Thoughts? Thanks Ian > _______________________________________________ > dev mailing list > d...@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev