John,

On Thu, Jul 23, 2009 at 1:00 PM, Johnathan Corgan <
[email protected]> wrote:

>
> In your situation, you are using two USRP2s on two different GbE
> ports, and trying to time align samples for your output, correct?


Yes, one GbE per USRP2 (two for the moment, but I expect to be able
experiment with more soon).


>
> You could create two (more won't help) separate service threads, each
> calling into libusrp2 to receive frames and metadata, and have
> rx_samples copy them into whatever synchronized data structure you
> need.  Your block main thread that calls work() can read from your
> data structure (again, using synchronization primitives), and copy the
> time aligned output samples to the block output buffers.  (You'll need
> to decide how to deal with missing frames from either USRP2, but
> that's another conversation.)


Right, ok, this sounds like what I should be aiming for. Currently I just
have a single main service thread calling libusrp2 twice: once for each
USRP2 I want to talk to. Currently my alignment code ends up dropping
samples from USRP2 if the other had missing frames.


>
> libusrp2 will have a user space thread per USRP2, and your block will
> have three threads, so this is five in total.  You may need to
> experiment with thread placement so the right threads share a
> processor/cache to avoid trips to main memory.


Right - and this is the user space thread that talks to the kernel
ring_buffer, right?
Re: thread placement - are you referring to doing something to 'pin' threads
to a certain core? E.g. numactl?


>
> Remember, you are trying to move 200 Mbytes/sec around multiple times,
> and eventually do math on them--it's not a trivial task.
>
> Johnathan
>

Yes, the enormous amount of information I would like to process in real-time
is daunting: I think eventually I would like to move some of it into the
FPGA, for the time being I find it much easier to experiment in the world of
C++ (I haven't yet become fluent in Verilog).

I think the main issue I'd like to remedy is the fact that I know my machine
can handle two simultaneous streams of 25MS/s: i.e. if I spawn two separate
processes, each talking to a separate USRP2: but my time-aligned source
block is currently a bottleneck.
 Thanks,
  Doug

-- 
Doug Geiger
[email protected]
_______________________________________________
Discuss-gnuradio mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to