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, ¶m1, ¶m2); 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"); } }
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; }
int dmm_select(struct dmm_s *dmm_new) { sys_assert(dmm_new != NULL); dmm = dmm_new; return instr_select(dmm->instr); return 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"); } }
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 } }