Lines Matching refs:f
96 float (*f) (float);
109 #define F(func, lo, hi) {#func, 'f', 0, lo, hi, {.f = func}},
111 #define VNF(func, lo, hi) {#func, 'f', 'n', lo, hi, {.vnf = func}},
113 #define SVF(func, lo, hi) {#func, 'f', 's', lo, hi, {.svf = func}},
155 double f;
157 return u.f;
198 run_thruput (double f (double))
201 f (A[i]);
205 runf_thruput (float f (float))
208 f (Af[i]);
214 run_latency (double f (double))
219 prev = f (A[i] + prev * z);
223 runf_latency (float f (float))
228 prev = f (Af[i] + prev * z);
233 run_vn_thruput (__vpcs float64x2_t f (float64x2_t))
236 f (vld1q_f64 (A + i));
240 runf_vn_thruput (__vpcs float32x4_t f (float32x4_t))
243 f (vld1q_f32 (Af + i));
247 run_vn_latency (__vpcs float64x2_t f (float64x2_t))
253 prev = f (vbslq_f64 (sel, prev, vld1q_f64 (A + i)));
257 runf_vn_latency (__vpcs float32x4_t f (float32x4_t))
263 prev = f (vbslq_f32 (sel, prev, vld1q_f32 (Af + i)));
269 run_sv_thruput (svfloat64_t f (svfloat64_t, svbool_t))
272 f (svld1_f64 (svptrue_b64 (), A + i), svptrue_b64 ());
276 runf_sv_thruput (svfloat32_t f (svfloat32_t, svbool_t))
279 f (svld1_f32 (svptrue_b32 (), Af + i), svptrue_b32 ());
283 run_sv_latency (svfloat64_t f (svfloat64_t, svbool_t))
289 prev = f (svsel_f64 (sel, svld1_f64 (svptrue_b64 (), A + i), prev),
294 runf_sv_latency (svfloat32_t f (svfloat32_t, svbool_t))
300 prev = f (svsel_f32 (sel, svld1_f32 (svptrue_b32 (), Af + i), prev),
318 #define TIMEIT(run, f) do { \
320 run (f); /* Warm up. */ \
325 run (f); \
333 bench1 (const struct fun *f, int type, double lo, double hi)
340 if (f->vec == 'n')
341 vlen = f->prec == 'd' ? 2 : 4;
343 else if (f->vec == 's')
344 vlen = f->prec == 'd' ? svcntd () : svcntw ();
347 if (f->prec == 'd' && type == 't' && f->vec == 0)
348 TIMEIT (run_thruput, f->fun.d);
349 else if (f->prec == 'd' && type == 'l' && f->vec == 0)
350 TIMEIT (run_latency, f->fun.d);
351 else if (f->prec == 'f' && type == 't' && f->vec == 0)
352 TIMEIT (runf_thruput, f->fun.f);
353 else if (f->prec == 'f' && type == 'l' && f->vec == 0)
354 TIMEIT (runf_latency, f->fun.f);
356 else if (f->prec == 'd' && type == 't' && f->vec == 'n')
357 TIMEIT (run_vn_thruput, f->fun.vnd);
358 else if (f->prec == 'd' && type == 'l' && f->vec == 'n')
359 TIMEIT (run_vn_latency, f->fun.vnd);
360 else if (f->prec == 'f' && type == 't' && f->vec == 'n')
361 TIMEIT (runf_vn_thruput, f->fun.vnf);
362 else if (f->prec == 'f' && type == 'l' && f->vec == 'n')
363 TIMEIT (runf_vn_latency, f->fun.vnf);
366 else if (f->prec == 'd' && type == 't' && f->vec == 's')
367 TIMEIT (run_sv_thruput, f->fun.svd);
368 else if (f->prec == 'd' && type == 'l' && f->vec == 's')
369 TIMEIT (run_sv_latency, f->fun.svd);
370 else if (f->prec == 'f' && type == 't' && f->vec == 's')
371 TIMEIT (runf_sv_thruput, f->fun.svf);
372 else if (f->prec == 'f' && type == 'l' && f->vec == 's')
373 TIMEIT (runf_sv_latency, f->fun.svf);
380 f->name, s,
388 f->name, s,
396 bench (const struct fun *f, double lo, double hi, int type, int gen)
398 if (f->prec == 'd' && gen == 'r')
400 else if (f->prec == 'd' && gen == 'l')
402 else if (f->prec == 'd' && gen == 't')
404 else if (f->prec == 'f' && gen == 'r')
406 else if (f->prec == 'f' && gen == 'l')
408 else if (f->prec == 'f' && gen == 't')
415 bench1 (f, 't', lo, hi);
418 bench1 (f, 'l', lo, hi);
422 if (f->prec == 'd')
429 bench1 (f, 't', lo, hi);
432 bench1 (f, 'l', lo, hi);
440 FILE *f = strcmp (name, "-") == 0 ? stdin : fopen (name, "r");
441 if (!f)
458 if (fscanf (f, "%lf", Trace + n) != 1)
462 if (ferror (f) || n == 0)
467 fclose (f);
478 "[-i low high] [-f tracefile] [-m measurements] [-c iterations] func "
482 for (const struct fun *f = funtab; f->name; f++)
483 printf ("%7s [low: %g high: %g]\n", f->name, f->lo, f->hi);
530 else if (argc >= 2 && strcmp (argv[0], "-f") == 0)
532 gen = 't'; /* -f implies -g trace. */
558 for (const struct fun *f = funtab; f->name; f++)
559 if (all || strcmp (argv[0], f->name) == 0)
564 lo = f->lo;
565 hi = f->hi;
567 bench (f, lo, hi, type, gen);