ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/liblzf/bench.c
Revision: 1.16
Committed: Sun Jan 11 01:32:04 2015 UTC (9 years, 3 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.15: +6 -6 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 #include <stdio.h>
2 #include <unistd.h>
3 #include <assert.h>
4 #include <string.h>
5 #include <time.h>
6 #include <sys/time.h>
7 #include <sys/times.h>
8 #include <sys/types.h>
9 #include <sys/socket.h>
10 #include <sys/mman.h>
11 #include <sys/ioctl.h>
12 #include <sys/stat.h>
13 #include <sys/resource.h>
14 #include <math.h>
15 #include <signal.h>
16 #include <X11/Xlib.h>
17
18 #include "lzf.h"
19 //#include "fastlz.c"
20
21 typedef unsigned long tval;
22 typedef unsigned long long stamp64;
23
24 extern inline tval stamp(void)
25 {
26 tval tsc; long dummy;
27 asm volatile("cpuid; rdtsc" : "=a" (tsc), "=d" (dummy) : "a" (0) : "ebx", "ecx");
28 return tsc;
29 }
30
31 extern inline tval measure(tval t)
32 {
33 tval tsc; long dummy;
34 asm volatile("cpuid; rdtsc" : "=a" (tsc), "=d" (dummy) : "a" (0) : "ebx", "ecx");
35 if (tsc>t)
36 return tsc-t;
37 else
38 return t-tsc;
39 }
40
41 static void sigu (int signum)
42 {
43 }
44
45 #define DSIZE 17318440
46 //#define DSIZE 32768
47
48 #include "lzf_c_best.c"
49
50 unsigned char data[DSIZE], data2[DSIZE*2], data3[DSIZE*2];
51
52 int main(void)
53 {
54 tval s;
55 tval si[1000];
56 int i, j, k, l;
57 int min = 1<<30;
58 int lp;
59 char buf[8192];
60 int p[2];
61 long ctr = 1;
62 struct stat sbuf;
63
64 pipe (p);
65
66 FILE *f = fopen ("data", "r");
67 fread (data, DSIZE, 1, f);
68 fclose (f);
69
70 signal (SIGURG, sigu);
71
72 for (lp = 0; lp < 1000000; lp++) {
73 s=stamp();
74
75 //struct timespec ts; clock_gettime (CLOCK_THREAD_CPUTIME_ID, &ts);
76 //printf ("%9ld\n", ts.tv_nsec);//D
77 //struct rusage usage; getrusage (RUSAGE_SELF, &usage);
78 //struct tms tms; times (&tms);
79
80 //kill (0, SIGURG);
81 //write (evfd, &ctr, 8);
82 //read (evfd, &ctr, 8);
83 //write (p[1], &buf, 1);
84 //read (p[0], &buf, 4);
85 //stat ("/etc/passwd", &sbuf);
86 //struct timeval tv; gettimeofday (&tv, 0);
87 //void *x = mmap (0, 16384, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE,-1,0);
88
89 l = lzf_compress_best (data, DSIZE, data2, DSIZE*2);
90 //for (k = 0; k < l; ++k)
91 //printf ("1 %2d: %02x\n", k, data2[k]);
92 assert(l);
93
94 j = lzf_decompress (data2, l, data3, DSIZE*2);
95 //for (k = 0; k < j; ++k)
96 //printf ("2 %2d: %02x\n", k, data3[k]);
97 assert (j == DSIZE);
98
99 si[0]=measure(s);
100
101 assert (!memcmp (data, data3, DSIZE));
102
103 printf ("\r%10d (%d) ", si[0], l);
104 if (si[0] < min && si[0] > 0)
105 {
106 printf ("\n");
107 min = si[0];
108 }
109
110 fflush (stdout);
111
112 //assert (memcmp (data, data3, DSIZE) == 0);
113 }
114 return 0;
115 }
116
117
118