Douglas P. Gregor

dblp:25/4058 · DBLP profile ↗
← Back
8ranked-venue papers
4as first author
0since 2021 · last 2008
—ORCID · none

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 6 · 3 first-authorSystems, architecture and hardware · 2 · 1 first-author

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Computer architecture, parallel and distributed computing, and storage systems
2 papers
Parallel and multicore computing · 86% High-performance computing · 14%
Software engineering, system software, and programming languages
3 papers
Programming languages and type systems · 88% Runtime systems and virtual machines · 7% Compilers and program optimization · 5%

Topics — the 11 heaviest of 12, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Parallel and multicore computing
parallel programming models
0.122008
Design and implementation of a high-performance MPI for C# and the common language infrastructure · PPoPP 2008
Lifting sequential graph algorithms for distributed-memory parallel computation · OOPSLA 2005
Programming languages and type systems › programming paradigms
generic programming
0.122006
Algorithm specialization in generic programming: challenges of constrained generics in C++ · PLDI 2006
Concepts: linguistic support for generic programming in C++ · OOPSLA 2006
Parallel and multicore computing
MPI
0.112008
Design and implementation of a high-performance MPI for C# and the common language infrastructure · PPoPP 2008
Programming languages and type systems
language design
0.112006
Concepts: linguistic support for generic programming in C++ · OOPSLA 2006
Programming languages and type systems › type checking
modular typechecking
0.112006
Algorithm specialization in generic programming: challenges of constrained generics in C++ · PLDI 2006
Programming languages and type systems
type systems
0.112006
Algorithm specialization in generic programming: challenges of constrained generics in C++ · PLDI 2006
Parallel and multicore computing › parallel algorithms › graph algorithms
breadth-first search
0.112005
Lifting sequential graph algorithms for distributed-memory parallel computation · OOPSLA 2005
High-performance computing › large-scale graph processing
distributed-memory graph algorithms
0.112005
Lifting sequential graph algorithms for distributed-memory parallel computation · OOPSLA 2005
Parallel and multicore computing
parallel graph algorithms
0.112005
Lifting sequential graph algorithms for distributed-memory parallel computation · OOPSLA 2005
Runtime systems and virtual machines › dynamic compilation
just-in-time compilation
0.012008
Design and implementation of a high-performance MPI for C# and the common language infrastructure · PPoPP 2008
Parallel and multicore computing
parallel libraries
0.012005
Lifting sequential graph algorithms for distributed-memory parallel computation · OOPSLA 2005

Methods — techniques the papers use, named apart from their topics

