5 research outputs found

    Integrating Functional and Imperative Parallel Programming: C++ Solutions to the Salishan Problems

    Get PDF
    We investigate the practical integration of functional and imperative parallel programming in the context of a popular sequential object-based language. As the basis of our investigation, we develop solutions to the Salishan Problems, a set of problems intended as a standard by which to compare parallel programming notations. The language that we use is CC++, C++ extended with single- assignment variables, parallel composition, and atomic functions. We demonstrate how deterministic parallel programs can be written that are identical--except for the addition of a few keywords--to sequential programs that satisfy the same specifications

    A linguistic approach to concurrent, distributed, and adaptive programming across heterogeneous platforms

    Get PDF
    Two major trends in computing hardware during the last decade have been an increase in the number of processing cores found in individual computer hardware platforms and an ubiquity of distributed, heterogeneous systems. Together, these changes can improve not only the performance of a range of applications, but the types of applications that can be created. Despite the advances in hardware technology, advances in programming of such systems has not kept pace. Traditional concurrent programming has always been challenging, and is only set to be come more so as the level of hardware concurrency increases. The different hardware platforms which make up heterogeneous systems come with domain-specific programming models, which are not designed to interact, or take into account the different resource-constraints present across different hardware devices, motivating a need for runtime reconfiguration or adaptation. This dissertation investigates the actor model of computation as an appropriate abstraction to address the issues present in programming concurrent, distributed, and adaptive applications across different scales and types of computing hardware. Given the limitations of other approaches, this dissertation describes a new actor-based programming language (Ensemble) and its runtime to address these challenges. The goal of this language is to enable non-specialist programmers to take advantage of parallel, distributed, and adaptive programming without the programmer requiring in-depth knowledge of hardware architectures or software frameworks. There is also a description of the design and implementation of the runtime system which executes Ensemble applications across a range of heterogeneous platforms. To show the suitability of the actor-based abstraction in creating applications for such systems, the language and runtime were evaluated in terms of linguistic complexity and performance. These evaluations covered programming embedded, concurrent, distributed, and adaptable applications, as well as combinations thereof. The results show that the actor provides an objectively simple way to program such systems without sacrificing performance

    Coûts de Synchronization dans les Programmes ParallÚles et les Structures de DonnÚes Simultanées

    Get PDF
    To use the computational power of modern computing machines, we have to deal with concurrent programs. Writing efficient concurrent programs is notoriously difficult, primarily due to the need of harnessing synchronization costs. In this thesis, we focus on synchronization costs in parallel programs and concurrent data structures.First, we present a novel granularity control technique for parallel programs designed for the dynamic multithreading environment. Then in the context of concurrent data structures, we consider the notion of concurrency-optimality and propose the first implementation of a concurrency-optimal binary search tree that, intuitively, accepts a concurrent schedule if and only if the schedule is correct. Also, we propose parallel combining, a technique that enables efficient implementations of concurrent data structures from their parallel batched counterparts. We validate the proposed techniques via experimental evaluations showing superior or comparable performance with respect to state-of-the-art algorithms.From a more formal perspective, we consider the phenomenon of helping in concurrent data structures. Intuitively, helping is observed when the order of some operation in a linearization is fixed by a step of another process. We show that no wait-free linearizable implementation of stack using read, write, compare&swap and fetch&add primitives can be help-free, correcting a mistake in an earlier proof by Censor-Hillel et al. Finally, we propose a simple way to analytically predict the throughput of data structures based on coarse-grained locking.Pour utiliser la puissance de calcul des ordinateurs modernes, nous devons Ă©crire des programmes concurrents. L’écriture de programme concurrent efficace est notoirement difficile, principalement en raison de la nĂ©cessitĂ© de gĂ©rer les coĂ»ts de synchronization. Dans cette thĂšse, nous nous concentrons sur les coĂ»ts de synchronisation dans les programmes parallĂšles et les structures de donnĂ©es concurrentes.D’abord, nous prĂ©sentons une nouvelle technique de contrĂŽle de la granularitĂ© pour les programmes parallĂšles conçus pour un environnement de multi-threading dynamique. Ensuite, dans le contexte des structures de donnĂ©es concurrentes, nous considĂ©rons la notion d’optimalitĂ© de concurrence (concurrency-optimality) et proposons la premiĂšre implĂ©mentation concurrence-optimal d’un arbre binaire de recherche qui, intuitivement, accepte un ordonnancement concurrent si et seulement si l’ordonnancement est correct. Nous proposons aussi la combinaison parallĂšle (parallel combining), une technique qui permet l’implĂ©mentation efficace des structures de donnĂ©es concurrences Ă  partir de leur version parallĂšle par lots. Nous validons les techniques proposĂ©es par une Ă©valuation expĂ©rimentale, qui montre des performances supĂ©rieures ou comparables Ă  celles des algorithmes de l’état de l’art.Dans une perspective plus formelle, nous considĂ©rons le phĂ©nomĂšne d’assistance (helping) dans des structures de donnĂ©es concurrentes. On observe un phĂ©nomĂšne d’assistance quand l’ordre d’une opĂ©ration d’un processus dans une trace linĂ©arisĂ©e est fixĂ©e par une Ă©tape d’un autre processus. Nous montrons qu’aucune implĂ©mentation sans attente (wait-free) linĂ©arisable d’une pile utilisant les primitives read, write, compare&swap et fetch&add ne peut ĂȘtre “sans assistance” (help-free), corrigeant une erreur dans une preuve antĂ©rieure de Censor-Hillel et al. Finalement, nous proposons une façon simple de prĂ©dire analytiquement le dĂ©bit (throughput) des structures de donnĂ©es basĂ©es sur des verrous Ă  gros grains
    corecore