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
