void* var_get(vararray* array, off_t idx) { if (idx < array->nmax) return (void*)((char*)array->mem + (idx * array->elem_size)); FATALERR("Gone out of the array."); }
int main(int argc, char **argv) { int i; char buffer[MAXBUFSIZE]; int done=0; set_defaults(); handle_args(argc, argv, 0); srand(time(NULL)); if(num_clients < 1) FATALERR("More than 1 node is required to run\n"); // Capture exit signals to safetly close the program signal(SIGINT, signal_handler); signal(SIGTERM, signal_handler); signal(SIGABRT, signal_handler); // If there was no ip address set in the command line, listen for a broadcast from the server if(server_addr.sin_addr.s_addr == 0) { setup_listen_socket(); obtain_server(); } // Attempt to create a TCP connection to the server if(!connectTCP()) QUIT(); send_data(); signal_handler(0); }
void test_mpi(threaddata_t *tdata) { MPI_Request sendhandle = MPI_REQUEST_NULL; MPI_Request recvhandle = MPI_REQUEST_NULL; int peer = tdata->tid_peer; int node = tt_thread_map[peer]; int mpipeer = gasnetnode_to_mpirank[node]; int sz; char *sendbuf; char *recvbuf; int tag = tdata->tid; int i; do { sz = RANDOM_SIZE(); } while (sz == 0); /* some MPI's may barf on 0 byte send/recv */ sendbuf = (char*)test_malloc(sz); recvbuf = (char*)test_malloc(sz); for (i=0; i < MIN(sz,4096); i++) { /* randomize at least the first 4 KB */ sendbuf[i] = (char)rand(); } ACTION_PRINTF("tid=%3d> starting MPI ping-pong with tid=%3d.\n", tdata->tid, peer); MPI_LOCK(); ACTION_PRINTF("tid=%3d> setting MPI_Irecv, %i bytes\n", tdata->tid, sz); MPI_SAFE(MPI_Irecv(recvbuf, sz, MPI_BYTE, mpipeer, 10000+tag, MPI_COMM_WORLD, &recvhandle)); assert(recvhandle != MPI_REQUEST_NULL); ACTION_PRINTF("tid=%3d> sending MPI message, %i bytes\n", tdata->tid, sz); MPI_SAFE(MPI_Isend(sendbuf, sz, MPI_BYTE, mpipeer, tag, MPI_COMM_WORLD, &sendhandle)); assert(sendhandle != MPI_REQUEST_NULL); MPI_UNLOCK(); tdata->flag = -1; gasnett_local_wmb(); ACTION_PRINTF("tid=%3d> MPI AMShortRequest to tid=%3d\n", tdata->tid, peer); GASNET_Safe(gasnet_AMRequestShort2(node, hidx_mpi_handler, tdata->tid, sz)); while (tdata->flag != 0) { ACTION_PRINTF("tid=%3d> MPI probe AMShortRequest to tid=%3d\n", tdata->tid, peer); GASNET_Safe(gasnet_AMRequestShort1(node, hidx_mpi_probehandler, tdata->tid)); gasnett_sched_yield(); test_sleep(tdata); GASNET_Safe(gasnet_AMPoll()); mpi_test(&sendhandle); /* occasional testing may be required for progress */ mpi_test(&recvhandle); } tdata->flag = -1; mpi_complete(&sendhandle); mpi_complete(&recvhandle); /* verify */ for (i=0; i < sz; i++) { if (sendbuf[i] != recvbuf[i]) FATALERR("mismatch at element %i in MPI test.", i); } test_free(sendbuf); test_free(recvbuf); ACTION_PRINTF("tid=%3d> MPI ping-pong with tid=%3d complete.\n", tdata->tid, peer); }
void put_cmd(vararray* binary, line_t* cur_line, int j, vararray* labels, vararray* funcs, int step) { int i = j, argc = 0, to_push = 0, pos = 0; char cmd_num = 0; char* keyword = cur_line->words[j]; char modif[4], words[2][MAX_WORD_LENGTH]; memset(modif, 0, sizeof(modif)); memset(words, 0, sizeof(words)); for (i = j+1; i < cur_line->num; (argc++, i++)) { DBGPRINT("1/Argument %d: %s\n", 0, words[0]);//What's this debugoutput tell you? strcpy(words[argc], cur_line->words[i]); DBGPRINT("2/Argument %d: %s\n", 0, words[0]); DBGPRINT("Argument %d: %s\n", argc, words[argc]);//QUESTION: Why you repeat the same dbgoutput here modif[argc] = get_modif(words[argc]); DBGPRINT("Argument %d: %s\n", 0, words[0]);// and here? } DBGPRINT("Argument %d: %s\n", 0, words[0]); DBGPRINT("Pre-define: Number: %d, keyword: \"%s\" MODIF: \"%s\" argc: %d\n", cmd_num, keyword, modif, argc); #define CMD_(number_, keyword_, argc_, modif_, code_)\ if ((!strcmp(keyword, #keyword_)) && (modif_cmp(modif, modif_)) && (argc_ == argc)) {\ strcpy(modif, modif_);\ cmd_num = number_;\ } else #include "../s_common/s_cmdlist.h" #undef CMD_ USERERR("No command found for \"%s\"\n", cur_line->words[0]); DBGPRINT("Number: %d, keyword: \"%s\" MODIF: \"%s\" argc: %d\n", cmd_num, keyword, modif, argc); pos = binary->nmax;//QUESTION: What's purpose of it? var_push(binary, &cmd_num); for (i = 0; i < argc; i++) { switch (modif[i]) { case 'r': { DBGPRINT("Call of get_reg_num.\n"); to_push = get_reg_num(words[i]); break; } case 'n': { to_push = get_digit(words[i]); break; } case 'f': { to_push = get_lf(words[i], funcs, pos, step); break; } case 'l': { to_push = get_lf(words[i], labels, pos, step); break; } default: { FATALERR("Modif failure. Act_modif: %s\n", modif);//I think it's debug error. User shouldn't know it break; } } DBGPRINT("ARGUMENT %d: %d\n", i, to_push); var_pushn(binary, &to_push, sizeof(int)); } DBGPRINT("Num of elems in bin: %d;\n"\ "-----------------------------\n", (int)binary->nmax); }