Matrix-free methods for stiff systems of ODE's
SIAM Journal on Numerical Analysis
A bridging model for parallel computation
Communications of the ACM
A parallel algorithm for computing minimum spanning trees
SPAA '92 Proceedings of the fourth annual ACM symposium on Parallel algorithms and architectures
Scalable parallel geometric algorithms for coarse grained multicomputers
SCG '93 Proceedings of the ninth annual symposium on Computational geometry
MPI: a message passing interface
Proceedings of the 1993 ACM/IEEE conference on Supercomputing
HPC++: experiments with the parallel standard template library
ICS '97 Proceedings of the 11th international conference on Supercomputing
The generic graph component library
Proceedings of the 14th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
ZPL: A Machine Independent Programming Language for Parallel Computers
IEEE Transactions on Software Engineering - Special issue on architecture-independent languages and software tools for parallel processing
The boost graph library: user guide and reference manual
The boost graph library: user guide and reference manual
Generic programming for high performance scientific applications
JGI '02 Proceedings of the 2002 joint ACM-ISCOPE conference on Java Grande
Some remarks on distributed depth-first search
Information Processing Letters
Proceedings of the 6th International Workshop on Languages and Compilers for Parallel Computing
A Parallelization of Dijkstra's Shortest Path Algorithm
MFCS '98 Proceedings of the 23rd International Symposium on Mathematical Foundations of Computer Science
Transparent Parallelisation Through Reuse: Between a Compiler and a Library Approach
ECOOP '93 Proceedings of the 7th European Conference on Object-Oriented Programming
ISAAC '88 Proceedings of the International Symposium ISSAC'88 on Symbolic and Algebraic Computation
Practical Parallel Algorithms for Minimum Spanning Trees
SRDS '98 Proceedings of the The 17th IEEE Symposium on Reliable Distributed Systems
NESL: A Nested Data-Parallel Language (Version 2.6)
NESL: A Nested Data-Parallel Language (Version 2.6)
Concepts: linguistic support for generic programming in C++
Proceedings of the 21st annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications
Library composition and adaptation using c++ concepts
GPCE '07 Proceedings of the 6th international conference on Generative programming and component engineering
MEDEA '07 Proceedings of the 2007 workshop on MEmory performance: DEaling with Applications, systems and architecture
Associative Parallel Containers in STAPL
Languages and Compilers for Parallel Computing
Scalable communication protocols for dynamic sparse data exchange
Proceedings of the 15th ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming
Science of Computer Programming
Pregel: a system for large-scale graph processing
Proceedings of the 2010 ACM SIGMOD International Conference on Management of data
A high-level framework for distributed processing of large-scale graphs
ICDCN'11 Proceedings of the 12th international conference on Distributed computing and networking
The tao of parallelism in algorithms
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
HipG: parallel processing of large-scale graphs
ACM SIGOPS Operating Systems Review
Extensible PGAS semantics for C++
Proceedings of the Fourth Conference on Partitioned Global Address Space Programming Model
Writing parallel libraries with MPI - common practice, issues, and extensions
EuroMPI'11 Proceedings of the 18th European MPI Users' Group conference on Recent advances in the message passing interface
Parallel breadth-first search on distributed memory systems
Proceedings of 2011 International Conference for High Performance Computing, Networking, Storage and Analysis
LCPC'09 Proceedings of the 22nd international conference on Languages and Compilers for Parallel Computing
Introducing ScaleGraph: an X10 library for billion scale graph analytics
Proceedings of the 2012 ACM SIGPLAN X10 Workshop
Highly scalable graph search for the Graph500 benchmark
Proceedings of the 21st international symposium on High-Performance Parallel and Distributed Computing
Productive Parallel Linear Algebra Programming with Unstructured Topology Adaption
CCGRID '12 Proceedings of the 2012 12th IEEE/ACM International Symposium on Cluster, Cloud and Grid Computing (ccgrid 2012)
Managing large graphs on multi-cores with graph awareness
USENIX ATC'12 Proceedings of the 2012 USENIX conference on Annual Technical Conference
Performance guarantees for distributed reachability queries
Proceedings of the VLDB Endowment
Expressing graph algorithms using generalized active messages
Proceedings of the 27th international ACM conference on International conference on supercomputing
A first view of exedra: a domain-specific language for large graph analytics workflows
Proceedings of the 22nd international conference on World Wide Web companion
Hi-index | 0.00 |
This paper describes the process used to extend the Boost Graph Library (BGL) for parallel operation with distributed memory. The BGL consists of a rich set of generic graph algorithms and supporting data structures, but it was not originally designed with parallelism in mind. In this paper, we revisit the abstractions comprising the BGL in the context of distributed-memory parallelism, lifting away the implicit requirements of sequential execution and a single shared address space. We illustrate our approach by describing the process as applied to one of the core algorithms in the BGL, breadth-first search. The result is a generic algorithm that is unchanged from the sequential algorithm, requiring only the introduction of external (distributed) data structures for parallel execution. More importantly, the generic implementation retains its interface and semantics, such that other distributed algorithms can be built upon it, just as algorithms are layered in the sequential case. By characterizing these extensions as well as the extension process, we develop general principles and patterns for using (and reusing) generic, object-oriented parallel software libraries. We demonstrate that the resulting algorithm implementations are both efficient and scalable with performance results for several algorithms.