core APIs as well as the resource management API extension. RADICAL-SAGA provides plug-ins for different distributed middleware systems and services, including support for the PBS, Sun Grid Engine, SSH, SFTP and others. RADICAL-SAGA can be used to develop distributed applications and frameworks that run on distributed cyber-infrastructure including XSEDE, LONI and FutureGrid, other clouds and local clusters. JavaSAGA JavaSAGA is a Java implementation of SAGA. This status of JavaSAGA remains uncertain. import java.util.io.* int main (int argc, char** argv) { namespace sa = saga::attributes; namespace sja = saga::job::attributes; try { saga::job::description jd; jd.set_attribute (sja::description_executable, "/home/user/hello-mpi"); jd.set_attribute (sja::description_output, "/home/user/hello.out"); jd.set_attribute (sja::description_error, "/home/user/hello.err"); // Declare this as an MPI-style job jd.set_attribute (sja::description_spmd_variation, "mpi"); // Name of the queue we want to use jd.set_attribute (sja::description_queue, "checkpt"); jd.set_attribute (sja::description_spmd_variation, "mpi"); // Number of processors to request jd.set_attribute (sja::description_number_of_processes, "32"); saga::job::service js("gram://my.globus.host/jobmanager-pbs"); saga::job::job j = js.create_job(jd); j.run() } catch(saga::exception const & e) { std::cerr << "SAGA exception caught: " << e.what() << std::endl; } } jSAGA jSAGA is another Java implementation of the SAGA Core specification. jSAGA is currently under active development. DESHL The DESHL (DEISA Services for Heterogeneous management Layer), provides functionality for submission and management of computational jobs within DEISA. DESHL is implemented as a set of command-line tools on-top of a SAGA-inspired API implemented in Java. On the back-end, it interfaces with HiLA, a generic grid access client library, which is part of the UNICORE system. Examples Job submission A typical task in a distributed application is to submit a job to a local or remote distributed resource manager. SAGA provides a high-level API called the job package for this. The following two simple examples show how the SAGA job package API can be used to submit a Message Passing Interface (MPI) job to a remote Globus GRAM resource manager. C++ #include <saga/saga.hpp> int main (int argc, char** argv) { namespace sa = saga::attributes; namespace sja = saga::job::attributes; try { saga::job::description jd; jd.set_attribute (sja::description_executable, "/home/user/hello-mpi"); jd.set_attribute (sja::description_output, "/home/user/hello.out"); jd.set_attribute (sja::description_error, "/home/user/hello.err"); // Declare this as an MPI-style job jd.set_attribute (sja::description_spmd_variation, "mpi"); // Name of the queue we want to use jd.set_attribute (sja::description_queue, "checkpt"); jd.set_attribute (sja::description_spmd_variation, "mpi"); // Number of processors to request jd.set_attribute (sja::description_number_of_processes, "32"); saga::job::service js("gram://my.globus.host/jobmanager-pbs"); saga::job::job j = js.create_job(jd); j.run() } catch(saga::exception const & e) { std::cerr << "SAGA exception caught: " << e.what() << std::endl; } } Python #!/usr/bin/env python3 import sys import time import bliss.saga as saga def