From: Konstantin Ananyev <konstantin.ananyev@huawei.com>
To: Paul Szczepanek <paul.szczepanek@arm.com>, "dev@dpdk.org" <dev@dpdk.org>
Cc: "mb@smartsharesystems.com" <mb@smartsharesystems.com>,
"Honnappa Nagarahalli" <honnappa.nagarahalli@arm.com>,
Kamalakshitha Aligeri <kamalakshitha.aligeri@arm.com>,
Nathan Brown <nathan.brown@arm.com>,
"Jack Bond-Preston" <jack.bond-preston@arm.com>
Subject: RE: [PATCH v11 3/6] ptr_compress: add pointer compression library
Date: Thu, 6 Jun 2024 13:22:39 +0000 [thread overview]
Message-ID: <e88bfac9cfcb4c4e9118f94bda233909@huawei.com> (raw)
In-Reply-To: <20240524083651.482541-4-paul.szczepanek@arm.com>
> +/**
> + * Compress pointers into 32-bit offsets from base pointer.
> + *
> + * @note It is programmer's responsibility to ensure the resulting offsets fit
> + * into 32 bits. Alignment of the structures pointed to by the pointers allows
> + * us to drop bits from the offsets. This is controlled by the bit_shift
> + * parameter. This means that if structures are aligned by 8 bytes they must be
> + * within 32GB of the base pointer. If there is no such alignment guarantee they
> + * must be within 4GB.
> + *
> + * @param ptr_base
> + * A pointer used to calculate offsets of pointers in src_table.
> + * @param src_table
> + * A pointer to an array of pointers.
> + * @param dest_table
> + * A pointer to an array of compressed pointers returned by this function.
> + * @param n
> + * The number of objects to compress, must be strictly positive.
> + * @param bit_shift
> + * Byte alignment of memory pointed to by the pointers allows for
> + * bits to be dropped from the offset and hence widen the memory region that
> + * can be covered. This controls how many bits are right shifted.
> + **/
> +static __rte_always_inline void
> +rte_ptr_compress_32_shift(void *ptr_base, void **src_table,
> + uint32_t *dest_table, size_t n, uint8_t bit_shift)
Probably: void * const *src_table
And on decompress: const uint32_t *src_table
> +{
> + size_t i = 0;
> +#if defined RTE_HAS_SVE_ACLE && !defined RTE_ARCH_ARMv8_AARCH32
> + svuint64_t v_ptr_table;
> + do {
> + svbool_t pg = svwhilelt_b64(i, n);
> + v_ptr_table = svld1_u64(pg, (uint64_t *)src_table + i);
> + v_ptr_table = svsub_x(pg, v_ptr_table, (uint64_t)ptr_base);
> + v_ptr_table = svlsr_x(pg, v_ptr_table, bit_shift);
> + svst1w(pg, &dest_table[i], v_ptr_table);
> + i += svcntd();
> + } while (i < n);
> +#elif defined __ARM_NEON && !defined RTE_ARCH_ARMv8_AARCH32
> + uint64_t ptr_diff;
> + uint64x2_t v_ptr_table;
> + /* right shift is done by left shifting by negative int */
> + int64x2_t v_shift = vdupq_n_s64(-bit_shift);
> + uint64x2_t v_ptr_base = vdupq_n_u64((uint64_t)ptr_base);
> + const size_t n_even = n & ~0x1;
> + for (; i < n_even; i += 2) {
> + v_ptr_table = vld1q_u64((const uint64_t *)src_table + i);
> + v_ptr_table = vsubq_u64(v_ptr_table, v_ptr_base);
> + v_ptr_table = vshlq_u64(v_ptr_table, v_shift);
> + vst1_u32(dest_table + i, vqmovn_u64(v_ptr_table));
> + }
> + /* process leftover single item in case of odd number of n */
> + if (unlikely(n & 0x1)) {
> + ptr_diff = RTE_PTR_DIFF(src_table[i], ptr_base);
> + dest_table[i] = (uint32_t) (ptr_diff >> bit_shift);
> + }
> +#else
> + uintptr_t ptr_diff;
> + for (; i < n; i++) {
> + ptr_diff = RTE_PTR_DIFF(src_table[i], ptr_base);
> + ptr_diff = ptr_diff >> bit_shift;
> + RTE_ASSERT(ptr_diff <= UINT32_MAX);
> + dest_table[i] = (uint32_t) ptr_diff;
> + }
> +#endif
> +}
> +
next prev parent reply other threads:[~2024-06-06 13:22 UTC|newest]
Thread overview: 141+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-27 15:08 [RFC 0/2] add pointer compression API Paul Szczepanek
2023-09-27 15:08 ` [RFC 1/2] eal: add pointer compression functions Paul Szczepanek
2023-10-09 15:54 ` Thomas Monjalon
2023-10-11 13:36 ` Honnappa Nagarahalli
2023-10-11 16:43 ` Paul Szczepanek
2023-10-11 12:43 ` [RFC v2 0/2] add pointer compression API Paul Szczepanek
2023-10-11 12:43 ` [RFC v2 1/2] eal: add pointer compression functions Paul Szczepanek
2023-10-11 12:43 ` [RFC v2 2/2] test: add pointer compress tests to ring perf test Paul Szczepanek
2023-10-31 18:10 ` [PATCH v3 0/3] add pointer compression API Paul Szczepanek
2023-10-31 18:10 ` [PATCH v3 1/3] eal: add pointer compression functions Paul Szczepanek
2023-10-31 18:10 ` [PATCH v3 2/3] test: add pointer compress tests to ring perf test Paul Szczepanek
2023-10-31 18:10 ` [PATCH v3 3/3] docs: add pointer compression to the EAL guide Paul Szczepanek
2023-11-01 7:42 ` [PATCH v3 0/3] add pointer compression API Morten Brørup
2023-11-01 12:52 ` Paul Szczepanek
2023-11-01 12:46 ` [PATCH v4 0/4] " Paul Szczepanek
2023-11-01 12:46 ` [PATCH v4 1/4] eal: add pointer compression functions Paul Szczepanek
2023-11-01 12:46 ` [PATCH v4 2/4] test: add pointer compress tests to ring perf test Paul Szczepanek
2023-11-01 12:46 ` [PATCH v4 3/4] docs: add pointer compression to the EAL guide Paul Szczepanek
2023-11-01 12:46 ` [PATCH v4 4/4] test: add unit test for ptr compression Paul Szczepanek
2023-11-01 18:12 ` [PATCH v5 0/4] add pointer compression API Paul Szczepanek
2023-11-01 18:12 ` [PATCH v5 1/4] eal: add pointer compression functions Paul Szczepanek
2024-02-11 15:32 ` Konstantin Ananyev
2023-11-01 18:12 ` [PATCH v5 2/4] test: add pointer compress tests to ring perf test Paul Szczepanek
2023-11-01 18:13 ` [PATCH v5 3/4] docs: add pointer compression to the EAL guide Paul Szczepanek
2023-11-01 18:13 ` [PATCH v5 4/4] test: add unit test for ptr compression Paul Szczepanek
2024-02-22 8:15 ` [PATCH v5 0/4] add pointer compression API Paul Szczepanek
2024-02-22 16:16 ` Konstantin Ananyev
2024-03-01 11:16 ` Morten Brørup
2024-03-01 16:12 ` Patrick Robb
2024-03-01 19:57 ` Honnappa Nagarahalli
2024-03-02 10:33 ` Morten Brørup
2024-03-06 22:31 ` Paul Szczepanek
2024-03-07 2:13 ` Honnappa Nagarahalli
2024-03-04 14:44 ` Konstantin Ananyev
2024-05-15 17:00 ` Paul Szczepanek
2024-05-15 22:34 ` Morten Brørup
2024-05-16 8:25 ` Paul Szczepanek
2024-05-16 8:40 ` Konstantin Ananyev
2024-05-24 8:33 ` Paul Szczepanek
2024-05-24 9:09 ` Konstantin Ananyev
2024-05-28 19:29 ` Paul Szczepanek
2024-05-29 10:28 ` Paul Szczepanek
2024-06-06 13:33 ` Konstantin Ananyev
2024-02-29 16:03 ` [PATCH v6 " Paul Szczepanek
2024-02-29 16:03 ` [PATCH v6 1/4] eal: add pointer compression functions Paul Szczepanek
2024-02-29 16:03 ` [PATCH v6 2/4] test: add pointer compress tests to ring perf test Paul Szczepanek
2024-02-29 16:03 ` [PATCH v6 3/4] docs: add pointer compression to the EAL guide Paul Szczepanek
2024-02-29 16:03 ` [PATCH v6 4/4] test: add unit test for ptr compression Paul Szczepanek
2024-03-01 10:21 ` [PATCH v7 0/4] add pointer compression API Paul Szczepanek
2024-03-01 10:21 ` [PATCH v7 1/4] eal: add pointer compression functions Paul Szczepanek
2024-03-07 11:22 ` David Marchand
2024-03-01 10:21 ` [PATCH v7 2/4] test: add pointer compress tests to ring perf test Paul Szczepanek
2024-03-07 11:27 ` David Marchand
2024-03-01 10:21 ` [PATCH v7 3/4] docs: add pointer compression to the EAL guide Paul Szczepanek
2024-03-01 10:21 ` [PATCH v7 4/4] test: add unit test for ptr compression Paul Szczepanek
2024-03-07 11:30 ` David Marchand
2024-03-07 20:39 ` [PATCH v7 0/4] add pointer compression API Paul Szczepanek
2024-03-07 20:39 ` [PATCH v8 1/4] ptr_compress: add pointer compression library Paul Szczepanek
2024-03-07 20:39 ` [PATCH v8 2/4] test: add pointer compress tests to ring perf test Paul Szczepanek
2024-03-07 20:39 ` [PATCH v8 3/4] docs: add pointer compression guide Paul Szczepanek
2024-03-07 20:39 ` [PATCH v8 4/4] test: add unit test for ptr compression Paul Szczepanek
2024-03-08 8:27 ` [PATCH v7 0/4] add pointer compression API David Marchand
2024-03-10 19:34 ` Honnappa Nagarahalli
2024-03-11 7:44 ` David Marchand
2024-03-11 14:47 ` [PATCH v9 0/5] " Paul Szczepanek
2024-03-11 14:47 ` [PATCH v9 1/5] lib: allow libraries with no sources Paul Szczepanek
2024-03-11 15:23 ` Bruce Richardson
2024-03-15 8:33 ` Paul Szczepanek
2024-03-11 14:47 ` [PATCH v9 2/5] ptr_compress: add pointer compression library Paul Szczepanek
2024-03-11 14:47 ` [PATCH v9 3/5] test: add pointer compress tests to ring perf test Paul Szczepanek
2024-03-11 14:47 ` [PATCH v9 4/5] docs: add pointer compression guide Paul Szczepanek
2024-03-11 14:47 ` [PATCH v9 5/5] test: add unit test for ptr compression Paul Szczepanek
2024-03-11 20:31 ` [PATCH v10 0/5] add pointer compression API Paul Szczepanek
2024-03-11 20:31 ` [PATCH v10 1/5] lib: allow libraries with no sources Paul Szczepanek
2024-03-15 9:14 ` Bruce Richardson
2024-03-11 20:31 ` [PATCH v10 2/5] ptr_compress: add pointer compression library Paul Szczepanek
2024-03-11 20:31 ` [PATCH v10 3/5] test: add pointer compress tests to ring perf test Paul Szczepanek
2024-03-11 20:31 ` [PATCH v10 4/5] docs: add pointer compression guide Paul Szczepanek
2024-03-11 20:31 ` [PATCH v10 5/5] test: add unit test for ptr compression Paul Szczepanek
2024-05-24 8:36 ` [PATCH v11 0/6] add pointer compression API Paul Szczepanek
2024-05-24 8:36 ` [PATCH v11 1/6] lib: allow libraries with no sources Paul Szczepanek
2024-05-24 8:36 ` [PATCH v11 2/6] mempool: add functions to get extra mempool info Paul Szczepanek
2024-05-24 12:20 ` Morten Brørup
2024-05-28 19:33 ` Paul Szczepanek
2024-05-24 8:36 ` [PATCH v11 3/6] ptr_compress: add pointer compression library Paul Szczepanek
2024-05-24 12:50 ` Morten Brørup
2024-06-06 13:22 ` Konstantin Ananyev [this message]
2024-05-24 8:36 ` [PATCH v11 4/6] test: add pointer compress tests to ring perf test Paul Szczepanek
2024-05-24 8:36 ` [PATCH v11 5/6] docs: add pointer compression guide Paul Szczepanek
2024-05-24 8:36 ` [PATCH v11 6/6] test: add unit test for ptr compression Paul Szczepanek
2024-05-29 10:22 ` [PATCH v12 0/6] add pointer compression API Paul Szczepanek
2024-05-29 10:22 ` [PATCH v12 1/6] lib: allow libraries with no sources Paul Szczepanek
2024-05-29 10:22 ` [PATCH v12 2/6] mempool: add functions to get extra mempool info Paul Szczepanek
2024-05-29 11:47 ` Morten Brørup
2024-05-29 13:56 ` Morten Brørup
2024-05-29 16:18 ` Paul Szczepanek
2024-05-30 0:56 ` Du, Frank
2024-05-29 10:22 ` [PATCH v12 3/6] ptr_compress: add pointer compression library Paul Szczepanek
2024-05-29 11:52 ` Morten Brørup
2024-05-29 10:22 ` [PATCH v12 4/6] test: add pointer compress tests to ring perf test Paul Szczepanek
2024-05-29 10:22 ` [PATCH v12 5/6] docs: add pointer compression guide Paul Szczepanek
2024-05-29 10:22 ` [PATCH v12 6/6] test: add unit test for ptr compression Paul Szczepanek
2024-05-30 9:40 ` [PATCH v13 0/6] add pointer compression API Paul Szczepanek
2024-05-30 9:40 ` [PATCH v13 1/6] lib: allow libraries with no sources Paul Szczepanek
2024-05-30 9:40 ` [PATCH v13 2/6] mempool: add functions to get extra mempool info Paul Szczepanek
2024-05-31 9:32 ` Morten Brørup
2024-06-06 12:28 ` Konstantin Ananyev
2024-06-07 15:12 ` Paul Szczepanek
2024-05-30 9:40 ` [PATCH v13 3/6] ptr_compress: add pointer compression library Paul Szczepanek
2024-05-30 9:40 ` [PATCH v13 4/6] test: add pointer compress tests to ring perf test Paul Szczepanek
2024-05-30 9:40 ` [PATCH v13 5/6] docs: add pointer compression guide Paul Szczepanek
2024-05-30 9:40 ` [PATCH v13 6/6] test: add unit test for ptr compression Paul Szczepanek
2024-06-04 9:06 ` Paul Szczepanek
2024-06-04 9:07 ` Paul Szczepanek
2024-05-30 13:35 ` [PATCH v13 0/6] add pointer compression API Paul Szczepanek
2024-06-04 9:04 ` Paul Szczepanek
2023-09-27 15:08 ` [RFC 2/2] test: add pointer compress tests to ring perf test Paul Szczepanek
2023-10-09 15:48 ` Thomas Monjalon
2024-06-07 15:09 ` [PATCH v14 0/6] add pointer compression API Paul Szczepanek
2024-06-07 15:09 ` [PATCH v14 1/6] lib: allow libraries with no sources Paul Szczepanek
2024-06-07 15:09 ` [PATCH v14 2/6] mempool: add functions to get extra mempool info Paul Szczepanek
2024-06-10 14:24 ` Konstantin Ananyev
2024-06-11 13:06 ` Paul Szczepanek
2024-06-07 15:09 ` [PATCH v14 3/6] ptr_compress: add pointer compression library Paul Szczepanek
2024-06-10 15:18 ` David Marchand
2024-06-10 15:37 ` Morten Brørup
2024-06-11 13:16 ` Paul Szczepanek
2024-06-07 15:09 ` [PATCH v14 4/6] test: add pointer compress tests to ring perf test Paul Szczepanek
2024-06-07 15:09 ` [PATCH v14 5/6] docs: add pointer compression guide Paul Szczepanek
2024-06-07 15:10 ` [PATCH v14 6/6] test: add unit test for ptr compression Paul Szczepanek
2024-06-11 12:59 ` [PATCH v15 0/6] add pointer compression API Paul Szczepanek
2024-06-11 12:59 ` [PATCH v15 1/6] lib: allow libraries with no sources Paul Szczepanek
2024-06-11 12:59 ` [PATCH v15 2/6] mempool: add functions to get extra mempool info Paul Szczepanek
2024-06-11 12:59 ` [PATCH v15 3/6] ptr_compress: add pointer compression library Paul Szczepanek
2024-06-11 12:59 ` [PATCH v15 4/6] test: add pointer compress tests to ring perf test Paul Szczepanek
2024-06-11 12:59 ` [PATCH v15 5/6] docs: add pointer compression guide Paul Szczepanek
2024-06-11 12:59 ` [PATCH v15 6/6] test: add unit test for ptr compression Paul Szczepanek
2024-06-14 10:28 ` [PATCH v15 0/6] add pointer compression API David Marchand
2024-06-17 10:02 ` David Marchand
2024-06-17 13:46 ` Paul Szczepanek
2024-06-17 13:57 ` David Marchand
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=e88bfac9cfcb4c4e9118f94bda233909@huawei.com \
--to=konstantin.ananyev@huawei.com \
--cc=dev@dpdk.org \
--cc=honnappa.nagarahalli@arm.com \
--cc=jack.bond-preston@arm.com \
--cc=kamalakshitha.aligeri@arm.com \
--cc=mb@smartsharesystems.com \
--cc=nathan.brown@arm.com \
--cc=paul.szczepanek@arm.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.