Greetings GNU Radio Community!

Release 3.10 is expected to drop sometime in the new year, but to get the
ball rolling with testing and packaging - we are expecting a longer than
usual Release Candidate cycle, and likely there will be *at least* one more
RC, so here is v3.10.0.0-rc1
<https://github.com/gnuradio/gnuradio/releases/tag/v3.10.0.0-rc1>

We have been fortunate this year to have extremely active backporting and
consistent maintenance releases from co-maintainter Jeff Long - so many of
the fixes and smaller feature (and larger ones) have already seen the light
of day in the 3.9.x.x and even 3.8.x.x releases.  Here are some of the
bigger features that are bringing about this major release.

*gr-pdu*
PDUs (protocol data units) in GNU Radio are a special type of PMT that have
a dictionary and a uniform vector type representing a burst of data with
some metadata.  Up to this point, support of pdus has been scattered
throughout the codebase with minimal support for handling this type of data
consistently.  Fortunately, Jacob Gilbert has been able to upstream much of
the amazing work from himself and the team at Sandia National Labs which
brings in-tree a suite of tools for manipulating these data objects (see
https://github.com/sandialabs/gr-pdu_utils).  Also, many of the previous
PDU processing blocks that existed in other in-tree modules have been
migrated to this module, so there has been some block re-arrangement.
Please see https://www.youtube.com/watch?v=bT60hVVte48 for more detailed
information

*gr-iio*
IIO is the industrial I/O framework that provides an industry standard
method for communicating with a wide-range of devices including many of the
ADI SDR platforms.  Analog Devices has supported out of tree a gr-iio
module that brings this capability into GNU Radio and now upstreamed this
module so support for devices like the PlutoSDR are available out of the
box.  Special thanks here to Adam Horden, Travis Collins, Dave Winter,
Volker Shroer, and Jeff Long for bringing this in-tree and working through
many of the complexities.
Please see https://www.youtube.com/watch?v=2gKbollW6wg for a more technical
description of IIO and gr-iio.

*Custom Buffers Support*
NOTE: this is an advanced "experimental" feature that if not actively
employed will not affect normal GNU Radio usage.
David Sorber from Black Lynx has introduced a feature that enables
streamlined data movement between GNU Radio blocks and hardware
accelerators.  By creating a "custom buffer" class (or using one that is
provided by someone else), blocks can be made to abstract the data movement
behind the scenes so that when the `work` function is reached, data already
exists in the device memory.
Let me give a quick example - previously if you wanted to write a GPU
accelerated block with CUDA, you would have to get into the work function,
move the data from the GNU Radio circular buffers to GPU device memory,
execute the CUDA kernels, then move the data back to GR buffers.  Now that
data movement is done behind the scenes if the block is set up right so
that when the work function is hit, the data is in GPU device memory and
will get transferred back to CPU memory behind the scenes as well.  This
allows back to back HW accelerated blocks to not have to ingress/egress in
and out of GR memory unnecessarily.  Also, the single mapped buffer
abstraction brings huge performance benefits as can be seen here:
https://www.youtube.com/watch?v=VO1zMXowezg for a much better description
 For examples of this in action, please see the following repositories:
https://github.com/BlackLynx-Inc/gr-cuda_buffer
https://github.com/BlackLynx-Inc/gr-blnxngsched
This out of tree support will soon find its way into the gnuradio github
repo as a set of CUDA buffers and blocks.

*Logging Infrastructure*
Log4CPP has previously been our logging backend library, but has become a
troublesome dependency.  A huge thanks to Marcus Müller for fixing all of
this up, replacing Log4CPP with spdlog - a more modern logging library.
This also opens up the door for more modern logging statements that don't
rely on Boost.format, and libfmt (which is now also a dependency) can be
used for general string manipulation as well.  All the previous methods and
macros still exist (except for the log4cpp specific ones), but there is now
new capability to log in a more convenient way using the libfmt statements.

Old: GR_LOG_INFO(this->d_logger, boost::format("this happened: %d") % code)
New: this->d_logger->info("this happened {:d}", code)

As always, please reach out here or on chat.gnuradio.org if you have any
questions - and file GitHub issues if you find bugs or problems with the
release.  The step from 3.9 should be pretty minimal, but if you are
migrating your OOTs - please update the porting guide if you come across
differences that need to be documented:
https://wiki.gnuradio.org/index.php/GNU_Radio_3.10_OOT_Module_Porting_Guide

Have a happy Holiday season and much thanks to all who have contributed
toward this next major release.

Josh

Reply via email to