[dpdk-dev] [PATCH v3 01/18] eal: add max SIMD bitwidth
Olivier Matz
olivier.matz at 6wind.com
Wed Oct 7 13:18:12 CEST 2020
Hi Ciara,
On Wed, Oct 07, 2020 at 10:47:34AM +0000, Power, Ciara wrote:
> Hi Olivier,
>
> Thanks for reviewing, some comments below.
>
>
> >-----Original Message-----
> >From: Olivier Matz <olivier.matz at 6wind.com>
> >Sent: Tuesday 6 October 2020 10:32
> >To: Power, Ciara <ciara.power at intel.com>
> >Cc: dev at dpdk.org; Ray Kinsella <mdr at ashroe.eu>; Neil Horman
> ><nhorman at tuxdriver.com>
> >Subject: Re: [dpdk-dev] [PATCH v3 01/18] eal: add max SIMD bitwidth
> >
> >Hi Ciara,
> >
> >Please find some comments below.
> >
> >On Wed, Sep 30, 2020 at 02:03:57PM +0100, Ciara Power wrote:
> >> This patch adds a max SIMD bitwidth EAL configuration. The API allows
> >> for an app to set this value. It can also be set using EAL argument
> >> --force-max-simd-bitwidth, which will lock the value and override any
> >> modifications made by the app.
> >>
> >> Signed-off-by: Ciara Power <ciara.power at intel.com>
> >>
> >> ---
> >> v3:
> >> - Added enum value to essentially disable using max SIMD to choose
> >> paths, intended for use by ARM SVE.
> >> - Fixed parsing bitwidth argument to return an error for values
> >> greater than uint16_t.
> >> v2: Added to Doxygen comment for API.
> >> ---
>
> <snip>
>
> >>
> >> +uint16_t
> >> +rte_get_max_simd_bitwidth(void)
> >> +{
> >> + const struct internal_config *internal_conf =
> >> + eal_get_internal_configuration();
> >> + return internal_conf->max_simd_bitwidth.bitwidth;
> >> +}
> >
> >Should the return value be enum rte_max_simd_t?
> >If not, do we really need the enum definition?
> >
>
> I kept the return value and param value below as uint16_t to allow for arbitrary values,
> and will allow it be more flexible for future additions as new enums won't need to be added.
> For the set function below, this is used when a user passes the EAL command line flag, which
> passes an integer value rather than an enum one.
> The enums are useful when checking the max_simd_bitwidth in drivers/libs, for example using
> "RTE_MAX_256_SIMD" instead of "256" in the condition checks.
>
> >> +
> >> +int
> >> +rte_set_max_simd_bitwidth(uint16_t bitwidth) {
> >> + struct internal_config *internal_conf =
> >> + eal_get_internal_configuration();
> >> + if (internal_conf->max_simd_bitwidth.locked) {
> >> + RTE_LOG(NOTICE, EAL, "Cannot set max SIMD bitwidth - user
> >runtime override enabled");
> >> + return -EPERM;
> >> + }
> >> +
> >> + if (bitwidth != RTE_MAX_SIMD_DISABLE && (bitwidth <
> >RTE_NO_SIMD ||
> >> + !rte_is_power_of_2(bitwidth))) {
> >> + RTE_LOG(ERR, EAL, "Invalid bitwidth value!\n");
> >> + return -EINVAL;
> >> + }
> >> + internal_conf->max_simd_bitwidth.bitwidth = bitwidth;
> >> + return 0;
> >> +}
> >
> >Same question, should the parameter be enum rte_max_simd_t?
> >
>
> <snip>
>
> >> +enum rte_max_simd_t {
> >> + RTE_NO_SIMD = 64,
> >> + RTE_MAX_128_SIMD = 128,
> >> + RTE_MAX_256_SIMD = 256,
> >> + RTE_MAX_512_SIMD = 512,
> >> + RTE_MAX_SIMD_DISABLE = UINT16_MAX,
> >> +};
> >
> >What is the difference between RTE_NO_SIMD and
> >RTE_MAX_SIMD_DISABLE?
>
> RTE_NO_SIMD has value 64 to limit paths to scalar only.
> RTE_MAX_SIMD_DISABLE sets the highest value possible,
> so essentially disables the limit affecting which vector paths are taken.
> This disable option was added to allow for ARM SVE which will be later added,
> Discussed with Honnappa on a previous version: https://patchwork.dpdk.org/patch/76097/
Ok, so RTE_MAX_SIMD_DISABLE means "disable the max limit", right?
I feel the name is a bit confusing. What about something like this:
enum rte_simd {
RTE_SIMD_DISABLED = 0,
RTE_SIMD_128 = 128,
RTE_SIMD_256 = 256,
RTE_SIMD_512 = 512,
RTE_SIMD_MAX = UINT16_MAX,
};
>
> >The default value in internal_config is 0, so in my understanding
> >rte_get_max_simd_bitwidth() will return 0 if --force-max-simd-bitwidth is
> >not passed. Is it expected?
> >
> >Maybe I'm missing something, but I don't understand why the value in
> >internal_config is not set to the maximum supported SIMD bitwidth by
> >default, and optionally overriden by the command line argument, or by the
> >API.
> >
>
> The default value for max_simd_bitwidth is set depending on the architecture, 256 for x86/ppc,
> and UINT16_MAX for ARM. So for example the default on x86 allows for AVX2 and under.
> The defaults can be seen in patch 2: https://patchwork.dpdk.org/patch/79339/
Ok, I was expecting to have a runtime check for this. For instance, on
intel architecture, it is not known at compilation, it depends on the
target which can support up to AVX, AVX2, or AVX512.
>
> <snip>
>
> Thanks,
> Ciara
More information about the dev
mailing list