The Liquid Metal project at IBM aims to address the difficulties that programmers face today when developing applications for computers that feature programmable accelerators (GPUs and FPGAs) alongside conventional multi-core processors. Liquid Metal offers a single unified programming language called Lime and a runtime that allows (all) portions of an application to move fluidly between hardware and software, dynamically and adaptively.
Computers today are made up of processors that are general-purpose as well as processors that are programmable but special-purpose. Examples of the latter include graphics processors (GPUs) and reconfigurable fabrics such as FPGAs (field programmable gate arrays).
Programmers are faced not only with the challenge of writing efficient code for general-purpose processors that are now multi-core architectures, but also find themselves facing completely different programming models and languages for GPUs and FPGAs.
For programming GPUs, a programmer might use OpenMP, OpenCL, or CUDA. OpenCL is an increasingly popular approach because it is backed by a standard specification, and a number of processor vendors are actively supporting OpenCL on their architectures.
FPGAs on the other hand lack a single programming standard that is considered sufficiently high-level and accessible to skilled software programmers. Instead, the predominant practice is to write code in hardware description languages such as Verilog, VHDL, or Bluespec. The semantic gap between these languages, and high level object-oriented languages such as C++ or Java is quite wide, leaving FPGAs largely inaccessible to software developers.
Liquid Metal offers a single unified programming language (Lime) and runtime for programming hybrid computers comprised of multi-core processors, GPUs, and FPGAs. The increasing availability of such computing platforms makes for an exciting opportunity where high-performance and low-power computing can be realized by skilled software programmers in a single language and semantic domain. Lime extends a familiar imperative programming model with functional programming, stream computing, bit-level processing, and conveniences derived from hardware description languages.