Skip to content

Commit 876949b

Browse files
saukaPavel Harbanau
authored andcommitted
ofh: change compressor to work with cbf16_t input
1 parent 89c0a0d commit 876949b

33 files changed

+154
-107
lines changed

include/srsran/ofh/compression/iq_compressor.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class iq_compressor
3636
/// \param[in] iq_data IQ samples to be compressed.
3737
/// \param[in] params Compression parameters.
3838
virtual void
39-
compress(span<compressed_prb> compressed_prbs, span<const cf_t> iq_data, const ru_compression_params& params) = 0;
39+
compress(span<compressed_prb> compressed_prbs, span<const cbf16_t> iq_data, const ru_compression_params& params) = 0;
4040
};
4141

4242
} // namespace ofh

include/srsran/ofh/serdes/ofh_uplane_message_builder.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class uplane_message_builder
3737
/// \param[in] config User plane message parameters.
3838
/// \return Number of bytes serialized in the buffer.
3939
virtual unsigned
40-
build_message(span<uint8_t> buffer, span<const cf_t> iq_data, const uplane_message_params& params) = 0;
40+
build_message(span<uint8_t> buffer, span<const cbf16_t> iq_data, const uplane_message_params& params) = 0;
4141
};
4242

4343
} // namespace ofh

lib/ofh/compression/iq_compression_bfp_avx2.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ using namespace srsran;
1717
using namespace ofh;
1818