unsafe code regions · 0.2reflection · 0.2runtime code generation · 0.1run-time code generation · 0.1constrained generics · 0.1concept-based type checking · 0.1c++ templates · 0.1generic programming · 0.1distributed data structures · 0.1
YearPublicationVenuePosition
2008 Design and implementation of a high-performance MPI for C# and the common language infrastructure
abstract
As high-performance computing enters the mainstream, parallel programming mechanisms (including the Message Passing Interface, or MPI) must be supported in new environments such as C# and the Common Language Infrastructure (CLI). Making effective use of MPI with the CLI requires an interface that reflects the high-level object-oriented nature of C# and that also supports its programming idioms. However, for performance reasons, this high-level functionality must ultimately be mapped to low-level native MPI libraries. In addition to abstraction penalty concerns, avoiding unwanted overhead in this mapping process is significantly complicated by the safety and portability features of the CLI virtual machine, such as garbage collection and just-in-time compilation. In this paper, we describe our approach to using features of C# and the CLI---such as reflection, unsafe code regions, and run-time code generation---to realize an elegant, yet highly efficient, C# interface to MPI. Experimental results demonstrate that there is no appreciable overhead introduced by our approach when compared to the native MS-MPI library.
Douglas P. Gregor, Andrew Lumsdaine
PPoPP1
2006 Effecting parallel graph eigensolvers through library composition
abstract
Many interesting problems in graph theory can be reduced to solving an eigenproblem of the adjacency matrix or Laplacian of a graph. Given the availability of high-quality linear algebra and graph libraries, one might expect that one could merely use a graph data structure within a eigensolver. However, conventional libraries are rigidly constructed, requiring conversion to library-specific data structures or using heavyweight abstraction methods that prevent efficient composition. The generic programming methodology addresses the problems of reusability and composability by careful factorization of a domain into efficient library abstractions. We describe the composition process that makes the data structures from a library supporting one domain usable with the algorithms of another library for a disjoint domain without conversion or heavyweight abstractions. To illustrate the process, we compose two separately-developed libraries, one for solving eigenproblems sequentially and the other for solving graph problems in parallel, effecting an efficient, scalable parallel graph eigensolver.
Alex Breuer, Peter Gottschling, Douglas P. Gregor, Andrew Lumsdaine
IPDPS3
2006 Concepts: linguistic support for generic programming in C++
abstract
Generic programming has emerged as an important technique for the development of highly reusable and efficient software libraries. In C++, generic programming is enabled by the flexibility of templates, the C++ type parametrization mechanism. However, the power of templates comes with a price: generic (template) libraries can be more difficult to use and develop than non-template libraries and their misuse results in notoriously confusing error messages. As currently defined in C++98, templates are unconstrained, and type-checking of templates is performed late in the compilation process, i.e., after the use of a template has been combined with its definition. To improve the support for generic programming in C++, we introduce concepts to express the syntactic and semantic behavior of types and to constrain the type parameters in a C++ template. Using concepts, type-checking of template definitions is separated from their uses, thereby making templates easier to use and easier to compile. These improvements are achieved without limiting the flexibility of templates or decreasing their performance - in fact their expressive power is increased. This paper describes the language extensions supporting concepts, their use in the expression of the C++ Standard Template Library, and their implementation in the ConceptGCC compiler. Concepts are candidates for inclusion in the upcoming revision of the ISO C++ standard, C++0x.
Douglas P. Gregor, Jaakko Järvi, Jeremy G. Siek, Bjarne Stroustrup, Gabriel Dos Reis, Andrew Lumsdaine
OOPSLA1
2006 Algorithm specialization in generic programming: challenges of constrained generics in C++
abstract
Generic programming has recently emerged as a paradigm for developing highly reusable software libraries, most notably in C++. We have designed and implemented a constrained generics extension for C++ to support modular type checking of generic algorithms and to address other issues associated with unconstrained generics. To be as broadly applicable as possible, generic algorithms are defined with minimal requirements on their inputs. At the same time, to achieve a high degree of efficiency, generic algorithms may have multiple implementations that exploit features of specific classes of inputs. This process of algorithm specialization relies on non-local type information and conflicts directly with the local nature of modular type checking. In this paper, we review the design and implementation of our extensions for generic programming in C++, describe the issues of algorithm specialization and modular type checking in detail, and discuss the important design tradeoffs in trying to accomplish both.We present the particular design that we chose for our implementation, with the goal of hitting the sweet spot in this interesting design space.
Jaakko Järvi, Douglas P. Gregor, Jeremiah Willcock, Andrew Lumsdaine, Jeremy G. Siek
PLDI2
2006 STLlint: lifting static checking from languages to libraries
abstract
Abstract Traditional static checking centers around finding bugs in programs by isolating cases where the language has been used incorrectly. These language‐based checkers do not understand the semantics of software libraries, and therefore cannot be used to detect errors in the use of libraries. In this paper, we introduce STLlint, a program analysis we have implemented for the C++ Standard Template Library and similar, generic software libraries, and we present the general approach that underlies STLlint. We show that static checking of library semantics differs greatly from checking of language semantics, requiring new representations of program behavior and new algorithms. Major challenges include checking the use of generic algorithms, loop analysis for interfaces, and organizing behavioral specifications for extensibility. Copyright © 2005 John Wiley & Sons, Ltd.
Douglas P. Gregor, Sibylle Schupp
Softw. Pract. Exp.1
2005 Lifting sequential graph algorithms for distributed-memory parallel computation
abstract
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.
Douglas P. Gregor, Andrew Lumsdaine
OOPSLA1
2002 Semantic and behavioral library transformations
Sibylle Schupp, Douglas P. Gregor, David R. Musser, Shin-Ming Liu
Inf. Softw. Technol.2
2001 User-Extensible Simplification - Type-Based Optimizer Generators
Sibylle Schupp, Douglas P. Gregor, David R. Musser, Shin-Ming Liu
CC2