Esempio n. 1
0
static int UserMoniter()
{
    char command[100];
    int action = -1, target = -1, param1 = -1, param2 = -1, value;
    int con_per_worker;
    int res;
    char c;
    command_t cmd;
    MonitorUsage();
    while (1) {
        int count = 0;
	printf("user_moniter>>");
        scanf("%s", command);
	sscanf(command,"%d:%d:%d:%d",&action, &target, &param1, &param2);
	if (action == -1 || target == -1 || param1 == -1 || param2 == -1) {
	    MonitorUsage();
	    continue;
	}
	con_per_worker = param2 / worker;
	SetCommand(cmd, action, target, param1, con_per_worker);
	while (count < worker - 1) {
	    res = write(pipe_fd[count][1],&cmd, sizeof(command_t));
	    sys_assert(res, "write, user_moniter");
	    count++;
	}
	SetCommand(cmd, action, target, param1, param2 - (worker - 1) * con_per_worker);
	res = write(pipe_fd[count][1],&cmd, sizeof(command_t));
	sys_assert(res, "write, user_moniter");
    }
}
Esempio n. 2
0
static int __mcd_transceive(const char *msg, char *echo)
{
	char i, str[MCD_LINEBUF_BYTES];

	/*to avoid aduc uart irq too frequently*/
	static time_t mcd_timer = 0;
	while((mcd_timer != 0) && (time_left(mcd_timer) > 0)) {
		sys_update();
	}
	mcd_timer = time_get(50);

	//flush
	mcd_bus->putchar('\n');
        i = 0;
	while(mcd_bus->poll() > 0) {
		char c = mcd_bus->getchar();
		i ++;
		if(i > 64) {
			sys_assert(1 == 0); //uart data chaos?
			return - MCD_E_STRANGE;
		}
	}

	//send
	int n = strnlen(msg, 32);
	sys_assert(n < 30); //msg is too long??
	for(int j = 0; msg[j] != 0; j ++) {
		if(msg[j] == '\n') mcd_bus->putchar('\r');
		mcd_bus->putchar(msg[j]);
	}

	//recv
	time_t deadline = time_get(50);
	memset(str, 0x00, MCD_LINEBUF_BYTES);
	for(i = 0;;) {
		if(mcd_bus->poll()) {
			char c = mcd_bus->getchar();
			if((c == '\n') || (c == '\r')) {
                                str[i] = 0;
				break;
			}

			str[i] = c;
			i ++;
		}

		if(time_left(deadline) < 0) {
			//sys_assert(1 == 0);
			return - MCD_E_TIMEOUT;
		}
	}

	//resolve echo bytes
	int ecode = (echo != NULL) ? 0 : atoi(str);
	if(echo) {
		strcpy(echo, str);
	}
	return ecode;
}
Esempio n. 3
0
File: dmm.c Progetto: miaofng/ulp
int dmm_select(struct dmm_s *dmm_new)
{
	sys_assert(dmm_new != NULL);
	dmm = dmm_new;
	return instr_select(dmm->instr);
	return 0;
}
Esempio n. 4
0
int Process(int worker)
{
    //int port  = atoi(server_config[1]);
    int count = 0;
    pid_t  pid[10], pid_monitor;
    int res, status;
    Worker *w = NULL;
    while (count < worker) {
        res        = pipe(pipe_fd[count]);
	sys_assert(res, "pipe");
        pid[count] = fork();
        switch(pid[count]) {
	    case -1:
	        sys_assert(pid[count], "fork");
	        break;
	    case  0:
	        w = new Worker(server_ip, server_port);
		res_assert((void*)w, "process");
		w->m_info.set_rpipe(pipe_fd[count][0]);
		w->m_info.set_id(count);
		close(pipe_fd[count][1]);
		w->Start();
		delete w;
		w = NULL;
	        break;
	    default:
		close(pipe_fd[count][0]);
	        count++;
	        printf("success child %d\n", count);
	}
    } 
    if (pid[count - 1]) {
        UserMoniter();
        for (count = 0; count < worker; ++count) {
            waitpid(pid[count], &status, 0);
        }
        LOG(stderr, "child all stop\n");
    }
}
Esempio n. 5
0
File: dmm.c Progetto: miaofng/ulp
struct dmm_s* dmm_open(const char *name)
{
	struct instr_s *instr = instr_open(INSTR_CLASS_DMM, name);
	if(instr == NULL) {
		return NULL;
	}

	struct dmm_s *dmm_new = instr->priv;
	if(dmm_new == NULL) {
		instr->priv = dmm_new = sys_malloc(sizeof(struct dmm_s));
		sys_assert(dmm_new != NULL);
		dmm_new->instr = instr;
	}

	dmm_select(dmm_new);
	return dmm_new;
}
// ===========================================================================
// ===========================================================================
void fft_myrmics_Xpose(float ***src_buf_copy, rid_t *dst_buf_row, 
                       float ***dst_buf, int tile_size, int blk_size) {

  void          *args[MAX_TILES + 4];
  unsigned int  deps[MAX_TILES + 4];
  int           i;
  int           j;


  sys_assert(tile_size <= MAX_TILES);
  
  for (i = 0; i < tile_size; i++) {
    
    args[0] = (void *) dst_buf_row[i];
    deps[0] = SYS_TYPE_REGION_ARG | SYS_TYPE_INOUT_ARG;

    args[1] = (void *) dst_buf[i];
    deps[1] = SYS_TYPE_BYVALUE_ARG;

    args[2] = (void *) tile_size;
    deps[2] = SYS_TYPE_BYVALUE_ARG;

    args[3] = (void *) blk_size;
    deps[3] = SYS_TYPE_BYVALUE_ARG;

    for (j = 0; j < tile_size; j++) {

      args[j + 4] = (void *) src_buf_copy[j][i];
      deps[j + 4] = SYS_TYPE_IN_ARG;

    }

    sys_spawn(2, args, deps, tile_size + 4); // fft_myrmics_Xpose_row
  }

}