Technical Background¶
Relationship between graph and scheduler¶
A Ufo.Graph
represents a network of interconnected filter nodes. New nodes
can be added and existing node relationships be queried. Also, the graph can be
serialized as a JSON structure with ufo_graph_save_to_json
and read back
again with ufo_graph_read_from_json
.
The Ufo.Scheduler
on the other hand is an implementation of a strategy how
to execute the filters contained in a graph. Therefore, the scheduler is passed
a graph object on execution.
Profiling¶
By default, the scheduler measures the run-time from initial setup until
processing of the last data item finished. You can get the time in seconds via the
time
property
g = Ufo.TaskGraph()
scheduler = Ufo.Scheduler()
scheduler.run(g)
print("Time spent: {}s".format(scheduler.time))
To get more fine-grained insight into the execution, you can enable tracing
scheduler.props.enable_tracing = True
scheduler.run(g)
and analyse the generated traces for OpenCL (saved in opencl.PID.json
) and
general events (saved in trace.PID.json
). To visualize the trace events, you
can either use the distributed ufo-prof
tool or Google Chrome or Chromium by
going to chrome://tracing and loading the JSON files.