From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bruce Richardson Subject: Re: [PATCH v4 2/6] lib: add distributor vector flow matching Date: Fri, 13 Jan 2017 15:26:53 +0000 Message-ID: <20170113152653.GB201464@bricha3-MOBL3.ger.corp.intel.com> References: <1482381428-148094-2-git-send-email-david.hunt@intel.com> <1483948248-91364-1-git-send-email-david.hunt@intel.com> <1483948248-91364-3-git-send-email-david.hunt@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: dev@dpdk.org To: David Hunt Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id AA0532C6B for ; Fri, 13 Jan 2017 16:26:57 +0100 (CET) Content-Disposition: inline In-Reply-To: <1483948248-91364-3-git-send-email-david.hunt@intel.com> 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, Jan 09, 2017 at 07:50:44AM +0000, David Hunt wrote: > Signed-off-by: David Hunt > --- > lib/librte_distributor/Makefile | 4 + > lib/librte_distributor/rte_distributor_burst.c | 11 +- > lib/librte_distributor/rte_distributor_match_sse.c | 113 +++++++++++++++++++++ > lib/librte_distributor/rte_distributor_priv.h | 6 ++ > 4 files changed, 133 insertions(+), 1 deletion(-) > create mode 100644 lib/librte_distributor/rte_distributor_match_sse.c > > diff --git a/lib/librte_distributor/Makefile b/lib/librte_distributor/Makefile > index 2acc54d..a725aaf 100644 > --- a/lib/librte_distributor/Makefile > +++ b/lib/librte_distributor/Makefile > @@ -44,6 +44,10 @@ LIBABIVER := 1 > # all source are stored in SRCS-y > SRCS-$(CONFIG_RTE_LIBRTE_DISTRIBUTOR) := rte_distributor.c > SRCS-$(CONFIG_RTE_LIBRTE_DISTRIBUTOR) += rte_distributor_burst.c > +ifeq ($(CONFIG_RTE_ARCH_X86),y) > +SRCS-$(CONFIG_RTE_LIBRTE_DISTRIBUTOR) += rte_distributor_match_sse.c > +endif > + > I believe some of the intrinsics used in the vector code are SSE4.2 instructions, so you need to pass that flag for the compilation for e.g. the "default" target for packaging into distros. > # install this header file > SYMLINK-$(CONFIG_RTE_LIBRTE_DISTRIBUTOR)-include := rte_distributor.h > diff --git a/lib/librte_distributor/rte_distributor_burst.c b/lib/librte_distributor/rte_distributor_burst.c > index ae7cf9d..35044c4 100644 > --- a/lib/librte_distributor/rte_distributor_burst.c > +++ b/lib/librte_distributor/rte_distributor_burst.c > @@ -352,6 +352,9 @@ rte_distributor_process_burst(struct rte_distributor_burst *d, > } > > switch (d->dist_match_fn) { > + case RTE_DIST_MATCH_VECTOR: > + find_match_vec(d, &flows[0], &matches[0]); > + break; > default: > find_match_scalar(d, &flows[0], &matches[0]); > } > @@ -538,7 +541,13 @@ rte_distributor_create_burst(const char *name, > snprintf(d->name, sizeof(d->name), "%s", name); > d->num_workers = num_workers; > > - d->dist_match_fn = RTE_DIST_MATCH_SCALAR; > +#if defined(RTE_ARCH_X86) > + if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_SSE2)) { > + d->dist_match_fn = RTE_DIST_MATCH_VECTOR; > + } else { > +#endif > + d->dist_match_fn = RTE_DIST_MATCH_SCALAR; > + } > Two issues here: 1) the check needs to be for SSE4.2, not SSE2 [minimum for DPDK on x86 is SSE3 anyway, so no need for any checks for SSE2] 2) The closing brace should be ifdefed out to fix compilation on non-x86 platforms. A simpler/better solution might actually be to remove the braces since only a single line is involved in each branch. Regards, /Bruce