double max_parallelism(benchmp_f* benchmarks, int warmup, int repetitions, void* cookie) { int i, j, k; double baseline, max_load_parallelism, load_parallelism; result_t *results, *r_save; max_load_parallelism = 1.; for (i = 0; i < MAX_LOAD_PARALLELISM; ++i) { benchmp(initialize, benchmarks[i], cleanup, 0, 1, warmup, repetitions, cookie); save_minimum(); if (gettime() == 0) return -1.; if (i == 0) { baseline = (double)gettime() / (double)get_n(); } else { load_parallelism = baseline; load_parallelism /= (double)gettime(); load_parallelism *= (double)((i + 1) * get_n()); if (load_parallelism > max_load_parallelism) { max_load_parallelism = load_parallelism; } } } return max_load_parallelism; }
void loads(size_t len, size_t range, size_t stride, int parallel, int warmup, int repetitions) { double result; size_t count; struct mem_state state; if (range < stride) return; state.width = 1; state.len = range; state.maxlen = len; state.line = stride; state.pagesize = getpagesize(); count = 100 * (state.len / (state.line * 100) + 1); #if 0 (*fpInit)(0, &state); fprintf(stderr, "loads: after init\n"); (*benchmark_loads)(2, &state); fprintf(stderr, "loads: after benchmark\n"); mem_cleanup(0, &state); fprintf(stderr, "loads: after cleanup\n"); settime(1); save_n(1); #else /* * Now walk them and time it. */ benchmp(fpInit, benchmark_loads, mem_cleanup, 100000, parallel, warmup, repetitions, &state); #endif /* We want to get to nanoseconds / load. */ save_minimum(); result = (1000. * (double)gettime()) / (double)(count * get_n()); fprintf(stderr, "%.5f %.3f\n", range / (1024. * 1024.), result); }