Parallel programming models and run-time system support for interactive multimedia applications
The computational demands of interactive multimedia applications are steadily increasing as consumers call for progressively more complex and intelligent multimedia services. New multicore hardware architectures provide the required resources, but writing parallel, distributed applications remains a labor-intensive task compared to their sequential counter-part. For this reason a number of parallel programming models, tools and techniques exist to alleviate the cognitive load placed on the developer, where a number of these solutions allow a developer to think sequentially, yet benefit from parallel and distributed execution. An inherit limitation in a number of these existing solutions is their inability to express arbitrarily complex workloads. The dependency graphs of these approaches, which express the relationship between computation and communication as vertices and edges, are often limited to directed acyclic graphs or even pre-determined stages. Furthermore, these existing solutions are frequently only capable of expressing a subset of the available parallelization domains. This effectively limits these solutions applicability to video encoding and other multimedia algorithms that depend on iterative execution and are capable of expressing a number of forms of parallelism. Through the development of Ginnungagap and evaluation of Nornir, and related work, we have extracted concepts for the formulation of a new high-level programming model and subsequent run-time system, called P2G, which is capable of supporting the emerging domain of interactive multimedia applications. With P2G we improve on existing tools and techniques with the support of arbitrarily complex dependency graphs with cycles, branches and deadlines, and provide support for data, task, pipeline and nested parallelism. This is achieved in P2G through the definition a high-level programming model, implemented through a novel kernel language that is designed to minimize the development effort otherwise placed on the developer by automating key components for parallelization and distribution, such as partitioning, scheduling, agglomeration and synchronization. To demonstrate the feasibility of our solution, we have implemented a proof-of-concept run-time system that demonstrates the applicability and scalability of the designed solution.