From: Thomas Monjalon <thomas@monjalon.net>
To: dev@dpdk.org
Cc: bruce.richardson@intel.com,
Konstantin Ananyev <konstantin.ananyev@huawei.com>,
Byron Marohn <byron.marohn@intel.com>,
Yipeng Wang <yipeng1.wang@intel.com>
Subject: [PATCH v2 2/4] efd: remove AVX2 build-time check
Date: Thu, 18 Sep 2025 11:08:08 +0200 [thread overview]
Message-ID: <20250918091039.1368875-3-thomas@monjalon.net> (raw)
In-Reply-To: <20250918091039.1368875-1-thomas@monjalon.net>
Since all supported compilers can generate AVX2 code,
it is possible to force AVX2 compilation on the specific function
and remove the check for AVX2 support.
The function has to be moved in a .c file, losing inlining.
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
lib/efd/{rte_efd_x86.h => efd_avx2.c} | 18 ++-------
lib/efd/meson.build | 1 +
lib/efd/rte_efd_x86.h | 54 +--------------------------
3 files changed, 7 insertions(+), 66 deletions(-)
copy lib/efd/{rte_efd_x86.h => efd_avx2.c} (80%)
diff --git a/lib/efd/rte_efd_x86.h b/lib/efd/efd_avx2.c
similarity index 80%
copy from lib/efd/rte_efd_x86.h
copy to lib/efd/efd_avx2.c
index e2f9dcca88..653976e96b 100644
--- a/lib/efd/rte_efd_x86.h
+++ b/lib/efd/efd_avx2.c
@@ -2,11 +2,11 @@
* Copyright(c) 2016-2017 Intel Corporation
*/
-/* rte_efd_x86.h
- * This file holds all x86 specific EFD functions
- */
#include <immintrin.h>
+#include "rte_efd.h"
+#include "rte_efd_x86.h"
+
#if (RTE_EFD_VALUE_NUM_BITS == 8 || RTE_EFD_VALUE_NUM_BITS == 16 || \
RTE_EFD_VALUE_NUM_BITS == 24 || RTE_EFD_VALUE_NUM_BITS == 32)
#define EFD_LOAD_SI128(val) _mm_load_si128(val)
@@ -14,12 +14,11 @@
#define EFD_LOAD_SI128(val) _mm_lddqu_si128(val)
#endif
-static inline efd_value_t
+efd_value_t
efd_lookup_internal_avx2(const efd_hashfunc_t *group_hash_idx,
const efd_lookuptbl_t *group_lookup_table,
const uint32_t hash_val_a, const uint32_t hash_val_b)
{
-#ifdef __AVX2__
efd_value_t value = 0;
uint32_t i = 0;
__m256i vhash_val_a = _mm256_set1_epi32(hash_val_a);
@@ -45,13 +44,4 @@ efd_lookup_internal_avx2(const efd_hashfunc_t *group_hash_idx,
}
return value;
-#else
- RTE_SET_USED(group_hash_idx);
- RTE_SET_USED(group_lookup_table);
- RTE_SET_USED(hash_val_a);
- RTE_SET_USED(hash_val_b);
- /* Return dummy value, only to avoid compilation breakage */
- return 0;
-#endif
-
}
diff --git a/lib/efd/meson.build b/lib/efd/meson.build
index 343f14e1f3..e5459f566d 100644
--- a/lib/efd/meson.build
+++ b/lib/efd/meson.build
@@ -8,5 +8,6 @@ if is_windows
endif
sources = files('rte_efd.c')
+sources_avx2 += files('efd_avx2.c')
headers = files('rte_efd.h')
deps += ['ring', 'hash']
diff --git a/lib/efd/rte_efd_x86.h b/lib/efd/rte_efd_x86.h
index e2f9dcca88..c67bc716e6 100644
--- a/lib/efd/rte_efd_x86.h
+++ b/lib/efd/rte_efd_x86.h
@@ -2,56 +2,6 @@
* Copyright(c) 2016-2017 Intel Corporation
*/
-/* rte_efd_x86.h
- * This file holds all x86 specific EFD functions
- */
-#include <immintrin.h>
-
-#if (RTE_EFD_VALUE_NUM_BITS == 8 || RTE_EFD_VALUE_NUM_BITS == 16 || \
- RTE_EFD_VALUE_NUM_BITS == 24 || RTE_EFD_VALUE_NUM_BITS == 32)
-#define EFD_LOAD_SI128(val) _mm_load_si128(val)
-#else
-#define EFD_LOAD_SI128(val) _mm_lddqu_si128(val)
-#endif
-
-static inline efd_value_t
-efd_lookup_internal_avx2(const efd_hashfunc_t *group_hash_idx,
+efd_value_t efd_lookup_internal_avx2(const efd_hashfunc_t *group_hash_idx,
const efd_lookuptbl_t *group_lookup_table,
- const uint32_t hash_val_a, const uint32_t hash_val_b)
-{
-#ifdef __AVX2__
- efd_value_t value = 0;
- uint32_t i = 0;
- __m256i vhash_val_a = _mm256_set1_epi32(hash_val_a);
- __m256i vhash_val_b = _mm256_set1_epi32(hash_val_b);
-
- for (; i < RTE_EFD_VALUE_NUM_BITS; i += 8) {
- __m256i vhash_idx =
- _mm256_cvtepu16_epi32(EFD_LOAD_SI128(
- (__m128i const *) &group_hash_idx[i]));
- __m256i vlookup_table = _mm256_cvtepu16_epi32(
- EFD_LOAD_SI128((__m128i const *)
- &group_lookup_table[i]));
- __m256i vhash = _mm256_add_epi32(vhash_val_a,
- _mm256_mullo_epi32(vhash_idx, vhash_val_b));
- __m256i vbucket_idx = _mm256_srli_epi32(vhash,
- EFD_LOOKUPTBL_SHIFT);
- __m256i vresult = _mm256_srlv_epi32(vlookup_table,
- vbucket_idx);
-
- value |= (_mm256_movemask_ps(
- (__m256) _mm256_slli_epi32(vresult, 31))
- & ((1 << (RTE_EFD_VALUE_NUM_BITS - i)) - 1)) << i;
- }
-
- return value;
-#else
- RTE_SET_USED(group_hash_idx);
- RTE_SET_USED(group_lookup_table);
- RTE_SET_USED(hash_val_a);
- RTE_SET_USED(hash_val_b);
- /* Return dummy value, only to avoid compilation breakage */
- return 0;
-#endif
-
-}
+ const uint32_t hash_val_a, const uint32_t hash_val_b);
--
2.51.0
next prev parent reply other threads:[~2025-09-18 9:11 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-18 7:28 [PATCH 0/3] lib: fix AVX2 checks and macro exposure Thomas Monjalon
2025-09-18 7:28 ` [PATCH 1/3] efd: fix AVX2 support Thomas Monjalon
2025-09-18 7:48 ` Bruce Richardson
2025-09-18 8:16 ` Thomas Monjalon
2025-09-18 7:28 ` [PATCH 2/3] member: remove AVX2 build-time checks Thomas Monjalon
2025-09-18 7:49 ` Bruce Richardson
2025-09-18 7:28 ` [PATCH 3/3] member: hide internal macro Thomas Monjalon
2025-09-18 7:50 ` Bruce Richardson
2025-09-18 8:10 ` [PATCH 0/3] lib: fix AVX2 checks and macro exposure Thomas Monjalon
2025-09-18 8:59 ` Bruce Richardson
2025-09-18 9:08 ` [PATCH v2 0/4] " Thomas Monjalon
2025-09-18 9:08 ` [PATCH v2 1/4] efd: fix AVX2 support Thomas Monjalon
2025-09-18 9:40 ` Thomas Monjalon
2025-09-18 9:47 ` Thomas Monjalon
2025-09-18 9:08 ` Thomas Monjalon [this message]
2025-09-18 9:08 ` [PATCH v2 3/4] member: remove AVX2 build-time checks Thomas Monjalon
2025-09-18 9:08 ` [PATCH v2 4/4] member: hide internal macro Thomas Monjalon
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=20250918091039.1368875-3-thomas@monjalon.net \
--to=thomas@monjalon.net \
--cc=bruce.richardson@intel.com \
--cc=byron.marohn@intel.com \
--cc=dev@dpdk.org \
--cc=konstantin.ananyev@huawei.com \
--cc=yipeng1.wang@intel.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).