HPX Messaging Document - STEllAR-GROUP/hpx GitHub Wiki
HPX is a parallel runtime system that builds upon the C++11/14 standard to facilitate distributed operations, enable fine-grained constraint-based parallelism, and support runtime adaptive resource management. This library enables application developers to write massively parallel, highly scalable codes using a modern multi-paradigm API. HPX portably supports heterogeneous runs on conventional and future architectures such as x86, Blue Gene, Xeon Phi, ARM, and Epiphany.
Since HPX is fully compliant with the C++11/14 Standards, it inherits a widely accepted API that enables programmability, composability, and performance portability of user applications. The language extensions which are introduced aim to augment the standard to apply to a distributed case seamlessly. In this way, programmers familiar with the C++ standard can easily read and write HPX code.
HPX is based on the theoretical foundation laid by the ParalleX execution model. This model addresses the four factors that limit application scalability: Starvation, not having enough work to keep the entire machine busy; Latencies, the time it takes to send messages from one compute region to another; Overheads, the cost of creating the environment for an application; and Waiting for contention resolution, time spent waiting for access to an oversubscribed resource. To overcome these obstacles, this execution model outlines six design principles: latency hiding instead of latency avoidance, fine-grained parallelism instead of heavyweight threads, constraint-based synchronization instead of global barriers, adaptive locality control instead of static data distribution, work-follows-data instead of data-follows-work, and message-driven computation instead of message passing. With this combination, HPX code can mitigate the obstacles posed to more conventional paradigms that prevent modern-day applications from achieving good scaling.