When I write software that I think might be of interest to the public at large (and worth the paperwork hassle for me to release it), I'll put it on this page.
Technically, edif2qmasm converts from the EDIF netlist format, which can be output by various synthesis tools, to the QMASM quantum macro assembly language. (See below.) The benefit of edif2qmasm is that it enables programs to be expressed in a (more-or-less) conventional programming language yet run on exotic quantum-annealing hardware. Programs can be run either forward or backward, which sometimes enables simple programs to be used to solve challenging problems.
See the edif2qmasm GitHub site for more information and for the edif2qmasm source code.
QMASM fills a gap in the software ecosystem for D-Wave's quantum annealers by shielding the programmer from having to know system-specific hardware details while still enabling programs to be expressed at a fairly low level of abstraction. It is therefore analogous to a conventional macro assembler and can be used in much the same way: as a target either for programmers who want a great deal of control over the hardware or for compilers that implement higher-level languages.
See the QMASM GitHub site for more information and for the QMASM source code.
MPI-Bash is a modification to GNU Bash that augment's Bash's set of built-in commands with various MPI functions for communication across multiple Bash processes running on a cluster or supercomputer. MPI-Bash can also be compiled with support for the Libcircle distributed-queue API, which facilitates load-balanced work distribution across Bash processes. The goal of MPI-Bash is to facilitate parallel processing of large numbers of files, such as may be produced from a parallel application.
See the MPI-Bash GitHub site for more information and for the MPI-Bash source code.
Byfl provides a form of software performance
counters
to measure a variety of application performance metrics.
With Byfl, code is instrumented at compile time, but data is gathered
at execution time. This enables Byfl to fill a niche that lies
between hardware-centric approaches such as those taken by
PAPI
and Pin
and source-centric approaches such as those taken by
ROSE. Byfl
can report the types of instructions performed, memory accessed, and
various other code characteristics.
See the Byfl GitHub site for more information and for the Byfl source code.
The Cell Messaging Layer is a communication library for clusters of Cell Broadband Engine processors. It implements a subset of the popular MPI message-passing API on the Cell's SPE processors, with one MPI rank per SPE across any number of Cells and the ability for any SPE to communicate directly with any other SPE, even across a network. The Cell Messaging Layer thereby makes programming clusters of Cell processors similar to programming clusters of conventional CPUs. In addition, the Cell Messaging Layer is extremely fast, providing true message-passing semantics at nearly the speed of the underlying data-transfer hardware.
See the Cell Messaging Layer Web page for more information and for the Cell Messaging Layer source code.
JumboMem provides a low-effort solution to the problem of running memory-hungry programs on memory-starved computers. The JumboMem middleware gives programs access to all of the memory in an entire cluster, providing the illusion that all of the memory resides within a single computer. When a program exceeds the memory in one computer, it automatically spills over into the memory of the next computer. Behind the scenes, JumboMem handles all of the network communication required to make this work; the user's program does not need to be modified—not even recompiled—to take advantage of JumboMem. Furthermore, JumboMem does not need administrator privileges to install. Any ordinary user with an account on a workstation cluster has sufficient privileges to install and run JumboMem.
See the JumboMem Web page for more information and for the JumboMem source code.
A frequently reinvented wheel among network researchers is a suite of programs that test a network's performance. A problem with having umpteen versions of performance tests is that it leads to a variety in the way results are reported. coNCePTuaL is a domain-specific programming language (with associated compiler and other tools) designed to facilitate writing communication benchmarks and reporting the results in as scientific a manner as possible. The language is English-like and easy to read, even by a non-expert in the area of high-performance communication.
See the coNCePTuaL Web page for more information and for the coNCePTuaL source code.
Sometimes a computer seems slow for no particular reason. whatelse helps determine the source of the problem. The program waits quietly for a length of time then reports what happened on the computer while it was waiting. whatelse reports—among other things—process state changes, network activity, memory behavior, and hardware interrupts that occurred.
whatelse is available in the following format:
Note that whatelse is very specific to Linux; it gets virtually all of its information from the Linux /proc filesystem.
Homogeneity is a desirable attribute for workstation clusters used for high-performance computing. However, it can be difficult to ensure that all nodes in the cluster are exactly the same. Nodes may have hung processes, filesystems that failed to mount, modules that failed to load, etc. On very large clusters, there may even be nodes with different CPU speeds or amounts of memory. oddmanout helps find nodes that are different from the rest. The idea is to run a command (or set of commands) on every node of a cluster, find the most common output across all nodes, and report those nodes whose output is different from that.
oddmanout is available in the following formats: