#include <stdlib.h>
#include "config.h"
#include "cpucycles.h"
#include "benchmarking.h"
struct elim_params {
char const *algorithm;
};
int run(void *_p, unsigned long long *data, int *data_len) {
struct elim_params *p = (struct elim_params *)_p;
*data_len = 2;
for (
rci_t i = 0; i < p->m; ++i) {
for (
rci_t j = 0; j < i; ++j)
if (i >= p->r)
for (
rci_t j = i; j < p->n; ++j)
for (
rci_t j = i + 1; j < p->m; ++j)
}
data[0] = walltime(0);
data[1] = cpucycles();
if(strcmp(p->algorithm, "m4ri") == 0)
else if(strcmp(p->algorithm, "pluq") == 0)
else if(strcmp(p->algorithm, "mmpf") == 0)
else if(strcmp(p->algorithm, "naive") == 0)
data[1] = cpucycles() - data[1];
data[0] = walltime(data[0]);
return 0;
}
int main(int argc, char **argv) {
global_options(&argc, &argv);
if (argc < 3) {
m4ri_die(
"Parameters m,n (alg,r) expected.\n");
}
struct elim_params params;
params.m = atoi(argv[1]);
params.n = atoi(argv[2]);
if (argc >= 4)
params.algorithm = argv[3];
else
params.algorithm = "m4ri";
if (argc == 5)
params.r = atoi(argv[4]);
else
params.r = params.m;
srandom(17);
unsigned long long data[2];
run_bench(run, (void*)¶ms, data, 2);
double cc_per_op = ((double)data[1])/ ( (double)params.m * (double)params.n * powl((double)params.r,0.807) );
printf("m: %5d, n: %5d, last r: %5d, cpu cycles: %10llu, cc/(mnr^0.807): %.5lf, wall time: %lf\n", params.m, params.n, params.r, data[1], cc_per_op, data[0] / 1000000.0);
}