<?xml version="1.0" encoding="UTF-8"?>
<mods xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.loc.gov/mods/v3" version="3.1" xsi:schemaLocation="http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-1.xsd">
  <titleInfo>
    <title>Parallel C++</title>
    <subTitle>Efficient and Scalable High-Performance Parallel Programming Using HPX</subTitle>
  </titleInfo>
  <name type="personal">
    <namePart>Diehl, Patrick.</namePart>
    <role>
      <roleTerm authority="marcrelator" type="text">creator</roleTerm>
    </role>
    <role>
      <roleTerm type="text">author.</roleTerm>
    </role>
    <role>
      <roleTerm authority="marcrelator" type="code">aut</roleTerm>
    </role>
    <role>
      <roleTerm authority="marcrelator" type="code">http://id.loc.gov/vocabulary/relators/aut</roleTerm>
    </role>
  </name>
  <name type="personal">
    <namePart>Brandt, Steven R.</namePart>
    <role>
      <roleTerm type="text">author.</roleTerm>
    </role>
    <role>
      <roleTerm authority="marcrelator" type="code">aut</roleTerm>
    </role>
    <role>
      <roleTerm authority="marcrelator" type="code">http://id.loc.gov/vocabulary/relators/aut</roleTerm>
    </role>
  </name>
  <name type="personal">
    <namePart>Kaiser, Hartmut.</namePart>
    <role>
      <roleTerm type="text">author.</roleTerm>
    </role>
    <role>
      <roleTerm authority="marcrelator" type="code">aut</roleTerm>
    </role>
    <role>
      <roleTerm authority="marcrelator" type="code">http://id.loc.gov/vocabulary/relators/aut</roleTerm>
    </role>
  </name>
  <name type="corporate">
    <namePart>SpringerLink (Online service)</namePart>
  </name>
  <typeOfResource>text</typeOfResource>
  <originInfo>
    <place>
      <placeTerm type="code" authority="marccountry">sz</placeTerm>
    </place>
    <dateIssued encoding="marc">2024</dateIssued>
    <edition>1st ed. 2024.</edition>
    <issuance>monographic</issuance>
  </originInfo>
  <language>
    <languageTerm authority="iso639-2b" type="code">eng</languageTerm>
  </language>
  <physicalDescription>
    <form authority="marcform">electronic</form>
    <form authority="gmd">electronic resource</form>
    <reformattingQuality>access</reformattingQuality>
    <extent>XVIII, 239 p. 1 illus. online resource.</extent>
  </physicalDescription>
  <abstract>This textbook focuses on practical parallel C++ programming at the graduate student level. In particular, it shows the APIs and related language features in the C++ 17 and C++ 20 standards, covering both single node and distributed systems. It shows that with the parallel features in the C++ 17 and C++ 20 standards, learning meta-languages like OpenMP is no longer necessary. Using the C++ standard library for parallelism and concurrency (HPX), the same language features can be extended to distributed codes, providing a higher-level C++ interface to distributed programming than the Message Passing Interface (MPI). The book starts with the single-threaded implementation of the fractal sets, e.g. Julia set, and Mandelbrot set, using the C++ Standard Library (SL)’s container and algorithms. This code base is used for parallel implementation using low-level threads, asynchronous programming, parallel algorithms, and coroutines. The asynchronous programming examples are then extended to distributed programming using the C++ standard library for parallelism and concurrency (HPX). Octo-Tiger, an astrophysics code for stellar merger, is used as a showcase for a portable, efficient, and scalable high-performance application using HPX. The book’s core audience is advanced undergraduate and graduate students who want to learn the basics of parallel and distributed C++ programming but are not computer science majors. Basic C++ knowledge, like functions, classes, loops, and conditional statements, is assumed as a requirement, while C++ advanced topics, like generic programming, lambda functions, smart pointers, and move semantics, are briefly summarized in the appendix.</abstract>
  <tableOfContents>Part I: Preliminaries -- 1. Compiling and running the code and examples in this book -- Part II: Introduction to C++ and C++ Standard Library -- 2. About C++, C++ standard, and the C++ Standard Library -- 3. C++ Standard library -- 4. Example Mandelbrot set and Julia set -- Part III: The C++ standard library for concurrency and parallelism (HPX) -- 5. Why HPX? -- 6. The C++ standard library for parallelism and concurrency (HPX) -- Part IV: Parallel programming -- 7. Parallel Programming -- 8. Programming with Low Level Threads -- 9. Asynchronous programming -- 10. Parallel Algorithms -- 11. Coroutines -- 12. Benchmarking the fractal set codes -- Part V: Distributed programming -- 13. Distributed computing and programming -- 14. Distributed programming using HPX -- 15. Examples of distributed programming -- 16. Some remarks on MPI+OpenMP and HPX -- Part VI: A showcase for a portable high performance application using HPX -- 17. Accelerator Cards -- 18. Octo-Tiger, a showcase for a portable high performance application -- Part VII: Conclusion and Outlook -- 19. Conclusion and Outlook.</tableOfContents>
  <note type="statement of responsibility">by Patrick Diehl, Steven R. Brandt, Hartmut Kaiser.</note>
  <subject authority="lcsh">
    <topic>Programming languages (Electronic computers)</topic>
  </subject>
  <subject authority="lcsh">
    <topic>Software engineering</topic>
  </subject>
  <subject>
    <topic>Programming Language</topic>
  </subject>
  <subject>
    <topic>Software Engineering</topic>
  </subject>
  <classification authority="lcc">QA76.7-.73</classification>
  <relatedItem type="host">
    <titleInfo>
      <title>Springer Nature eBook</title>
    </titleInfo>
  </relatedItem>
  <relatedItem type="otherFormat" displayLabel="Printed edition:"/>
  <relatedItem type="otherFormat" displayLabel="Printed edition:"/>
  <identifier type="isbn">9783031543692</identifier>
  <identifier type="uri">https://doi.org/10.1007/978-3-031-54369-2</identifier>
  <location>
    <url>https://doi.org/10.1007/978-3-031-54369-2</url>
  </location>
  <recordInfo>
    <recordCreationDate encoding="marc">240702</recordCreationDate>
    <recordChangeDate encoding="iso8601">20251030112607.0</recordChangeDate>
    <recordIdentifier source="DE-He213">978-3-031-54369-2</recordIdentifier>
  </recordInfo>
</mods>
