Libfabric is a high-performance fabric software library designed to provide low-latency interfaces to fabric hardware.

Clang UPC Libfabric Runtime is an implementation of Clang UPC that uses Libfabric API for message passing between UPC threads running on separate nodes in a system area network.

Getting Clang UPC with Libfabric prerequisites

Beside the regular Clang UPC prerequisites, the following is also required in order to build libfabric support:

  • Working libfabric implementation

  • SLURM job manager

  • Add the location of the Libfabric library to the LD_LIBRARY_PATH environment variable. For example,


Getting Clang UPC with Libfabric runtime support

Libfabric development is currently on the branch libfabric. Follow the this steps to build Clang UPC with the libfabric support:

  • Follow the instructions on getting the Clang UPC sources.

  • Checkout the libfabric branch of clang-upc

cd llvm/tools/clang; git checkout libfabric

The following configuration options were added for Libfabric:


Chose libfabric for the runtime support.

  • -DLIBUPC_FABRIC:=path/to/libfabric

Select directory where libfabric is installed.


Select networking device to use. Default is ‘ib0’.

  • -DLIBUPC_FABRIC_PROVIDER:=fabric_provider

Select fabric provider to use. Default is ‘sockets’.


Enable fabric check for shared endpoints. Default is disabled.

  • -DLIBUPC_JOB_PMI_INCLUDE_DIR:=pmi_dir_path

Specify directory where PMI include file is. Default is ‘/usr/include/slurm’.


Alignment for local/target buffers. Default is 4.

Project status

  • 11/13/2015 First RMA test passes on Cray GNI

  • 07/01/2015 Added all remaining UPC functionality

  • 01/01/2015 Added support for upc_global_exit()

  • 12/26/2014 Added UPC barrier (no trigger funcs)

  • 12/26/2014 Added broadcast capabilities

  • 12/24/2014 Added UPC locks

  • 10/28/2014 Upgrade to the latest libfabric API

  • 10/17/2014 Added support for remote put/get

  • 9/01/2014 Add libfabric configuration

More information on Libfabric