Commit Graph
722 Commits
Author SHA1 Message Date
Nika Ghaderi d43d267626 Add Performance Benchmark for Full Channel Pipeline
This commit adds a performance benchmark for the end-to-end channel simulation pipeline, named `test_channel_simulation`. Its methodology is as follows:

- It systematically iterates through a matrix of test cases, varying
  MIMO configuration (Tx/Rx antennas), signal length, and channel
  length.
- For each case, it runs both the full CPU pipeline (`multipath_channel_float`
  followed by `add_noise_float`) and the single `run_channel_pipeline_cuda`
  function.
- It measures the average execution time for both implementations over
  many trials and calculates the resulting speedup.

This provides a performance characterization of the GPU pipeline across different workloads and directly compares it to the CPU baseline.
2026-02-09 09:29:36 +00:00
Nika Ghaderi 7101dc04d1 Add Performance Benchmark for Noise Generation
This commit adds a new standalone benchmark, `test_noise`, to measure
and compare the performance of the CPU and CUDA implementations of noise
generation.

The benchmark's methodology is as follows:
- It iterates through various configurations, including different
  numbers of receive antennas and signal lengths.
- For each configuration, it runs both the CPU (`add_noise_float`)
  and CUDA (`add_noise_cuda`) functions multiple times to get a stable
  average execution time.
- It prints a formatted table comparing the CPU and GPU latencies and
  calculates the resulting speedup.
2026-02-09 09:29:36 +00:00
Nika Ghaderi 97a14c3960 Add Unit Test for CUDA Multipath Channel Kernel
This commit adds a new standalone unit test, `test_multipath`, to
validate the CUDA implementation of the multipath channel.

The test performs the following steps:
- Generates a random input signal and channel model.
- Runs the CPU version (`multipath_channel_float`) to get a baseline result.
- Runs the CUDA version (`multipath_channel_cuda`) with the same inputs.
- Compares the two outputs by calculating the Mean Squared Error (MSE)
  and ensures it is below a small tolerance.
2026-02-09 09:29:36 +00:00
Robert Schmidt a0a68d56d5 Merge remote-tracking branch 'origin/remove-dead-code' into integration_2026_w05 (!3831)
semi-manual remove of not used #define commands

As i was upset to see all these #define with no code under, i made a
global pass to remove the obvious cases semi-manual remove of not used
bodies

