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
_______________________________________________
Discuss-gnuradio mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to