[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Discuss-gnuradio] Profiling, stopping the flow graph
From: |
Dan Halperin |
Subject: |
Re: [Discuss-gnuradio] Profiling, stopping the flow graph |
Date: |
Mon, 29 Jan 2007 11:40:54 -0800 |
User-agent: |
Thunderbird 1.5.0.9 (X11/20070103) |
Eric Blossom wrote:
> On Mon, Jan 29, 2007 at 10:35:33AM -0800, Dan Halperin wrote:
>
>> Hi,
>>
>> What options are there for profiling GNU Radio code? I've done some
>> Python profiling, and some C profiling, but what options are there for
>> this crazy SWIG-driven mix of the two?
>>
>
> Oprofile (oprofile.sf.net) kicks ass. It'll profile anything
> including our Python and C++ and the kernel, without having to add
> instrumentation to the generated code. It uses the hardware
> performance counters.
>
Awesome, I'll check it out. Thanks! (At the moment, having trouble
getting it started under Ubuntu..).
>> Also, a flow graph question. In the main loop of the transmit path of my
>> benchmarking program, I have the following (hopefully self-explanatory
>> code):
>>
>> fg.start()
>>
>> self.num_to_send = options.packets
>> self.bytes_per_packet = options.bytes
>> util.rand_init(options.seed)
>>
>> for i in range(self.num_to_send):
>> # generate random payload here into buf
>> buf = util.random_bytes(self.bytes_per_packet)
>> if i % 10 == 0:
>> print "> sending packet #", i
>> mac.send_buffer_unreliably(buf)
>> # sleep(.01)
>>
>> # sleep (1)
>> # sys.exit(0)
>>
>> fg.stop() # tell flow graph to stop.
>> fg.wait() # wait for it to finish
>>
>> If the sleep(.01) line is uncommented, then the flow graph does not
>> stop, and instead I quit using the sleep(1); sys.exit(0); however
>> everything works fine with no sleeping. What could be causing this? Is
>> it something weird involving code running in the same thread that
>> shouldn't be?
>>
>> Thanks,
>> Dan
>>
>
> Is the receiver code in the same program? If so, the flow graph code
> won't exit until both indicate they are done.
>
> Do you understand the use of the eof flag in
> gnuradio-examples/python/usrp/digital/benchmark_tx.py?
>
> It ends up sending (in pkt.py (send_pkt)) a special message (type == 1
> vs type == 0) to the gr.message_source that feeds the modulator. The
> special message tells the source that we're not sending any more data.
> This results in the C++ code telling the scheduler that it's done, and
> ultimately the flow graph stops.
>
That was the problem; I'm an idiot. I forgot to copy that line from the
original program. Thanks.
> Also, from this fragment I'm not sure if you are invoking the sleep(3)
> function or the time.sleep function. You definitely want the latter.
>
The latter.
Thanks for your help,
Dan