Pointers inside lambda closure objects in OpenMP target offload regions

Research output: Chapter in Book/Report/Conference proceedingConference contribution

Full text download(s)

Published copy (DOI)

Author(s)

  • David Truby
  • Carlo Bertolli
  • Steven A. Wright
  • Gheorghe-Teodor Bercea
  • Kevin O'Brien
  • Stephen Jarvis

Department/unit(s)

Publication details

Title of host publicationProceedings of LLVM-HPC 2018
DateAccepted/In press - 1 Oct 2018
DatePublished (current) - 11 Feb 2019
Pages10-17
Number of pages8
PublisherInstitute of Electrical and Electronics Engineers Inc.
Original languageEnglish
ISBN (Electronic)9781728101880

Publication series

NameTechnical Consortium on High Performance Computing
PublisherIEEE

Abstract

With the diversification of HPC architectures beyond traditional CPU-based clusters, a number of new frameworks for performance portability across architectures have arisen. One way of implementing such frameworks is to use C++ templates and lambda expressions to design loop-like functions. However, lower level programming APIs that these implementations must use are often designed with C in mind and do not specify how they interact with C++ features such as lambda expressions.

This paper discusses a change to the behavior of the OpenMP specification with respect to lambda expressions such that when functions generated by lambda expressions are called inside GPU regions, any pointers used in the lambda expression correctly refer to device pointers. This change has been implemented in a branch of the Clang C++ compiler and demonstrated with two representative codes. This change has also been accepted into the draft OpenMP specification for inclusion in OpenMP 5. Our results show that the implicit mapping of lambda expressions always exhibits identical performance to an explicit mapping but without breaking the abstraction provided by the high level frameworks.

Discover related content

Find related publications, people, projects, datasets and more using interactive charts.

View graph of relations