I. Introduction
Traditionally, advances in high-performance scientific computing have focused on the scale, performance and optimization of an application with a large but single task, and less on applications comprised of multiple tasks. However, many scientific problems are expressed as applications that require multiple distinct computational tasks to be executed in order to achieve a desired solution.