discuss-gnuradio
[Top][All Lists]
Advanced

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

Re: [Discuss-gnuradio] Threaded model for USRP2 source


From: Douglas Geiger
Subject: Re: [Discuss-gnuradio] Threaded model for USRP2 source
Date: Thu, 23 Jul 2009 13:51:39 -0400

John,

On Thu, Jul 23, 2009 at 1:00 PM, Johnathan Corgan <address@hidden> 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
address@hidden

reply via email to

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