[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] Fast, Single-Sample Phase Rotation

From: Douglas Geiger
Subject: Re: [Discuss-gnuradio] Fast, Single-Sample Phase Rotation
Date: Thu, 28 May 2015 16:52:05 -0400

On Tue, May 26, 2015 at 7:37 PM, John Malsbury <address@hidden> wrote:
I have a  complex phase rotation function that uses a pre-generated sin/cos LUT and some basic multiple/adds.  

As it turns out, the rotation calc, which uses "straight" C/C++ math is still the bottleneck in a demod.

I was wondering, is there some uber-efficient rotation block/class I should be using?   I notice there is a volk kernel for the job and gr_rotator.  But I also should mention that the phase rotation operation must happen one sample at a time.  This is due to the sequential nature of the algorithm - ie.  I can't align and call a kernel with hundreds of nicely-aligned samples.

Any advice?


 To follow-up on Sylvain's questions: is the restriction really on doing single-sample rotation (because of some intermediate calculation to generate the phase advance for the next sample), or on the alignment? I'll note that *in general* intel doesn't take much (including, often, a non-measurable) hit on non-aligned SIMD operations. Also - even if you aren't operating in the hundreds of sample range, that the SIMD kernel can save you if you're operating on e.g. several sample as a time (for SSE it's only doing two at a time anyways, with a clean-up loop for an odd-number of samples, and AVX does four at a time, with a clean-up loop for non-multiples of four).
 Besides, who can resist looking at something called the rotatorpuppet for inspiration on how to call the main kernel?

 I'll also point out that the gr::blocks::rotator (which is not a block, i.e. separate from the rotator_cc, which is a block) has both a rotate() method that operates on a single sample, and a rotateN() method that operates on n samples. It is the later that calls down into the volk rotator kernel.

Doug Geiger

reply via email to

[Prev in Thread] Current Thread [Next in Thread]