|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T m
Length: 5354 (0x14ea)
Types: TextFile
Names: »mem.c«
└─⟦db229ac7e⟧ Bits:30007240 EUUGD20: SSBA 1.2 / AFW Benchmarks
└─⟦this⟧ »EUUGD20/AFUU-ssba1.21/ssba1.21E/musbus/mem.c«
└─⟦this⟧ »EUUGD20/AFUU-ssba1.21/ssba1.21F/musbus/mem.c«
/*
* mem [ -ssize ] [ -niter ]
*
* perform int array accesses
* array size (if given) is in Kbytes, default is 8K
* iter accesses of each type, default is iter=100000
* Configuration options
* #ifdef random random access
* #ifndef random sequential access
* #ifdef awk output on stderr for benchmark script
*
* #ifdef BSD4v1 4.1 BSD, ftime() exists
* #ifdef BSD4v2 4.2 BSD, gettimeofday() exists
* #ifdef SysV System V, times() returns real time in (1/HZ)th of sec
*
* $Header: mem.c,v 5.2 88/01/12 06:06:44 kenj Exp $
*/
#include <stdio.h>
#include "musbus.h"
#include <sys/types.h>
#include <sys/times.h>
#ifdef BSD4v1
#include <sys/timeb.h>
#endif
#ifdef BSD4v2
#include <sys/time.h>
#include <sys/resource.h>
#endif
#ifdef SysV
long times();
#endif
main(argc, argv)
int argc;
char *argv[];
{
int *tab;
register char *p;
register long i;
register long j;
register long mask;
register int k;
long iter = 100000L;
long size = 8*1024 / sizeof(int);
struct tms tbuffer;
long access[2];
long ohead[2];
long atol();
#ifdef BSD4v1
struct timeb tbuf;
int msec;
#endif
#ifdef BSD4v2
struct timeval tbuf;
struct timezone tzone;
struct rusage rubuf;
long rusec, cpusec;
#endif
char *prog = argv[0];
char *malloc();
#ifdef random
long index[1000];
#endif
while (argc-- > 1) {
switch (argv[1][1]) {
case 's':
size = atol(&argv[1][2])*1024 / sizeof(int);
break;
case 'n':
iter = atol(&argv[1][2]);
break;
default:
printf("Usage: %s [-ssize] [-niter]\n", prog);
exit(1);
}
argv++;
}
mask = size;
if ((tab = (int *)malloc(size*sizeof(int))) == (int *)0) {
printf("%s: malloc failed for %ld bytes\n", prog, size*sizeof(int));
exit(1);
}
#ifdef random
/* build random array index map */
for (i = 0; i < 1000; i++)
index[i] = rand() % mask;
#endif
/* measure overhead for loop */
srand(1);
#ifdef SysV
ohead[0] = -times(&tbuffer);
ohead[1] = -tbuffer.tms_utime - tbuffer.tms_stime;
#else
#ifdef BSD4v1
times(&tbuffer);
ftime(&tbuf);
ohead[0] = -tbuf.time;
msec = tbuf.millitm;
ohead[1] = -tbuffer.tms_utime - tbuffer.tms_stime;
#else
#ifdef BSD4v2
gettimeofday(&tbuf, &tzone);
getrusage(RUSAGE_SELF, &rubuf);
ohead[0] = -tbuf.tv_sec;
rusec = tbuf.tv_usec;
ohead[1] = -rubuf.ru_utime.tv_sec - rubuf.ru_stime.tv_sec;
cpusec = rubuf.ru_utime.tv_usec + rubuf.ru_stime.tv_usec;
#else
What sort of Unix system if this?
#endif
#endif
#endif
for (i = 0, k = 0; i < iter; i++, k++) {
#ifdef random
if (k >= 1000) k = 0;
j = index[k];
#else
if (k >= mask) k = 0;
j = k;
#endif
}
#ifdef SysV
ohead[0] += times(&tbuffer);
ohead[0] = ohead[0]*1000/HZ; /* convert to millisec */
ohead[1] += tbuffer.tms_utime + tbuffer.tms_stime;
#else
#ifdef BSD4v1
times(&tbuffer);
ftime(&tbuf);
ohead[0] += tbuf.time;
ohead[0] = ohead[0]*1000 + tbuf.millitm - msec;
ohead[1] += tbuffer.tms_utime + tbuffer.tms_stime;
#else
#ifdef BSD4v2
gettimeofday(&tbuf, &tzone);
getrusage(RUSAGE_SELF, &rubuf);
ohead[0] += tbuf.tv_sec;
ohead[0] = ohead[0]*1000 + (tbuf.tv_usec - rusec)/1000;
ohead[1] += rubuf.ru_utime.tv_sec + rubuf.ru_stime.tv_sec;
ohead[1] = ohead[1]*60 + 60*(rubuf.ru_utime.tv_usec + rubuf.ru_stime.tv_usec - cpusec)/1000000;
#endif
#endif
#endif
srand(j); /* use value from loop to fool clever optimizers */
/* perform accesses */
srand(1);
#ifdef SysV
access[0] = -times(&tbuffer);
access[1] = -tbuffer.tms_utime - tbuffer.tms_stime;
#else
#ifdef BSD4v1
times(&tbuffer);
ftime(&tbuf);
access[0] = -tbuf.time;
msec = tbuf.millitm;
access[1] = -tbuffer.tms_utime - tbuffer.tms_stime;
#else
#ifdef BSD4v2
gettimeofday(&tbuf, &tzone);
getrusage(RUSAGE_SELF, &rubuf);
access[0] = -tbuf.tv_sec;
rusec = tbuf.tv_usec;
access[1] = -rubuf.ru_utime.tv_sec - rubuf.ru_stime.tv_sec;
cpusec = rubuf.ru_utime.tv_usec + rubuf.ru_stime.tv_usec;
#endif
#endif
#endif
for (i = 0, k = 0; i < iter; i++, k++) {
#ifdef random
if (k >= 1000) k = 0;
j = tab[index[k]];
#else
if (k >= mask) k = 0;
j = tab[k];
#endif
}
#ifdef SysV
access[0] += times(&tbuffer);
access[0] = access[0]*1000/HZ; /* convert to millisec */
access[1] += tbuffer.tms_utime + tbuffer.tms_stime;
#else
#ifdef BSD4v1
times(&tbuffer);
ftime(&tbuf);
access[0] += tbuf.time;
access[0] = access[0]*1000 + tbuf.millitm - msec;
access[1] += tbuffer.tms_utime + tbuffer.tms_stime;
#else
#ifdef BSD4v2
gettimeofday(&tbuf, &tzone);
getrusage(RUSAGE_SELF, &rubuf);
access[0] += tbuf.tv_sec;
access[0] = access[0]*1000 + (tbuf.tv_usec - rusec)/1000;
access[1] += rubuf.ru_utime.tv_sec + rubuf.ru_stime.tv_sec;
access[1] = access[1]*60 + 60*(rubuf.ru_utime.tv_usec + rubuf.ru_stime.tv_usec - cpusec)/1000000;
#endif
#endif
#endif
#ifdef awk
fprintf(stderr, "%ld %ld %.3f\n", iter, access[0] - ohead[0],
((float)(access[1] - ohead[1]))/60);
#endif
srand(j); /* use value from loop to fool clever optimizers */
exit(0);
}