manual script, then a lot of manual review

    grep -IRs "#define" ../openair* ../common/* ../executables/ ../nfapi/ ../radio/ | \
        fgrep -v '(' | fgrep -v '//' |awk '{print $2}' | egrep -v "#define *$n"| \
            while read n ; do
              grep -IRs $n ../openair* ../common/* ../executables/ ../nfapi/ ../radio/  | grep -v "#define *$n" | grep -q $n || echo $n;
            done

will give a decent list of #define never used.  Then, I think we should
keep lists of # define when it comes from standards, even if the code
doesn't use it right now
2026-01-29 08:23:41 +01:00
Laurent THOMAS dd8a25524a remove dead code in common_lib.h 2026-01-27 13:23:18 +01:00
Laurent THOMAS 5b0d34c3ad semi-manual remove of not used #define commands. I let the unused defintions that come from standard bodies 2026-01-27 13:23:10 +01:00
Thomas Schlichter 6297c40423 remove unused variables from struct openair0_config 2026-01-27 11:10:54 +01:00
Thomas Schlichter 75df29a333 consistenty use suffix _t for openair0_* types 2026-01-23 18:30:39 +01:00
Rakesh Mundlamuri a752f43ad6 Harmonize phy_simulators to use compute_tx_energy_level() and compute_noise_variance() 2026-01-09 20:49:46 +05:30
Rakesh Mundlamuri 729dc02b88 Split the code in the SNR loop as functions for readability
- Introduce signal energy and noise variance functions
- Combine rotation and OFDM modulation RX as a function
- Harmonize the use of number of antennas across the code
- Rename nr_ue_pusch_common_procedures() to nr_tx_rotation_and_ofdm_mod() to decribe the functionality better
2026-01-09 16:58:34 +05:30
Laurent THOMAS 6313c71b83 remove unused iq_txshift and iq_rxrescale variables
improve comments in usrp_lib.cpp
2026-01-06 09:02:08 +01:00
Laurent THOMAS a1b4220a91 Exclusively use OAI_RNGSEED env variable everywhere
Hide normal table initialization of Ziggurat generator from outside to
force the usage of randominit() for RNG initialization. In this step,
remove the randominit() seed parameter and only rely on OAI_RNGSEED for
a consistent RNG initialization, as this parameter was used differently
("0" as fixed number or to force a random seed).

Now, only use OAI_RNGSEED env variable to force the usage of a fixed
seed.
2025-12-01 12:10:31 +01:00
Nada Bouknana 1d235ce6fa modify the default imscope docking layout from imgui.ini 2025-11-11 14:38:30 +01:00
Nada Bouknana 05570bb8d8 move global scope settings to a menu item 2025-11-11 14:06:31 +01:00
Nada Bouknana 530812ff38 add ImPlotAxisFlags_AutoFit flag to enable autofitting by default in imscope plots 2025-11-11 14:04:33 +01:00
Nada Bouknana f9ca8431c0 add PDCCH IQ and LLR plots to the UE scope 2025-11-11 13:58:43 +01:00
Jaroslava Fiedlerova 769885c05a Merge remote-tracking branch 'origin/precoder_optimization' into integration_2025_w42 (!3623)
Optimization of PDSCH precoding operation

x86/aarch64 optimizations for precoding, more complete timing reporting in
nr_dlsim. Timing report in nr_dlsim now shows the total PDSCH generation time
and is broken down into Layer mapping, resource mapping and precoding.
The optimizations for x86 are basically reorganizing loops (for AVX512,AVX2,
NEON but not SSE2) to minimize repetitive instructions when formatting of the
precoder weights, and creation of inline functions for complex multiply-add.
AVX512 optimization was added. requiring AVX512BW. Detection of up to 4 PRBs
with common PMI for efficiency with AVX512 (was 2 in develop for AVX2).
For aarch64, native coding of the precoder to avoid inefficient SIMDe
translations for this operation.
nr_dlsim now uses default precoding indices depending on the scenario instead
of 0 which doesn't do precoding at all.

See merge request description for nr_dlsim test results.
2025-10-13 11:39:57 +02:00
Laurent THOMAS c537e2cabe move complex numbers types above phy layer, as they are used in fapi for example 2025-10-09 16:01:09 +02:00
Robert Schmidt 1ffa012014 Merge remote-tracking branch 'origin/SRS-noise-power' into integration_2025_w41 (!3471)
SRS noise power

This MR implements the calculation of the noise power based on SRS in a
different way, and check whether SNR is more accurate or not. This MR is
built on top of the MR: !3460

A graph was added in T_Tracer to observe UL-SNR calculated using SRS.

See merge request description for measurement results.
2025-10-09 08:45:14 +02:00
Laurent THOMAS 7355b55ad1 this MR replaces constants INT16_MIN by -INT16_MAX (so -32767) in places where it used for mathematical operations 2025-10-03 10:02:48 +02:00
rmagueta 799934024e SRS-based noise calculation using holes 2025-10-02 11:43:07 +01:00
Robert Schmidt 1e476735ea xforms uses logging 2025-09-29 09:04:02 +02:00
Robert Schmidt 124debc2c7 Fix warnings in rftest executable
warning: ‘genericPowerPerAntena’ defined but not used [-Wunused-function]

    warning: ‘graph.text’ is used uninitialized [-Wuninitialized]

    warning: ignoring return value of ‘read’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
2025-09-29 09:04:02 +02:00
Robert Schmidt 252b19cddb Make rftest compile
uniqCfg is in minimal_lib, so not necessary. Remove non-existant struct
members.
2025-09-25 08:51:11 +02:00
Laurent THOMAS 5d118cf170 fix lack of test for fopen() return value 2025-09-09 18:04:26 +02:00
Laurent THOMAS 278d2cbca1 fix several not tested malloc or calloc return value 2025-09-09 18:04:26 +02:00
Raymond Knopp 5e3e8a70ff addition of aarch64 native implementation for rotate_cpx_vector for the case output_shift=15 2025-09-02 08:28:13 +02:00
Robert Schmidt cbdcd2d015 Merge remote-tracking branch 'origin/issue-955' into integration_2025_w31 (!3545)
Fix overflow when negating minimum int16_t value in precoding

This closes #955

It prevents undefined behavior caused by the minimum int16_t value
(-32768) in two's complement representation. Because possible negation
by multiplying with -1 during precoding cause an overflows since +32768
cannot be represented in 16-bit signed integers and end up again in
-32768 because of overflow, here reveald by using the SIMD functions.

Workaround we use a slightly smaller number than 1 in Q15 Format to
prevent this error. Q15 representation of (integer value -32767) -1 +
2^-15 = -0.999969482421875
2025-07-31 15:26:21 +02:00
Mario Joa-Ng 905a8a495e mod: unit test code to compare CM and SIMD results on both antennas 2025-07-29 15:38:23 +00:00
Laurent THOMAS 3264eca6db enhance llr unitary tests 2025-07-24 13:48:36 +02:00
Laurent THOMAS f57f6a8d4e factorize code that initialize all 0xff simd vectors 2025-07-24 13:48:36 +02:00
Bartosz Podrygajlo 456fe094bc Add UE PDSCH ChanEst and pre-compensation IQ to imscope 2025-06-03 13:15:33 +02:00
Bartosz Podrygajlo b58870d47c Add CSV iq export to Imscope
Add CSV export button to imscope.
2025-06-03 11:47:42 +02:00
Bartosz Podrygajlo 4ebe910363 Add extra cache for imscope record thread
This should allow to capture UE time domain data after PDSCH decoding failure.
2025-06-03 11:46:23 +02:00
Matthias Mehlhose 04e35af5a5 mod: remove simde_ prefix and use oai_ prefix instead 2025-04-25 14:48:00 +02:00
Matthias Mehlhose 59d7e74157 add: unit tests 2025-04-25 14:47:59 +02:00
Matthias Mehlhose 8bfc0dfedd del: double defines (see tools_defs.h) 2025-04-25 14:47:59 +02:00
Laurent THOMAS 7982a9da41 set correct parameter type, and fuse funcions that do same real/complex vector operations, doing this, fix a lot of unitary multiplications (else there would be numerous cast operations 2025-04-25 14:47:59 +02:00
Laurent THOMAS 95ae7772bf simplifly, reegroup functions in tools_defs.h 2025-04-25 14:47:59 +02:00
Laurent THOMAS 04fc2fbb2e make correct description of sub_cpx_vector16 and remove mixed dead code 2025-04-25 14:47:59 +02:00
Laurent THOMAS 4e3fab67a8 remove unused function with duplicated name to another one 2025-04-25 14:47:59 +02:00
Laurent THOMAS fefb96a115 merge functions conj(a)*b and a*conj(b) 2025-04-25 14:47:59 +02:00
HHI f470ea5946 mod: refactor PHY multiplications 2025-04-25 14:47:59 +02:00
Thomas Schlichter dd827c7bd8 refactor (co)sinus calculation out of phase_noise() into openair1/PHY/TOOLS/get_sin_cos.c 2025-04-10 12:37:19 +00:00
Laurent THOMAS 54828f10d0 defined and not used variable 2025-04-04 16:05:46 +02:00
Laurent THOMAS a0721cac16 remove ul_ch_estimates_time that saves 50MB memory to access in RAM, and make better quality scope data passing (no race) 2025-03-14 11:27:01 +01:00
Laurent THOMAS 43b981247e error-simd-intrinsic-name 2025-02-04 13:21:43 +01:00
Bartosz Podrygajlo 2ea6ac26bd Use a global "void_instruction" in imscope record thread
This avoids the issue of compare_exchange_weak always failing. The issue
was that `store()` is not equal to `exchange()`. `exchange` uses memory
copy while `store()` copies the value representation of the argument, which
is not always the same thing.
2025-01-28 16:55:53 +01:00
Bartosz Podrygajlo 30de011fa3 Add build_oai option for imscope_record 2025-01-28 16:55:42 +01:00
Bartosz Podrygajlo c520a4e295 Refactor some scope macros
Use do {} while (0) for UEdumpScopeData/gNBdumpScopeData macro
2025-01-28 16:55:32 +01:00