discuss-gnuradio
[Top][All Lists]
Advanced

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

Re: [Discuss-gnuradio] questions about the GNURadio Scheduler


From: Gonzalo Arcos
Subject: Re: [Discuss-gnuradio] questions about the GNURadio Scheduler
Date: Sun, 7 Feb 2016 17:03:26 -0300

Another question i forgot to include in the original mail:

Is there any point in trying to optimize a blocks performance by using OPEN MP or pthreads in cases of embarrasingly parallel operations? Or is it totally useless since all the cores are already at full load because there is one thread per block? I know that i could also try to use the GPU to speed up these kind of operations, but my first attempt was processor threads.

2016-02-07 16:58 GMT-03:00 Gonzalo Arcos <address@hidden>:
Hello,

I am trying to optimize the throughput of a flowgraph that was given to me, already designed and working. I have profiled every block, and improved on the performance of some blocks, which resulted in a better performance of the flowgraph as a whole.

However, at the moment, i am trying to tackle on how the graph is executed by the gnuradio scheduler, to see if i can parallelize anything (i.e. pipeline) that is currently being executed sequentially with no good reason.

To do this, i am trying to understand how does the gnuradio scheduler work, how blocks are executed, etc. I have not found as much information as i would like, leaving me with lots of questions. So from this point on i will state some of the information i gathered, and ask some questions. If anything i say is incorrect please tell me.

 GNURadio defines one thread per block. This means that GNURadio automatically takes full advantage of multi core processors, without the programmer of the blocks having to do anything, given a high number of blocks. 

- However, how does gnuradio scheduler decide which block to execute given a set of "ready to execute" blocks, without dependencies between them?  

- If i have a flowgraph A -> B on a dual core processor, A and B being blocks. Will A and B execute concurrently after the first iteration of A? By this i mean, on the first iteration of A, B has no data to work on, so one core will be idle, however after that, both cores should be working, since B can process data sent by A, and A can process new data independent of what B is doing.
If A is faster than B at processing data, does A data gets queued on a buffer, and then is sent to B? Does B only triggers when the data requirements to perform a work (i.e. input items) are reached?.

- Is there any way to see which gnuradio thread is executing in each core of the cpu, and which block corresponds to that thread? (This would be REALLY USEFUL for debugging purposes)

- In the gnuradio wiki it is explained how to set thread affinity and priority. However, it is not clear what they are useful for. Thread priority is pretty straightforward, so the only concept i dont fully get is the block thread affinity. In which scenario could it be useful to set that a thread has to run on a specific core?

Thanks in advance for your answers.

Kind Regards,
Gonzalo Arcos


reply via email to

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