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,

LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/libfabric/lib"
export LD_LIBRARY_PATH

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:

  • -DLIBUPC_RUNTIME_MODEL:=fabric

Chose libfabric for the runtime support.

  • -DLIBUPC_FABRIC:=path/to/libfabric

Select directory where libfabric is installed.

  • -DLIBUPC_FABRIC_DEVICE:=ib_device

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

  • -DLIBUPC_FABRIC_PROVIDER:=fabric_provider

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

  • -DLIBUPC_FABRIC_SHARED_CTX:=0/1

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’.

  • -DLIBUPC_MEMORY_ALIGNMENT:=4

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