2 fastmemcpybench.c used to benchmark fastmemcpy.h code from libvo.
4 Note: this code can not be used on PentMMX-PII because they contain
5 a bug in rdtsc. For Intel processors since P6(PII) rdpmc should be used
6 instead. For PIII it's disputable and seems bug was fixed but I don't
10 /* According to Uoti this code is broken. */
15 #include <sys/ioctl.h>
22 //#define ARR_SIZE 100000
23 #define ARR_SIZE (1024*768*2)
27 #include "drivers/mga_vid.h"
29 static mga_vid_config_t mga_vid_config
;
30 static unsigned char* frame
= NULL
;
33 static int mga_init(void)
35 f
= open("/dev/mga_vid", O_RDWR
);
37 fprintf(stderr
, "Couldn't open /dev/mga_vid\n");
41 mga_vid_config
.num_frames
= 1;
42 mga_vid_config
.frame_size
= ARR_SIZE
;
43 mga_vid_config
.format
= MGA_VID_FORMAT_YUY2
;
45 mga_vid_config
.colkey_on
= 0;
46 mga_vid_config
.src_width
= 640;
47 mga_vid_config
.src_height
= 480;
48 mga_vid_config
.dest_width
= 320;
49 mga_vid_config
.dest_height
= 200;
50 mga_vid_config
.x_org
= 0;
51 mga_vid_config
.y_org
= 0;
53 mga_vid_config
.version
= MGA_VID_VERSION
;
54 if (ioctl(f
, MGA_VID_CONFIG
, &mga_vid_config
)) {
55 perror("Error in mga_vid_config ioctl()");
56 printf("Your mga_vid driver version is incompatible with this MPlayer version!\n");
59 ioctl(f
, MGA_VID_ON
, 0);
61 frame
= (char*)mmap(0, mga_vid_config
.frame_size
*mga_vid_config
.num_frames
,
62 PROT_WRITE
,MAP_SHARED
, f
, 0);
64 printf("Can't mmap mga frame\n");
69 //memset(frames[0], 0x80, mga_vid_config.frame_size*mga_vid_config.num_frames);
76 // Returns current time in microseconds
77 static unsigned int GetTimer(void)
82 gettimeofday(&tv
, &tz
);
83 //s = tv.tv_usec; s *= 0.000001; s += tv.tv_sec;
84 return tv
.tv_sec
* 1000000 + tv
.tv_usec
;
87 static inline unsigned long long int read_tsc(void)
89 unsigned long long int retval
;
90 __asm__
volatile ("rdtsc":"=A" (retval
)::"memory");
94 unsigned char __attribute__((aligned(4096)))arr1
[ARR_SIZE
], arr2
[ARR_SIZE
];
98 unsigned long long int v1
, v2
;
99 unsigned char *marr1
, *marr2
;
110 for (i
= 0; i
< ARR_SIZE
- 16; i
++)
111 marr1
[i
] = marr2
[i
] = i
;
115 for (i
= 0; i
< 100; i
++)
116 memcpy(marr1
, marr2
, ARR_SIZE
- 16);
119 // ARR_SIZE*100 / (1024*1024) / (t/1000000) = ARR_SIZE*95.36743 / t
120 printf(NAME
": cpu clocks=%llu = %dus (%5.3ffps) %5.1fMB/s\n", v2
-v1
, t
,
121 100000000.0f
/(float)t
, (float)ARR_SIZE
*95.36743f
/(float)t
);