We use functional programming to solve problems in ways that are amicable to acceleration (GPUs, Multi-cores, FPGAs), remote deployment (Embedded devices, FPGAs, cloud computing), and supports assurance arguments (using semi-formal methods like equational reasoning). As a group we make aggressive use of functional languages, extending the technology where needed, and ultimately strive to close gaps between high level specifications and highly efficient implementations. We then deploy our new technologies into diverse application areas, including telemetry, high performance computing and real-time systems.

Our operating assumption is that a well written functional program can perform effectively as a concise executable specification of a solution to a problem. However, the scope and influence of our ideas is intended to be broader than simply their use inside our functional language community.

Funded Research

Project Funded
by
Period of
Performance
Investigators Amount
CAREER: Filling the Gaps in Domain-Specific
Functional-Based Solutions for
High-Performance Execution
NSF Jun 2014 -
Apr 2019
Andrew Gill (PI) $521,201
Armored Software DoD Sep 2013 -
Sep 2017
Perry Alexander (PI)
Andrew Gill
Prasad Kulkarni
$2,708,071
Improving the Applicability of Haskell-Hosted
Semi-Formal Models to High Assurance
Development
(The HERMIT Project)
NSF Aug 2011 -
Jul 2015
Andrew Gill (PI) $527,750
High-Rate High-Speed Forward Error
Correction Architectures for
Aeronautical Telemetry
(HFEC)
DoD May 2009 -
Aug 2011
Erik Perrins (PI)
Andrew Gill
$799,267

Overview of Research

It is possible to write specification style, high-level implementation (or model) in our language of choice, Haskell, as well as in other languages. This model may be relatively efficient as a model, but be completely unsuitable for deployment. The model may lack specific fidelity details, or be intended for a platform with a small footprint, or deployment may have unrealizable throughput requirements. All of these concerns can be addressed, and addressed from within our language of choice, but at the cost of compromising the clarity of the original specification.

It is also possible to write very fast programming in Haskell, or programs that use finite heap, so could be run on an embedded platform, or can be captured using a technique called deep embedding, so they could be cross compiled onto alternative platforms like FPGAs or graphics cards. However, each of these techniques fundamentally compromised some level of clarity, and therefore negating one of the reasons to use a functional language in the first place.

As a group, we want to be able to use functional programming language technology as a bridge between both these programming styles, or more generally between specification and implementation.

Other Sponsors

We would like to thank our other sponsors for supporting our research.

  • NVIDIA for donating a K-20 GPGPU to FPG@KU.
  • International Foundation for Telemetering (IFT) for funding for hardware, travel and student scholarships.
  • Xilinx for software and hardware through the Xilinx University Program.
  • Altera for software and hardware through the Altera University Program.