Hackfest1403-2

= Hackfest March 2014 at Ettus Research =

Nathan West: Perf Counters and Monitor Enhancements

 * Added new performance counters
 * CPU cycles
 * branch instructions
 * branch misses
 * cache references
 * Uses same interface as used by perf; built in support to Performance Counters
 * Updated the gr-perf-monitorx:
 * Can select which perf counter the block size is based on (currently, only reps work time counter)
 * Tooltip popup for each block to show all PCs

Example:



WIP: https://github.com/n-west/gnuradio/tree/linux-perf-counters

Todo:


 * Make platform independent (ifdef out for OSX and Windows for now)
 * Make sure we know the kernel requirements; check for them
 * Test on ARM and any other platforms we can
 * Add percent of total to tooltip popup

By GRCon14, have some success case and walk-through on how to use them. Take a block and get performance counter info; identify the areas that need work, fix them, and show that that changes the counters.

Tom Rondeau and Nick McCarthy

 * Focused on integrating fecapi from https://github.com/namccart/fecapi into GNU Radio as part of gr-fec.
 * Allows us to use an &quot;encoder&quot; and &quot;decoder&quot; block in a flowgraph.
 * encoding and decoding for specific codes are passed as objects to these blocks
 * GR blocks take care of things related to codes but not specific to any specific code
 * puncturing
 * threading models: 'capillary' is the default as a way to branch the threading model
 * We have convolutional codes (rate=2, K=7) working
 * Working on getting LDPC working from last GSoC as FECAPI-compatible
 * Been in touch with Manu and Tracie to see about competing this
 * Shown the CC working with a GNU Radio modem over a simulated channel
 * Future Work
 * Near term:
 * Wrap up work done to integrate FECAPI; fix up some of the function calls
 * DOCUMENTATION
 * Clean up new work done to make detection and soft decision modems work with FEC blocks
 * Longer term:
 * More codes: Reed-Solomon as outer code; LDPC; others
 * Ability to adjust codes are runtime

Nick Foster

 * Improving MSK handling
 * MSK correlator block for burst sync
 * extension of correlate_and_sync for MSK (with Gaussian filter)
 * Set BT=5 (i.e., some large number) for MSK
 * New MSK timing synchronization block
 * HDLC framer and deframer
 * already issued a pull request (172

Tom Tsou (not GNU Radio specific)

 * Showed an LTE 20 MHZ signal receiver
 * Showed timing recovery with Zadoff-Chu
 * sub-banded to ~1 Msps
 * Showed off his 3GPP approved &quot;butterfly&quot; channel model
 * two antennas connected to a USRP moved up-and-down rapidly
 * Also used handcar model
 * USRP on a cart pushed back and forth
 * QAM64 received signal in realtime



Ben Reynwar

 * hierblocks for PFB channelizers (for threading control)
 * pull request 180
 * working on synthesizers
 * want: hier block for building reconstruction filters
 * Develop a model to autobuild a channelizer for for different channels and channel sizes
 * Related to Tom Rondeau's recent paper
 * The main trick will be in defining the channel structure

John Malsbury and Balint Seeber

 * worked on gr-mac (formerly gr-precog migrated to 3.7)
 * Support for:
 * ARQ
 * fragmenting
 * ARP
 * TUN/TAP or raw socket interface
 * Passing PDUs to higher layers
 * Showed OTA
 * played BZTank (or BZFlag) over GR link
 * Balint issued a number of pull request patches to improve GR's support for gr-mac

Here's Balint and John showing off their work.



Philip Balister

 * Improving OpenEmbedded support for GNU Radio
 * fixed issue with missing libgnuradio-xxx.so (without version)
 * almost fixed swig2.0 (CMake looks for swig2.0 before swig; confusing things)
 * This work will allow us to use the SDK to build both GNU Radio and GR OOT projects

Michael Dickens

 * OSX cpu-thread affinity work:
 * Determined that OSX kernel (mach / darwin), while providing an API for thread-cpu affinity, really-truly does not actually implement the functionality for doing so;
 * The provided API functions are &quot;processor_set_create&quot; and &quot;processor_set_destroy&quot; from processor.c, and &quot;thread_assign&quot; from thread.c;
 * There is one &quot;CPU set&quot; (global &quot;pset0&quot; from processor.c) which contains all active processors;
 * Threads are assigned to active processors in the global CPU set as determined by the selected scheduling protocol (e.g., FIFO, RR) only;
 * User (even as sudo) has no control over thread-cpu assignments;
 * Work abandoned; no need to address this issue again! !@#% Apple ...


 * 3 pull requests to GR maint, with 5 fixes including ticket #660


 * Started addressing the &quot;two-clock&quot; problem:
 * See, e.g., this thread on the GR discussion list
 * When more than 1 sink/source is sample-rate based (e.g., audio source -&gt; uhd sink);
 * Actual sample rates will generally be close to those specified, but can easily be different by an unknown amount;
 * When the sample rates differ, the flow graph will either eventually starve (sink is going faster than source), or back-pressure (source is going faster than sink);
 * Proposed solution:
 * Embed an arbitrary resampler to adjust the rates of a hardware source/sink once data is in the SDR flow-graph, or, if possible, using the hardware itself (e.g., OSX audio can do this easily);
 * 1 input, 1 output; watch buffer &quot;fullness&quot; and try to keep within &quot;reasonable&quot; bounds (e.g., 25% to 75% full);
 * Would be completely optional, disabled by default, enabled by user preference variable (name is to be decided);
 * Implemented as a block inserted automatically between hardware source/sink and the next block, 1 input / 1 output;
 * Inserted in flat_flowgraph or block_executor;
 * Work in progress.

Tim O'Shea

 * Focused on understanding the differences and uses of tagged stream blocks versus/with message PDUs
 * Performance measurement and comparisons of equivalent tagged stream blocks and message blocks https://github.com/osh/gr-chunky
 * Fix pmt's to_python and from_python methods for numpy arrays and uniform vectors for all supported types
 * Looking into problem of flow control in message passing system
 * Borrowed Phil's ODroid XU to add Arm-A15 benchmarks to http://stats.gnuradio.org/
 * Worked on improved TDMA burst modem capabilities along with updated message-enabled eventstream blocks
 * Built and posted a set of fpdu and cpdu plotting message blocks to be used in QT Guis https://github.com/osh/gr-pyqt