1919
void iq_compression_bfp_avx2::compress(span<compressed_prb> output,
20-
span<const cf_t> input,
20+
span<const cbf16_t> input,
2121
const ru_compression_params& params)
2222
{
2323
// Use generic implementation if AVX2 utils don't support requested bit width.
@@ -32,16 +32,16 @@ void iq_compression_bfp_avx2::compress(span<compressed_prb> output,
3232
// Auxiliary arrays used for float to fixed point conversion of the input data.
3333
std::array<int16_t, NOF_SAMPLES_PER_PRB * MAX_NOF_PRBS> input_quantized;
3434

35-
span<const float> float_samples_span(reinterpret_cast<const float*>(input.data()), input.size() * 2U);
36-
span<int16_t> input_quantized_span(input_quantized.data(), input.size() * 2U);
37-
// Performs conversion of input complex float values to signed 16bit integers.
35+
span<const bf16_t> float_samples_span(reinterpret_cast<const bf16_t*>(input.data()), input.size() * 2U);
36+
span<int16_t> input_quantized_span(input_quantized.data(), float_samples_span.size());
37+
// Performs conversion of input complex float values to signed 16-bit integers.
3838
quantize_input(input_quantized_span, float_samples_span);
3939

4040
// Compression algorithm implemented according to O-RAN.WG4.CUS Annex A.1.2.
4141
unsigned sample_idx = 0;
4242
unsigned rb = 0;
4343

44-
// One AVX2 register stores 8 16bit IQ pairs. We can process 2 PRBs at a time by using 3 AVX2 registers.
44+
// One AVX2 register stores 8 16-bit IQ pairs. We can process 2 PRBs at a time by using 3 AVX2 registers.
4545
for (size_t rb_index_end = (output.size() / 2) * 2; rb != rb_index_end; rb += 2) {
4646
span<compressed_prb> c_prbs = output.subspan(rb, 2);
4747

lib/ofh/compression/iq_compression_bfp_avx2.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class iq_compression_bfp_avx2 : public iq_compression_bfp_impl
2626
}
2727

2828
// See interface for the documentation.
29-
void compress(span<compressed_prb> output, span<const cf_t> input, const ru_compression_params& params) override;
29+
void compress(span<compressed_prb> output, span<const cbf16_t> input, const ru_compression_params& params) override;
3030

3131
// See interface for the documentation.
3232
void decompress(span<cf_t> output, span<const compressed_prb> input, const ru_compression_params& params) override;

lib/ofh/compression/iq_compression_bfp_avx512.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ static inline __m512i loadu_epi16_avx512(const void* mem_address)
2727
/// \brief Compresses samples of a single resource block using AVX512 intrinsics.
2828
///
2929
/// \param[out] compressed_prb Compressed PRB (stores compressed packed values).
30-
/// \param[in] uncompr_samples Pointer to an array of uncompressed 16bit samples.
30+
/// \param[in] uncompr_samples Pointer to an array of uncompressed 16-bit samples.
3131
/// \param[in] exponent Exponent used in BFP compression.
3232
/// \param[in] data_width Bit width of resulting compressed samples.
3333
static void
@@ -46,7 +46,7 @@ compress_prb_avx512(compressed_prb& c_prb, const int16_t* uncompr_samples, uint8
4646
}
4747

4848
void iq_compression_bfp_avx512::compress(span<compressed_prb> output,
49-
span<const cf_t> input,
49+
span<const cbf16_t> input,
5050
const ru_compression_params& params)
5151
{
5252
// Use generic implementation if AVX512 utils don't support requested bit width.
@@ -55,22 +55,22 @@ void iq_compression_bfp_avx512::compress(span<compressed_prb> output,
5555
return;
5656
}
5757

58-
// AVX512 register size in a number of 16bit words.
58+
// AVX512 register size in a number of 16-bit words.
5959
static constexpr size_t AVX512_REG_SIZE = 32;
6060

6161
// Auxiliary arrays used for float to fixed point conversion of the input data.
6262
std::array<int16_t, NOF_SAMPLES_PER_PRB * MAX_NOF_PRBS> input_quantized;
6363

64-
span<const float> float_samples_span(reinterpret_cast<const float*>(input.data()), input.size() * 2U);
65-
span<int16_t> input_quantized_span(input_quantized.data(), input.size() * 2U);
66-
// Performs conversion of input complex float values to signed 16bit integers.
64+
span<const bf16_t> float_samples_span(reinterpret_cast<const bf16_t*>(input.data()), input.size() * 2U);
65+
span<int16_t> input_quantized_span(input_quantized.data(), float_samples_span.size());
66+
// Performs conversion of input brain float values to signed 16-bit integers.
6767
quantize_input(input_quantized_span, float_samples_span);
6868

6969
// Compression algorithm implemented according to Annex A.1.2 in O-RAN.WG4.CUS.
7070
unsigned sample_idx = 0;
7171
unsigned rb = 0;
7272

73-
// With 3 AVX512 registers we can process 4 PRBs at a time (48 16bit IQ pairs).
73+
// With 3 AVX512 registers we can process 4 PRBs at a time (48 16-bit IQ pairs).
7474
for (size_t rb_index_end = (output.size() / 4) * 4; rb != rb_index_end; rb += 4) {
7575
// Load input.
7676
__m512i r0_epi16 = loadu_epi16_avx512(&input_quantized[sample_idx]);

lib/ofh/compression/iq_compression_bfp_avx512.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class iq_compression_bfp_avx512 : public iq_compression_bfp_impl
2626
}
2727

2828
// See interface for the documentation.
29-
void compress(span<compressed_prb> output, span<const cf_t> input, const ru_compression_params& params) override;
29+
void compress(span<compressed_prb> output, span<const cbf16_t> input, const ru_compression_params& params) override;
3030

3131
// See interface for the documentation.
3232
void decompress(span<cf_t> output, span<const compressed_prb> input, const ru_compression_params& params) override;

lib/ofh/compression/iq_compression_bfp_impl.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
using namespace srsran;
1717
using namespace ofh;
1818

19-
void iq_compression_bfp_impl::quantize_input(span<int16_t> out, span<const float> in)
19+
void iq_compression_bfp_impl::quantize_input(span<int16_t> out, span<const bf16_t> in)
2020
{
2121
srsran_assert(in.size() == out.size(), "Input and output spans must have the same size");
2222

@@ -63,15 +63,15 @@ void iq_compression_bfp_impl::compress_prb_generic(compressed_prb& c_prb,
6363
}
6464

6565
void iq_compression_bfp_impl::compress(span<compressed_prb> output,
66-
span<const cf_t> input,
66+
span<const cbf16_t> input,
6767
const ru_compression_params& params)
6868
{
6969
// Auxiliary arrays used for float to fixed point conversion of the input data.
7070
std::array<int16_t, NOF_SAMPLES_PER_PRB * MAX_NOF_PRBS> input_quantized;
7171

72-
span<const float> float_samples_span(reinterpret_cast<const float*>(input.data()), input.size() * 2U);
73-
span<int16_t> input_quantized_span(input_quantized.data(), input.size() * 2U);
74-
// Performs conversion of input complex float values to signed 16bit integers.
72+
span<const bf16_t> float_samples_span(reinterpret_cast<const bf16_t*>(input.data()), input.size() * 2U);
73+
span<int16_t> input_quantized_span(input_quantized.data(), float_samples_span.size());
74+
// Performs conversion of input brain float values to signed 16-bit integers.
7575
quantize_input(input_quantized_span, float_samples_span);
7676

7777
unsigned sample_idx = 0;

lib/ofh/compression/iq_compression_bfp_impl.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class iq_compression_bfp_impl : public iq_compressor, public iq_decompressor
3030

3131
// See interface for the documentation.
3232
virtual void
33-
compress(span<compressed_prb> output, span<const cf_t> input, const ru_compression_params& params) override;
33+
compress(span<compressed_prb> output, span<const cbf16_t> input, const ru_compression_params& params) override;
3434

3535
// See interface for the documentation.
3636
virtual void
@@ -87,7 +87,7 @@ class iq_compression_bfp_impl : public iq_compressor, public iq_decompressor
8787
/// \param[out] out Quantized samples.
8888
/// \param[in] in Span of input float samples.
8989
/// \param[in] bit_width Number of significant bits used by the quantized samples.
90-
void quantize_input(span<int16_t> out, span<const float> in);
90+
void quantize_input(span<int16_t> out, span<const bf16_t> in);
9191

9292
private:
9393
srslog::basic_logger& logger;

lib/ofh/compression/iq_compression_bfp_neon.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,9 @@ static inline void shift_right_x3vector_s16(int16x8x3_t src, int16x8x3_t& dst, u
5959
}
6060
}
6161

62-
void iq_compression_bfp_neon::compress(span<srsran::ofh::compressed_prb> output,
63-
span<const srsran::cf_t> input,
64-
const srsran::ofh::ru_compression_params& params)
62+
void iq_compression_bfp_neon::compress(span<compressed_prb> output,
63+
span<const cbf16_t> input,
64+
const ru_compression_params& params)
6565
{
6666
// Use generic implementation if NEON utils don't support requested bit width.
6767
if (!neon::iq_width_packing_supported(params.data_width)) {
@@ -72,17 +72,17 @@ void iq_compression_bfp_neon::compress(span<srsran::ofh::compressed_prb>
7272
// Auxiliary arrays used for float to fixed point conversion of the input data.
7373
std::array<int16_t, NOF_SAMPLES_PER_PRB * MAX_NOF_PRBS> input_quantized;
7474

75-
span<const float> float_samples_span(reinterpret_cast<const float*>(input.data()), input.size() * 2U);
76-
span<int16_t> input_quantized_span(input_quantized.data(), input.size() * 2U);
75+
span<const bf16_t> float_samples_span(reinterpret_cast<const bf16_t*>(input.data()), input.size() * 2U);
76+
span<int16_t> input_quantized_span(input_quantized.data(), float_samples_span.size());
7777

78-
// Performs conversion of input complex float values to signed 16bit integers.
78+
// Performs conversion of input brain float values to signed 16-bit integers.
7979
quantize_input(input_quantized_span, float_samples_span);
8080

8181
// Compression algorithm implemented according to Annex A.1.2 in O-RAN.WG4.CUS.
8282
unsigned sample_idx = 0;
8383
unsigned rb = 0;
8484

85-
// One NEON register can store 8 16bit samples. A PRB is comprised of 24 16bit IQ samples, thus we need three NEON
85+
// One NEON register can store 8 16-bit samples. A PRB is comprised of 24 16-bit IQ samples, thus we need three NEON
8686
// registers to process one PRB.
8787
//
8888
// The loop below processes four resource blocks at a time.

lib/ofh/compression/iq_compression_bfp_neon.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class iq_compression_bfp_neon : public iq_compression_bfp_impl
2626
}
2727

2828
// See interface for the documentation.
29-
void compress(span<compressed_prb> output, span<const cf_t> input, const ru_compression_params& params) override;
29+
void compress(span<compressed_prb> output, span<const cbf16_t> input, const ru_compression_params& params) override;
3030

3131
// See interface for the documentation.
3232
void decompress(span<cf_t> output, span<const compressed_prb> input, const ru_compression_params& params) override;

0 commit comments

Comments
 (0)