ref: 16a2cc57f9cd49f84db08e9c46478d8d0acfdf45
dir: /bench.h/
typedef struct BItem BItem;
typedef struct BResult BResult;
typedef struct B B;
// single benchmark function
struct BItem
{
char *name;
void (*fn)(B*);
};
// result of benchmarking
struct BResult
{
int N;
vlong ns;
uvlong cycles;
vlong overhead;
};
// type passed to bench functions
struct B
{
int N;
vlong start; /* start ns */
vlong ns; /* duration */
uvlong scycles; /* start cycles */
uvlong ecycles; /* end cycles */
uvlong bcycles; /* best cycles */
vlong overheadns; /* cost of doing 0 iters */
vlong overheadcy; /* cost of doing 0 iters, cycles */
BItem item;
};
extern int NPROC;
enum {
KiB = 1024,
MiB = 1024*KiB,
GiB = 1024*MiB,
};
#define BM(func) bench("func", func)
// public api
void benchinit(int, char**);
void bench(char *name, void (*)(B*));
void xbench(char *name, void(*)(B*), void (*)(void));
void benchitems(BItem[], int);