|
|
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 s
Length: 1676 (0x68c)
Types: TextFile
Names: »speed.c«
└─⟦a05ed705a⟧ Bits:30007078 DKUUG GNU 2/12/89
└─⟦ff23ba0e6⟧ »./ghostscript-1.3.tar.Z«
└─⟦a24a58cd3⟧
└─⟦this⟧ »speed.c«
/* Test the speed of an 80x86 system */
#include <stdio.h>
#include <dos.h>
#include <stdlib.h>
typedef unsigned char byte;
/* Forward references */
long clock();
typedef void (*void_proc)();
void_proc make_loop(unsigned long instrs, int n);
main(int argc, char *argv[])
{ int i, j;
long start;
void_proc loop;
/* Time 16K nops */
loop = make_loop(0x40404040, 16000/4); /* inc ax */
start = clock();
for ( i = 0; i < 1000; i++ ) loop();
printf("16M nops = %ld ms\n", clock() - start);
/* Time 4K 4-byte, 2-clock instructions */
loop = make_loop(0x0000c0c7, 16000/4); /* move 0,ax */
start = clock();
for ( i = 0; i < 1000; i++ ) loop();
printf("4M 4-byte moves = %ld ms\n", clock() - start);
/* Make 10 blocks of 16K nops and cycle between them, */
/* to test cache miss time. */
{ void_proc loops[10];
for ( i = 0; i < 10; i++ ) loops[i] = make_loop(0x40404040, 16000/4);
for ( i = 0; i < 100; i++ )
for ( j = 0; j < 10; j++ ) loops[j]();
printf("16M nops with cache misses = %ld ms\n", clock() - start);
}
}
/* Construct a routine consisting of N copies of a word. */
void_proc
make_loop(unsigned long word, int n)
{ byte *rtn = (byte *)malloc(n*4+1);
unsigned long *ptr = (unsigned long *)rtn;
int i;
for ( i = 0; i < n; i++ ) *ptr++ = word;
*(byte *)ptr = 0xcb; /* far ret */
return (void_proc)rtn;
}
/* Read the current time (in milliseconds since midnight). */
long
clock()
{ struct time ostime;
long itime;
gettime(&ostime);
itime = ostime.ti_hour;
itime = itime * 60 + ostime.ti_min;
itime = itime * 60 + ostime.ti_sec;
itime = itime * 100 + ostime.ti_hund;
itime = itime * 10; /* milliseconds */
return itime;
}