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
);
38 fprintf(stderr
,"Couldn't open /dev/mga_vid\n");
42 mga_vid_config
.num_frames
=1;
43 mga_vid_config
.frame_size
=ARR_SIZE
;
44 mga_vid_config
.format
=MGA_VID_FORMAT_YUY2
;
46 mga_vid_config
.colkey_on
=0;
47 mga_vid_config
.src_width
= 640;
48 mga_vid_config
.src_height
= 480;
49 mga_vid_config
.dest_width
= 320;
50 mga_vid_config
.dest_height
= 200;
51 mga_vid_config
.x_org
= 0;
52 mga_vid_config
.y_org
= 0;
54 mga_vid_config
.version
=MGA_VID_VERSION
;
55 if (ioctl(f
,MGA_VID_CONFIG
,&mga_vid_config
))
57 perror("Error in mga_vid_config ioctl()");
58 printf("Your mga_vid driver version is incompatible with this MPlayer version!\n");
61 ioctl(f
,MGA_VID_ON
,0);
63 frame
= (char*)mmap(0,mga_vid_config
.frame_size
*mga_vid_config
.num_frames
,PROT_WRITE
,MAP_SHARED
,f
,0);
65 printf("Can't mmap mga frame\n");
70 //memset(frames[0],0x80,mga_vid_config.frame_size*mga_vid_config.num_frames);
78 // Returns current time in microseconds
79 static unsigned int GetTimer(void)
84 gettimeofday(&tv
,&tz
);
85 // s=tv.tv_usec;s*=0.000001;s+=tv.tv_sec;
86 return tv
.tv_sec
* 1000000 + tv
.tv_usec
;
89 static inline unsigned long long int read_tsc( void )
91 unsigned long long int retval
;
92 __asm__
volatile ("rdtsc":"=A"(retval
)::"memory");
96 unsigned char __attribute__((aligned(4096)))arr1
[ARR_SIZE
],arr2
[ARR_SIZE
];
100 unsigned long long int v1
,v2
;
101 unsigned char * marr1
,*marr2
;
112 for(i
=0; i
<ARR_SIZE
-16; i
++) marr1
[i
] = marr2
[i
] = i
;
116 for(i
=0;i
<100;i
++) 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
,100000000.0f
/(float)t
,(float)ARR_SIZE
*95.36743f
/(float)t
);