This shows you the differences between two versions of the page.
| — | loop.c [2013/06/08 11:07] (current) – created - benchmark code peterjeremy | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | <code c> | ||
| + | /* | ||
| + | ** CPU-bound test | ||
| + | */ | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | void runit(double y, int fd, size_t len) | ||
| + | { | ||
| + | double | ||
| + | double *bp; | ||
| + | size_t i; | ||
| + | char ch; | ||
| + | |||
| + | bp = malloc(len); | ||
| + | len /= sizeof(double); | ||
| + | for (i = 0; i < len; i++) | ||
| + | bp[i] = 1.0; | ||
| + | if (write(fd, " | ||
| + | err(1, " | ||
| + | if (read(fd, &ch, 1) != 1) | ||
| + | err(1, " | ||
| + | i = 0; | ||
| + | for (x = 0.0; x < y; x += 1.0) { | ||
| + | bp[i] += x; | ||
| + | if (++i >= len) | ||
| + | i = 0; | ||
| + | } | ||
| + | exit(0); | ||
| + | } | ||
| + | |||
| + | int main(int argc, char **argv) | ||
| + | { | ||
| + | double y; | ||
| + | pid_t p; | ||
| + | int i, j, x; | ||
| + | struct timeval start, end; | ||
| + | struct rusage usage; | ||
| + | int fds[2]; | ||
| + | size_t len; | ||
| + | char *buf; | ||
| + | |||
| + | i = strtol(argv[1], | ||
| + | y = strtod(argv[2], | ||
| + | len = strtoul(argv[3], | ||
| + | |||
| + | if (pipe(fds) < 0) | ||
| + | err(1, " | ||
| + | |||
| + | buf = malloc(i); | ||
| + | for (j = 0; j < i; j++) { | ||
| + | p = fork(); | ||
| + | if (p < 0) | ||
| + | err(1, " | ||
| + | else if (p == 0) | ||
| + | runit(y, fds[1], len); | ||
| + | } | ||
| + | for (j = 0; j < i; j++) { | ||
| + | if (read(fds[0], | ||
| + | err(1, " | ||
| + | } | ||
| + | if (write(fds[0], | ||
| + | err(1, " | ||
| + | |||
| + | gettimeofday(& | ||
| + | while (wait(& | ||
| + | ; | ||
| + | gettimeofday(& | ||
| + | getrusage(RUSAGE_CHILDREN, | ||
| + | |||
| + | end.tv_sec -= start.tv_sec; | ||
| + | end.tv_usec -= start.tv_usec; | ||
| + | if (end.tv_usec < 0) { | ||
| + | end.tv_usec += 1000000; | ||
| + | end.tv_sec--; | ||
| + | } | ||
| + | |||
| + | printf(" | ||
| + | end.tv_sec, | ||
| + | usage.ru_utime.tv_sec, | ||
| + | usage.ru_stime.tv_sec, | ||
| + | return 0; | ||
| + | } | ||
| + | </ | ||