Competitive distributed computation by various strategies

SINGULAR [5] implements MP interface for distributed computation and a competitive Gröbner basis computation is illustrated as an example of distributed computation. Such a distributed computation is also possible on OpenXM. The following Risa/Asir function computes a Gröbner basis by starting the computations simultaneously from the homogenized input and the input itself. The client watches the streams by ox_select() and the result which is returned first is taken. Then the remaining server is reset.

/* G:set of polys; V:list of variables */
/* O:type of order; P0,P1: id's of servers */
def dgr(G,V,O,P0,P1)
{
  P = [P0,P1]; /* server list */
  map(ox_reset,P); /* reset servers */
  /* P0 executes non-homogenized computation */
  ox_cmo_rpc(P0,"dp_gr_main",G,V,0,1,O);
  /* P1 executes homogenized computation */
  ox_cmo_rpc(P1,"dp_gr_main",G,V,1,1,O);
  map(ox_push_cmd,P,262); /* 262 = OX_popCMO */
  F = ox_select(P); /* wait for data */
  /* F[0] is a server's id which is ready */
  R = ox_get(F[0]);
  if ( F[0] == P0 ) {
    Win = "nonhomo"; Lose = P1;
  } else {
    Win = "homo"; Lose = P0;
  }
  ox_reset(Lose); /* reset the loser */
  return [Win,R];
}



Nobuki Takayama 2017-03-30