The basic mailer manipulation commands (such as g1_grid_open()) require the specification of process lists, currently as ordered pairs of nodes and process IDs packaged within a ZIP_ADDRESSEES structure. For application convenience, we supply optional commands to support the creation of such collections. One common collection is a cohort, a set of processes with the same process ID, distributed across a number of nodes. A cohort is often used to formulate a single-program, multiple-data (SPMD) calculation.
Cohort list creation:
ZIP_ADDRESSEES *addressees = zip_new_cohort(int N, /* number of processes involved */ int node_bias, /* node number of zeroth entry in list */ int cohort_pid, /* process ID of entire collection of processes */ int host_flag); /* flags whether host process participates */Additionally, we provide a Zipcode-level spawn mechanism:
int result = zip_spawn( char *prog_name, /* ASCII name of program to spawn */ ZIP_ADDRESSEES *addressees, /* addressee list to spawn */ void *state, /* future expansion */ int pm_flag); /* flags if program is spawned on zeroth addressee */where result is nonzero on failure. Most implementations require that this spawning function be effected in the host process, although the original CE/R system did not make this restriction. A compatible zip_kill() is also defined:
result = zip_kill(addressees);With the addition of these functions, Zipcode specifies an entire programming environment that can be completely divorced, if desired, from its original foundations in the CE/RK. This is possible so long as one can emulate appropriate CE/RK functions for Zipcode to use. This has been accomplished in release 2.0 of nCUBE's 6400 system software, for instance.