void h2o_context_init_pathconf_context(h2o_context_t *ctx, h2o_pathconf_t *pathconf) { /* add pathconf to the inited list (or return if already inited) */ size_t i; for (i = 0; i != ctx->_pathconfs_inited.size; ++i) if (ctx->_pathconfs_inited.entries[i] == pathconf) return; h2o_vector_reserve(NULL, &ctx->_pathconfs_inited, ctx->_pathconfs_inited.size + 1); ctx->_pathconfs_inited.entries[ctx->_pathconfs_inited.size++] = pathconf; #define DOIT(type, list) \ do { \ size_t i; \ for (i = 0; i != pathconf->list.size; ++i) { \ type *o = pathconf->list.entries[i]; \ if (o->on_context_init != NULL) \ o->on_context_init(o, ctx); \ } \ } while (0) DOIT(h2o_handler_t, handlers); DOIT(h2o_filter_t, filters); DOIT(h2o_logger_t, loggers); #undef DOIT }
void h2o_context_dispose_pathconf_context(h2o_context_t *ctx, h2o_pathconf_t *pathconf) { /* nullify pathconf in the inited list (or return if already disposed) */ size_t i; for (i = 0; i != ctx->_pathconfs_inited.size; ++i) if (ctx->_pathconfs_inited.entries[i] == pathconf) break; if (i == ctx->_pathconfs_inited.size) return; ctx->_pathconfs_inited.entries[i] = NULL; #define DOIT(type, list) \ do { \ size_t i; \ for (i = 0; i != pathconf->list.size; ++i) { \ type *o = pathconf->list.entries[i]; \ if (o->on_context_dispose != NULL) \ o->on_context_dispose(o, ctx); \ } \ } while (0) DOIT(h2o_handler_t, handlers); DOIT(h2o_filter_t, filters); DOIT(h2o_logger_t, loggers); #undef DOIT }
uint32_t computeTimeDifference(TimeStamp *f,TimeStamp *l) { uint32_t h,m,s,ms,r=0,result=0; #define DOIT(x,next) if(l->x < f->x) \ { \ r=(next-(f->x-l->x));\ result-=1; \ }\ else r=(l->x-f->x);\ result=result*next+r; #define PRINT(z,x) printf(#z"%02d:%02d:%02d\n",x->hh,x->mm,x->ss,x->ff); DOIT(hh,0); DOIT(mm,60); DOIT(ss,60); DOIT(ff,1000); #if 0 PRINT(first,f); PRINT(last,l); #endif printf("Time difference:%lu s\n",result/1000); return result; }
int main(int argc, char *argv[]) { duk_int_t res = 0; /* initialize */ duk_context *ctx = duk_create_heap_default(); /* duktape does not expose a standard "global" by default */ DOIT("var global = (function(){ return this; }).call(null);"); /* load library */ res = eval_file(ctx, "shim.min.js"); if(res != 0) FAIL("shim load") res = eval_file(ctx, "xlsx.full.min.js"); if(res != 0) FAIL("library load") /* get version string */ duk_eval_string(ctx, "XLSX.version"); printf("SheetJS library version %s\n", duk_get_string(ctx, -1)); duk_pop(ctx); /* read file */ res = load_file(ctx, argv[1], "buf"); if(res != 0) FAIL("file load") printf("Loaded file %s\n", argv[1]); /* parse workbook */ DOIT("wb = XLSX.read(buf, {type:'buffer', cellNF:true});"); DOIT("ws = wb.Sheets[wb.SheetNames[0]]"); /* print CSV */ duk_eval_string(ctx, "XLSX.utils.sheet_to_csv(ws)"); printf("%s\n", duk_get_string(ctx, -1)); duk_pop(ctx); /* change cell A1 to 3 */ DOIT("ws['A1'].v = 3; delete ws['A1'].w;"); /* write file */ #define WRITE_TYPE(BOOKTYPE) \ DOIT("newbuf = (XLSX.write(wb, {type:'array', bookType:'" BOOKTYPE "'}));");\ res = save_file(ctx, "sheetjsw." BOOKTYPE, "newbuf");\ if(res != 0) FAIL("save sheetjsw." BOOKTYPE) WRITE_TYPE("xlsb") WRITE_TYPE("xlsx") WRITE_TYPE("xls") WRITE_TYPE("csv") /* cleanup */ duk_destroy_heap(ctx); return res; }
static const char* get_token_to_eol(const char* buf, const char* buf_end, const char** token, size_t* token_len, int* ret) { const char* token_start = buf; #ifdef __SSE4_2__ static const char ranges1[] = "\0\010" /* allow HT */ "\012\037" /* allow SP and up to but not including DEL */ "\177\177" /* allow chars w. MSB set */ ; int found; buf = findchar_fast(buf, buf_end, ranges1, sizeof(ranges1) - 1, &found); if (found) goto FOUND_CTL; #else /* find non-printable char within the next 8 bytes, this is the hottest code; manually inlined */ while (likely(buf_end - buf >= 8)) { #define DOIT() if (unlikely(! IS_PRINTABLE_ASCII(*buf))) goto NonPrintable; ++buf DOIT(); DOIT(); DOIT(); DOIT(); DOIT(); DOIT(); DOIT(); DOIT(); #undef DOIT continue; NonPrintable: if ((likely((unsigned char)*buf < '\040') && likely(*buf != '\011')) || unlikely(*buf == '\177')) { goto FOUND_CTL; } ++buf; } #endif for (; ; ++buf) { CHECK_EOF(); if (unlikely(! IS_PRINTABLE_ASCII(*buf))) { if ((likely((unsigned char)*buf < '\040') && likely(*buf != '\011')) || unlikely(*buf == '\177')) { goto FOUND_CTL; } } } FOUND_CTL: if (likely(*buf == '\015')) { ++buf; EXPECT_CHAR('\012'); *token_len = buf - 2 - token_start; } else if (*buf == '\012') { *token_len = buf - token_start; ++buf; } else { *ret = -1; return NULL; } *token = token_start; return buf; }
static void on_context_dispose(h2o_context_t *ctx, h2o_pathconf_t *pathconf) { #define DOIT(type, list) \ do { \ size_t i; \ for (i = 0; i != pathconf->list.size; ++i) { \ type *o = pathconf->list.entries[i]; \ if (o->on_context_dispose != NULL) \ o->on_context_dispose(o, ctx); \ } \ } while (0) DOIT(h2o_handler_t, handlers); DOIT(h2o_filter_t, filters); DOIT(h2o_logger_t, loggers); #undef DOIT }
static void on_context_init(h2o_context_t *ctx, h2o_pathconf_t *pathconf) { #define DOIT(type, list) \ do { \ size_t i; \ for (i = 0; i != pathconf->list.size; ++i) { \ type *o = pathconf->list.entries[i]; \ if (o->on_context_init != NULL) \ ctx->_module_configs[o->_config_slot] = o->on_context_init(o, ctx); \ } \ } while (0) DOIT(h2o_handler_t, handlers); DOIT(h2o_filter_t, filters); DOIT(h2o_logger_t, loggers); #undef DOIT }
int main(void){ int cnum = 0, N, i, j; while(scanf("%d",&N) && N){ for(i = 0; i < N; ++i){ scanf("%s",&word[i]); j = 0; while(word[i][j]){ if(word[i][j] <= 'Z') word[i][j] += 32; j++; } wsize[i] = 1; for(j = 0; j < i; ++j) DOIT(i,j); } printf("%d\n",++cnum); for(i = 0; i < N; ++i){ printf("%s ",word[i]); word[i][wsize[i]] = 0; printf("%s\n",word[i]); } } return 0; }
echoObject * echoListSplit3(echoScene *scene, echoObject *list, int depth) { echoObject *ret, *tmp0, *tmp1; if (!( echoTypeList == list->type || echoTypeAABBox == list->type )) return NULL; if (!depth) return list; ret = echoListSplit(scene, list, 0); #define DOIT(obj, ax) ((obj) = echoListSplit(scene, (obj), (ax))) #define MORE(obj) echoTypeSplit == (obj)->type if (MORE(ret)) { tmp0 = DOIT(SPLIT(ret)->obj0, 1); if (MORE(tmp0)) { tmp1 = DOIT(SPLIT(tmp0)->obj0, 2); if (MORE(tmp1)) { SPLIT(tmp1)->obj0 = echoListSplit3(scene, SPLIT(tmp1)->obj0, depth-1); SPLIT(tmp1)->obj1 = echoListSplit3(scene, SPLIT(tmp1)->obj1, depth-1); } tmp1 = DOIT(SPLIT(tmp0)->obj1, 2); if (MORE(tmp1)) { SPLIT(tmp1)->obj0 = echoListSplit3(scene, SPLIT(tmp1)->obj0, depth-1); SPLIT(tmp1)->obj1 = echoListSplit3(scene, SPLIT(tmp1)->obj1, depth-1); } } tmp0 = DOIT(SPLIT(ret)->obj1, 1); if (MORE(tmp0)) { tmp1 = DOIT(SPLIT(tmp0)->obj0, 2); if (MORE(tmp1)) { SPLIT(tmp1)->obj0 = echoListSplit3(scene, SPLIT(tmp1)->obj0, depth-1); SPLIT(tmp1)->obj1 = echoListSplit3(scene, SPLIT(tmp1)->obj1, depth-1); } tmp1 = DOIT(SPLIT(tmp0)->obj1, 2); if (MORE(tmp1)) { SPLIT(tmp1)->obj0 = echoListSplit3(scene, SPLIT(tmp1)->obj0, depth-1); SPLIT(tmp1)->obj1 = echoListSplit3(scene, SPLIT(tmp1)->obj1, depth-1); } } } return ret; }
static int parse_who_options(aClient *sptr, int argc, char **argv) { char *s = argv[0]; int what = WHO_ADD; int i = 1; /* A few helper macro's because this is used a lot, added during recode by Syzop. */ /** function requiress a parameter: check if there's one, if not: return -1. */ #define REQUIRE_PARAM() { if (i >= argc) { \ who_sendhelp(sptr); \ return -1; \ } } while(0); /** set option 'x' depending on 'what' (add/want or del/dontwant) */ #define SET_OPTION(x) { if (what == WHO_ADD) \ x = WHO_WANT; \ else \ x = WHO_DONTWANT; \ } while(0); /** Eat a param, set the param in memory and set the option to want or dontwant */ #define DOIT(x,y) { REQUIRE_PARAM(); x = argv[i]; SET_OPTION(y); i++; } while(0); if (*s != '-' && *s != '+') return 0; while (*s) { switch (*s) { case '+': what = WHO_ADD; break; case '-': what = WHO_DEL; break; case 'a': SET_OPTION(wfl.want_away); break; case 'c': DOIT(wfl.channel, wfl.want_channel); break; case 'g': REQUIRE_PARAM() if (!IsAnOper(sptr)) break; /* oper-only */ wfl.gecos = argv[i]; SET_OPTION(wfl.want_gecos); i++; break; case 's': DOIT(wfl.server, wfl.want_server); break; case 'h': DOIT(wfl.host, wfl.want_host); break; case 'i': REQUIRE_PARAM() if (!IsAnOper(sptr)) break; /* oper-only */ wfl.ip = argv[i]; SET_OPTION(wfl.want_ip); i++; break; case 'n': DOIT(wfl.nick, wfl.want_nick); break; case 'u': DOIT(wfl.user, wfl.want_user); break; case 'm': REQUIRE_PARAM() { char *s = argv[i]; int *umodes; if (what == WHO_ADD) umodes = &wfl.umodes_want; else umodes = &wfl.umodes_dontwant; while (*s) { int i; for (i = 0; i <= Usermode_highest; i++) if (*s == Usermode_Table[i].flag) { *umodes |= Usermode_Table[i].mode; break; } s++; } if (!IsAnOper(sptr)) *umodes = *umodes & (UMODE_OPER | UMODE_LOCOP | UMODE_SADMIN | UMODE_ADMIN | UMODE_COADMIN | UMODE_NETADMIN | UMODE_BOT); if (*umodes == 0) return -1; } i++; break; case 'M': SET_OPTION(wfl.common_channels_only); break; case 'R': if (!IsAnOper(sptr)) break; if (what == WHO_ADD) who_flags |= WF_REALHOST; else who_flags &= ~WF_REALHOST; break; case 'I': if (!IsAnOper(sptr)) break; if (what == WHO_ADD) who_flags |= WF_IP; else who_flags &= ~WF_IP; break; default: who_sendhelp(sptr); return -1; } s++; } return i; #undef REQUIRE_PARAM #undef SET_OPTION #undef DOIT }
/** \fn run */ uint8_t ADM_AudiocoderLavcodec::run(uint8_t *inptr, uint32_t nbIn, float *outptr, uint32_t *nbOut) { *nbOut=0; // Shrink if(_head && (_tail+nbIn)*3>ADMWA_BUF*2) { memmove(_buffer,_buffer+_head,_tail-_head); _tail-=_head; _head=0; } // ADM_assert(nbIn+_tail<ADMWA_BUF); memcpy(_buffer+_tail,inptr,nbIn); _tail+=nbIn; AVPacket pkt; av_init_packet(&pkt); int nbChunk,out,gotData; while(_tail-_head>=_blockalign) { nbChunk=(_tail-_head)/_blockalign; pkt.size=nbChunk*_blockalign; pkt.data=_buffer+_head; out=avcodec_decode_audio4(_context, _frame, &gotData, &pkt); if(out<0) { ADM_warning( "[ADM_ad_lav] *** decoding error (%u)***\n",_blockalign); _head+=1; // Try skipping some bytes continue; } _head+=out; // consumed bytes if(!gotData) continue; switch(_context->sample_fmt) { case AV_SAMPLE_FMT_FLT: decodeToFloat(&outptr,nbOut);break; case AV_SAMPLE_FMT_FLTP: decodeToFloatPlanar(&outptr,nbOut);break; case AV_SAMPLE_FMT_S32P: decodeToS32Planar(&outptr,nbOut);break; case AV_SAMPLE_FMT_S32: decodeToS32(&outptr,nbOut);break; default: ADM_info("Decoder created using ??? %d...\n",_context->sample_fmt); ADM_assert(0); break; } } //------------------ if(channels>=5 ) { CHANNEL_TYPE *p_ch_type = channelMapping; #define DOIT(x,y) if(_context->channel_layout & AV_CH_##x) *(p_ch_type++)=ADM_CH_##y; DOIT(FRONT_LEFT,FRONT_LEFT); DOIT(FRONT_RIGHT,FRONT_RIGHT); DOIT(FRONT_CENTER,FRONT_CENTER); DOIT(LOW_FREQUENCY,LFE); DOIT(SIDE_LEFT,REAR_LEFT); DOIT(SIDE_RIGHT,REAR_RIGHT); // AV_CH_SIDE_LEFT } return 1; }
uint8_t ADM_AudiocodecWMA::run(uint8_t *inptr, uint32_t nbIn, float *outptr, uint32_t *nbOut) { int out=0; int max=0,pout=0; int16_t *run16; int nbChunk; *nbOut=0; // Shrink if(_head && (_tail+nbIn)*3>ADMWA_BUF*2) { memmove(_buffer,_buffer+_head,_tail-_head); _tail-=_head; _head=0; } // ADM_assert(nbIn+_tail<ADMWA_BUF); memcpy(_buffer+_tail,inptr,nbIn); _tail+=nbIn; while(_tail-_head>=_blockalign) { nbChunk=(_tail-_head)/_blockalign; pout=SCRATCH_PAD_SIZE; out=avcodec_decode_audio2(_context,(int16_t *)scratchPad, &pout,_buffer+_head,nbChunk*_blockalign); if(out<0) { printf( " *** WMA decoding error (%u)***\n",_blockalign); _head+=1; // Try skipping some bytes continue; } if(pout>=SCRATCH_PAD_SIZE) { printf("Produced : %u, buffer %u,in%u\n",pout,SCRATCH_PAD_SIZE,_tail-_head); ADM_assert(0); } if(_context->codec_id == CODEC_ID_NELLYMOSER) { // Hack, it returns inconsistent size out=nbChunk*_blockalign; } _head+=out; // consumed bytes pout>>=1; *nbOut+=pout; run16=(int16_t *)scratchPad; for(int i=0;i<pout;i++) { *outptr++=((float)run16[i])/32767.; } if(_channels>=5 ) { CHANNEL_TYPE *p_ch_type = channelMapping; #define DOIT(x,y) if(_context->channel_layout & CH_##x) *(p_ch_type++)=CHTYP_##y; if(_context->codec_id == CODEC_ID_DTS) { DOIT(FRONT_LEFT,FRONT_LEFT); DOIT(FRONT_RIGHT,FRONT_RIGHT); DOIT(FRONT_CENTER,FRONT_CENTER); DOIT(SIDE_LEFT,REAR_LEFT); DOIT(SIDE_RIGHT,REAR_RIGHT); DOIT(LOW_FREQUENCY,LFE); }else { DOIT(LOW_FREQUENCY,LFE); DOIT(FRONT_LEFT,FRONT_LEFT); DOIT(FRONT_CENTER,FRONT_CENTER); DOIT(FRONT_RIGHT,FRONT_RIGHT); DOIT(SIDE_LEFT,REAR_LEFT); DOIT(SIDE_RIGHT,REAR_RIGHT); } } } return 1; }
int main(int argc, char **argv) { int iters = 0; int arg; void *alloc = NULL; int firstlastmode = 0; int fullduplexmode = 0; int crossmachinemode = 0; int singlesender = 0; int help = 0; /* call startup */ GASNET_Safe(gasnet_init(&argc, &argv)); /* parse arguments */ arg = 1; while (argc > arg) { if (!strcmp(argv[arg], "-in")) { insegment = 1; ++arg; } else if (!strcmp(argv[arg], "-out")) { insegment = 0; ++arg; } else if (!strcmp(argv[arg], "-sl")) { ++arg; if (argc > arg) { stridelevels = atoi(argv[arg]); arg++; } else help = 1; } else if (!strcmp(argv[arg], "-mincontig")) { ++arg; if (argc > arg) { min_contig = atoi(argv[arg]); arg++; } else help = 1; } else if (!strcmp(argv[arg], "-maxcontig")) { ++arg; if (argc > arg) { max_contig = atoi(argv[arg]); arg++; } else help = 1; } else if (!strcmp(argv[arg], "-contigfactor")) { ++arg; if (argc > arg) { contigfactor = atoi(argv[arg]); arg++; } else help = 1; } else if (!strcmp(argv[arg], "-mindata")) { ++arg; if (argc > arg) { min_payload = atoi(argv[arg]); arg++; } else help = 1; } else if (!strcmp(argv[arg], "-maxdata")) { ++arg; if (argc > arg) { max_payload = atoi(argv[arg]); arg++; } else help = 1; } else if (!strcmp(argv[arg], "-datafactor")) { ++arg; if (argc > arg) { datafactor = atoi(argv[arg]); arg++; } else help = 1; } else if (!strcmp(argv[arg], "-densitysteps")) { ++arg; if (argc > arg) { densitysteps = atoi(argv[arg]); arg++; } else help = 1; } else if (!strcmp(argv[arg], "-f")) { firstlastmode = 1; ++arg; } else if (!strcmp(argv[arg], "-c")) { crossmachinemode = 1; ++arg; } else if (!strcmp(argv[arg], "-a")) { fullduplexmode = 1; ++arg; } else if (!strcmp(argv[arg], "-p")) { dogets = 0; doputs = 1; ++arg; } else if (!strcmp(argv[arg], "-g")) { dogets = 1; doputs = 0; ++arg; } else if (!strcmp(argv[arg], "-r")) { remotecontig = 1; ++arg; } else if (!strcmp(argv[arg], "-l")) { localcontig = 1; ++arg; } else if (argv[arg][0] == '-') { help = 1; ++arg; } else break; } if (argc > arg) { iters = atoi(argv[arg]); arg++; } if (!iters) iters = 1000; if (argc > arg) { TEST_SECTION_PARSE(argv[arg]); arg++; } if (min_contig && max_contig && min_contig > max_contig) { ERR("min_contig > max_contig"); help = 1; } if (min_payload && max_payload && min_payload > max_payload) { ERR("min_payload > max_payload"); help = 1; } if (min_payload && min_contig && min_payload < min_contig) { ERR("min_payload < min_contig"); help = 1; } if (max_contig && max_payload && max_contig > max_payload) { ERR("max_contig > max_payload"); help = 1; } if (contigfactor < 2) { ERR("contigfactor < 2"); help = 1; } if (datafactor < 2) { ERR("datafactor < 2"); help = 1; } if (!max_payload) max_payload = 2*1024*1024; /* 2 MB default */ #ifdef GASNET_SEGMENT_EVERYTHING maxsz = gasnet_getMaxGlobalSegmentSize(); #else maxsz = 16*1024*1024; #endif max_payload = (int)MIN(maxsz, max_payload); maxsz = MIN(((uint64_t)max_payload) * densitysteps,maxsz); if (!min_contig) min_contig = 8; if (!max_contig) max_contig = MIN(256*1024,max_payload); if (!min_payload) min_payload = min_contig; GASNET_Safe(gasnet_attach(NULL, 0, TEST_SEGSZ_REQUEST, TEST_MINHEAPOFFSET)); test_init("testvisperf",1, "[options] (iters) (test_sections)\n" " -p/-g selects puts only or gets only (default is both).\n" " -r/-l selects remotely contiguous or locally contiguous (default is neither).\n" " -mindata/-maxdata <sz> \n" " selects sz as min/max data payload per operation.\n" " -mincontig/-maxcontig <sz> \n" " selects sz as min/max contig size.\n" " -datafactor/-contigfactor <f> \n" " selects f as growth factor for data/contig sizes.\n" " -densitysteps <d> \n" " selects d density steps, inclusive from 100%..100/d%\n" " -sl <n> selects n striding levels (default is 2).\n" " -in/-out selects whether the initiator-side\n" " memory is in the GASNet segment or not (default is not).\n" " -a enables full-duplex mode, where all nodes send.\n" " -c enables cross-machine pairing, default is nearest neighbor.\n" " -f enables 'first/last' mode, where the first/last\n" " nodes communicate with each other, while all other nodes sit idle."); if (help || argc > arg) test_usage(); /* get SPMD info */ myproc = gasnet_mynode(); numprocs = gasnet_nodes(); if (!firstlastmode) { /* Only allow 1 or even number for numprocs */ if (numprocs > 1 && numprocs % 2 != 0) { MSG0("WARNING: This test requires a unary or even number of nodes. Test skipped.\n"); gasnet_exit(0); /* exit 0 to prevent false negatives in test harnesses for smp-conduit */ } } /* Setting peer thread rank */ if (firstlastmode) { peerproc = (myproc == 0 ? numprocs-1 : 0); iamsender = (fullduplexmode ? myproc == 0 || myproc == numprocs-1 : myproc == 0); } else if (numprocs == 1) { peerproc = 0; iamsender = 1; } else if (crossmachinemode) { if (myproc < numprocs / 2) { peerproc = myproc + numprocs/2; iamsender = 1; } else { peerproc = myproc - numprocs/2; iamsender = fullduplexmode; } } else { peerproc = (myproc % 2) ? (myproc - 1) : (myproc + 1); iamsender = (fullduplexmode || myproc % 2 == 0); } singlesender = (numprocs == 1) || ((numprocs == 2 || firstlastmode) && !fullduplexmode); Rbase = TEST_SEG(peerproc); if (insegment) { Lbase = TEST_SEG(myproc); } else { alloc = test_calloc(maxsz+PAGESZ,1); /* use calloc to prevent valgrind warnings */ Lbase = alignup_ptr(alloc, PAGESZ); /* ensure page alignment of base */ } assert(((uintptr_t)Lbase) % PAGESZ == 0); if (myproc == 0) { MSG0("Running %i iterations of %s%s%snon-contiguous put/get%s%s\n local data %s-segment for sizes: %i...%i\n", iters, (firstlastmode ? "first/last " : ""), (fullduplexmode ? "full-duplex ": ""), (crossmachinemode ? "cross-machine ": ""), (remotecontig?"(remotely-contiguous)":""), (localcontig?"(locally-contiguous)":""), insegment ? "in" : "out", min_payload, max_payload); printf("rows are databytes/op : bandwidth values in MB/s\n"); } BARRIER(); { int contigsz; int rawdatasz; int isget; test_vis_t viscat; for (viscat = TEST_V; viscat <= TEST_S; viscat++) { for (isget = 0; isget < 2; isget++) { if (TEST_SECTION_BEGIN_ENABLED()) { if (isget && !dogets) continue; if (!isget && !doputs) continue; if (!dovis[viscat]) continue; for (contigsz = min_contig; contigsz <= max_contig; contigsz *= contigfactor) { int di; size_t lastdatasz = 0; if (contigsz > max_payload) continue; if (!myproc) { printf("\n%c: %s %s CONTIGSZ = %i\n", TEST_SECTION_NAME(), visdesc[(int)viscat], (isget?"GET":"PUT"), contigsz); printf(" density:"); for (di = 0; di < densitysteps; di++) { printf("%8i%%", (int)((densitysteps-di)*100.0/densitysteps)); } printf("\n"); } for (rawdatasz = min_payload; rawdatasz <= max_payload; rawdatasz *= datafactor) { char mystr[255]; size_t datasz = aligndown(rawdatasz,contigsz); if (datasz == lastdatasz) continue; lastdatasz = datasz; if (singlesender) snprintf(mystr, sizeof(mystr), "%8i: ", (int)datasz); else snprintf(mystr, sizeof(mystr), "P%i: %6i: ", myproc, (int)datasz); for (di = 0; di < densitysteps; di++) { gasnett_tick_t begin=0, end=0; size_t Lcnt = (localcontig ? 1 : datasz/contigsz); size_t Rcnt = (remotecontig? 1 : datasz/contigsz); size_t Lsz = datasz/Lcnt; size_t Rsz = datasz/Rcnt; void **Lilist = NULL; void **Rilist = NULL; gasnet_memvec_t *Lvlist = NULL; gasnet_memvec_t *Rvlist = NULL; size_t *Lstrides = NULL; size_t *Rstrides = NULL; size_t *LRcount = NULL; size_t stride = contigsz*(((double)densitysteps)/(densitysteps-di)); if (stride * MAX(Lcnt,Rcnt) > maxsz) { strcat(mystr," - "); continue; } if (iamsender) { /* setup metadata */ switch (viscat) { case TEST_V: Lvlist = make_vlist(Lbase, stride, Lcnt, Lsz); Rvlist = make_vlist(Rbase, stride, Rcnt, Rsz); break; case TEST_I: Lilist = make_ilist(Lbase, stride, Lcnt, Lsz); Rilist = make_ilist(Rbase, stride, Rcnt, Rsz); break; case TEST_S: { size_t chunkcnt = datasz/contigsz; int dim; Lstrides = test_malloc(sizeof(size_t)*stridelevels); Rstrides = test_malloc(sizeof(size_t)*stridelevels); LRcount = test_malloc(sizeof(size_t)*(stridelevels+1)); LRcount[0] = contigsz; Lstrides[0] = (localcontig ? contigsz : stride); Rstrides[0] = (remotecontig ? contigsz : stride); for (dim = 1; dim < stridelevels; dim++) { size_t factor = 1, fi; for (fi = 1; fi <= chunkcnt/(2*(stridelevels-dim)); fi++) /* choose a reasonable factor */ if (chunkcnt/fi*fi == chunkcnt) factor = fi; LRcount[dim] = factor; chunkcnt /= factor; Lstrides[dim] = LRcount[dim]*Lstrides[dim-1]; Rstrides[dim] = LRcount[dim]*Rstrides[dim-1]; } LRcount[stridelevels] = chunkcnt; { size_t tmp = 1; for (dim = 0; dim <= stridelevels; dim++) tmp *= LRcount[dim]; assert(tmp == datasz); } break; } } } #define DOIT(iters) do { \ int i; \ switch (viscat) { \ case TEST_V: \ for (i = 0; i < iters; i++) { \ if (isget) gasnet_getv_nbi_bulk(Lcnt,Lvlist,peerproc,Rcnt,Rvlist); \ else gasnet_putv_nbi_bulk(peerproc,Rcnt,Rvlist,Lcnt,Lvlist); \ } \ break; \ case TEST_I: \ for (i = 0; i < iters; i++) { \ if (isget) gasnet_geti_nbi_bulk(Lcnt,Lilist,Lsz,peerproc,Rcnt,Rilist,Rsz); \ else gasnet_puti_nbi_bulk(peerproc,Rcnt,Rilist,Rsz,Lcnt,Lilist,Lsz); \ } \ break; \ case TEST_S: \ for (i = 0; i < iters; i++) { \ if (isget) gasnet_gets_nbi_bulk(Lbase,Lstrides,peerproc,Rbase,Rstrides, \ LRcount,stridelevels); \ else gasnet_puts_nbi_bulk(peerproc,Rbase,Rstrides,Lbase,Lstrides, \ LRcount,stridelevels); \ } \ break; \ } \ gasnet_wait_syncnbi_all(); \ } while (0) if (iamsender) DOIT(1); /* pay some warm-up costs */ BARRIER(); if (iamsender) { begin = gasnett_ticks_now(); DOIT(iters); end = gasnett_ticks_now(); } BARRIER(); if (iamsender) { char tmp[80]; double secs = gasnett_ticks_to_ns(end - begin)/1.0E9; double dataMB = ((double)datasz) * iters / (1024*1024); snprintf(tmp, sizeof(tmp), " %8.3f", dataMB / secs); strcat(mystr, tmp); } if (Lilist) test_free(Lilist); if (Rilist) test_free(Rilist); if (Lvlist) test_free(Lvlist); if (Rvlist) test_free(Rvlist); if (Lstrides) test_free(Lstrides); if (Rstrides) test_free(Rstrides); if (LRcount) test_free(LRcount); } if (iamsender) { printf("%s\n", mystr); fflush(stdout); } BARRIER(); } } } } } } BARRIER(); if (alloc) test_free(alloc); gasnet_exit(0); return 0; }
int bench_read() { int i; int sum = 0; register int *p = (int *)g_mem_ptr; while ( p < (int *)&g_mem_ptr[g_mem_size/4]) { sum += #define DOIT(i) p[i]+ DOIT(0) DOIT(4) DOIT(8) DOIT(12) DOIT(16) DOIT(20) DOIT(24) DOIT(28) DOIT(32) DOIT(36) DOIT(40) DOIT(44) DOIT(48) DOIT(52) DOIT(56) DOIT(60) DOIT(64) DOIT(68) DOIT(72) DOIT(76) DOIT(80) DOIT(84) DOIT(88) DOIT(92) DOIT(96) DOIT(100) DOIT(104) DOIT(108) DOIT(112) DOIT(116) DOIT(120) #if 0 #endif p[124]; p += 128; } g_nread += g_mem_size; return sum; }