Welcome to the HPX documentation!¶
If you’re new to HPX you can get started with the Quick start guide. Don’t forget to read the Terminology section to learn about the most important concepts in HPX. The Examples give you a feel for how it is to write real HPX applications and the Manual contains detailed information about everything from building HPX to debugging it. There are links to blog posts and videos about HPX in Additional material.
If you can’t find what you’re looking for in the documentation, please:
open an issue on GitHub;
contact us on IRC, the HPX channel on the C++ Slack, or on our mailing list; or
read or ask questions tagged with HPX on StackOverflow.
What is HPX?¶
HPX is a C++ Standard Library for Concurrency and Parallelism. It implements all of the corresponding facilities as defined by the C++ Standard. Additionally, in HPX we implement functionalities proposed as part of the ongoing C++ standardization process. We also extend the C++ Standard APIs to the distributed case. HPX is developed by the STE||AR group (see People).
The goal of HPX is to create a high quality, freely available, open source implementation of a new programming model for conventional systems, such as classic Linux based Beowulf clusters or multi-socket highly parallel SMP nodes. At the same time, we want to have a very modular and well designed runtime system architecture which would allow us to port our implementation onto new computer system architectures. We want to use real-world applications to drive the development of the runtime system, coining out required functionalities and converging onto a stable API which will provide a smooth migration path for developers.
The API exposed by HPX is not only modeled after the interfaces defined by the C++11/14/17/20 ISO standard. It also adheres to the programming guidelines used by the Boost collection of C++ libraries. We aim to improve the scalability of today’s applications and to expose new levels of parallelism which are necessary to take advantage of the exascale systems of the future.
What’s so special about HPX?¶
HPX exposes a uniform, standards-oriented API for ease of programming parallel and distributed applications.
It enables programmers to write fully asynchronous code using hundreds of millions of threads.
HPX provides unified syntax and semantics for local and remote operations.
HPX makes concurrency manageable with dataflow and future based synchronization.
It implements a rich set of runtime services supporting a broad range of use cases.
HPX exposes a uniform, flexible, and extendable performance counter framework which can enable runtime adaptivity
It is designed to solve problems conventionally considered to be scaling-impaired.
HPX has been designed and developed for systems of any scale, from hand-held devices to very large scale systems.
It is the first fully functional implementation of the ParalleX execution model.
HPX is published under a liberal open-source license and has an open, active, and thriving developer community.
- Why HPX?
- ParalleX—a new execution model for future architectures
- What is HPX?
- What makes our systems slow?
- Technology demands new response
- Governing principles applied while developing HPX
- Focus on latency hiding instead of latency avoidance
- Embrace fine-grained parallelism instead of heavyweight threads
- Rediscover constraint-based synchronization to replace global barriers
- Adaptive locality control instead of static data distribution
- Prefer moving work to the data over moving data to the work
- Favor message driven computation over message passing
- Quick start
- Terminology
- Examples
- Manual
- Getting HPX
- HPX build system
- Creating HPX projects
- Starting the HPX runtime
- Launching and configuring HPX applications
- Writing single-node HPX applications
- Writing distributed HPX applications
- Running on batch systems
- Debugging HPX applications
- Optimizing HPX applications
- HPX runtime and resources
- Miscellaneous
- Troubleshooting
- Additional material
- Overview
- All modules
- actions
- actions_base
- affinity
- algorithms
- allocator_support
- asio
- assertion
- async_base
- async_combinators
- async_cuda
- async
- async_local
- async_mpi
- batch_environments
- cache
- checkpoint
- checkpoint_base
- collectives
- command_line_handling
- components_base
- compute
- compute_cuda
- concepts
- concurrency
- config
- config_registry
- coroutines
- datastructures
- debugging
- errors
- execution
- execution_base
- executors
- executors_distributed
- filesystem
- format
- functional
- futures
- hardware
- hashing
- include
- init_runtime
- io_service
- iterator_support
- itt_notify
- lcos_distributed
- lcos_local
- logging
- memory
- mpi_base
- naming_base
- pack_traversal
- performance_counters
- plugin
- prefix
- preprocessor
- program_options
- resiliency
- resource_partitioner
- runtime_configuration
- runtime_local
- schedulers
- segmented_algorithms
- serialization
- static_reinit
- statistics
- string_util
- synchronization
- testing
- thread_executors
- thread_pools
- thread_support
- threading
- threading_base
- thread_manager
- timed_execution
- timing
- topology
- type_support
- util
- version
- Releases
- HPX V1.5.0 (Sep 02, 2020)
- HPX V1.4.1 (Feb 12, 2020)
- HPX V1.4.0 (January 15, 2020)
- HPX V1.3.0 (May 23, 2019)
- HPX V1.2.1 (Feb 19, 2019)
- HPX V1.2.0 (Nov 12, 2018)
- HPX V1.1.0 (Mar 24, 2018)
- HPX V1.0.0 (Apr 24, 2017)
- HPX V0.9.99 (Jul 15, 2016)
- HPX V0.9.11 (Nov 11, 2015)
- HPX V0.9.10 (Mar 24, 2015)
- HPX V0.9.9 (Oct 31, 2014, codename Spooky)
- HPX V0.9.8 (Mar 24, 2014)
- HPX V0.9.7 (Nov 13, 2013)
- HPX V0.9.6 (Jul 30, 2013)
- HPX V0.9.5 (Jan 16, 2013)
- HPX V0.9.0 (Jul 5, 2012)
- HPX V0.8.1 (Apr 21, 2012)
- HPX V0.8.0 (Mar 23, 2012)
- HPX V0.7.0 (Dec 12, 2011)
- About HPX