What is Habanero C?

The Habanero programming model is a shared-memory, task-parallel programming model whose fundamental constructs include lightweight tasks, future-based inter-task dependencies, parallel loop constructs for efficient creation of large numbers of tasks, phasers for lightweight synchronization, and places for locality control.

Habanero-C (HC) generally refers to compiled implementations of the Habanero programming model (in contrast to implementations on top of managed runtimes, such as Habanero-Java or Habanero-Scala). Past work has explored directly supporting the Habanero programming model as extensions to the C programming language as part of the Habanero-C Language project (HClang). Projects under the Habanero-C umbrella fundamentally target high-performance and scientific computing workloads.

Current work focuses on exploring library-based implementations of the Habanero programming model as part of the Habanero-C Library project (HClib). HClib can be found open-source on Github.

What distinguishes Habanero C from other shared-memory parallel programming systems?

In many ways, the Habanero-C programming model will be familiar to any programmer with experience in task-based development (e.g. in OpenMP, Cilk, the Java Fork-Join framework).

One guiding principle of the Habanero C projects is to always provide a sane default for system behavior, but to facilitate tuning by the user. The API should be easy to use, the runtime should just work out of the box, but the user should also be able to take an initial HC implementation that was easy to build and incrementally apply optimizations to it.

A second guiding principle of the HC projects is repeatability of performance. The programming model and runtime should offer abstractions that are useful for programmability, but not be so heavyweight as to make diagnosis or repeatability of system behavior impossible.

Third, HC also focuses on composability with other programming systems. High-performance scientific workloads require tight-knit cooperation between all system components, including network, storage, accelerators, and processing units. Ignoring composability with the rapidly changing software landscapes for each of these hardware components would make the HC projects unsuitable for real-world workloads.

How do I install HClib?

Installation instructions for the most active HC project, HClib, are available from the HClib Github.

Where can I go to learn about programming HClib?

The development of a HClib tutorial is in-progress, and will be posted on this site when complete.