All notable changes to newsched will be documented in this file.
The format is based on Keep a Changelog
This release brings a significant change to the block API and some structural changes regarding shared_ptr usage throughout.
Also, this should be the last release of newsched, as development is moving to the dev-4.0
branch of the gnuradio repository
work()
signature changed to pass reference towork_io
type which wraps input and output structsport
becomes a unique pointer owned by the blockbuffer
becomes unique pointer owned by theport
object (output port)
- Tag strobe block
- Delay block propagate tags
- Only process block directory if
yml
file exists
- Ubuntu 22 worker
- Enforce clang formatting
- Fixes a critical bug in grc bindings that was squishing the file_format tag onto the previous line leaving us with no usable blocks
- Removes some transitive boost includes brought in with logger.h
- Add custom bindings to templated blocks
- Restructures some of the utility scripts
- Hier Blocks - some major structural changes
- Python blocks - use correct format descriptors
- Soapy - rtlsdr and hackrf as hier blocks
- Grc: integration with pyqtgraph as flowgraph plotting option
- Blockbuilder: validation with jsonschema
- Updated templates for pyshell to handle callback methods
- Grc: Auto-populate the enums
- Scheduler/NBT: Don't process null input/output bufs
- Support for optional ports
- Hier blocks with Message Ports
- Updated benchmarking flowgraphs and load block
- CLI11 (as subproject)
- nlohmann::json (as subproject)
- cpp-httplib (as subproject)
- cppzmq (as subproject)
- CUSP (optional, if cuda_enabled == true)
- PMTF (subproject, use latest)
- Use CLI11 instead of boost program_options
- Use meson wraps instead of git submodules
- Update to latest PMT API (::pmt insted of ::wrap)
- Remove d_itemsize parameter from untyped blocks, using buffer itemsize instead in work() calculation
- Options for enabling/disabling modules
- clang-format to allow else on line following brace
- *.hh --> *.h
- newsched --> gnuradio in namespace and module naming
- update headers throughout to indicate licensing information
- replace include guards with #pragma once
- move kernel namespaces from blocklib modules to kernel library
- make CUSP and optional subproject
- rename
dims
toshape
for .yml ports - move blocks from
blocks
tostreamops
per GREP 0020 - use
size_t
where preferable (such asblock_work_io
)
- Takes on separable methods from blocklib modules
- currently math (from gr::runtime), filter, fft, digital
- dependency on gr namespace remains for prefs/logging
- filter: pfb_arb_resampler - use single template (de-duplication)
- sig_source - with top level enums
- noise_source - with top level enums
- quadrature demod block
- added module with single
alsa_sink
block- top level sink / src blocks will be hier blocks
- need separate block implementations for .yml to work properly
- msg_forward block and associated benchmark test
- make message ports on msg_debug block optional
- replace boost::file_lock with custom (copied) implementation
- allow size deduction for src, sink blocks
- fir_filter block
- iir_filter block
- update channelizer block to expect deinterleaved input (like in GR 3.X)
- Throttle block notifies the scheduler to "come back later"
- Head block, return DONE in same work function
- keep_m_in_n block
- probe_signal block
- probe_signal_v block
- deinterleave block
- interleave block
- selector block
- PUSH, PULL, REQ, REP, PUB, SUB blocks
- msgport versions
- updated tag passing mechanism with pmtf based tags
- port size deduction on zmq blocks
- Renamed from "runtime" --> "gr"
- Separated out runtime from flowgraph - runtime takes in a flowgraph
- Default runtime if none specified
- Inside block, use neighbor_interface pointer instead of scheduler to keep more general
- convenience functions in block.cc to notify scheduler to do work
- rtmon: update the flushing logic
- concurrent_queue: use, then remove moodycamel lock-free implementation - still there but #if'd out
- random string generator in node_id_generator
- block parameters use PMT directly instead of parameter class
- make autogenerated blocks store the module
- Use INHERITED_CONSTRUCTORS macro in blockname_gen.cc
- autogenerated blocks have suffix() method
- serialization and deserialization of block parameters, and all parameters in a block
- zmq based custom buffers
- allow default scheduler in multi-sched flowgraphs
- add "system" message port
- make scheduler flow wait for start signal to hold messages pending at port
- rename runtime components {monitor, proxy} from flowgraph to runtime_
- blocks with default json serialization
- refactor port code to have separate interface in port_interface.h
- allow connection of phantom nodes: In cases where the node is not connected to anything, make it configurable to nullptrs via the graph::connect routine
- serialization of message port messages
- many additional python bindings
- alias top_block to flowgraph for easy porting of qa and other scripts
- RPC interface support
- Example distributed runtime
- check thread state before joining - avoid stopping stopped thread and causing hangup
- port in the update GR 3.x logging framework
- mechanism for default preferences
- remove gpdict class, use map instead
- remove viter typedefs
- copy boost this_line_location functionality internally to remove boost dep
- tags: use struct with offset/map
- tags: serialization support
- module level enums described in yml
- "come back later" method on block.h to ping the scheduler after some time
- use
yml
instead of.conf
for preferences - use predicate for parameter setting callback
- fix python gil locking and qa
- alias numpy blocks as block and sync_block
- clean up public headers
- hier_block: basic functionality
- allow ctrl-c from python flowgraphs
- de-duplicate the partitioning code - use the same method for RPC and multi-scheduler
- block_work_io: convenience methods for min items
- work_t as std::function
- prefs: additional convenience methods for parsing yml
- doc on creating block
- build
doc
tag from .yml into the python bindings - update doxygen build
- use vector types for grc templates
- populate template instantiations and grc for specific type combos
- 3 way templating for blocks
- change
cmd
port toparam
- simplified typekeys, no more suffix, use sigmf data types
- add unsigned types to lookups
- add .clang-format
- update scripts with new macros and constructor args
- add copyright info to generated code
- touch
meson.build
to trigger initial code gen of block - updates for oot usage
- rename oot output as
gr4-module
(instead ofns-module
) - remove unnecessary options
- bring up to date with changes in gnuradio/main
- return edge object from connect in qt gui graphs
- template: pass flowgraph into runtime
- shebang correctly / make only executable what will be executed
- Add .gitignore explicitly where autogeneration is expected rather than a global filter
- Allow for itemsize of 0 by default to be connected to anything
- This allows a, e.g., copy block to be connected with no templating or setting of the item size
- Blocks will take on the itemsize of the first connected block it finds
- More generic factory interface using yaml string for scheduler
- Additional logic to flush the scheduler in the sequence of events when a block starts the
DONE
process - Blocks now have a default
param_update
message port that using a pmtf::map can change any parameter that is exposed - Further removal of Boost::format
- Python Block interface
- Two methods to create python blocks
- Through the "gateway" wrapping, arbitrarily create a python block
- Through the block yml with python lang implementation
- This gives access to more inherited block features, tighter coupling
- Two methods to create python blocks
- Add default cmd message port to all blocks
- Generic factory interface using yaml string configuration
- Prefix path loading relative path to lib to give correct gr::prefix()
- Moved implementation out of block.hh
- Update fft and filter blocks to allow for function qtgui
- Update domain property of a port to be evaluated parameter
- Selectable domains automatically generated from block yml
- Automatic in grc file generation to have enum of specified implementations as domains
- Supports optional tags on ports
- Port ID from the yml is rendered into the grc file
- Port in recent changes from gnuradio
- Fixed bug in throttle that was causing flowgraph to hang
- Restructure the code generation to allow multiple GRC files from a single block yaml
- Generate a .grc block for RTL-SDR and HackRF
- Update the logic to "kick" the scheduler when input has been blocked
Didn't take long to require a patch from the first release
- Propagate dependencies through meson
- not having this was causing build issues on Fedora
- Adds some missing include files
Here it is: the first release of newsched!
Newsched is the proof of concept framework for a future GNU Radio 4.0
By releasing newsched in a slightly formal way, the hope is that more developers will have access to this framework and learn the concepts that will eventually find their way into the GNU Radio codebase.
Development on newsched has been ongoing for over a year, so the codebase has evolved rapidly in that time - thus there are no details for this first changelist. Just consider this the first drop.
- Modular Scheduler Framework
- interfaces based on a single input queue
- default scheduler with N blocks/thread
- Custom Buffers
- YAML-driven Block Workflow
- Consolidated Parameter Access Mechanisms
- Simplified Block APIs
Detailed documentation can be found here
With this release of newsched, you can easily create your own blocks, custom buffers, and even your own scheduler if you are so inclined
Special thanks to Bastian Bloessl and Marcus Müller for leading the effort to architect the runtime and provide guidance as to the design decisions
Also want to acknowledge the Scheduler Working Group who have consulted and provided feedback and ideas on a regular basis about design decisions. I apologize if I have left anyone out here, but another special thanks to: Seth Hitefield, Jeff Long, David Sorber, Mike Piscopo, Jacob Gilbert, Marc Lichtman, Philip Balister, Jim Kulp, Wylie Standage, Garrett Vanhoy, John Sallay, and all the people associated with with the DARPA DSSoC program that shared their research giving valuable insight.
There is much work left to do, so please reach out on chat.gnuradio.org #scheduler room if you would like to get involved