gnss-sdr
gnss-sdr copied to clipboard
What functionality causes the most CPU usage?
Short: I am wondering what functions of GNSS SDR causes the most cpu usage. Is it tracking? Finding a position solution? Outputting data of some sort?
Long: I am wanting to run GNSS SDR just to output information about satellites like the GPS ephemera, GPS almanac, and gnss_synchro messages. Can I disable the other functionality like position solution while keeping my message functionality? This will help me run the software more efficiently on a slower/cheaper processor. Currently, running the software maxes out my cpu and it begins to lose its lock on the satellites and will have to start over on the acquisition and tracking.
Tracking for sure.
I suspect it's acquisition. I find tracking to be pretty efficient with GPS L1 up to 6 channels on an old 2 core Intel i5. Galileo is much more CPU intensive than GPS. I would restrict the search range of acquisition, and increase the step size, use only 1 channel and don't use the standard algorithm, not the fine doppler one
You can profile the code with gperftools and gprof.
For what you're trying do, you may want to consider trying the gnss-sdrlib code on github instead. I'm working on something sort of similar myself using gnss-sdrlib, and may port some or all of it over to a Pi 4 compute module.
I wish we had the FPGA code for acceleration.