eliminated looping over a tuple and for_each (expensive to instantiate) and to use a straight std::array<std::string_view, ...> kDefaultTags instead. The latter can also be evaluated during compile-time.
added ccache support (can be disabled) which should help for local development that needs to switch between branches.
Comparative timings for the qa_Scheduler unit-tests:
std::array<std::string_view, ...> kDefaultTags
instead. The latter can also be evaluated during compile-time.Comparative timings for the qa_Scheduler unit-tests:
Before (full parallel build):
ClangBuildAnalyzer output for
qa_scheduler
beforeAfter:
ClangBuildAnalyzer output for
qa_scheduler
afterVisualisation of the remaining traces:![image](https://github.com/fair-acc/gnuradio4/assets/46007894/5994cc9b-6f9c-4708-b3f4-19056d8fcc8d)
BlockRegistry.hpp:25:16
: lambda to instantiate each block for a given stream typeGraph.hpp:323:31
: nested lambdas inBlockWrapper::createDynamicPortsLoader()
fmt::format_to ... rva::variant<...>...
: pmt-related printoutsstd::array
is cheaper as overstd::tuple
(where applicable).Some thoughts, ideas, and next steps:
BlockRegistry
andBlockWrapper
to only support minimal API (notably constructors)<gnuradio-4.0/core.hpp>
PCH -> goal: one include dependency for blocklib developer__attribute__((noinline))
to prevent non-performance critical code being inlined/optimised on global scope-fsanitize=address
,-fsanitize=undefined
,-fsanitize=thread
(combine where possible)raw
-ftime-trace
traces: qa_Scheduler.cpp.before.json.zip qa_Scheduler.cpp.after.json.zip