Skip to content

HPX Messaging Document

Adrian Serio edited this page Aug 29, 2014 · 2 revisions

HPX is a parallel runtime system which 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.

HPX is fully compliant with the C++11/14 Standards and therefore inherits an API which is widely accepted and enables programmability, composability, and performance portability of user applications. The language extensions which are introduced aim to seamlessly augment the standard to apply to a distributed case. In this way, programmers who are 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. In order 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 is able to mitigate the obstacles posed to more conventional paradigms which prevent modern day applications from scaling.

Clone this wiki locally