Clang UPC Libfabric Runtime
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
- Follow the instructions on configuring the Clang UPC.
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