Пример #1
0
/* this function does the transformation involved in replacing an
 * expression */
static void replace_expression(expr_t* expr,mloop_t* mloop) {
  symboltable_t *new_temp;
  expr_t *new_expr;
  char *new_id = (char *)malloc(10);
  statement_t *body=T_MLOOP_BODY(mloop);

  /* drop out if replacement expr already exists */
  if (find_replacement(mloop, expr)) return;

  /* create a new temporary variable */
  sprintf(new_id,"__temp%d",idnum);
  new_temp = alloc_loc_st (S_VARIABLE,new_id);
  S_DTYPE(new_temp) = T_TYPEINFO(expr);
  S_VAR_INIT(new_temp) = NULL;
  S_INIT(new_temp) = build_init(expr,NULL);
  S_PROHIBITIONS(new_temp) |= TILED_OUTER_MLOOP_FLAG;
  new_expr = build_0ary_op(VARIABLE,new_temp);
  idnum++;

  /* replace the variable */
  T_ADD_MLOOP_VAR (mloop, new_temp, T_MLOOP_ORDER(mloop, T_MLOOP_RANK(mloop)-1));
  replace_expr(expr, copy_expr(new_expr));
  /*add_replacement(mloop,copy_expr(expr),copy_expr(new_expr));*/

  /* if necessary, reassign the variable */
  if (is_written(new_expr,body)) {
    statement_t* post;
    expr_t* reassign;
    reassign=build_binary_op(BIASSIGNMENT,copy_expr(new_expr),copy_expr(expr));
    post=build_expr_statement(reassign,T_LINENO(body),T_FILENAME(body));
    T_PROHIBITIONS(post) |= TILED_OUTER_MLOOP_FLAG;
    T_ADD_MLOOP_POST(mloop,post,T_MLOOP_ORDER(mloop, T_MLOOP_RANK(mloop)-1));
  }
} /* replace_expression(expr,mloop) */
Пример #2
0
void main (int argc, char **argv) 
{
  pid_t    pid;
  uint     pte;
#define SIZE (1024*1024)
  char     buf[SIZE];

  pid = fork();

  //==================== SERVER ====================//
  if (pid == 0) { 
    ipc_register(IPC_USER, dispatch);
    envid = sys_geteid();

    sleep(5);

    return;
  }

  //==================== CLIENT ====================//

  envid = pid2envid(pid);
  yield(envid);

  // The "shared" memory used to communicate with the server

  shared_state = (arg_t *) malloc (sizeof(arg_t));
  if (shared_state == NULL) {
    printf ("[CLIENT] Couldn't allocate shared_state memory\n");
    exit(-1);
  }
  shared_state->nbytes = 12345; // touch the memory
  
  // Figure out the pte corresponding to the "shared" memory

  pte = sys_read_pte ((uint) shared_state, 0, sys_geteid());
  if (pte == 0) {
    printf ("[CLIENT] Found null pte\n");
    exit (-1);
  }

  // Now start the operations

  S_INIT(pte);

  {
    int i, t=0, rounds=atoi(argv[1]);

    for (i=0 ; i < rounds ; i++) {
      pctrval t0 = rdtsc();
      S_EMPTY(0);
      t += (rdtsc() - t0);
      bzero ((void *)buf, SIZE);
    }

    printf ("%d\t%d\n", rounds, (unsigned int) t/200);
  }

  
}