mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2026-10-17 13:02:35 +00:00
Build system:
- Drop hardcoded sm_30 (Kepler) nvcc flags rejected by CUDA >= 11; honour
CMAKE_CUDA_ARCHITECTURES, auto-detect Jetson SoCs from the device tree
(Orin 87, Xavier 72, TX2 62, Nano 53) or use "native" with CMake >= 3.24.
- CUDA standard follows the host C++ standard (C++17).
- find_package(CUDAToolkit) and explicit CUDA::cudart / CUDA::cufft links.
- Define CUDA_GPU_ACCEL project-wide; keep -Wno-psabi away from nvcc.
Acquisition:
- New CudaPcpsEngine (acquisition/libs/cuda_pcps_engine.{h,cu}): batched
cuFFT evaluation of the Doppler x code-phase grid, one stream per block.
- pcps_acquisition::doppler_grid() dispatches to the engine when
Acquisition_XX.use_cuda=true (or GNSS-SDR.use_cuda_acquisition=true),
falling back to the CPU loop on any failure. Peak search and statistics
are unchanged.
Tracking (GPS_L1_CA_DLL_PLL_Tracking_GPU):
- Split the racy single-launch wipe-off + correlator kernel into two
launches on the same stream.
- cudaHostAllocMapped || cudaHostAllocWriteCombined -> cudaHostAllocMapped.
- No cudaDeviceReset() in the per-channel teardown; do not cudaFree()
device aliases of host-mapped buffers; const-correct GPU_Complex.
Tests/docs:
- CudaPcpsEngineTest (GPU grid vs CPU reference incl. accumulation,
bit-transition mode, 4 ms integration) and GpsL1CaPcpsAcquisitionCudaTest
(full adapter on a real capture, CPU vs GPU estimates).
- benchmark_pcps_grid: CPU baseline vs GPU sweep.
- docs/JETSON.md build/verify/benchmark guide; README, changelog, sample
config updates.
Signed-off-by: Phillip Vu <36169227+phillipvu@users.noreply.github.com>