From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6E7A0A0C49; Tue, 20 Jul 2021 12:19:56 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B540D40696; Tue, 20 Jul 2021 12:19:55 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id 4FB2840140; Tue, 20 Jul 2021 12:19:54 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10050"; a="190796583" X-IronPort-AV: E=Sophos;i="5.84,254,1620716400"; d="scan'208";a="190796583" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Jul 2021 03:19:53 -0700 X-IronPort-AV: E=Sophos;i="5.84,254,1620716400"; d="scan'208";a="461975217" Received: from bricha3-mobl.ger.corp.intel.com ([10.252.28.140]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-SHA; 20 Jul 2021 03:19:51 -0700 Date: Tue, 20 Jul 2021 11:19:48 +0100 From: Bruce Richardson To: Liang Ma Cc: dev@dpdk.org, leyi.rong@intel.com, Liang Ma , stable@dpdk.org, Konstantin Ananyev Message-ID: References: <20210717170830.1736-1-liangma@liangbit.com> <20210719223433.2109-1-liangma@liangbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210719223433.2109-1-liangma@liangbit.com> Subject: Re: [dpdk-dev] [PATCH v2] build: check AVX512 rather than compiler version X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Mon, Jul 19, 2021 at 11:34:33PM +0100, Liang Ma wrote: > From: Liang Ma > > GCC 6.3.0 has a known bug which related to _mm512_extracti64x4_epi64. > Please reference https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82887 > > Some DPDK PMD avx512 version heavily use _mm512_extracti64x4_epi6, > which cause building failure with debug buildtype. > > Therefore, it's helpful to check if compiler work with > _mm512_extracti64x4_epi6. > > This patch check the compiler compile result against the test code > snippet. If the checking is failed then disable avx512. > > Bugzilla ID: 717 > Fixes: e6a6a138919f (net/i40e: add AVX512 vector path) > Fixes: 808a17b3c1e6 (net/ice: add Rx AVX512 offload path) > Fixes: 4b64ccb328c9 (net/iavf: fix VLAN extraction in AVX512 path) > Cc: stable@dpdk.org > > Reported-by: Liang Ma > Signed-off-by: Liang Ma > --- Looks generally ok, but some comments below. > config/x86/meson.build | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/config/x86/meson.build b/config/x86/meson.build > index b9348c44de..77370a91f7 100644 > --- a/config/x86/meson.build > +++ b/config/x86/meson.build > @@ -10,6 +10,19 @@ if not is_windows > endif > endif > > +#check if compiler is working with _mm512_extracti64x4_epi64 > +#Ref https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82887 > +if not is_windows Don't think this is needed here. The reason for it in the previous check for avx512 is because that check is done by a shell script which won't work on windows. Since we use meson functions for this check, it will work anywhere. > + code = '''#include > + void test(__m512i zmm){ > + __m256i ymm = _mm512_extracti64x4_epi64(zmm, 0);}''' > + result = cc.compiles(code, args : '-mavx512f', name : 'avx512 checking') > + if result == false and cc.has_argument('-mno-avx512f') Rather than checking for -mno-avx512f here, the whole block should probably be in an avx512 block itself. If the compiler doesn't have the "-mavx512f" flag, there may be problems with the "cc.compiles" command (or maybe it just counts as an error case?). I'd suggest changing the "is_windows" condition to a cc.has_argument() one for avx512. > + machine_args += '-mno-avx512f' > + warning('Broken _mm512_extracti64x4_epi64, disabling AVX512 support') > + endif > +endif > + > # we require SSE4.2 for DPDK > if cc.get_define('__SSE4_2__', args: machine_args) == '' > message('SSE 4.2 not enabled by default, explicitly enabling') > -- > 2.17.1 >