Skip to content

Releases: project-rig/rig

v0.11.0

16 Dec 19:54
Compare
Choose a tag to compare
v0.11.0 Pre-release
Pre-release
New Features
------------

* A new get_chip_info method has been added to MachineController which
  efficiently fetches the number of working cores, the set of working links,
  the quantity of SDRAM and SRAM free and the AppState of every core.

* A new get_system_info method has been added to MachineController which calls
  get_chip_info on every core in a machine (in a fault-tolerant manner)
  producing a SystemInfo object. SystemInfo objects are dictionaries containing
  the ChipInfo object for each chip in the system. They also contain a number
  of useful iterators for iterating over working/dead chips, links, and cores.
  This call is intended to replace the now-deprecated get_machine method (see
  notes later in the changelog for details) and provides a superset of the
  information previously provided in less time.

* A new rig.place_and_route.place_and_route_wrapper replaces the now-deprecated
  rig.place_and_route.wrapper which accepts SystemInfo objects instead of
  Machines. The new wrapper automatically reserves all non-idle cores,
  including monitors and other running applications, allowing Rig applications
  to peacefully coexist on the same machine. Further, the SDRAM and SRAM
  resources supplied to the place-and-route system now reflect the amount of
  free SDRAM and SRAM actually available on each chip.

* Two new place-and-route utility functions in rig.place_and_route.utils are
  provided, build_machine and build_core_constraints which translate a
  SystemInfo object into the standard place-and-route Machine and
  ReserveResourceConstraint data structures. These functions are used by the
  new place_and_route_wrapper function and are the preferred way of acquiring
  Machine objects and constraints for reserving monitor processors etc. for
  place and route in new code.

* The efficiency of the load_application method of MachineController has been
  improved for some cases.

API Deprecations
----------------

A number of minor API changes have been introduced in the name of more
appropriately dividing place-and-route and machine control parts of the API.
The deprecated APIs will remain for backwards compatibility but may be removed
in the future. Developers are strongly encouraged to update their code to use
the new APIs. Use of any deprecated API will produce a DeprecationWarning which
are displayed when running Python with the -Wd command line option.

* The rig.machine module has been deprecated and its contents moved to better
  reflect the uses of these structures:

  - rig.machine.Links -> rig.links.Links
  - rig.machine.Machine -> rig.place_and_route.Machine
  - rig.machine.Cores -> rig.place_and_route.Cores
  - rig.machine.SDRAM -> rig.place_and_route.SDRAM
  - rig.machine.SRAM -> rig.place_and_route.SRAM

* The get_machine method of MachineController has been deprecated since the
  structure it returns is designed primarily for use during place-and-route and
  is not a good fit for general system information gathering. Users should
  instead use the new get_system_info method which provides a superset of the
  information returned by get_machine. The new
  rig.place_and_route.utils.build_machine function is now the preferred way to
  construct a Machine object representing the state of a SpiNNaker machine for
  place-and-route.

  Further, with the arrival of the build_core_constraints utility it is now
  possible (and desirable) to automatically produce ReserveResourceConstraint
  which reserve all cores (including monitors) which are not idle. By using
  get_system_info in place of get_machine only one query needs to be sent to
  the system to generate a Machine and generate constraints.

* The rig.place_and_route.wrapper function has been deprecated in favour of
  rig.place_and_route.place_and_route_wrapper. This new wrapper function has an
  almost identical API to the old wrapper but accepts a SystemInfo object
  and internally derives a suitable Machine and set of
  ReserveResourceConstraints based on this. Unlike the old wrapper, this
  wrapper function will not use any cores which are already in use, not just
  the monitor processor. An additional benefit is that when this function is
  imported on its own its name is far more appropriate.

Bug-fixes
---------

* The new version of SC&MP included in this release now correctly frees all
  resources when the 'stop' signal is sent. Previous versions of SC&MP did not
  remove routing table entries or free SDRAM on chips where no applications had
  been loaded. As a result of this fix workaround code in Rig has been removed
  which means that sending the 'stop' signal should now be nearly instant
  compared with previous versions.

v0.10.1

03 Dec 09:54
Compare
Choose a tag to compare
v0.10.1 Pre-release
Pre-release
New features
------------

* Added `write_across_link` and `read_across_link` methods to MachineController
  to allow low-level PEEK and POKE commands to be sent to chips for debug
  purposes.
* Added `discover_connections` method to MachineController which discovers
  other Ethernet connected chips in a machine and then uses them when
  communicating with chips on the same board as the Ethernet connection. This
  features offers only a mild performance improvement at present but is a step
  in the larger plan to introduce high-throughput parallel IO to rig's API.

Documentation improvements
--------------------------

* Add examples of sending and receiving SDP/SCP packets to a running
  application.
* Add links to source code on GitHub in Sphinx documentation.
* Add documentation for RouterDiagnostics
* Improve documentation for sdram_alloc{,_as_filelike}
* Improve documentation for MachineController exceptions.
* Numerous other minor documentation improvements.

