Skip to content

Commit

Permalink
Adding C-bindings of mpibind
Browse files Browse the repository at this point in the history
  • Loading branch information
eleon committed Jul 22, 2020
0 parents commit df581c2
Show file tree
Hide file tree
Showing 26 changed files with 17,702 additions and 0 deletions.
21 changes: 21 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2020, Lawrence Livermore National Security, LLC

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
21 changes: 21 additions & 0 deletions NOTICE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
This work was produced under the auspices of the U.S. Department of
Energy by Lawrence Livermore National Laboratory under Contract
DE-AC52-07NA27344.

This work was prepared as an account of work sponsored by an agency of
the United States Government. Neither the United States Government nor
Lawrence Livermore National Security, LLC, nor any of their employees
makes any warranty, expressed or implied, or assumes any legal liability
or responsibility for the accuracy, completeness, or usefulness of any
information, apparatus, product, or process disclosed, or represents that
its use would not infringe privately owned rights.

Reference herein to any specific commercial product, process, or service
by trade name, trademark, manufacturer, or otherwise does not necessarily
constitute or imply its endorsement, recommendation, or favoring by the
United States Government or Lawrence Livermore National Security, LLC.

The views and opinions of authors expressed herein do not necessarily
state or reflect those of the United States Government or Lawrence
Livermore National Security, LLC, and shall not be used for advertising
or product endorsement purposes.
60 changes: 60 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
## A Memory-Driven Mapping Algorithm for Heterogeneous Systems

**mpibind** is a memory-driven algorithm to map parallel hybrid
applications to the underlying hardware resources transparently,
efficiently, and portably. Unlike other mappings, its primary design point
is the memory system, including the cache hierarchy. Compute elements
are selected based on a memory mapping and not vice versa. In
addition, *mpibind* embodies a global awareness of hybrid programming
abstractions as well as heterogeneous devices such as accelerators.

### Getting Started


### Contributing

Contributions for bug fixes and new features are welcome and follow
a fork/pull model: Contributors develop on a branch of their
personal fork and create pull requests to merge their changes into the
main repository.

### Authors

*mpibind* was created by Edgar A. León.

#### Citing *mpibind*

To reference *mpibind* in a publication, please cite one of the
following papers:

* Edgar A. León and Matthieu Hautreux. *Achieving Transparency Mapping
Parallel Applications: A Memory Hierarchy Affair*. In International
Symposium on Memory Systems, MEMSYS'18, Washington, DC,
October 2018. ACM.

* Edgar A. León. *Mapping MPI+X Applications to Multi-GPU
Architectures: A Performance-Portable Approach*. In GPU Technology
Conference, GTC'18, San Jose, CA, March 2018.

* Edgar A. León. *mpibind: A Memory-Centric Affinity Algorithm for
Hybrid Applications*. In International Symposium on Memory Systems,
MEMSYS'17, Washington, DC, October 2017. ACM.

* Edgar A. León, Ian Karlin, and Adam T. Moody. *System Noise
Revisited: Enabling Application Scalability and Reproducibility with
SMT*. In International Parallel & Distributed Processing Symposium,
IPDPS'16, Chicago, IL, May 2016. IEEE.

[Bibtex file](doc/mpibind.bib).


### License

*mpibind* is distributed under the terms of the MIT license. All new
contributions must be made under this license.

See [LICENSE](LICENSE) and [NOTICE](NOTICE) for details.

SPDX-License-Identifier: MIT.

LLNL-CODE-812647.
47 changes: 47 additions & 0 deletions doc/mpibind.bib
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@

