DPDK patches and discussions
 help / color / mirror / Atom feed
From: Ferruh Yigit <ferruh.yigit@intel.com>
To: Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>,
	Chengwen Feng <fengchengwen@huawei.com>,
	"thomas@monjalon.net" <thomas@monjalon.net>,
	Bruce Richardson <bruce.richardson@intel.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>,
	"jerinj@marvell.com" <jerinj@marvell.com>,
	 Ruifeng Wang <Ruifeng.Wang@arm.com>,
	"viktorin@rehivetech.com" <viktorin@rehivetech.com>,
	"jerinjacobk@gmail.com" <jerinjacobk@gmail.com>,
	"juraj.linkes@pantheon.tech" <juraj.linkes@pantheon.tech>,
	nd <nd@arm.com>
Subject: Re: [dpdk-dev] [PATCH v5 2/2] net/hns3: refactor SVE code compile method
Date: Tue, 18 May 2021 17:00:16 +0100	[thread overview]
Message-ID: <3aaf306b-79c6-42e7-d00c-07fac13ac640@intel.com> (raw)
In-Reply-To: <DBAPR08MB5814966F87A5BB0D30089C17982C9@DBAPR08MB5814.eurprd08.prod.outlook.com>

On 5/18/2021 4:48 PM, Honnappa Nagarahalli wrote:
> <snip>
>>
>> On 5/14/2021 10:53 AM, Chengwen Feng wrote:
>>> 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
>>>
>>
>> Hi Chengwen,
>>
>> As far as I understand from above problem statement, you want to produce a
>> binary that can run in two different platforms, one supports only NEON
>> instructions, other supports NEON + SVE.
>>
>> For this driver should be compiled in a way to support min instruction set,
>> which is NEON.
>>
>> There are two build items,
>>
>> 1) hns3_rxtx_vec_sve.c
>> 2) rest of the library
>>
>> There is already runtime checks to select Rx/Tx functions, so it is safe to build
>> (1) as long as compiler supports. If the platform doesn't support SVE, the SVE
>> path won't be selected during runtime.
>>
>> For (2), it should be build to support NEON only, if it is compiled to support
>> SVE, it won't run on the platform that only supports NEON.
>>
>> So, in below, if '__ARM_FEATURE_SVE' is supported, all driver is build with
>> SVE support, won't this cause a problem on the NEON platform?
> The first if statement checks if the user has enabled SVE during compilation which indicates that the user will run the binary on a platform that has SVE (the minimum ISA level supported by this binary), hence it is ok to compile all the code with SVE.
> 

So it is related to the what user provided (I assume as compiler flag), instead
of host HW capability.

> If the user has not enabled SVE during compilation which indicates the user might run the binary on a platform that does not have SVE, the second if statement, checks if the compiler supports SVE. If yes, it will compile the SVE version of the driver as well and the run time checks choose the correct version.
> 

OK, this sounds good, thanks for clarification.

>>
>> What do you think to only keep the else leg of the below check, which is if
>> compiler supports SVE, set '-DCC_SVE_SUPPORT' flag and only build (1) with
>> SVE flag?
>>
>>> 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 | 13 +++++++++++++
>>>  2 files changed, 14 insertions(+), 1 deletion(-)
>>>
>>> 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..8563d70 100644
>>> --- a/drivers/net/hns3/meson.build
>>> +++ b/drivers/net/hns3/meson.build
>>> @@ -35,7 +35,20 @@ deps += ['hash']
>>>
>>>  if arch_subdir == 'arm' and dpdk_conf.get('RTE_ARCH_64')
>>>      sources += files('hns3_rxtx_vec.c')
>>> +
>>> +    # 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) != ''
>>> +        cflags += ['-DCC_SVE_SUPPORT']
>>>          sources += files('hns3_rxtx_vec_sve.c')
>>> +    elif cc.has_argument('-march=armv8.2-a+sve')
>>> +        cflags += ['-DCC_SVE_SUPPORT']
>>> +        hns3_sve_lib = static_library('hns3_sve_lib',
>>> +                        'hns3_rxtx_vec_sve.c',
>>> +                        dependencies: [static_rte_ethdev],
>>> +                        include_directories: includes,
>>> +                        c_args: [cflags, '-march=armv8.2-a+sve'])
>>> +        objs += hns3_sve_lib.extract_objects('hns3_rxtx_vec_sve.c')
>>>      endif
>>>  endif
>>>
> 


  reply	other threads:[~2021-05-18 16:00 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 [this message]
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
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=3aaf306b-79c6-42e7-d00c-07fac13ac640@intel.com \
    --to=ferruh.yigit@intel.com \
    --cc=Honnappa.Nagarahalli@arm.com \
    --cc=Ruifeng.Wang@arm.com \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=fengchengwen@huawei.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).