v0.10.0

04 Nov 08:12
Compare
Choose a tag to compare
v0.10.0 Pre-release
Pre-release
Breaking changes
----------------

* The `MachineController.boot()` method now only boots machines which are not
  already booted and ensures that the machine is responsive after booting. This
  change is considered 'breaking' since the command now (by default) results in
  SCP packets being sent to the machine and (by default) the method can now
  raise an exception on failure. The old behaviour can be achieved by setting
  the new `only_if_needed` and `check_booted` arguments to `False`.

Other Improvements
------------------

* The `SCPPacket` and `SDPPacket` constructors now have sensible default
  arguments which make their use for application sending/receiving simple
  SCP/SDP traffic much more straight-forward and boiler-plate free.
* The hilbert placement algorithm has been refactored and the underlying
  sequential placement algorithm, breadth-first vertex ordering heuristic and
  hilbert curve chip ordering have been split up.
* The hilbert algorithm now takes a `breadth_first` argument which if set to
  False will make the algorithm place vertices in the iteration order of
  `vertices_resources` making the algorithm run faster at the expense of
  (potentially) less sensible vertex ordering. This may be useful for
  applications whose communication needs are uniform random or extremely light.
* A new sequential placement algorithm is provided which by default does
  raster-scan placement but can be used as the basis for alternative sequential
  placement processes (e.g. it is now used by the hilbert placer and the new
  breadth_first placer).
* A new breadth_first placement algorithm is provided which fills the machine
  in a raster-scan fashion but placing vertices in a breadth-first traversal of
  the application graph. This may be used as-is or extended with a
  custom-chip-traversal order (as in the hilbert placer).
* Some minor typographical issues in the documentation have also been fixed.

v0.9.0

02 Nov 13:10
Compare
Choose a tag to compare
v0.9.0 Pre-release
Pre-release
Breaking changes:

* Disallow repeated keys and masks in build_routing_tables. This prevents
  accidental creation of loops in certain cases.

Other changes:

* Fix documentation build requirements for Python 3.5+
* Minor documentation fixes

v0.8.2

26 Oct 15:24
Compare
Choose a tag to compare
v0.8.2 Pre-release
Pre-release
* Add `fill` method to MachineController to allow memory blocks to initialised
  to a fixed value.
* Add `clear` argument to MachineController's sdram_alloc and related methods
  which zeros out newly allocated memory.
* Replaces a custom work-around in setup.py to ensure enum34 is not installed
  on Python >= 3.4 with a requirement on `enum-compat`, a virtual package which
  does achieves this goal.
* Fixes metadata in setup.py to denote Python 3.5 support.

v0.8.1

05 Oct 10:21
Compare
Choose a tag to compare
v0.8.1 Pre-release
Pre-release
Python 3.5 support:

* Python 3.5 is now officially supported by Rig.
* Python 3.4 will remain officially supported for a short time as it is still
  widely used on various Linux distributions. Support will be dropped as soon
  as this is no longer the case.
* The enum34 backport library is no longer a dependency when installing on
  Python 3.4 and onwards.

Bug fixes:

* Fixes bug in the write buffering feature of the MachineControler. A side
  effect of this was noticing that nobody is actually using this feature and so
  it is now being considered for removal before Rig 1.0.

Other internal miscellany:

* Some dead code removed from the NER router.
* Minor changes to docstring utility module tests for 3.5 support.
* A slightly modified testing procedure is required as a workaround for issues
  with Pytest in Python 3.5. Travis and Tox will automatically use the new
  testing procedure, manual testers should see commit 7851cc5 for details. This
  workaround will be reverted as soon as the bug is fixed.

v0.8.0

16 Sep 13:48
Compare
Choose a tag to compare
v0.8.0 Pre-release
Pre-release
* Adds SameChipConstraint to the place and route toolchain allowing vertices to
  be constrained to the same physical chip so that they can share on-chip
  resources.

v0.7.0

11 Sep 13:13
Compare
Choose a tag to compare
v0.7.0 Pre-release
Pre-release
* Include (a minor derivative of) SCAMP 1.34. Previously included 1.33. These
  two releases *should* be binary compatible for applications... Apparently...
* Use "flood-fill core select packets" when loading applications. This makes
  use of a feature added in the included version of SCAMP which allows the
  application loading process to only send out each application binary once, no
  matter how many regions are required to enumerate all cores required. This
  yields substantial speedups in applications using large or irregular sets of
  cores.

v0.6.4

20 Aug 09:12
Compare
Choose a tag to compare
v0.6.4 Pre-release
Pre-release
* Improve rig utility script documentation.

v0.6.3

19 Aug 09:27
Compare
Choose a tag to compare
v0.6.3 Pre-release
Pre-release
* Fixes a bug requring write-access to APLX files to load.