GPI v1 Release

Posted by Nicholas Zwart on Wed 13 January 2016

The GPI version 1-beta is available for download! This version marks some major framework changes with the transition to Python 3, packaging via, PyFI API support for the Eigen template library, mmap based node communication, the BORG interface for binary encapsulation, and JSON based network descriptions to name a few.

Python 3

GPI has moved to Python 3! As GPI development continues we hope to take advantage of the new features offered in Python 3 such as the updated fork server, coroutines, and maybe even some lighthearted type hinting. The core node library has also been updated to work with Python 3. Those who are interested in porting their code to should pay attention to some of the differences in syntax, most notably for print statements and integer division.

Many of the improvements made in GPI v1 are also available in a Python 2 branch of the framework and core node projects (tagged as GPI version 0.6). These can be found on github here.

Conda Packaging

GPI is now available as a conda installer script as well as a preassembled conda stack. GPI can also be installed in an existing conda distro from using the conda command. The move to conda packaging has also given GPI the capability to check for framework and core node updates.

Eigen in PyFI

The Eigen template library has been wrapped in PyFI to add some linear algebra functionality to the C++ API. These new interfaces further facilitate the translation of PyFI code for use in the Philips online reconstruction platform.

Eigen also provides an effective workaround for a bug in the OSX accelerate framework when forking processes.


The use of memory mapped data has further improved the speed and memory usage in the multi-processing regime of node execution. This does not affect the main loop or thread based modes of operation.


The BORG (Building Outside Relationships with GPI) interface has been developed to assist in assimilating the functionality of other software projects for native use in GPI. The interface reduces the coding overhead for generating a communication layer to external command-line programs. This is accomplished by providing wrappers that handle the inputs, outputs and arguments to the system call that executes the external program. The inputs and outputs are handled with temporary files that are managed by the interface. The result allows a GPI developer to quickly encapsulate the functionality of other software projects to be used in conjunction with their own GPI node library for fleet prototyping. Examples of the BORG interface can be found in the BART (Berkeley Advanced Reconstruction Toolbox) and FSL (FMRIB Software Library) projects.


For more information about the updates check out the changelog or just download the latest release at