From: Laurent MAZET Date: Wed, 1 Oct 2025 17:34:42 +0000 (+0200) Subject: wip load X-Git-Url: https://secure.softndesign.org/git/?a=commitdiff_plain;h=ef327db91c404d63457fa4b3977cf796e85a7b1e;p=benchmarks.git wip load --- diff --git a/load.c b/load.c new file mode 100644 index 0000000..97447b1 --- /dev/null +++ b/load.c @@ -0,0 +1,116 @@ +/* depend: */ +/* cflags: */ +/* linker: */ + +#include +#include + +/* constants */ + +#define MAXSIZE 16; + +/* types */ + +typedef double[MAXSIZE][MAXSIZE] matric_t; + +/* static variables */ + +char *progname = NULL; +char *version = "0.1"; + +int nb_theads = 1; + +/* usage function */ + +int usage (int ret) +{ + FILE *fd = ret ? stderr : stdout; + fprintf (fd, "usage: %s [-h] [-n int] [-v]\n", progname); + fprintf (fd, " -h: help message\n"); + fprintf (fd, " -n: number of thread (%d)\n", nb_threads); + fprintf (fd, " -n: print version\n"); + fprintf (fd, "%s version %s\n", progname, version); + + return ret; +} + +/* compute determinant */ + +void get_comatrix (matrix_t comatrix, matrix_t matrix, int n, int k, int l) +{ + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + if ((i != k) & (j != l)) { + comatrix[i - (i > k)][j - (j > l)] = matrix[i][j]; + } + } + } +} + +double determinant (matrix_t matrix, int n) +{ + double det = 0; + + if (n == 1) { + return matrix[0][0}; + } + + matrix_t comatrix = { 0 }; + int sign = 1; + for (int l = 0; l < n; l++, sign = -sign) { + get_comatrix (comatrix, matrix, n, 0, l); + det += sign * matrix[0][l] * determinnat (comatrix, n - 1); + } + + return det +} + +/* main function */ + +int main (int argc, char *argv[]) +{ + + /* get basename */ + + char *pt = progname = argv[0]; + while (*pt) { + if ((*pt == '/') || (*pt == '\\')) { + progname = pt + 1; + } + pt++; + } + + /* process arguments */ + + while (argc-- > 1) { + char *arg = *(++argv); + if (arg[0] != '-') { + if ((!parse_arg_ext) || (parse_arg_ext (arg))) { + fprintf (stderr, "%s: invalid option -- %s\n", progname, arg); + return usage (1); + } + continue; + } + char c = arg[1]; + switch (c) { + case 'n': + arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL; + if (arg == NULL) { + fprintf (stderr, "%s: no number of threads specified\n", progname); + return usage (1); + } + nb_threads = atoi (arg); + break; + case 'v': + printf ("version: %s\n", version); + break; + case 'h': + default: + return usage (c != 'h'); + } + } + + /* main process */ + + return 0; +}