From: Ruifeng Wang <Ruifeng.Wang@arm.com>
To: fengchengwen <fengchengwen@huawei.com>,
"thomas@monjalon.net" <thomas@monjalon.net>,
"ferruh.yigit@intel.com" <ferruh.yigit@intel.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>,
"jerinj@marvell.com" <jerinj@marvell.com>,
"viktorin@rehivetech.com" <viktorin@rehivetech.com>,
"bruce.richardson@intel.com" <bruce.richardson@intel.com>,
Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>,
"jerinjacobk@gmail.com" <jerinjacobk@gmail.com>,
"juraj.linkes@pantheon.tech" <juraj.linkes@pantheon.tech>,
nd <nd@arm.com>, nd <nd@arm.com>
Subject: Re: [dpdk-dev] [PATCH v6 2/2] net/hns3: refactor SVE code compile method
Date: Mon, 24 May 2021 10:03:30 +0000 [thread overview]
Message-ID: <AM5PR0802MB2465FC50CAA1E4278FCEFAB59E269@AM5PR0802MB2465.eurprd08.prod.outlook.com> (raw)
In-Reply-To: <ea43cc5e-6c61-4b90-41ad-b5b98a71bb7d@huawei.com>
> -----Original Message-----
> From: fengchengwen <fengchengwen@huawei.com>
> Sent: Monday, May 24, 2021 4:44 PM
> To: Ruifeng Wang <Ruifeng.Wang@arm.com>; thomas@monjalon.net;
> ferruh.yigit@intel.com
> Cc: dev@dpdk.org; jerinj@marvell.com; viktorin@rehivetech.com;
> bruce.richardson@intel.com; Honnappa Nagarahalli
> <Honnappa.Nagarahalli@arm.com>; jerinjacobk@gmail.com;
> juraj.linkes@pantheon.tech; nd <nd@arm.com>
> Subject: Re: [PATCH v6 2/2] net/hns3: refactor SVE code compile method
>
>
>
> On 2021/5/24 13:38, Ruifeng Wang wrote:
> >> -----Original Message-----
> >> From: fengchengwen <fengchengwen@huawei.com>
> >> Sent: Friday, May 21, 2021 2:53 PM
> >> To: Ruifeng Wang <Ruifeng.Wang@arm.com>; thomas@monjalon.net;
> >> ferruh.yigit@intel.com
> >> Cc: dev@dpdk.org; jerinj@marvell.com; viktorin@rehivetech.com;
> >> bruce.richardson@intel.com; Honnappa Nagarahalli
> >> <Honnappa.Nagarahalli@arm.com>; jerinjacobk@gmail.com;
> >> juraj.linkes@pantheon.tech; nd <nd@arm.com>
> >> Subject: Re: [PATCH v6 2/2] net/hns3: refactor SVE code compile
> >> method
> >>
> >>
> >>
> >> On 2021/5/21 13:21, Ruifeng Wang wrote:
> >>>> -----Original Message-----
> >>>> From: fengchengwen <fengchengwen@huawei.com>
> >>>> Sent: Thursday, May 20, 2021 6:55 PM
> >>>> To: Ruifeng Wang <Ruifeng.Wang@arm.com>; thomas@monjalon.net;
> >>>> ferruh.yigit@intel.com
> >>>> Cc: dev@dpdk.org; jerinj@marvell.com; viktorin@rehivetech.com;
> >>>> bruce.richardson@intel.com; Honnappa Nagarahalli
> >>>> <Honnappa.Nagarahalli@arm.com>; jerinjacobk@gmail.com;
> >>>> juraj.linkes@pantheon.tech; nd <nd@arm.com>
> >>>> Subject: Re: [PATCH v6 2/2] net/hns3: refactor SVE code compile
> >>>> method
> >>>>
> >>>>
> >>>>
> >>>> On 2021/5/20 16:24, Ruifeng Wang wrote:
> >>>>>> -----Original Message-----
> >>>>>> From: Chengwen Feng <fengchengwen@huawei.com>
> >>>>>> Sent: Wednesday, May 19, 2021 9:26 PM
> >>>>>> To: thomas@monjalon.net; ferruh.yigit@intel.com
> >>>>>> Cc: dev@dpdk.org; jerinj@marvell.com; Ruifeng Wang
> >>>>>> <Ruifeng.Wang@arm.com>; viktorin@rehivetech.com;
> >>>>>> bruce.richardson@intel.com; Honnappa Nagarahalli
> >>>>>> <Honnappa.Nagarahalli@arm.com>; jerinjacobk@gmail.com;
> >>>>>> juraj.linkes@pantheon.tech; nd <nd@arm.com>
> >>>>>> Subject: [PATCH v6 2/2] net/hns3: refactor SVE code compile
> >>>>>> method
> >>>>>>
> >>>>>> Currently, the SVE code is compiled only when -march supports SVE
> >>>>>> (e.g. '- march=armv8.2a+sve'), there maybe some problem[1] with
> >>>>>> this
> >>>> approach.
> >>>>>>
> >>>>>> The solution:
> >>>>>> a. If the minimum instruction set support SVE then compiles it.
> >>>>>> b. Else if the compiler support SVE then compiles it.
> >>>>>> c. Otherwise don't compile it.
> >>>>>>
> >>>>>> [1] https://mails.dpdk.org/archives/dev/2021-April/208189.html
> >>>>>>
> >>>>>> Fixes: 8c25b02b082a ("net/hns3: fix enabling SVE Rx/Tx")
> >>>>>> Fixes: 952ebacce4f2 ("net/hns3: support SVE Rx")
> >>>>>> Cc: stable@dpdk.org
> >>>>>>
> >>>>>> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
> >>>>>> ---
> >>>>>> drivers/net/hns3/hns3_rxtx.c | 2 +-
> >>>>>> drivers/net/hns3/meson.build
> >>>>>> |
> >>>>>> 21 ++++++++++++++++++++-
> >>>>>> 2 files changed, 21 insertions(+), 2 deletions(-)
> >>>>>>
> >>>>>> diff --git a/drivers/net/hns3/hns3_rxtx.c
> >>>>>> b/drivers/net/hns3/hns3_rxtx.c index 1d7a769..4ef20c6 100644
> >>>>>> --- a/drivers/net/hns3/hns3_rxtx.c
> >>>>>> +++ b/drivers/net/hns3/hns3_rxtx.c
> >>>>>> @@ -2808,7 +2808,7 @@ hns3_get_default_vec_support(void)
> >>>>>> static bool
> >>>>>> hns3_get_sve_support(void)
> >>>>>> {
> >>>>>> -#if defined(RTE_ARCH_ARM64) && defined(__ARM_FEATURE_SVE)
> >>>>>> +#if defined(CC_SVE_SUPPORT)
> >>>>>> if (rte_vect_get_max_simd_bitwidth() <
> RTE_VECT_SIMD_256)
> >>>>>> return false;
> >>>>>> if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_SVE))
> >>>>>> diff --git a/drivers/net/hns3/meson.build
> >>>>>> b/drivers/net/hns3/meson.build index 53c7df7..5f9af9b 100644
> >>>>>> --- a/drivers/net/hns3/meson.build
> >>>>>> +++ b/drivers/net/hns3/meson.build
> >>>>>> @@ -35,7 +35,26 @@ deps += ['hash']
> >>>>>>
> >>>>>> if arch_subdir == 'arm' and dpdk_conf.get('RTE_ARCH_64')
> >>>>>> sources += files('hns3_rxtx_vec.c')
> >>>>>> - if cc.get_define('__ARM_FEATURE_SVE', args: machine_args) != ''
> >>>>>> +
> >>>>>> + # compile SVE when:
> >>>>>> + # a. support SVE in minimum instruction set baseline
> >>>>>> + # b. it's not minimum instruction set, but compiler support
> >>>>>> + if cc.get_define('__ARM_FEATURE_SVE', args: machine_args) !=
> ''
> >>>>>> + and
> >>>>>> cc.check_header('arm_sve.h')
> >>>>>> + cflags += ['-DCC_SVE_SUPPORT']
> >>>>> With SVE build fix patch [1], CC_SVE_ACLE_SUPPORT will be defined.
> >>>>> Here we can use CC_SVE_ACLE_SUPPORT and not to add a new one.
> >>>>>
> >>>>
> >>>> The CC_SVE_ACLE_SUPPORT was defined under default machine_args
> >> which
> >>>> support SVE, it can't deals with the situation: the default
> >>>> machine_args don't support SVE but compiler support SVE.
> >>>> So the CC_SVE_SUPPORT marco is necessary.
> >>> Agree that macro for SVE is also needed here. And we can also use '-
> >> DCC_SVE_ACLE_SUPPORT' here right?
> >>> I think there is no difference between CC_SVE_ACLE_SUPPORT and
> >> CC_SVE_SUPPORT when they are used in source code.
> >>> IMO the same macro name can be used, and it removes redundancy and
> >> confusion.
> >>>
> >>
> >> You are right, no difference between CC_SVE_ACLE_SUPPORT and
> >> CC_SVE_SUPPORT But the hns3 sve already support 20.11, and
> >> CC_SVE_ACLE_SUPPORT was newly defined, there maybe some
> problems when
> >> backporting.
> > 20.11 release has no machine enabled SVE extension.
> >
> >>
> >> Or we could redefine CC_SVE_ACLE_SUPPORT under default
> machine_args:
> >> if cc.get_define('__ARM_FEATURE_SVE', args: machine_args) != ''
> >> and
> >> cc.check_header('arm_sve.h')
> >> cflags += ['-DCC_SVE_ACLE_SUPPORT']
> > 'if dpdk_conf.get(CC_SVE_ACLE_SUPPORT)' should be fine?
> > Stable branch has no SVE enabled in machine_args.
> >
>
> But 20.11 use could use hns3 SVE path when compile with gcc10.
20.11 user will be able to use hns3 SVE path.
Implementation 'a' should be fine for both 20.11 and 21.08.
>
> If we reuse the CC_SVE_ACLE_SUPPORT macro, there maybe problem when
> backporting:
> a. In 21.08 we could depend on CC_SVE_ACLE_SUPPORT, so it will be:
> if dpdk_conf.get('CC_SVE_ACLE_SUPPORT')
> sources += files('hns3_rxtx_vec_sve.c')
> elif cc.has_argument('-march=armv8.2-a+sve') and
> cc.check_header('arm_sve.h')
gcc10 user will go into this branch, and SVE path will be included.
It is identical in 'a' and 'b'.
> sve_cflags = ['-DCC_SVE_ACLE_SUPPORT']
> ...
> b. But for backport to 20.11, we should use another impl:
> if cc.get_define('__ARM_FEATURE_SVE', args: machine_args) != '' and
> cc.check_header('arm_sve.h')
'if' clause in implementation 'a' will have the same behavior as this one in 20.11.
Both of the checks will be false.
'CC_SVE_ACLE_SUPPORT' is not defined in 20.11 -> result in false.
No machine_args have sve enabled in 20.11 -> result in false.
So I think there is a chance we can use a single macro.
> cflags += ['-DCC_SVE_ACLE_SUPPORT']
> sources += files('hns3_rxtx_vec_sve.c')
> elif cc.has_argument('-march=armv8.2-a+sve') and
> cc.check_header('arm_sve.h')
> sve_cflags = ['-DCC_SVE_ACLE_SUPPORT']
> ...
> As you see, the above two are not unified.
>
> So here I think use the CC_SVE_SUPPORT is appropriate.
>
> @Ferruh what's your opinion ?
>
> >> sources += files('hns3_rxtx_vec_sve.c')
> >> elif cc.has_argument('-march=armv8.2-a+sve') and
> >> cc.check_header('arm_sve.h')
> >> sve_cflags = ['-DCC_SVE_ACLE_SUPPORT']
> > This is fine. Macro name is consistent.
> >
> >> foreach flag: cflags
> >> # filterout -march -mcpu -mtune
> >> if not (flag.startswith('-march=') or
> >> flag.startswith('-mcpu=') or
> >> flag.startswith('-mtune='))
> >> sve_cflags += flag
> >> endif
> >> endforeach
> >> but this way may introduce coupling, I think.
> >>
> >>>>
> >>>>> [1]
> >>>>> http://patches.dpdk.org/project/dpdk/patch/1621495007-28387-1-
> git-
> >>>>> se
> >>>>> nd
> >>>>> -email-fengchengwen@huawei.com/
> >>>>>
> >>>>>> sources += files('hns3_rxtx_vec_sve.c')
> >>>>>> + elif cc.has_argument('-march=armv8.2-a+sve') and
> >>>>>> cc.check_header('arm_sve.h')
> >>>>>> + sve_cflags = ['-DCC_SVE_SUPPORT']
> >>>>>> + foreach flag: cflags
> >>>>>> + # filterout -march -mcpu -mtune
> >>>>>> + if not (flag.startswith('-march=') or
> >>>>>> + flag.startswith('-mcpu=') or
> >>>>>> flag.startswith('-mtune='))
> >>>>>> + sve_cflags += flag
> >>>>>> + endif
> >>>>>> + endforeach
> >>>>>> + hns3_sve_lib = static_library('hns3_sve_lib',
> >>>>>> + 'hns3_rxtx_vec_sve.c',
> >>>>>> + dependencies: [static_rte_ethdev],
> >>>>>> + include_directories: includes,
> >>>>>> + c_args: [sve_cflags, '-march=armv8.2-a+sve'])
> >>>>>> + objs +=
> >>>>>> + hns3_sve_lib.extract_objects('hns3_rxtx_vec_sve.c')
> >>>>>> endif
> >>>>>> endif
> >>>>>> --
> >>>>>> 2.8.1
> >>>>>
> >>>>>
> >>>>> .
> >>>>>
> >>>
> >
next prev parent reply other threads:[~2021-05-24 10:03 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-12 8:28 [dpdk-dev] [PATCH 0/2] bugfix for Kunpeng930 SVE compile Chengwen Feng
2021-05-12 8:28 ` [dpdk-dev] [PATCH 1/2] config/arm: add non-SVE march for soc kunpeng930 Chengwen Feng
2021-05-12 8:44 ` Jerin Jacob
2021-05-12 23:00 ` Honnappa Nagarahalli
2021-05-13 4:49 ` fengchengwen
2021-05-12 8:28 ` [dpdk-dev] [PATCH 2/2] net/hns3: refactor SVE code compile method Chengwen Feng
2021-05-12 23:12 ` Honnappa Nagarahalli
2021-05-12 23:21 ` Honnappa Nagarahalli
2021-05-13 0:51 ` fengchengwen
2021-05-13 20:42 ` Honnappa Nagarahalli
2021-05-13 10:04 ` Bruce Richardson
2021-05-13 4:41 ` [dpdk-dev] [PATCH v2 0/2] bugfix for Kunpeng SVE compile Chengwen Feng
2021-05-13 4:41 ` [dpdk-dev] [PATCH v2 1/2] config/arm: select best -march parameter for kunpeng soc Chengwen Feng
2021-05-13 4:41 ` [dpdk-dev] [PATCH v2 2/2] net/hns3: refactor SVE code compile method Chengwen Feng
2021-05-13 6:16 ` [dpdk-dev] [PATCH v3 0/2] bugfix for Kunpeng SVE compile Chengwen Feng
2021-05-13 6:16 ` [dpdk-dev] [PATCH v3 1/2] config/arm: select most suitable -march for kunpeng soc Chengwen Feng
2021-05-13 6:16 ` [dpdk-dev] [PATCH v3 2/2] net/hns3: refactor SVE code compile method Chengwen Feng
2021-05-13 13:08 ` [dpdk-dev] [PATCH v4 0/2] bugfix for Kunpeng SVE compile Chengwen Feng
2021-05-13 13:08 ` [dpdk-dev] [PATCH v4 1/2] config/arm: select most suitable -march for kunpeng soc Chengwen Feng
2021-05-13 15:24 ` Jerin Jacob
2021-05-13 23:12 ` Honnappa Nagarahalli
2021-05-14 10:23 ` fengchengwen
2021-05-18 13:25 ` Honnappa Nagarahalli
2021-05-18 13:45 ` Jerin Jacob
2021-05-13 13:08 ` [dpdk-dev] [PATCH v4 2/2] net/hns3: refactor SVE code compile method Chengwen Feng
2021-05-13 22:19 ` Honnappa Nagarahalli
2021-05-14 2:53 ` fengchengwen
2021-05-14 9:53 ` [dpdk-dev] [PATCH v5 0/2] bugfix for Kunpeng SVE compile Chengwen Feng
2021-05-14 9:53 ` [dpdk-dev] [PATCH v5 1/2] config/arm: select most suitable -march for kunpeng soc Chengwen Feng
2021-05-14 9:53 ` [dpdk-dev] [PATCH v5 2/2] net/hns3: refactor SVE code compile method Chengwen Feng
2021-05-14 14:12 ` Honnappa Nagarahalli
2021-05-18 12:41 ` fengchengwen
2021-05-18 13:11 ` Honnappa Nagarahalli
2021-05-18 13:12 ` Honnappa Nagarahalli
2021-05-18 13:24 ` Ferruh Yigit
2021-05-18 16:27 ` Ferruh Yigit
2021-05-19 0:23 ` fengchengwen
2021-05-19 8:08 ` David Marchand
2021-05-19 9:27 ` Ferruh Yigit
2021-05-19 12:16 ` fengchengwen
2021-05-19 12:37 ` David Marchand
2021-05-19 13:35 ` fengchengwen
2021-05-18 14:40 ` Ferruh Yigit
2021-05-18 15:15 ` Bruce Richardson
2021-05-18 16:12 ` Ferruh Yigit
2021-05-18 15:48 ` Honnappa Nagarahalli
2021-05-18 16:00 ` Ferruh Yigit
2021-05-18 16:12 ` Honnappa Nagarahalli
2021-05-18 16:37 ` Ferruh Yigit
2021-05-19 0:18 ` fengchengwen
2021-05-19 13:25 ` [dpdk-dev] [PATCH v6 0/2] bugfix for Kunpeng SVE compile Chengwen Feng
2021-05-19 13:25 ` [dpdk-dev] [PATCH v6 1/2] config/arm: select most suitable -march for kunpeng soc Chengwen Feng
2021-05-19 14:05 ` Jerin Jacob
2021-05-20 22:38 ` Honnappa Nagarahalli
2021-05-19 13:25 ` [dpdk-dev] [PATCH v6 2/2] net/hns3: refactor SVE code compile method Chengwen Feng
2021-05-19 15:02 ` Ferruh Yigit
2021-05-20 1:11 ` fengchengwen
2021-05-20 7:57 ` Ferruh Yigit
2021-05-20 8:24 ` Ruifeng Wang
2021-05-20 10:55 ` fengchengwen
2021-05-21 5:21 ` Ruifeng Wang
2021-05-21 6:53 ` fengchengwen
2021-05-24 5:38 ` Ruifeng Wang
2021-05-24 8:43 ` fengchengwen
2021-05-24 10:03 ` Ruifeng Wang [this message]
2021-05-24 13:15 ` fengchengwen
2021-05-24 13:12 ` [dpdk-dev] [PATCH v7 0/2] bugfix for Kunpeng SVE compile Chengwen Feng
2021-05-24 13:12 ` [dpdk-dev] [PATCH v7 1/2] config/arm: select most suitable -march for kunpeng soc Chengwen Feng
2021-05-24 13:12 ` [dpdk-dev] [PATCH v7 2/2] net/hns3: refactor SVE code compile method Chengwen Feng
2021-05-24 13:23 ` [dpdk-dev] [PATCH v8 0/2] bugfix for Kunpeng SVE compile Chengwen Feng
2021-05-24 13:23 ` [dpdk-dev] [PATCH v8 1/2] config/arm: select most suitable -march for kunpeng soc Chengwen Feng
2021-06-17 7:03 ` Thomas Monjalon
2021-06-17 23:33 ` Honnappa Nagarahalli
2021-06-21 0:52 ` fengchengwen
2021-06-23 8:08 ` Thomas Monjalon
2021-06-23 8:24 ` fengchengwen
2021-05-24 13:23 ` [dpdk-dev] [PATCH v8 2/2] net/hns3: refactor SVE code compile method Chengwen Feng
2021-05-25 6:04 ` Ruifeng Wang
2021-05-27 7:07 ` Fengchengwen
2021-06-12 7:09 ` fengchengwen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=AM5PR0802MB2465FC50CAA1E4278FCEFAB59E269@AM5PR0802MB2465.eurprd08.prod.outlook.com \
--to=ruifeng.wang@arm.com \
--cc=Honnappa.Nagarahalli@arm.com \
--cc=bruce.richardson@intel.com \
--cc=dev@dpdk.org \
--cc=fengchengwen@huawei.com \
--cc=ferruh.yigit@intel.com \
--cc=jerinj@marvell.com \
--cc=jerinjacobk@gmail.com \
--cc=juraj.linkes@pantheon.tech \
--cc=nd@arm.com \
--cc=thomas@monjalon.net \
--cc=viktorin@rehivetech.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).