Skip to content
This repository has been archived by the owner on Jul 19, 2022. It is now read-only.

Latest commit

 

History

History
295 lines (242 loc) · 11.1 KB

CHANGELOG.md

File metadata and controls

295 lines (242 loc) · 11.1 KB

Changelog

All notable changes to newsched will be documented in this file.

The format is based on Keep a Changelog

[0.5.0] - [2022.07.18]

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

Project-wide

  • work() signature changed to pass reference to work_io type which wraps input and output structs
  • port becomes a unique pointer owned by the block
  • buffer becomes unique pointer owned by the port object (output port)

Blocks

  • Tag strobe block
  • Delay block propagate tags

Modtool

  • Only process block directory if yml file exists

CI

  • Ubuntu 22 worker
  • Enforce clang formatting

[0.4.0] - [2022.06.23]

  • 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

[0.3.0] - [2022.04.29]

New Dependencies

  • CLI11 (as subproject)
  • nlohmann::json (as subproject)
  • cpp-httplib (as subproject)
  • cppzmq (as subproject)
  • CUSP (optional, if cuda_enabled == true)
  • PMTF (subproject, use latest)

Project-wide

  • 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 to shape for .yml ports
  • move blocks from blocks to streamops per GREP 0020
  • use size_t where preferable (such as block_work_io)

Kernel Lib:

  • 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)

analog

  • sig_source - with top level enums
  • noise_source - with top level enums
  • quadrature demod block

audio

  • 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

blocks

  • msg_forward block and associated benchmark test
  • make message ports on msg_debug block optional

fft

  • replace boost::file_lock with custom (copied) implementation

fileio

  • allow size deduction for src, sink blocks

filter

  • fir_filter block
  • iir_filter block
  • update channelizer block to expect deinterleaved input (like in GR 3.X)

streamops

  • 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

zmq

  • PUSH, PULL, REQ, REP, PUB, SUB blocks
  • msgport versions
  • updated tag passing mechanism with pmtf based tags
  • port size deduction on zmq blocks

gr

  • 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

docs

  • doc on creating block
  • build doc tag from .yml into the python bindings
  • update doxygen build

blockbuilder

  • use vector types for grc templates
  • populate template instantiations and grc for specific type combos
  • 3 way templating for blocks
  • change cmd port to param
  • simplified typekeys, no more suffix, use sigmf data types
  • add unsigned types to lookups

"modtool"

  • 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 of ns-module)
  • remove unnecessary options

grc

  • 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

[0.2.0] - [2021.12.09]

meson build

  • Add .gitignore explicitly where autogeneration is expected rather than a global filter

runtime

  • 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
  • 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

qtgui

  • Update fft and filter blocks to allow for function qtgui

grc

  • 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

blocks

  • Fixed bug in throttle that was causing flowgraph to hang

soapy

  • Restructure the code generation to allow multiple GRC files from a single block yaml
  • Generate a .grc block for RTL-SDR and HackRF

Scheduler-NBT

  • Update the logic to "kick" the scheduler when input has been blocked

[0.1.1] - [2021.11.11]

Didn't take long to require a patch from the first release

runtime

  • Propagate dependencies through meson
    • not having this was causing build issues on Fedora

blocklib

  • Adds some missing include files

[0.1.0] - [2021.11.11]

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.

Core Features

  • 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