## mpibind for two-level memory systems
@InProceedings{ leon.memsys18,
author = {Edgar A. Le{\'o}n and Matthieu Hautreux},
title = {Achieving Transparency Mapping Parallel Applications: A Memory Hierarchy Affair},
booktitle = {International Symposium on Memory Systems},
series = {MEMSYS'18},
publisher = {ACM},
address = {Washington, DC},
year = {2018},
month = oct
}

## mpibind for multi-GPU systems
@InProceedings{ leon.gtc18,
author = {Edgar A. Le{\'o}n},
title = {Mapping {MPI+X} Applications to Multi-{GPU} Architectures: A Performance-Portable Approach},
booktitle = {GPU Technology Conference},
series = {GTC'18},
address = {San Jose, CA},
year = {2018},
month = mar
}

## The initial mpibind algorithm
@InProceedings{ leon.memsys17,
author = {Edgar A. Le{\'o}n},
title = {{mpibind}: A Memory-Centric Affinity Algorithm for Hybrid Applications},
booktitle = {International Symposium on Memory Systems},
series = {MEMSYS'17},
publisher = {ACM},
address = {Washington, DC},
year = {2017},
month = oct
}

## Using mpibind to reduce system noise through thread specialization
@inproceedings{ leon.ipdps16,
author = {Edgar A. Le{\'o}n and Ian Karlin and Adam T. Moody},
title = {System Noise Revisited: Enabling Application Scalability and Reproducibility with {SMT}},
booktitle = {International Parallel \& Distributed Processing Symposium},
series = {IPDPS'16},
publisher = {IEEE},
address = {Chicago, IL},
year = {2016},
month = may
}
61 changes: 61 additions & 0 deletions src/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@

UNAME = $(shell uname)
BASIC_CFLAGS = -Wall -Werror

HWLOC_CFLAGS = $(shell pkg-config --cflags hwloc)
HWLOC_LDLIBS = $(shell pkg-config --libs hwloc)

# Building libmpibind
VER = 1
MIN = 0
REL = 1
MPIBIND_LIB = libmpibind.so
MPIBIND_SONAME = $(MPIBIND_LIB).$(VER)
MPIBIND_FNAME = $(MPIBIND_SONAME).$(MIN).$(REL)

# Using libmpibind
MPIBIND_DIR = $(shell pwd)
MPIBIND_CFLAGS = -I$(MPIBIND_DIR) $(HWLOC_CFLAGS)
MPIBIND_LDLIBS = -L$(MPIBIND_DIR) -lmpibind $(HWLOC_LDLIBS)
ifeq ($(UNAME),Linux)
MPIBIND_LDLIBS += -Wl,-rpath=$(MPIBIND_DIR)
endif


PROGS = main

## HWLOC_XML_VERBOSE=1
## HWLOC_XMLFILE=topo-xml/lassen-hw2.xml
## ./mpibind_v0.14.1

all: $(PROGS) $(MPIBIND_SONAME) $(MPIBIND_LIB)

dev_tests: dev_tests.c mpibind.h
$(CC) $(BASIC_CFLAGS) $(HWLOC_CFLAGS) $@.c $(HWLOC_LDLIBS) -o $@

main: main.c $(MPIBIND_LIB)
$(CC) $@.c $(BASIC_CFLAGS) $(MPIBIND_CFLAGS) -o $@ $(MPIBIND_LDLIBS)

# Todo
#check:
#install:

$(MPIBIND_SONAME): $(MPIBIND_FNAME)
ln -s -f $< $@

$(MPIBIND_LIB): $(MPIBIND_FNAME)
ln -s -f $< $@

$(MPIBIND_FNAME): mpibind.o
ifeq ($(UNAME),Linux)
$(CC) -shared -Wl,-soname,$(MPIBIND_SONAME) -o $@ $< $(HWLOC_LDLIBS)
else
$(CC) -shared -o $@ $< $(HWLOC_LDLIBS)
endif

mpibind.o: mpibind.c mpibind.h mpibind-priv.h
$(CC) -fPIC $(BASIC_CFLAGS) $(HWLOC_CFLAGS) -c mpibind.c


clean:
rm -f $(PROGS) $(MPIBIND_LIB) $(MPIBIND_SONAME) $(MPIBIND_FNAME) *.dSYM *.o *~
Loading

0 comments on commit df581c2

Please sign in to comment.