SSRG


Home

People

Projects

Papers

Contact Info

Filaments and Cable

Filaments

Filaments is a library package that can be used to create architecture-independent parallel programs---that is, programs that are portable efficient across vastly different parallel machines. Filaments virtualizes the underlying machine in terms of the number of processors and the interconnection. This simplifies parallel program design in two ways. First, programs can be written (or generated) with the focus on the parallelism inherent in the application, not the architecture. Second, programs can be written that use familiar shared-variable communication. Furthermore, Filaments uses a carefully designed API along with machine-specific runtime libraries and preprocessing that allow programs to run unchanged on both shared- and distributed-memory machines. Most importantly, applications programmed in Filaments run efficiently.

The home page for the Filaments Project is here.

Cable

Filaments for a distributed memory machine (Distributed Filaments) uses a multithreaded software distributed shared memory (SDSM), which we call Cable. It was the first multithreaded SDSM. Multithreading is critical to efficiency because it permits the overlapping of communication and computation. This is doubly important in a SDSM because remote data is requested on demand. Without the abililty to overlap, a remote request would be prohibitively expensive.

Cable also supports multiple page consistency protocols (PCP). There are many different sharing/access patterns in applications. Consequently, a single protocol cannot be ideal for all applications. In a Cable, a protocol guards each page containing application data. The application selects the protocol for each page. It may employ multiple protocols simultaneously. This is quite useful because within an application the ideal protocol varies among data structures.

At least the following PCPs have been implemented.

  • Migratory -- single copy; migrates to whomever is accessing.
  • Write invalidate -- multiple reader, single writer.
  • Implicit invalidate -- optimization of write invalidate.
  • Eager release consistency -- write shared; multiple writer
  • Home-based lazy release consistency -- write shared; multiple writer
  • Writer owns -- moves data to dynamically eliminate false sharing.

Support

Support for our work is/has come from the following
  • NSF CAREER Award: Collaborative Memory
  • HTMT Project
  • Notre Dame Faculty Development Award