Abstract
The multi-core era brings new challenges to the programming community. Parallelization requirements of applications in mainstream computing and applications in emergent fields of high performance computing, such as informatics, must be explored. With parallelism now ubiquitous, programmability, composability, and reuse need to be closely examined in applications developed using existing parallel programming tools. Of the available programming models, task parallelism is the most promising and is able to parallelize regular and irregular applications alike [1, 2, 3]. In order to widely adopt task parallelism it is necessary for a tool to be configurable and extensible without any runtime penalties. Recently, PFunc [4], a novel library for expressing shared-memory task parallelism in C and C++ has been released to the open-source community. PFunc is unique in its heavy use of generic programming - a programming paradigm for developing efficient and reusable software libraries. PFunc can be used as is and does not require any configuration or extensions. It introduces the ability to deliver multiple task completion notifications and the notion of task groups and also provides production-grade exception handling and performance monitoring mechanisms to assist software developers. However, to validate PFunc’s utility, it is necessary to demonstrate its ability to deliver parallel performance for a variety of applications. In this thesis, we present a task parallel version of three NAS parallel benchmarks: Gaussian random variates (EP), integer sort (IS), and conjugate gradient (CG) [5]. These three benchmarks are then compared against their OpenMP counterparts.